<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[208727] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/208727">208727</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-11-14 22:08:12 -0800 (Mon, 14 Nov 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
https://bugs.webkit.org/show_bug.cgi?id=164720

Patch by Alex Christensen &lt;achristensen@webkit.org&gt; on 2016-11-14
Reviewed by Brady Eidson.

Source/WebCore:

This is adding to <a href="http://trac.webkit.org/projects/webkit/changeset/208558">r208558</a> where we moved databaseIdentifier to SecurityOriginData so we
don't have to use SecurityOrigin in the DatabaseProcess.  This is a step towards only using
SecurityOrigin (and the SchemeRegistry) in the WebProcess. SecurityOriginData is for other
processes and IPC. There should be no change in behaviour.

* Modules/webdatabase/Database.cpp:
(WebCore::Database::Database):
(WebCore::Database::securityOrigin):
* Modules/webdatabase/Database.h:
* Modules/webdatabase/DatabaseContext.cpp:
(WebCore::DatabaseContext::securityOrigin):
* Modules/webdatabase/DatabaseContext.h:
* Modules/webdatabase/DatabaseManager.cpp:
(WebCore::DatabaseManager::tryToOpenDatabaseBackend):
(WebCore::DatabaseManager::fullPathForDatabase):
(WebCore::DatabaseManager::detailsForNameAndOrigin):
* Modules/webdatabase/DatabaseManager.h:
* Modules/webdatabase/DatabaseManagerClient.h:
(WebCore::DatabaseManagerClient::dispatchDidAddNewOrigin):
* Modules/webdatabase/DatabaseTracker.cpp:
(WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
(WebCore::DatabaseTracker::canEstablishDatabase):
(WebCore::DatabaseTracker::retryCanEstablishDatabase):
(WebCore::DatabaseTracker::hasEntryForOriginNoLock):
(WebCore::DatabaseTracker::hasEntryForDatabase):
(WebCore::DatabaseTracker::maximumSize):
(WebCore::DatabaseTracker::originPath):
(WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
(WebCore::DatabaseTracker::fullPathForDatabase):
(WebCore::DatabaseTracker::origins):
(WebCore::DatabaseTracker::databaseNamesNoLock):
(WebCore::DatabaseTracker::databaseNames):
(WebCore::DatabaseTracker::detailsForNameAndOrigin):
(WebCore::DatabaseTracker::setDatabaseDetails):
(WebCore::DatabaseTracker::addOpenDatabase):
(WebCore::DatabaseTracker::removeOpenDatabase):
(WebCore::DatabaseTracker::originLockFor):
(WebCore::DatabaseTracker::deleteOriginLockFor):
(WebCore::DatabaseTracker::usage):
(WebCore::DatabaseTracker::quotaNoLock):
(WebCore::DatabaseTracker::quota):
(WebCore::DatabaseTracker::setQuota):
(WebCore::DatabaseTracker::addDatabase):
(WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
(WebCore::DatabaseTracker::deleteOrigin):
(WebCore::DatabaseTracker::isDeletingDatabaseOrOriginFor):
(WebCore::DatabaseTracker::recordCreatingDatabase):
(WebCore::DatabaseTracker::doneCreatingDatabase):
(WebCore::DatabaseTracker::creatingDatabase):
(WebCore::DatabaseTracker::canDeleteDatabase):
(WebCore::DatabaseTracker::recordDeletingDatabase):
(WebCore::DatabaseTracker::doneDeletingDatabase):
(WebCore::DatabaseTracker::isDeletingDatabase):
(WebCore::DatabaseTracker::canDeleteOrigin):
(WebCore::DatabaseTracker::isDeletingOrigin):
(WebCore::DatabaseTracker::recordDeletingOrigin):
(WebCore::DatabaseTracker::doneDeletingOrigin):
(WebCore::DatabaseTracker::deleteDatabase):
(WebCore::DatabaseTracker::deleteDatabaseFile):
(WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
(WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
* Modules/webdatabase/DatabaseTracker.h:
* Modules/webdatabase/SQLTransactionCoordinator.cpp:
(WebCore::getDatabaseIdentifier):
* inspector/InspectorDOMStorageAgent.cpp:
(WebCore::InspectorDOMStorageAgent::findStorageArea):
* loader/EmptyClients.cpp:
* page/DOMWindow.cpp:
(WebCore::DOMWindow::sessionStorage):
* page/SecurityOrigin.cpp:
(WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier): Deleted.
(WebCore::SecurityOrigin::createFromDatabaseIdentifier): Deleted.
* page/SecurityOrigin.h:
* page/SecurityOriginData.cpp:
(WebCore::SecurityOriginData::fromDatabaseIdentifier):
* page/SecurityOriginData.h:
(WebCore::SecurityOriginData::SecurityOriginData):
* storage/StorageArea.h:
* storage/StorageEventDispatcher.cpp:
(WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
(WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
(WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
(WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
* storage/StorageEventDispatcher.h:
* storage/StorageNamespace.h:
* storage/StorageNamespaceProvider.cpp:
(WebCore::StorageNamespaceProvider::localStorageArea):

Source/WebKit:

* Storage/StorageAreaImpl.cpp:
(WebKit::StorageAreaImpl::StorageAreaImpl):
(WebKit::StorageAreaImpl::create):
(WebKit::StorageAreaImpl::dispatchStorageEvent):
* Storage/StorageAreaImpl.h:
* Storage/StorageNamespaceImpl.cpp:
(WebKit::StorageNamespaceImpl::storageArea):
(WebKit::StorageNamespaceImpl::clearOriginForDeletion):
* Storage/StorageNamespaceImpl.h:
* Storage/StorageTracker.cpp:
(WebKit::StorageTracker::origins):
(WebKit::StorageTracker::deleteOriginWithIdentifier):
(WebKit::StorageTracker::deleteOrigin):
* Storage/StorageTracker.h:
* Storage/WebStorageNamespaceProvider.cpp:
(WebKit::WebStorageNamespaceProvider::clearLocalStorageForOrigin):
* Storage/WebStorageNamespaceProvider.h:

Source/WebKit/mac:

* Storage/WebDatabaseManager.mm:
(-[WebDatabaseManager origins]):
(-[WebDatabaseManager databasesWithOrigin:]):
(-[WebDatabaseManager deleteOrigin:]):
(-[WebDatabaseManager deleteDatabase:withOrigin:]):
* Storage/WebDatabaseManagerClient.h:
* Storage/WebDatabaseManagerClient.mm:
(DidModifyOriginData::dispatchToMainThread):
(DidModifyOriginData::DidModifyOriginData):
(WebDatabaseManagerClient::dispatchDidModifyOrigin):
(WebDatabaseManagerClient::dispatchDidModifyDatabase):
* Storage/WebDatabaseQuotaManager.mm:
(-[WebDatabaseQuotaManager usage]):
(-[WebDatabaseQuotaManager quota]):
(-[WebDatabaseQuotaManager setQuota:]):
* Storage/WebStorageManager.mm:
(-[WebStorageManager origins]):
(-[WebStorageManager deleteOrigin:]):
* Storage/WebStorageTrackerClient.h:
* Storage/WebStorageTrackerClient.mm:
(WebStorageTrackerClient::dispatchDidModifyOrigin):
* WebCoreSupport/WebSecurityOrigin.mm:
(-[WebSecurityOrigin usage]):
(-[WebSecurityOrigin quota]):
(-[WebSecurityOrigin setQuota:]):

Source/WebKit/win:

* WebDatabaseManager.cpp:
(DidModifyOriginData::dispatchToMainThread):
(DidModifyOriginData::DidModifyOriginData):
(WebDatabaseManager::dispatchDidModifyOrigin):
(WebDatabaseManager::dispatchDidModifyDatabase):
* WebDatabaseManager.h:
* WebSecurityOrigin.cpp:
(WebSecurityOrigin::usage):
(WebSecurityOrigin::quota):
(WebSecurityOrigin::setQuota):

Source/WebKit2:

* DatabaseProcess/DatabaseProcess.cpp:
(WebKit::DatabaseProcess::indexedDatabaseOrigins):
* DatabaseProcess/DatabaseProcess.h:
* NetworkProcess/NetworkProcess.cpp:
(WebKit::fetchDiskCacheEntries):
* Shared/API/c/WKSecurityOriginRef.cpp:
(WKSecurityOriginCreateFromDatabaseIdentifier):
* Shared/WebsiteData/WebsiteData.cpp:
(WebKit::WebsiteData::Entry::encode):
(WebKit::WebsiteData::Entry::decode):
* Shared/WebsiteData/WebsiteData.h:
* UIProcess/API/C/WKKeyValueStorageManager.cpp:
(WKKeyValueStorageManagerGetStorageDetailsByOrigin):
* UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
(WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
(WebKit::LocalStorageDatabaseTracker::origins):
* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
(WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::exceededDatabaseQuota):
(WebKit::WebPageProxy::reachedApplicationCacheOriginQuota):
(WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchData):
(WebKit::WebsiteDataStore::removeData):
(WebKit::WebsiteDataStore::mediaKeyOrigins):
* WebProcess/InjectedBundle/API/c/WKBundle.cpp:
(WKBundleSetDatabaseQuota):
* WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
(WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
* WebProcess/Storage/StorageAreaImpl.cpp:
(WebKit::StorageAreaImpl::create):
(WebKit::StorageAreaImpl::StorageAreaImpl):
(WebKit::StorageAreaImpl::securityOrigin):
* WebProcess/Storage/StorageAreaImpl.h:
* WebProcess/Storage/StorageAreaMap.cpp:
(WebKit::StorageAreaMap::dispatchSessionStorageEvent):
(WebKit::StorageAreaMap::dispatchLocalStorageEvent):
* WebProcess/Storage/StorageAreaMap.h:
(WebKit::StorageAreaMap::securityOrigin):
* WebProcess/Storage/StorageNamespaceImpl.cpp:
(WebKit::StorageNamespaceImpl::didDestroyStorageAreaMap):
(WebKit::StorageNamespaceImpl::storageArea):
* WebProcess/Storage/StorageNamespaceImpl.h:
* WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::exceededDatabaseQuota):
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::fetchWebsiteData):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabasecpp">trunk/Source/WebCore/Modules/webdatabase/Database.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseh">trunk/Source/WebCore/Modules/webdatabase/Database.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseContextcpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseContexth">trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseManagerClienth">trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTrackercpp">trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseDatabaseTrackerh">trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h</a></li>
<li><a href="#trunkSourceWebCoreModuleswebdatabaseSQLTransactionCoordinatorcpp">trunk/Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp</a></li>
<li><a href="#trunkSourceWebCoreinspectorInspectorDOMStorageAgentcpp">trunk/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp</a></li>
<li><a href="#trunkSourceWebCoreloaderEmptyClientscpp">trunk/Source/WebCore/loader/EmptyClients.cpp</a></li>
<li><a href="#trunkSourceWebCorepageDOMWindowcpp">trunk/Source/WebCore/page/DOMWindow.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSecurityOrigincpp">trunk/Source/WebCore/page/SecurityOrigin.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSecurityOriginh">trunk/Source/WebCore/page/SecurityOrigin.h</a></li>
<li><a href="#trunkSourceWebCorepageSecurityOriginDatacpp">trunk/Source/WebCore/page/SecurityOriginData.cpp</a></li>
<li><a href="#trunkSourceWebCorepageSecurityOriginDatah">trunk/Source/WebCore/page/SecurityOriginData.h</a></li>
<li><a href="#trunkSourceWebCorestorageStorageAreah">trunk/Source/WebCore/storage/StorageArea.h</a></li>
<li><a href="#trunkSourceWebCorestorageStorageEventDispatchercpp">trunk/Source/WebCore/storage/StorageEventDispatcher.cpp</a></li>
<li><a href="#trunkSourceWebCorestorageStorageEventDispatcherh">trunk/Source/WebCore/storage/StorageEventDispatcher.h</a></li>
<li><a href="#trunkSourceWebCorestorageStorageNamespaceh">trunk/Source/WebCore/storage/StorageNamespace.h</a></li>
<li><a href="#trunkSourceWebCorestorageStorageNamespaceProvidercpp">trunk/Source/WebCore/storage/StorageNamespaceProvider.cpp</a></li>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitStorageStorageAreaImplcpp">trunk/Source/WebKit/Storage/StorageAreaImpl.cpp</a></li>
<li><a href="#trunkSourceWebKitStorageStorageAreaImplh">trunk/Source/WebKit/Storage/StorageAreaImpl.h</a></li>
<li><a href="#trunkSourceWebKitStorageStorageNamespaceImplcpp">trunk/Source/WebKit/Storage/StorageNamespaceImpl.cpp</a></li>
<li><a href="#trunkSourceWebKitStorageStorageNamespaceImplh">trunk/Source/WebKit/Storage/StorageNamespaceImpl.h</a></li>
<li><a href="#trunkSourceWebKitStorageStorageTrackercpp">trunk/Source/WebKit/Storage/StorageTracker.cpp</a></li>
<li><a href="#trunkSourceWebKitStorageStorageTrackerh">trunk/Source/WebKit/Storage/StorageTracker.h</a></li>
<li><a href="#trunkSourceWebKitStorageWebStorageNamespaceProvidercpp">trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp</a></li>
<li><a href="#trunkSourceWebKitStorageWebStorageNamespaceProviderh">trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h</a></li>
<li><a href="#trunkSourceWebKitmacChangeLog">trunk/Source/WebKit/mac/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebDatabaseManagermm">trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebDatabaseManagerClienth">trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.h</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebDatabaseManagerClientmm">trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.mm</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebDatabaseQuotaManagermm">trunk/Source/WebKit/mac/Storage/WebDatabaseQuotaManager.mm</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebStorageManagermm">trunk/Source/WebKit/mac/Storage/WebStorageManager.mm</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebStorageTrackerClienth">trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.h</a></li>
<li><a href="#trunkSourceWebKitmacStorageWebStorageTrackerClientmm">trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.mm</a></li>
<li><a href="#trunkSourceWebKitmacWebCoreSupportWebSecurityOriginmm">trunk/Source/WebKit/mac/WebCoreSupport/WebSecurityOrigin.mm</a></li>
<li><a href="#trunkSourceWebKitwinChangeLog">trunk/Source/WebKit/win/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitwinWebDatabaseManagercpp">trunk/Source/WebKit/win/WebDatabaseManager.cpp</a></li>
<li><a href="#trunkSourceWebKitwinWebDatabaseManagerh">trunk/Source/WebKit/win/WebDatabaseManager.h</a></li>
<li><a href="#trunkSourceWebKitwinWebSecurityOrigincpp">trunk/Source/WebKit/win/WebSecurityOrigin.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessDatabaseProcesscpp">trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2DatabaseProcessDatabaseProcessh">trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h</a></li>
<li><a href="#trunkSourceWebKit2NetworkProcessNetworkProcesscpp">trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedAPIcWKSecurityOriginRefcpp">trunk/Source/WebKit2/Shared/API/c/WKSecurityOriginRef.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebsiteDataWebsiteDatacpp">trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedWebsiteDataWebsiteDatah">trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKKeyValueStorageManagercpp">trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflewk_database_managercpp">trunk/Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseTrackercpp">trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessUserMediaPermissionRequestManagerProxycpp">trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataStorecpp">trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessInjectedBundleAPIcWKBundlecpp">trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessMediaCacheWebMediaKeyStorageManagercpp">trunk/Source/WebKit2/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessStorageStorageAreaImplcpp">trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessStorageStorageAreaImplh">trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessStorageStorageAreaMapcpp">trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessStorageStorageAreaMaph">trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessStorageStorageNamespaceImplcpp">trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessStorageStorageNamespaceImplh">trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClientcpp">trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebProcesscpp">trunk/Source/WebKit2/WebProcess/WebProcess.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/ChangeLog        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -1,3 +1,98 @@
</span><ins>+2016-11-14  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
+        https://bugs.webkit.org/show_bug.cgi?id=164720
+
+        Reviewed by Brady Eidson.
+
+        This is adding to r208558 where we moved databaseIdentifier to SecurityOriginData so we
+        don't have to use SecurityOrigin in the DatabaseProcess.  This is a step towards only using 
+        SecurityOrigin (and the SchemeRegistry) in the WebProcess. SecurityOriginData is for other 
+        processes and IPC. There should be no change in behaviour.
+
+        * Modules/webdatabase/Database.cpp:
+        (WebCore::Database::Database):
+        (WebCore::Database::securityOrigin):
+        * Modules/webdatabase/Database.h:
+        * Modules/webdatabase/DatabaseContext.cpp:
+        (WebCore::DatabaseContext::securityOrigin):
+        * Modules/webdatabase/DatabaseContext.h:
+        * Modules/webdatabase/DatabaseManager.cpp:
+        (WebCore::DatabaseManager::tryToOpenDatabaseBackend):
+        (WebCore::DatabaseManager::fullPathForDatabase):
+        (WebCore::DatabaseManager::detailsForNameAndOrigin):
+        * Modules/webdatabase/DatabaseManager.h:
+        * Modules/webdatabase/DatabaseManagerClient.h:
+        (WebCore::DatabaseManagerClient::dispatchDidAddNewOrigin):
+        * Modules/webdatabase/DatabaseTracker.cpp:
+        (WebCore::DatabaseTracker::hasAdequateQuotaForOrigin):
+        (WebCore::DatabaseTracker::canEstablishDatabase):
+        (WebCore::DatabaseTracker::retryCanEstablishDatabase):
+        (WebCore::DatabaseTracker::hasEntryForOriginNoLock):
+        (WebCore::DatabaseTracker::hasEntryForDatabase):
+        (WebCore::DatabaseTracker::maximumSize):
+        (WebCore::DatabaseTracker::originPath):
+        (WebCore::DatabaseTracker::fullPathForDatabaseNoLock):
+        (WebCore::DatabaseTracker::fullPathForDatabase):
+        (WebCore::DatabaseTracker::origins):
+        (WebCore::DatabaseTracker::databaseNamesNoLock):
+        (WebCore::DatabaseTracker::databaseNames):
+        (WebCore::DatabaseTracker::detailsForNameAndOrigin):
+        (WebCore::DatabaseTracker::setDatabaseDetails):
+        (WebCore::DatabaseTracker::addOpenDatabase):
+        (WebCore::DatabaseTracker::removeOpenDatabase):
+        (WebCore::DatabaseTracker::originLockFor):
+        (WebCore::DatabaseTracker::deleteOriginLockFor):
+        (WebCore::DatabaseTracker::usage):
+        (WebCore::DatabaseTracker::quotaNoLock):
+        (WebCore::DatabaseTracker::quota):
+        (WebCore::DatabaseTracker::setQuota):
+        (WebCore::DatabaseTracker::addDatabase):
+        (WebCore::DatabaseTracker::deleteDatabasesModifiedSince):
+        (WebCore::DatabaseTracker::deleteOrigin):
+        (WebCore::DatabaseTracker::isDeletingDatabaseOrOriginFor):
+        (WebCore::DatabaseTracker::recordCreatingDatabase):
+        (WebCore::DatabaseTracker::doneCreatingDatabase):
+        (WebCore::DatabaseTracker::creatingDatabase):
+        (WebCore::DatabaseTracker::canDeleteDatabase):
+        (WebCore::DatabaseTracker::recordDeletingDatabase):
+        (WebCore::DatabaseTracker::doneDeletingDatabase):
+        (WebCore::DatabaseTracker::isDeletingDatabase):
+        (WebCore::DatabaseTracker::canDeleteOrigin):
+        (WebCore::DatabaseTracker::isDeletingOrigin):
+        (WebCore::DatabaseTracker::recordDeletingOrigin):
+        (WebCore::DatabaseTracker::doneDeletingOrigin):
+        (WebCore::DatabaseTracker::deleteDatabase):
+        (WebCore::DatabaseTracker::deleteDatabaseFile):
+        (WebCore::DatabaseTracker::removeDeletedOpenedDatabases):
+        (WebCore::DatabaseTracker::scheduleNotifyDatabaseChanged):
+        * Modules/webdatabase/DatabaseTracker.h:
+        * Modules/webdatabase/SQLTransactionCoordinator.cpp:
+        (WebCore::getDatabaseIdentifier):
+        * inspector/InspectorDOMStorageAgent.cpp:
+        (WebCore::InspectorDOMStorageAgent::findStorageArea):
+        * loader/EmptyClients.cpp:
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::sessionStorage):
+        * page/SecurityOrigin.cpp:
+        (WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier): Deleted.
+        (WebCore::SecurityOrigin::createFromDatabaseIdentifier): Deleted.
+        * page/SecurityOrigin.h:
+        * page/SecurityOriginData.cpp:
+        (WebCore::SecurityOriginData::fromDatabaseIdentifier):
+        * page/SecurityOriginData.h:
+        (WebCore::SecurityOriginData::SecurityOriginData):
+        * storage/StorageArea.h:
+        * storage/StorageEventDispatcher.cpp:
+        (WebCore::StorageEventDispatcher::dispatchSessionStorageEvents):
+        (WebCore::StorageEventDispatcher::dispatchLocalStorageEvents):
+        (WebCore::StorageEventDispatcher::dispatchSessionStorageEventsToFrames):
+        (WebCore::StorageEventDispatcher::dispatchLocalStorageEventsToFrames):
+        * storage/StorageEventDispatcher.h:
+        * storage/StorageNamespace.h:
+        * storage/StorageNamespaceProvider.cpp:
+        (WebCore::StorageNamespaceProvider::localStorageArea):
+
</ins><span class="cx"> 2016-11-14  Joseph Pecoraro  &lt;pecoraro@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Web Inspector: Worker debugging should pause all targets and view call frames in all targets
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/Database.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -208,7 +208,7 @@
</span><span class="cx">     {
</span><span class="cx">         std::lock_guard&lt;StaticLock&gt; locker(guidMutex);
</span><span class="cx"> 
</span><del>-        m_guid = guidForOriginAndName(securityOrigin().toString(), name);
</del><ins>+        m_guid = guidForOriginAndName(securityOrigin().securityOrigin()-&gt;toString(), name);
</ins><span class="cx">         guidToDatabaseMap().ensure(m_guid, [] {
</span><span class="cx">             return HashSet&lt;Database*&gt;();
</span><span class="cx">         }).iterator-&gt;value.add(this);
</span><span class="lines">@@ -766,13 +766,13 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SecurityOrigin&amp; Database::securityOrigin()
</del><ins>+SecurityOriginData Database::securityOrigin()
</ins><span class="cx"> {
</span><span class="cx">     if (m_scriptExecutionContext-&gt;isContextThread())
</span><del>-        return m_contextThreadSecurityOrigin.get();
</del><ins>+        return SecurityOriginData::fromSecurityOrigin(m_contextThreadSecurityOrigin.get());
</ins><span class="cx">     auto&amp; thread = databaseThread();
</span><span class="cx">     if (currentThread() == thread.getThreadID())
</span><del>-        return m_databaseThreadSecurityOrigin.get();
</del><ins>+        return SecurityOriginData::fromSecurityOrigin(m_databaseThreadSecurityOrigin.get());
</ins><span class="cx">     RELEASE_ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/Database.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/Database.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/Database.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -48,6 +48,7 @@
</span><span class="cx"> class SQLTransactionErrorCallback;
</span><span class="cx"> class SQLTransactionWrapper;
</span><span class="cx"> class VoidCallback;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> using DatabaseGUID = int;
</span><span class="cx"> 
</span><span class="lines">@@ -108,7 +109,7 @@
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; tableNames();
</span><span class="cx"> 
</span><del>-    SecurityOrigin&amp; securityOrigin();
</del><ins>+    SecurityOriginData securityOrigin();
</ins><span class="cx"> 
</span><span class="cx">     void markAsDeletedAndClose();
</span><span class="cx">     bool deleted() const { return m_deleted; }
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseContextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx"> #include &quot;SchemeRegistry.h&quot;
</span><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &quot;Settings.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -210,9 +211,9 @@
</span><span class="cx">     ASSERT(m_scriptExecutionContext-&gt;isWorkerGlobalScope());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-SecurityOrigin* DatabaseContext::securityOrigin() const
</del><ins>+SecurityOriginData DatabaseContext::securityOrigin() const
</ins><span class="cx"> {
</span><del>-    return m_scriptExecutionContext-&gt;securityOrigin();
</del><ins>+    return SecurityOriginData::fromSecurityOrigin(*m_scriptExecutionContext-&gt;securityOrigin());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool DatabaseContext::isContextThread() const
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseContexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseContext.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx"> class DatabaseTaskSynchronizer;
</span><span class="cx"> class DatabaseThread;
</span><span class="cx"> class SecurityOrigin;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> class DatabaseContext final : public ThreadSafeRefCounted&lt;DatabaseContext&gt;, private ActiveDOMObject {
</span><span class="cx"> public:
</span><span class="lines">@@ -60,7 +61,7 @@
</span><span class="cx">     void databaseExceededQuota(const String&amp; name, DatabaseDetails);
</span><span class="cx"> 
</span><span class="cx">     using ActiveDOMObject::scriptExecutionContext;
</span><del>-    SecurityOrigin* securityOrigin() const;
</del><ins>+    SecurityOriginData securityOrigin() const;
</ins><span class="cx"> 
</span><span class="cx">     bool isContextThread() const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -38,6 +38,7 @@
</span><span class="cx"> #include &quot;ScriptController.h&quot;
</span><span class="cx"> #include &quot;ScriptExecutionContext.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -176,7 +177,7 @@
</span><span class="cx">         return openResult.releaseException();
</span><span class="cx"> 
</span><span class="cx">     // FIXME: What guarantees backendContext.securityOrigin() is non-null?
</span><del>-    DatabaseTracker::singleton().setDatabaseDetails(*backendContext.securityOrigin(), name, displayName, estimatedSize);
</del><ins>+    DatabaseTracker::singleton().setDatabaseDetails(backendContext.securityOrigin(), name, displayName, estimatedSize);
</ins><span class="cx">     return WTFMove(database);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -243,7 +244,7 @@
</span><span class="cx">                 return String();
</span><span class="cx">         }
</span><span class="cx">     }
</span><del>-    return DatabaseTracker::singleton().fullPathForDatabase(origin, name, createIfDoesNotExist);
</del><ins>+    return DatabaseTracker::singleton().fullPathForDatabase(SecurityOriginData::fromSecurityOrigin(origin), name, createIfDoesNotExist);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> DatabaseDetails DatabaseManager::detailsForNameAndOrigin(const String&amp; name, SecurityOrigin&amp; origin)
</span><span class="lines">@@ -258,7 +259,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    return DatabaseTracker::singleton().detailsForNameAndOrigin(name, origin);
</del><ins>+    return DatabaseTracker::singleton().detailsForNameAndOrigin(name, SecurityOriginData::fromSecurityOrigin(origin));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void DatabaseManager::logErrorMessage(ScriptExecutionContext&amp; context, const String&amp; message)
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManager.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -43,6 +43,7 @@
</span><span class="cx"> class Exception;
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx"> class ScriptExecutionContext;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> class DatabaseManager {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(DatabaseManager);
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseManagerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseManagerClient.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -29,20 +29,20 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-class SecurityOrigin;
</del><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> class DatabaseManagerClient {
</span><span class="cx"> public:
</span><span class="cx">     virtual ~DatabaseManagerClient() { }
</span><del>-    virtual void dispatchDidModifyOrigin(SecurityOrigin&amp;) = 0;
-    virtual void dispatchDidModifyDatabase(SecurityOrigin&amp;, const String&amp; databaseName) = 0;
</del><ins>+    virtual void dispatchDidModifyOrigin(const SecurityOriginData&amp;) = 0;
+    virtual void dispatchDidModifyDatabase(const SecurityOriginData&amp;, const String&amp; databaseName) = 0;
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-    virtual void dispatchDidAddNewOrigin(SecurityOrigin&amp;) = 0;
</del><ins>+    virtual void dispatchDidAddNewOrigin() = 0;
</ins><span class="cx">     virtual void dispatchDidDeleteDatabase() = 0;
</span><span class="cx">     virtual void dispatchDidDeleteDatabaseOrigin() = 0;
</span><span class="cx"> #else
</span><del>-    static void dispatchDidAddNewOrigin(SecurityOrigin&amp;) { }
</del><ins>+    static void dispatchDidAddNewOrigin() { }
</ins><span class="cx">     static void dispatchDidDeleteDatabase() { }
</span><span class="cx">     static void dispatchDidDeleteDatabaseOrigin() { }
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -139,7 +139,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ExceptionOr&lt;void&gt; DatabaseTracker::hasAdequateQuotaForOrigin(SecurityOrigin&amp; origin, unsigned estimatedSize)
</del><ins>+ExceptionOr&lt;void&gt; DatabaseTracker::hasAdequateQuotaForOrigin(const SecurityOriginData&amp; origin, unsigned estimatedSize)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     auto usage = this-&gt;usage(origin);
</span><span class="lines">@@ -160,7 +160,7 @@
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx"> 
</span><span class="cx">     // FIXME: What guarantees this context.securityOrigin() is non-null?
</span><del>-    auto&amp; origin = *context.securityOrigin();
</del><ins>+    auto origin = context.securityOrigin();
</ins><span class="cx"> 
</span><span class="cx">     if (isDeletingDatabaseOrOriginFor(origin, name))
</span><span class="cx">         return Exception { SECURITY_ERR };
</span><span class="lines">@@ -208,7 +208,7 @@
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx"> 
</span><span class="cx">     // FIXME: What guarantees context.securityOrigin() is non-null?
</span><del>-    auto&amp; origin = *context.securityOrigin();
</del><ins>+    auto origin = context.securityOrigin();
</ins><span class="cx"> 
</span><span class="cx">     // We have already eliminated other types of errors in canEstablishDatabase().
</span><span class="cx">     // The only reason we're in retryCanEstablishDatabase() is because we gave
</span><span class="lines">@@ -226,7 +226,7 @@
</span><span class="cx">     return WTFMove(exception);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::hasEntryForOriginNoLock(SecurityOrigin&amp; origin)
</del><ins>+bool DatabaseTracker::hasEntryForOriginNoLock(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="lines">@@ -239,12 +239,12 @@
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx"> 
</span><span class="cx">     return statement.step() == SQLITE_ROW;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::hasEntryForDatabase(SecurityOrigin&amp; origin, const String&amp; databaseIdentifier)
</del><ins>+bool DatabaseTracker::hasEntryForDatabase(const SecurityOriginData&amp; origin, const String&amp; databaseIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="lines">@@ -259,7 +259,7 @@
</span><span class="cx">     if (statement.prepare() != SQLITE_OK)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx">     statement.bindText(2, databaseIdentifier);
</span><span class="cx"> 
</span><span class="cx">     return statement.step() == SQLITE_ROW;
</span><span class="lines">@@ -270,7 +270,7 @@
</span><span class="cx">     // The maximum size for a database is the full quota for its origin, minus the current usage within the origin,
</span><span class="cx">     // plus the current usage of the given database
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><del>-    auto&amp; origin = database.securityOrigin();
</del><ins>+    auto origin = database.securityOrigin();
</ins><span class="cx"> 
</span><span class="cx">     unsigned long long quota = quotaNoLock(origin);
</span><span class="cx">     unsigned long long diskUsage = usage(origin);
</span><span class="lines">@@ -311,9 +311,9 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-String DatabaseTracker::originPath(SecurityOrigin&amp; origin) const
</del><ins>+String DatabaseTracker::originPath(const SecurityOriginData&amp; origin) const
</ins><span class="cx"> {
</span><del>-    return SQLiteFileSystem::appendDatabaseFileNameToPath(m_databaseDirectoryPath.isolatedCopy(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    return SQLiteFileSystem::appendDatabaseFileNameToPath(m_databaseDirectoryPath.isolatedCopy(), origin.databaseIdentifier());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> static String generateDatabaseFileName()
</span><span class="lines">@@ -326,11 +326,11 @@
</span><span class="cx">     return stringBuilder.toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-String DatabaseTracker::fullPathForDatabaseNoLock(SecurityOrigin&amp; origin, const String&amp; name, bool createIfNotExists)
</del><ins>+String DatabaseTracker::fullPathForDatabaseNoLock(const SecurityOriginData&amp; origin, const String&amp; name, bool createIfNotExists)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> 
</span><del>-    String originIdentifier = SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier();
</del><ins>+    String originIdentifier = origin.databaseIdentifier();
</ins><span class="cx">     String originPath = this-&gt;originPath(origin);
</span><span class="cx"> 
</span><span class="cx">     // Make sure the path for this SecurityOrigin exists
</span><span class="lines">@@ -373,13 +373,13 @@
</span><span class="cx">     return fullFilePath;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-String DatabaseTracker::fullPathForDatabase(SecurityOrigin&amp; origin, const String&amp; name, bool createIfNotExists)
</del><ins>+String DatabaseTracker::fullPathForDatabase(const SecurityOriginData&amp; origin, const String&amp; name, bool createIfNotExists)
</ins><span class="cx"> {
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx">     return fullPathForDatabaseNoLock(origin, name, createIfNotExists).isolatedCopy();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Vector&lt;Ref&lt;SecurityOrigin&gt;&gt; DatabaseTracker::origins()
</del><ins>+Vector&lt;SecurityOriginData&gt; DatabaseTracker::origins()
</ins><span class="cx"> {
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx"> 
</span><span class="lines">@@ -393,10 +393,10 @@
</span><span class="cx">         return { };
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    Vector&lt;Ref&lt;SecurityOrigin&gt;&gt; origins;
</del><ins>+    Vector&lt;SecurityOriginData&gt; origins;
</ins><span class="cx">     int stepResult;
</span><span class="cx">     while ((stepResult = statement.step()) == SQLITE_ROW)
</span><del>-        origins.append(SecurityOrigin::createFromDatabaseIdentifier(statement.getColumnText(0))-&gt;isolatedCopy());
</del><ins>+        origins.append(SecurityOriginData::fromDatabaseIdentifier(statement.getColumnText(0))-&gt;isolatedCopy());
</ins><span class="cx">     origins.shrinkToFit();
</span><span class="cx"> 
</span><span class="cx">     if (stepResult != SQLITE_DONE)
</span><span class="lines">@@ -405,7 +405,7 @@
</span><span class="cx">     return origins;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Vector&lt;String&gt; DatabaseTracker::databaseNamesNoLock(SecurityOrigin&amp; origin)
</del><ins>+Vector&lt;String&gt; DatabaseTracker::databaseNamesNoLock(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="lines">@@ -416,7 +416,7 @@
</span><span class="cx">     if (statement.prepare() != SQLITE_OK)
</span><span class="cx">         return { };
</span><span class="cx"> 
</span><del>-    statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx"> 
</span><span class="cx">     Vector&lt;String&gt; names;
</span><span class="cx">     int result;
</span><span class="lines">@@ -425,7 +425,7 @@
</span><span class="cx">     names.shrinkToFit();
</span><span class="cx"> 
</span><span class="cx">     if (result != SQLITE_DONE) {
</span><del>-        LOG_ERROR(&quot;Failed to retrieve all database names for origin %s&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+        LOG_ERROR(&quot;Failed to retrieve all database names for origin %s&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">         return { };
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -432,7 +432,7 @@
</span><span class="cx">     return names;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Vector&lt;String&gt; DatabaseTracker::databaseNames(SecurityOrigin&amp; origin)
</del><ins>+Vector&lt;String&gt; DatabaseTracker::databaseNames(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     Vector&lt;String&gt; names;
</span><span class="cx">     {
</span><span class="lines">@@ -442,9 +442,9 @@
</span><span class="cx">     return isolatedCopy(names);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-DatabaseDetails DatabaseTracker::detailsForNameAndOrigin(const String&amp; name, SecurityOrigin&amp; origin)
</del><ins>+DatabaseDetails DatabaseTracker::detailsForNameAndOrigin(const String&amp; name, const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><del>-    String originIdentifier = SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier();
</del><ins>+    String originIdentifier = origin.databaseIdentifier();
</ins><span class="cx">     String displayName;
</span><span class="cx">     int64_t expectedUsage;
</span><span class="cx"> 
</span><span class="lines">@@ -479,9 +479,9 @@
</span><span class="cx">     return DatabaseDetails(name, displayName, expectedUsage, SQLiteFileSystem::getDatabaseFileSize(path), SQLiteFileSystem::databaseCreationTime(path), SQLiteFileSystem::databaseModificationTime(path));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::setDatabaseDetails(SecurityOrigin&amp; origin, const String&amp; name, const String&amp; displayName, unsigned estimatedSize)
</del><ins>+void DatabaseTracker::setDatabaseDetails(const SecurityOriginData&amp; origin, const String&amp; name, const String&amp; displayName, unsigned estimatedSize)
</ins><span class="cx"> {
</span><del>-    String originIdentifier = SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier();
</del><ins>+    String originIdentifier = origin.databaseIdentifier();
</ins><span class="cx">     int64_t guid = 0;
</span><span class="cx"> 
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="lines">@@ -543,9 +543,9 @@
</span><span class="cx">     if (!m_openDatabaseMap)
</span><span class="cx">         m_openDatabaseMap = std::make_unique&lt;DatabaseOriginMap&gt;();
</span><span class="cx"> 
</span><del>-    auto&amp; origin = database.securityOrigin();
</del><ins>+    auto origin = database.securityOrigin();
</ins><span class="cx"> 
</span><del>-    auto* nameMap = m_openDatabaseMap-&gt;get(&amp;origin);
</del><ins>+    auto* nameMap = m_openDatabaseMap-&gt;get(origin);
</ins><span class="cx">     if (!nameMap) {
</span><span class="cx">         nameMap = new DatabaseNameMap;
</span><span class="cx">         m_openDatabaseMap-&gt;add(origin.isolatedCopy(), nameMap);
</span><span class="lines">@@ -572,7 +572,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    DatabaseNameMap* nameMap = m_openDatabaseMap-&gt;get(&amp;database.securityOrigin());
</del><ins>+    DatabaseNameMap* nameMap = m_openDatabaseMap-&gt;get(database.securityOrigin());
</ins><span class="cx">     if (!nameMap) {
</span><span class="cx">         ASSERT_NOT_REACHED();
</span><span class="cx">         return;
</span><span class="lines">@@ -598,14 +598,14 @@
</span><span class="cx">     if (!nameMap-&gt;isEmpty())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    m_openDatabaseMap-&gt;remove(&amp;database.securityOrigin());
</del><ins>+    m_openDatabaseMap-&gt;remove(database.securityOrigin());
</ins><span class="cx">     delete nameMap;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;OriginLock&gt; DatabaseTracker::originLockFor(SecurityOrigin&amp; origin)
</del><ins>+RefPtr&lt;OriginLock&gt; DatabaseTracker::originLockFor(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><del>-    String databaseIdentifier = SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier();
</del><ins>+    String databaseIdentifier = origin.databaseIdentifier();
</ins><span class="cx"> 
</span><span class="cx">     // The originLockMap is accessed from multiple DatabaseThreads since
</span><span class="cx">     // different script contexts can be writing to different databases from
</span><span class="lines">@@ -627,7 +627,7 @@
</span><span class="cx">     return lock;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::deleteOriginLockFor(SecurityOrigin&amp; origin)
</del><ins>+void DatabaseTracker::deleteOriginLockFor(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> 
</span><span class="lines">@@ -644,11 +644,11 @@
</span><span class="cx">     // This may or may not be possible depending on whether other threads are
</span><span class="cx">     // also using the OriginLock at the same time. After that, we will delete the lock file.
</span><span class="cx"> 
</span><del>-    m_originLockMap.remove(SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    m_originLockMap.remove(origin.databaseIdentifier());
</ins><span class="cx">     OriginLock::deleteLockFile(originPath(origin));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned long long DatabaseTracker::usage(SecurityOrigin&amp; origin)
</del><ins>+unsigned long long DatabaseTracker::usage(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     String originPath = this-&gt;originPath(origin);
</span><span class="cx">     unsigned long long diskUsage = 0;
</span><span class="lines">@@ -660,7 +660,7 @@
</span><span class="cx">     return diskUsage;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned long long DatabaseTracker::quotaNoLock(SecurityOrigin&amp; origin)
</del><ins>+unsigned long long DatabaseTracker::quotaNoLock(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     unsigned long long quota = 0;
</span><span class="lines">@@ -674,7 +674,7 @@
</span><span class="cx">         LOG_ERROR(&quot;Failed to prepare statement.&quot;);
</span><span class="cx">         return quota;
</span><span class="cx">     }
</span><del>-    statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx"> 
</span><span class="cx">     if (statement.step() == SQLITE_ROW)
</span><span class="cx">         quota = statement.getColumnInt64(0);
</span><span class="lines">@@ -682,13 +682,13 @@
</span><span class="cx">     return quota;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-unsigned long long DatabaseTracker::quota(SecurityOrigin&amp; origin)
</del><ins>+unsigned long long DatabaseTracker::quota(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx">     return quotaNoLock(origin);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::setQuota(SecurityOrigin&amp; origin, unsigned long long quota)
</del><ins>+void DatabaseTracker::setQuota(const SecurityOriginData&amp; origin, unsigned long long quota)
</ins><span class="cx"> {
</span><span class="cx">     LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx"> 
</span><span class="lines">@@ -705,13 +705,13 @@
</span><span class="cx">     if (!originEntryExists) {
</span><span class="cx">         SQLiteStatement statement(m_database, &quot;INSERT INTO Origins VALUES (?, ?)&quot;);
</span><span class="cx">         if (statement.prepare() != SQLITE_OK) {
</span><del>-            LOG_ERROR(&quot;Unable to establish origin %s in the tracker&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to establish origin %s in the tracker&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">         } else {
</span><del>-            statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+            statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx">             statement.bindInt64(2, quota);
</span><span class="cx"> 
</span><span class="cx">             if (statement.step() != SQLITE_DONE)
</span><del>-                LOG_ERROR(&quot;Unable to establish origin %s in the tracker&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+                LOG_ERROR(&quot;Unable to establish origin %s in the tracker&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             else
</span><span class="cx">                 insertedNewOrigin = true;
</span><span class="cx">         }
</span><span class="lines">@@ -720,23 +720,23 @@
</span><span class="cx">         bool error = statement.prepare() != SQLITE_OK;
</span><span class="cx">         if (!error) {
</span><span class="cx">             statement.bindInt64(1, quota);
</span><del>-            statement.bindText(2, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+            statement.bindText(2, origin.databaseIdentifier());
</ins><span class="cx"> 
</span><span class="cx">             error = !statement.executeCommand();
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (error)
</span><del>-            LOG_ERROR(&quot;Failed to set quota %llu in tracker database for origin %s&quot;, quota, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Failed to set quota %llu in tracker database for origin %s&quot;, quota, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (m_client) {
</span><span class="cx">         if (insertedNewOrigin)
</span><del>-            m_client-&gt;dispatchDidAddNewOrigin(origin);
</del><ins>+            m_client-&gt;dispatchDidAddNewOrigin();
</ins><span class="cx">         m_client-&gt;dispatchDidModifyOrigin(origin);
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::addDatabase(SecurityOrigin&amp; origin, const String&amp; name, const String&amp; path)
</del><ins>+bool DatabaseTracker::addDatabase(const SecurityOriginData&amp; origin, const String&amp; name, const String&amp; path)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     openTrackerDatabase(CreateIfDoesNotExist);
</span><span class="lines">@@ -751,12 +751,12 @@
</span><span class="cx">     if (statement.prepare() != SQLITE_OK)
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx">     statement.bindText(2, name);
</span><span class="cx">     statement.bindText(3, path);
</span><span class="cx"> 
</span><span class="cx">     if (!statement.executeCommand()) {
</span><del>-        LOG_ERROR(&quot;Failed to add database %s to origin %s: %s\n&quot;, name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data(), m_database.lastErrorMsg());
</del><ins>+        LOG_ERROR(&quot;Failed to add database %s to origin %s: %s\n&quot;, name.utf8().data(), origin.databaseIdentifier().utf8().data(), m_database.lastErrorMsg());
</ins><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -794,21 +794,21 @@
</span><span class="cx">                 continue;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            deleteDatabase(origin.get(), databaseName);
</del><ins>+            deleteDatabase(origin, databaseName);
</ins><span class="cx">         }
</span><span class="cx">         if (deletedAll)
</span><del>-            deleteOrigin(origin.get());
</del><ins>+            deleteOrigin(origin);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // It is the caller's responsibility to make sure that nobody is trying to create, delete, open, or close databases in this origin while the deletion is
</span><span class="cx"> // taking place.
</span><del>-bool DatabaseTracker::deleteOrigin(SecurityOrigin&amp; origin)
</del><ins>+bool DatabaseTracker::deleteOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     return deleteOrigin(origin, DeletionMode::Default);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::deleteOrigin(SecurityOrigin&amp; origin, DeletionMode deletionMode)
</del><ins>+bool DatabaseTracker::deleteOrigin(const SecurityOriginData&amp; origin, DeletionMode deletionMode)
</ins><span class="cx"> {
</span><span class="cx">     Vector&lt;String&gt; databaseNames;
</span><span class="cx">     {
</span><span class="lines">@@ -819,11 +819,11 @@
</span><span class="cx"> 
</span><span class="cx">         databaseNames = databaseNamesNoLock(origin);
</span><span class="cx">         if (databaseNames.isEmpty()) {
</span><del>-            LOG_ERROR(&quot;Unable to retrieve list of database names for origin %s&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to retrieve list of database names for origin %s&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="cx">         if (!canDeleteOrigin(origin)) {
</span><del>-            LOG_ERROR(&quot;Tried to delete an origin (%s) while either creating database in it or already deleting it&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Tried to delete an origin (%s) while either creating database in it or already deleting it&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             ASSERT_NOT_REACHED();
</span><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="lines">@@ -834,7 +834,7 @@
</span><span class="cx">     for (auto&amp; name : databaseNames) {
</span><span class="cx">         if (!deleteDatabaseFile(origin, name, deletionMode)) {
</span><span class="cx">             // Even if the file can't be deleted, we want to try and delete the rest, don't return early here.
</span><del>-            LOG_ERROR(&quot;Unable to delete file for database %s in origin %s&quot;, name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to delete file for database %s in origin %s&quot;, name.utf8().data(), origin.databaseIdentifier().utf8().data());
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -845,33 +845,32 @@
</span><span class="cx"> 
</span><span class="cx">         SQLiteStatement statement(m_database, &quot;DELETE FROM Databases WHERE origin=?&quot;);
</span><span class="cx">         if (statement.prepare() != SQLITE_OK) {
</span><del>-            LOG_ERROR(&quot;Unable to prepare deletion of databases from origin %s from tracker&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to prepare deletion of databases from origin %s from tracker&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+        statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx"> 
</span><span class="cx">         if (!statement.executeCommand()) {
</span><del>-            LOG_ERROR(&quot;Unable to execute deletion of databases from origin %s from tracker&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to execute deletion of databases from origin %s from tracker&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         SQLiteStatement originStatement(m_database, &quot;DELETE FROM Origins WHERE origin=?&quot;);
</span><span class="cx">         if (originStatement.prepare() != SQLITE_OK) {
</span><del>-            LOG_ERROR(&quot;Unable to prepare deletion of origin %s from tracker&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to prepare deletion of origin %s from tracker&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        originStatement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+        originStatement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx"> 
</span><span class="cx">         if (!originStatement.executeCommand()) {
</span><del>-            LOG_ERROR(&quot;Unable to execute deletion of databases from origin %s from tracker&quot;, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+            LOG_ERROR(&quot;Unable to execute deletion of databases from origin %s from tracker&quot;, origin.databaseIdentifier().utf8().data());
</ins><span class="cx">             return false;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         SQLiteFileSystem::deleteEmptyDatabaseDirectory(originPath(origin));
</span><span class="cx"> 
</span><del>-        Ref&lt;SecurityOrigin&gt; protectedOrigin { origin };
</del><span class="cx">         bool isEmpty = true;
</span><span class="cx"> 
</span><span class="cx">         openTrackerDatabase(DontCreateIfDoesNotExist);
</span><span class="lines">@@ -901,7 +900,7 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::isDeletingDatabaseOrOriginFor(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+bool DatabaseTracker::isDeletingDatabaseOrOriginFor(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     // Can't create a database while someone else is deleting it; there's a risk of leaving untracked database debris on the disk.
</span><span class="lines">@@ -908,12 +907,12 @@
</span><span class="cx">     return isDeletingDatabase(origin, name) || isDeletingOrigin(origin);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::recordCreatingDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+void DatabaseTracker::recordCreatingDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> 
</span><span class="cx">     // We don't use HashMap::ensure here to avoid making an isolated copy of the origin every time.
</span><del>-    auto* nameSet = m_beingCreated.get(&amp;origin);
</del><ins>+    auto* nameSet = m_beingCreated.get(origin);
</ins><span class="cx">     if (!nameSet) {
</span><span class="cx">         auto ownedSet = std::make_unique&lt;HashCountedSet&lt;String&gt;&gt;();
</span><span class="cx">         nameSet = ownedSet.get();
</span><span class="lines">@@ -922,13 +921,13 @@
</span><span class="cx">     nameSet-&gt;add(name.isolatedCopy());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::doneCreatingDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+void DatabaseTracker::doneCreatingDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> 
</span><del>-    ASSERT(m_beingCreated.contains(&amp;origin));
</del><ins>+    ASSERT(m_beingCreated.contains(origin));
</ins><span class="cx"> 
</span><del>-    auto iterator = m_beingCreated.find(&amp;origin);
</del><ins>+    auto iterator = m_beingCreated.find(origin);
</ins><span class="cx">     if (iterator == m_beingCreated.end())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -939,27 +938,27 @@
</span><span class="cx">         m_beingCreated.remove(iterator);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::creatingDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+bool DatabaseTracker::creatingDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> 
</span><del>-    auto iterator = m_beingCreated.find(&amp;origin);
</del><ins>+    auto iterator = m_beingCreated.find(origin);
</ins><span class="cx">     return iterator != m_beingCreated.end() &amp;&amp; iterator-&gt;value-&gt;contains(name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::canDeleteDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+bool DatabaseTracker::canDeleteDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     return !creatingDatabase(origin, name) &amp;&amp; !isDeletingDatabase(origin, name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::recordDeletingDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+void DatabaseTracker::recordDeletingDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     ASSERT(canDeleteDatabase(origin, name));
</span><span class="cx"> 
</span><span class="cx">     // We don't use HashMap::ensure here to avoid making an isolated copy of the origin every time.
</span><del>-    auto* nameSet = m_beingDeleted.get(&amp;origin);
</del><ins>+    auto* nameSet = m_beingDeleted.get(origin);
</ins><span class="cx">     if (!nameSet) {
</span><span class="cx">         auto ownedSet = std::make_unique&lt;HashSet&lt;String&gt;&gt;();
</span><span class="cx">         nameSet = ownedSet.get();
</span><span class="lines">@@ -969,12 +968,12 @@
</span><span class="cx">     nameSet-&gt;add(name.isolatedCopy());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::doneDeletingDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+void DatabaseTracker::doneDeletingDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><del>-    ASSERT(m_beingDeleted.contains(&amp;origin));
</del><ins>+    ASSERT(m_beingDeleted.contains(origin));
</ins><span class="cx"> 
</span><del>-    auto iterator = m_beingDeleted.find(&amp;origin);
</del><ins>+    auto iterator = m_beingDeleted.find(origin);
</ins><span class="cx">     if (iterator == m_beingDeleted.end())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><span class="lines">@@ -984,26 +983,26 @@
</span><span class="cx">         m_beingDeleted.remove(iterator);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::isDeletingDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+bool DatabaseTracker::isDeletingDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><del>-    auto* nameSet = m_beingDeleted.get(&amp;origin);
</del><ins>+    auto* nameSet = m_beingDeleted.get(origin);
</ins><span class="cx">     return nameSet &amp;&amp; nameSet-&gt;contains(name);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::canDeleteOrigin(SecurityOrigin&amp; origin)
</del><ins>+bool DatabaseTracker::canDeleteOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><del>-    return !(isDeletingOrigin(origin) || m_beingCreated.get(&amp;origin));
</del><ins>+    return !(isDeletingOrigin(origin) || m_beingCreated.get(origin));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::isDeletingOrigin(SecurityOrigin&amp; origin)
</del><ins>+bool DatabaseTracker::isDeletingOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><del>-    return m_originsBeingDeleted.contains(&amp;origin);
</del><ins>+    return m_originsBeingDeleted.contains(origin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::recordDeletingOrigin(SecurityOrigin&amp; origin)
</del><ins>+void DatabaseTracker::recordDeletingOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     ASSERT(!isDeletingOrigin(origin));
</span><span class="lines">@@ -1010,14 +1009,14 @@
</span><span class="cx">     m_originsBeingDeleted.add(origin.isolatedCopy());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::doneDeletingOrigin(SecurityOrigin&amp; origin)
</del><ins>+void DatabaseTracker::doneDeletingOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">     ASSERT(isDeletingOrigin(origin));
</span><del>-    m_originsBeingDeleted.remove(&amp;origin);
</del><ins>+    m_originsBeingDeleted.remove(origin);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool DatabaseTracker::deleteDatabase(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+bool DatabaseTracker::deleteDatabase(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     {
</span><span class="cx">         LockHolder lockDatabase(m_databaseGuard);
</span><span class="lines">@@ -1034,7 +1033,7 @@
</span><span class="cx"> 
</span><span class="cx">     // We drop the lock here because holding locks during a call to deleteDatabaseFile will deadlock.
</span><span class="cx">     if (!deleteDatabaseFile(origin, name, DeletionMode::Default)) {
</span><del>-        LOG_ERROR(&quot;Unable to delete file for database %s in origin %s&quot;, name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+        LOG_ERROR(&quot;Unable to delete file for database %s in origin %s&quot;, name.utf8().data(), origin.databaseIdentifier().utf8().data());
</ins><span class="cx">         LockHolder lockDatabase(m_databaseGuard);
</span><span class="cx">         doneDeletingDatabase(origin, name);
</span><span class="cx">         return false;
</span><span class="lines">@@ -1044,16 +1043,16 @@
</span><span class="cx"> 
</span><span class="cx">     SQLiteStatement statement(m_database, &quot;DELETE FROM Databases WHERE origin=? AND name=?&quot;);
</span><span class="cx">     if (statement.prepare() != SQLITE_OK) {
</span><del>-        LOG_ERROR(&quot;Unable to prepare deletion of database %s from origin %s from tracker&quot;, name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+        LOG_ERROR(&quot;Unable to prepare deletion of database %s from origin %s from tracker&quot;, name.utf8().data(), origin.databaseIdentifier().utf8().data());
</ins><span class="cx">         doneDeletingDatabase(origin, name);
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+    statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx">     statement.bindText(2, name);
</span><span class="cx"> 
</span><span class="cx">     if (!statement.executeCommand()) {
</span><del>-        LOG_ERROR(&quot;Unable to execute deletion of database %s from origin %s from tracker&quot;, name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+        LOG_ERROR(&quot;Unable to execute deletion of database %s from origin %s from tracker&quot;, name.utf8().data(), origin.databaseIdentifier().utf8().data());
</ins><span class="cx">         doneDeletingDatabase(origin, name);
</span><span class="cx">         return false;
</span><span class="cx">     }
</span><span class="lines">@@ -1070,7 +1069,7 @@
</span><span class="cx"> 
</span><span class="cx"> // deleteDatabaseFile has to release locks between looking up the list of databases to close and closing them.  While this is in progress, the caller
</span><span class="cx"> // is responsible for making sure no new databases are opened in the file to be deleted.
</span><del>-bool DatabaseTracker::deleteDatabaseFile(SecurityOrigin&amp; origin, const String&amp; name, DeletionMode deletionMode)
</del><ins>+bool DatabaseTracker::deleteDatabaseFile(const SecurityOriginData&amp; origin, const String&amp; name, DeletionMode deletionMode)
</ins><span class="cx"> {
</span><span class="cx">     String fullPath = fullPathForDatabase(origin, name, false);
</span><span class="cx">     if (fullPath.isEmpty())
</span><span class="lines">@@ -1091,7 +1090,7 @@
</span><span class="cx">     {
</span><span class="cx">         LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</span><span class="cx">         if (m_openDatabaseMap) {
</span><del>-            if (auto* nameMap = m_openDatabaseMap-&gt;get(&amp;origin)) {
</del><ins>+            if (auto* nameMap = m_openDatabaseMap-&gt;get(origin)) {
</ins><span class="cx">                 if (auto* databaseSet = nameMap-&gt;get(name)) {
</span><span class="cx">                     for (auto&amp; database : *databaseSet)
</span><span class="cx">                         deletedDatabases.append(*database);
</span><span class="lines">@@ -1140,7 +1139,7 @@
</span><span class="cx">     
</span><span class="cx">     // Keep track of which opened databases have been deleted.
</span><span class="cx">     Vector&lt;RefPtr&lt;Database&gt;&gt; deletedDatabases;
</span><del>-    Vector&lt;std::pair&lt;Ref&lt;SecurityOrigin&gt;, Vector&lt;String&gt;&gt;&gt; deletedDatabaseNames;
</del><ins>+    Vector&lt;std::pair&lt;SecurityOriginData, Vector&lt;String&gt;&gt;&gt; deletedDatabaseNames;
</ins><span class="cx"> 
</span><span class="cx">     // Make sure not to hold the m_openDatabaseMapGuard mutex when calling
</span><span class="cx">     // Database::markAsDeletedAndClose(), since that can cause a deadlock
</span><span class="lines">@@ -1149,7 +1148,7 @@
</span><span class="cx">         LockHolder openDatabaseMapLock(m_openDatabaseMapGuard);
</span><span class="cx">         if (m_openDatabaseMap) {
</span><span class="cx">             for (auto&amp; openDatabase : *m_openDatabaseMap) {
</span><del>-                auto&amp; origin = *openDatabase.key;
</del><ins>+                auto&amp; origin = openDatabase.key;
</ins><span class="cx">                 DatabaseNameMap* databaseNameMap = openDatabase.value;
</span><span class="cx">                 Vector&lt;String&gt; deletedDatabaseNamesForThisOrigin;
</span><span class="cx"> 
</span><span class="lines">@@ -1160,7 +1159,7 @@
</span><span class="cx">                     String databaseFileName;
</span><span class="cx">                     SQLiteStatement statement(m_database, &quot;SELECT path FROM Databases WHERE origin=? AND name=?;&quot;);
</span><span class="cx">                     if (statement.prepare() == SQLITE_OK) {
</span><del>-                        statement.bindText(1, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier());
</del><ins>+                        statement.bindText(1, origin.databaseIdentifier());
</ins><span class="cx">                         statement.bindText(2, databaseName);
</span><span class="cx">                         if (statement.step() == SQLITE_ROW)
</span><span class="cx">                             databaseFileName = statement.getColumnText(0);
</span><span class="lines">@@ -1276,7 +1275,7 @@
</span><span class="cx">     return mutex;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-using NotificationQueue = Vector&lt;std::pair&lt;Ref&lt;SecurityOrigin&gt;, String&gt;&gt;;
</del><ins>+using NotificationQueue = Vector&lt;std::pair&lt;SecurityOriginData, String&gt;&gt;;
</ins><span class="cx"> 
</span><span class="cx"> static NotificationQueue&amp; notificationQueue()
</span><span class="cx"> {
</span><span class="lines">@@ -1284,7 +1283,7 @@
</span><span class="cx">     return queue;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void DatabaseTracker::scheduleNotifyDatabaseChanged(SecurityOrigin&amp; origin, const String&amp; name)
</del><ins>+void DatabaseTracker::scheduleNotifyDatabaseChanged(const SecurityOriginData&amp; origin, const String&amp; name)
</ins><span class="cx"> {
</span><span class="cx">     LockHolder locker(notificationMutex());
</span><span class="cx">     notificationQueue().append(std::make_pair(origin.isolatedCopy(), name.isolatedCopy()));
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseDatabaseTrackerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/DatabaseTracker.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;DatabaseDetails.h&quot;
</span><span class="cx"> #include &quot;ExceptionOr.h&quot;
</span><span class="cx"> #include &quot;SQLiteDatabase.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &quot;SecurityOriginHash.h&quot;
</span><span class="cx"> #include &lt;wtf/HashCountedSet.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="lines">@@ -44,6 +45,7 @@
</span><span class="cx"> class DatabaseManagerClient;
</span><span class="cx"> class OriginLock;
</span><span class="cx"> class SecurityOrigin;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> enum class CurrentQueryBehavior { Interrupt, RunToCompletion };
</span><span class="cx"> 
</span><span class="lines">@@ -66,8 +68,8 @@
</span><span class="cx">     ExceptionOr&lt;void&gt; canEstablishDatabase(DatabaseContext&amp;, const String&amp; name, unsigned estimatedSize);
</span><span class="cx">     ExceptionOr&lt;void&gt; retryCanEstablishDatabase(DatabaseContext&amp;, const String&amp; name, unsigned estimatedSize);
</span><span class="cx"> 
</span><del>-    void setDatabaseDetails(SecurityOrigin&amp;, const String&amp; name, const String&amp; displayName, unsigned estimatedSize);
-    String fullPathForDatabase(SecurityOrigin&amp;, const String&amp; name, bool createIfDoesNotExist);
</del><ins>+    void setDatabaseDetails(const SecurityOriginData&amp;, const String&amp; name, const String&amp; displayName, unsigned estimatedSize);
+    String fullPathForDatabase(const SecurityOriginData&amp;, const String&amp; name, bool createIfDoesNotExist);
</ins><span class="cx"> 
</span><span class="cx">     void addOpenDatabase(Database&amp;);
</span><span class="cx">     void removeOpenDatabase(Database&amp;);
</span><span class="lines">@@ -76,20 +78,20 @@
</span><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void closeAllDatabases(CurrentQueryBehavior = CurrentQueryBehavior::RunToCompletion);
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT Vector&lt;Ref&lt;SecurityOrigin&gt;&gt; origins();
-    WEBCORE_EXPORT Vector&lt;String&gt; databaseNames(SecurityOrigin&amp;);
</del><ins>+    WEBCORE_EXPORT Vector&lt;SecurityOriginData&gt; origins();
+    WEBCORE_EXPORT Vector&lt;String&gt; databaseNames(const SecurityOriginData&amp;);
</ins><span class="cx"> 
</span><del>-    DatabaseDetails detailsForNameAndOrigin(const String&amp;, SecurityOrigin&amp;);
</del><ins>+    DatabaseDetails detailsForNameAndOrigin(const String&amp;, const SecurityOriginData&amp;);
</ins><span class="cx"> 
</span><del>-    WEBCORE_EXPORT unsigned long long usage(SecurityOrigin&amp;);
-    WEBCORE_EXPORT unsigned long long quota(SecurityOrigin&amp;);
-    WEBCORE_EXPORT void setQuota(SecurityOrigin&amp;, unsigned long long);
-    RefPtr&lt;OriginLock&gt; originLockFor(SecurityOrigin&amp;);
</del><ins>+    WEBCORE_EXPORT unsigned long long usage(const SecurityOriginData&amp;);
+    WEBCORE_EXPORT unsigned long long quota(const SecurityOriginData&amp;);
+    WEBCORE_EXPORT void setQuota(const SecurityOriginData&amp;, unsigned long long);
+    RefPtr&lt;OriginLock&gt; originLockFor(const SecurityOriginData&amp;);
</ins><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT void deleteAllDatabasesImmediately();
</span><span class="cx">     WEBCORE_EXPORT void deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
</span><del>-    WEBCORE_EXPORT bool deleteOrigin(SecurityOrigin&amp;);
-    WEBCORE_EXPORT bool deleteDatabase(SecurityOrigin&amp;, const String&amp; name);
</del><ins>+    WEBCORE_EXPORT bool deleteOrigin(const SecurityOriginData&amp;);
+    WEBCORE_EXPORT bool deleteDatabase(const SecurityOriginData&amp;, const String&amp; name);
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     WEBCORE_EXPORT void removeDeletedOpenedDatabases();
</span><span class="lines">@@ -107,7 +109,7 @@
</span><span class="cx">     void setClient(DatabaseManagerClient*);
</span><span class="cx"> 
</span><span class="cx">     // From a secondary thread, must be thread safe with its data
</span><del>-    void scheduleNotifyDatabaseChanged(SecurityOrigin&amp;, const String&amp; name);
</del><ins>+    void scheduleNotifyDatabaseChanged(const SecurityOriginData&amp;, const String&amp; name);
</ins><span class="cx"> 
</span><span class="cx">     void doneCreatingDatabase(Database&amp;);
</span><span class="cx"> 
</span><span class="lines">@@ -114,12 +116,12 @@
</span><span class="cx"> private:
</span><span class="cx">     explicit DatabaseTracker(const String&amp; databasePath);
</span><span class="cx"> 
</span><del>-    ExceptionOr&lt;void&gt; hasAdequateQuotaForOrigin(SecurityOrigin&amp;, unsigned estimatedSize);
</del><ins>+    ExceptionOr&lt;void&gt; hasAdequateQuotaForOrigin(const SecurityOriginData&amp;, unsigned estimatedSize);
</ins><span class="cx"> 
</span><del>-    bool hasEntryForOriginNoLock(SecurityOrigin&amp;);
-    String fullPathForDatabaseNoLock(SecurityOrigin&amp;, const String&amp; name, bool createIfDoesNotExist);
-    Vector&lt;String&gt; databaseNamesNoLock(SecurityOrigin&amp;);
-    unsigned long long quotaNoLock(SecurityOrigin&amp;);
</del><ins>+    bool hasEntryForOriginNoLock(const SecurityOriginData&amp;);
+    String fullPathForDatabaseNoLock(const SecurityOriginData&amp;, const String&amp; name, bool createIfDoesNotExist);
+    Vector&lt;String&gt; databaseNamesNoLock(const SecurityOriginData&amp;);
+    unsigned long long quotaNoLock(const SecurityOriginData&amp;);
</ins><span class="cx"> 
</span><span class="cx">     String trackerDatabasePath() const;
</span><span class="cx"> 
</span><span class="lines">@@ -129,11 +131,11 @@
</span><span class="cx">     };
</span><span class="cx">     void openTrackerDatabase(TrackerCreationAction);
</span><span class="cx"> 
</span><del>-    String originPath(SecurityOrigin&amp;) const;
</del><ins>+    String originPath(const SecurityOriginData&amp;) const;
</ins><span class="cx"> 
</span><del>-    bool hasEntryForDatabase(SecurityOrigin&amp;, const String&amp; databaseIdentifier);
</del><ins>+    bool hasEntryForDatabase(const SecurityOriginData&amp;, const String&amp; databaseIdentifier);
</ins><span class="cx"> 
</span><del>-    bool addDatabase(SecurityOrigin&amp;, const String&amp; name, const String&amp; path);
</del><ins>+    bool addDatabase(const SecurityOriginData&amp;, const String&amp; name, const String&amp; path);
</ins><span class="cx"> 
</span><span class="cx">     enum class DeletionMode {
</span><span class="cx">         Immediate,
</span><span class="lines">@@ -147,14 +149,14 @@
</span><span class="cx"> #endif
</span><span class="cx">     };
</span><span class="cx"> 
</span><del>-    bool deleteOrigin(SecurityOrigin&amp;, DeletionMode);
-    bool deleteDatabaseFile(SecurityOrigin&amp;, const String&amp; name, DeletionMode);
</del><ins>+    bool deleteOrigin(const SecurityOriginData&amp;, DeletionMode);
+    bool deleteDatabaseFile(const SecurityOriginData&amp;, const String&amp; name, DeletionMode);
</ins><span class="cx"> 
</span><del>-    void deleteOriginLockFor(SecurityOrigin&amp;);
</del><ins>+    void deleteOriginLockFor(const SecurityOriginData&amp;);
</ins><span class="cx"> 
</span><span class="cx">     using DatabaseSet = HashSet&lt;Database*&gt;;
</span><span class="cx">     using DatabaseNameMap = HashMap&lt;String, DatabaseSet*&gt;;
</span><del>-    using DatabaseOriginMap = HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, DatabaseNameMap*&gt;;
</del><ins>+    using DatabaseOriginMap = HashMap&lt;SecurityOriginData, DatabaseNameMap*&gt;;
</ins><span class="cx"> 
</span><span class="cx">     Lock m_openDatabaseMapGuard;
</span><span class="cx">     mutable std::unique_ptr&lt;DatabaseOriginMap&gt; m_openDatabaseMap;
</span><span class="lines">@@ -170,21 +172,21 @@
</span><span class="cx"> 
</span><span class="cx">     DatabaseManagerClient* m_client { nullptr };
</span><span class="cx"> 
</span><del>-    HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, std::unique_ptr&lt;HashCountedSet&lt;String&gt;&gt;&gt; m_beingCreated;
-    HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, std::unique_ptr&lt;HashSet&lt;String&gt;&gt;&gt; m_beingDeleted;
-    HashSet&lt;RefPtr&lt;SecurityOrigin&gt;&gt; m_originsBeingDeleted;
-    bool isDeletingDatabaseOrOriginFor(SecurityOrigin&amp;, const String&amp; name);
-    void recordCreatingDatabase(SecurityOrigin&amp;, const String&amp; name);
-    void doneCreatingDatabase(SecurityOrigin&amp;, const String&amp; name);
-    bool creatingDatabase(SecurityOrigin&amp;, const String&amp; name);
-    bool canDeleteDatabase(SecurityOrigin&amp;, const String&amp; name);
-    void recordDeletingDatabase(SecurityOrigin&amp;, const String&amp; name);
-    void doneDeletingDatabase(SecurityOrigin&amp;, const String&amp; name);
-    bool isDeletingDatabase(SecurityOrigin&amp;, const String&amp; name);
-    bool canDeleteOrigin(SecurityOrigin&amp;);
-    bool isDeletingOrigin(SecurityOrigin&amp;);
-    void recordDeletingOrigin(SecurityOrigin&amp;);
-    void doneDeletingOrigin(SecurityOrigin&amp;);
</del><ins>+    HashMap&lt;SecurityOriginData, std::unique_ptr&lt;HashCountedSet&lt;String&gt;&gt;&gt; m_beingCreated;
+    HashMap&lt;SecurityOriginData, std::unique_ptr&lt;HashSet&lt;String&gt;&gt;&gt; m_beingDeleted;
+    HashSet&lt;SecurityOriginData&gt; m_originsBeingDeleted;
+    bool isDeletingDatabaseOrOriginFor(const SecurityOriginData&amp;, const String&amp; name);
+    void recordCreatingDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    void doneCreatingDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    bool creatingDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    bool canDeleteDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    void recordDeletingDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    void doneDeletingDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    bool isDeletingDatabase(const SecurityOriginData&amp;, const String&amp; name);
+    bool canDeleteOrigin(const SecurityOriginData&amp;);
+    bool isDeletingOrigin(const SecurityOriginData&amp;);
+    void recordDeletingOrigin(const SecurityOriginData&amp;);
+    void doneDeletingOrigin(const SecurityOriginData&amp;);
</ins><span class="cx"> 
</span><span class="cx">     static void scheduleForNotification();
</span><span class="cx">     static void notifyDatabasesChanged();
</span></span></pre></div>
<a id="trunkSourceWebCoreModuleswebdatabaseSQLTransactionCoordinatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/Modules/webdatabase/SQLTransactionCoordinator.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -43,7 +43,7 @@
</span><span class="cx"> 
</span><span class="cx"> static String getDatabaseIdentifier(SQLTransaction&amp; transaction)
</span><span class="cx"> {
</span><del>-    return SecurityOriginData::fromSecurityOrigin(transaction.database().securityOrigin()).databaseIdentifier();
</del><ins>+    return transaction.database().securityOrigin().databaseIdentifier();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> SQLTransactionCoordinator::SQLTransactionCoordinator()
</span></span></pre></div>
<a id="trunkSourceWebCoreinspectorInspectorDOMStorageAgentcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/inspector/InspectorDOMStorageAgent.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -42,6 +42,7 @@
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;PageGroup.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &quot;Storage.h&quot;
</span><span class="cx"> #include &quot;StorageNamespace.h&quot;
</span><span class="cx"> #include &quot;StorageNamespaceProvider.h&quot;
</span><span class="lines">@@ -196,7 +197,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (!isLocalStorage)
</span><del>-        return m_pageAgent-&gt;page().sessionStorage()-&gt;storageArea(targetFrame-&gt;document()-&gt;securityOrigin());
</del><ins>+        return m_pageAgent-&gt;page().sessionStorage()-&gt;storageArea(SecurityOriginData::fromSecurityOrigin(*targetFrame-&gt;document()-&gt;securityOrigin()));
</ins><span class="cx">     return m_pageAgent-&gt;page().storageNamespaceProvider().localStorageArea(*targetFrame-&gt;document());
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreloaderEmptyClientscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/loader/EmptyClients.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/loader/EmptyClients.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/loader/EmptyClients.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -101,11 +101,11 @@
</span><span class="cx">         bool canAccessStorage(Frame*) override { return false; }
</span><span class="cx">         StorageType storageType() const override { return LocalStorage; }
</span><span class="cx">         size_t memoryBytesUsedByCache() override { return 0; }
</span><del>-        SecurityOrigin&amp; securityOrigin() override { return SecurityOrigin::createUnique(); }
</del><ins>+        SecurityOriginData securityOrigin() const override { return { }; }
</ins><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     struct EmptyStorageNamespace final : public StorageNamespace {
</span><del>-        RefPtr&lt;StorageArea&gt; storageArea(RefPtr&lt;SecurityOrigin&gt;&amp;&amp;) override { return adoptRef(new EmptyStorageArea); }
</del><ins>+        RefPtr&lt;StorageArea&gt; storageArea(const SecurityOriginData&amp;) override { return adoptRef(new EmptyStorageArea); }
</ins><span class="cx">         RefPtr&lt;StorageNamespace&gt; copy(Page*) override { return adoptRef(new EmptyStorageNamespace); }
</span><span class="cx">     };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageDOMWindowcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/DOMWindow.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/DOMWindow.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/page/DOMWindow.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -87,6 +87,7 @@
</span><span class="cx"> #include &quot;Screen.h&quot;
</span><span class="cx"> #include &quot;ScriptController.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &quot;SecurityPolicy.h&quot;
</span><span class="cx"> #include &quot;SerializedScriptValue.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><span class="lines">@@ -839,7 +840,7 @@
</span><span class="cx">     if (!page)
</span><span class="cx">         return nullptr;
</span><span class="cx"> 
</span><del>-    auto storageArea = page-&gt;sessionStorage()-&gt;storageArea(document-&gt;securityOrigin());
</del><ins>+    auto storageArea = page-&gt;sessionStorage()-&gt;storageArea(SecurityOriginData::fromSecurityOrigin(*document-&gt;securityOrigin()));
</ins><span class="cx">     if (!storageArea-&gt;canAccessStorage(m_frame))
</span><span class="cx">         return Exception { SECURITY_ERR };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageSecurityOrigincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/SecurityOrigin.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/SecurityOrigin.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/page/SecurityOrigin.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -42,8 +42,6 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-const int MaxAllowedPort = std::numeric_limits&lt;uint16_t&gt;::max();
-
</del><span class="cx"> static bool schemeRequiresHost(const URL&amp; url)
</span><span class="cx"> {
</span><span class="cx">     // We expect URLs with these schemes to have authority components. If the
</span><span class="lines">@@ -488,52 +486,6 @@
</span><span class="cx">     return SecurityOrigin::create(URL(URL(), originString));
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static const char separatorCharacter = '_';
-
-RefPtr&lt;SecurityOrigin&gt; SecurityOrigin::maybeCreateFromDatabaseIdentifier(const String&amp; databaseIdentifier)
-{
-    // Make sure there's a first separator
-    size_t separator1 = databaseIdentifier.find(separatorCharacter);
-    if (separator1 == notFound)
-        return nullptr;
-
-    // Make sure there's a second separator
-    size_t separator2 = databaseIdentifier.reverseFind(separatorCharacter);
-    if (separator2 == notFound)
-        return nullptr;
-
-    // Ensure there were at least 2 separator characters. Some hostnames on intranets have
-    // underscores in them, so we'll assume that any additional underscores are part of the host.
-    if (separator1 == separator2)
-        return nullptr;
-
-    // Make sure the port section is a valid port number or doesn't exist
-    bool portOkay;
-    int port = databaseIdentifier.right(databaseIdentifier.length() - separator2 - 1).toInt(&amp;portOkay);
-    bool portAbsent = (separator2 == databaseIdentifier.length() - 1);
-    if (!(portOkay || portAbsent))
-        return nullptr;
-
-    if (port &lt; 0 || port &gt; MaxAllowedPort)
-        return nullptr;
-
-    // Split out the 3 sections of data
-    String protocol = databaseIdentifier.substring(0, separator1);
-    String host = databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1);
-    
-    host = decodeURLEscapeSequences(host);
-    auto origin = create(URL(URL(), protocol + &quot;://&quot; + host + &quot;/&quot;));
-    origin-&gt;m_port = port;
-    return WTFMove(origin);
-}
-
-Ref&lt;SecurityOrigin&gt; SecurityOrigin::createFromDatabaseIdentifier(const String&amp; databaseIdentifier)
-{
-    if (RefPtr&lt;SecurityOrigin&gt; origin = maybeCreateFromDatabaseIdentifier(databaseIdentifier))
-        return origin.releaseNonNull();
-    return create(URL());
-}
-
</del><span class="cx"> Ref&lt;SecurityOrigin&gt; SecurityOrigin::create(const String&amp; protocol, const String&amp; host, Optional&lt;uint16_t&gt; port)
</span><span class="cx"> {
</span><span class="cx">     String decodedHost = decodeURLEscapeSequences(host);
</span></span></pre></div>
<a id="trunkSourceWebCorepageSecurityOriginh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/SecurityOrigin.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/SecurityOrigin.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/page/SecurityOrigin.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -52,12 +52,6 @@
</span><span class="cx">     WEBCORE_EXPORT static Ref&lt;SecurityOrigin&gt; create(const URL&amp;);
</span><span class="cx">     static Ref&lt;SecurityOrigin&gt; createUnique();
</span><span class="cx"> 
</span><del>-    WEBCORE_EXPORT static Ref&lt;SecurityOrigin&gt; createFromDatabaseIdentifier(const String&amp;);
-    // Alternate form of createFromDatabaseIdentifier that returns a nullptr on failure, instead of an empty origin.
-    // FIXME: Many users of createFromDatabaseIdentifier seem to expect maybeCreateFromDatabaseIdentifier behavior,
-    // but they aren't getting it so they might be buggy.
-    WEBCORE_EXPORT static RefPtr&lt;SecurityOrigin&gt; maybeCreateFromDatabaseIdentifier(const String&amp;);
-
</del><span class="cx">     WEBCORE_EXPORT static Ref&lt;SecurityOrigin&gt; createFromString(const String&amp;);
</span><span class="cx">     WEBCORE_EXPORT static Ref&lt;SecurityOrigin&gt; create(const String&amp; protocol, const String&amp; host, Optional&lt;uint16_t&gt; port);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepageSecurityOriginDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/SecurityOriginData.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/SecurityOriginData.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/page/SecurityOriginData.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -97,6 +97,36 @@
</span><span class="cx">     return stringBuilder.toString();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+Optional&lt;SecurityOriginData&gt; SecurityOriginData::fromDatabaseIdentifier(const String&amp; databaseIdentifier)
+{
+    // Make sure there's a first separator
+    size_t separator1 = databaseIdentifier.find(separatorCharacter);
+    if (separator1 == notFound)
+        return Nullopt;
+    
+    // Make sure there's a second separator
+    size_t separator2 = databaseIdentifier.reverseFind(separatorCharacter);
+    if (separator2 == notFound)
+        return Nullopt;
+    
+    // Ensure there were at least 2 separator characters. Some hostnames on intranets have
+    // underscores in them, so we'll assume that any additional underscores are part of the host.
+    if (separator1 == separator2)
+        return Nullopt;
+    
+    // Make sure the port section is a valid port number or doesn't exist
+    bool portOkay;
+    int port = databaseIdentifier.right(databaseIdentifier.length() - separator2 - 1).toInt(&amp;portOkay);
+    bool portAbsent = (separator2 == databaseIdentifier.length() - 1);
+    if (!(portOkay || portAbsent))
+        return Nullopt;
+    
+    if (port &lt; 0 || port &gt; std::numeric_limits&lt;uint16_t&gt;::max())
+        return Nullopt;
+    
+    return SecurityOriginData {databaseIdentifier.substring(0, separator1), databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1), static_cast&lt;uint16_t&gt;(port)};
+}
+
</ins><span class="cx"> SecurityOriginData SecurityOriginData::isolatedCopy() const
</span><span class="cx"> {
</span><span class="cx">     SecurityOriginData result;
</span></span></pre></div>
<a id="trunkSourceWebCorepageSecurityOriginDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/SecurityOriginData.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/SecurityOriginData.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/page/SecurityOriginData.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -34,6 +34,12 @@
</span><span class="cx"> 
</span><span class="cx"> struct SecurityOriginData {
</span><span class="cx">     SecurityOriginData() = default;
</span><ins>+    SecurityOriginData(const String&amp; protocol, const String&amp; host, Optional&lt;uint16_t&gt; port)
+        : protocol(protocol)
+        , host(host)
+        , port(port)
+    {
+    }
</ins><span class="cx">     SecurityOriginData(WTF::HashTableDeletedValueType)
</span><span class="cx">         : protocol(WTF::HashTableDeletedValue)
</span><span class="cx">     {
</span><span class="lines">@@ -56,6 +62,7 @@
</span><span class="cx">     // Serialize the security origin to a string that could be used as part of
</span><span class="cx">     // file names. This format should be used in storage APIs only.
</span><span class="cx">     WEBCORE_EXPORT String databaseIdentifier() const;
</span><ins>+    WEBCORE_EXPORT static Optional&lt;SecurityOriginData&gt; fromDatabaseIdentifier(const String&amp;);
</ins><span class="cx">     
</span><span class="cx">     template&lt;class Encoder&gt; void encode(Encoder&amp;) const;
</span><span class="cx">     template&lt;class Decoder&gt; static bool decode(Decoder&amp;, SecurityOriginData&amp;);
</span></span></pre></div>
<a id="trunkSourceWebCorestorageStorageAreah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/StorageArea.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/StorageArea.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/storage/StorageArea.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx"> class StorageSyncManager;
</span><span class="cx"> 
</span><span class="cx"> enum StorageType { LocalStorage, SessionStorage };
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> class StorageArea : public RefCounted&lt;StorageArea&gt; {
</span><span class="cx"> public:
</span><span class="lines">@@ -58,7 +59,7 @@
</span><span class="cx">     virtual void decrementAccessCount() { }
</span><span class="cx">     virtual void closeDatabaseIfIdle() { }
</span><span class="cx"> 
</span><del>-    virtual SecurityOrigin&amp; securityOrigin() = 0;
</del><ins>+    virtual SecurityOriginData securityOrigin() const = 0;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorestorageStorageEventDispatchercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/StorageEventDispatcher.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/StorageEventDispatcher.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/storage/StorageEventDispatcher.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -34,11 +34,12 @@
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;PageGroup.h&quot;
</span><span class="cx"> #include &quot;SecurityOrigin.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &quot;StorageEvent.h&quot;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-void StorageEventDispatcher::dispatchSessionStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, SecurityOrigin* securityOrigin, Frame* sourceFrame)
</del><ins>+void StorageEventDispatcher::dispatchSessionStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const SecurityOriginData&amp; securityOrigin, Frame* sourceFrame)
</ins><span class="cx"> {
</span><span class="cx">     Page* page = sourceFrame-&gt;page();
</span><span class="cx">     if (!page)
</span><span class="lines">@@ -48,7 +49,7 @@
</span><span class="cx"> 
</span><span class="cx">     // Send events only to our page.
</span><span class="cx">     for (Frame* frame = &amp;page-&gt;mainFrame(); frame; frame = frame-&gt;tree().traverseNext()) {
</span><del>-        if (sourceFrame != frame &amp;&amp; frame-&gt;document()-&gt;securityOrigin()-&gt;equal(securityOrigin))
</del><ins>+        if (sourceFrame != frame &amp;&amp; frame-&gt;document()-&gt;securityOrigin()-&gt;equal(securityOrigin.securityOrigin().ptr()))
</ins><span class="cx">             frames.append(frame);
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -55,7 +56,7 @@
</span><span class="cx">     dispatchSessionStorageEventsToFrames(*page, frames, key, oldValue, newValue, sourceFrame-&gt;document()-&gt;url(), securityOrigin);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void StorageEventDispatcher::dispatchLocalStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, SecurityOrigin* securityOrigin, Frame* sourceFrame)
</del><ins>+void StorageEventDispatcher::dispatchLocalStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const SecurityOriginData&amp; securityOrigin, Frame* sourceFrame)
</ins><span class="cx"> {
</span><span class="cx">     Page* page = sourceFrame-&gt;page();
</span><span class="cx">     if (!page)
</span><span class="lines">@@ -66,7 +67,7 @@
</span><span class="cx">     // Send events to every page.
</span><span class="cx">     for (auto&amp; pageInGroup : page-&gt;group().pages()) {
</span><span class="cx">         for (Frame* frame = &amp;pageInGroup-&gt;mainFrame(); frame; frame = frame-&gt;tree().traverseNext()) {
</span><del>-            if (sourceFrame != frame &amp;&amp; frame-&gt;document()-&gt;securityOrigin()-&gt;equal(securityOrigin))
</del><ins>+            if (sourceFrame != frame &amp;&amp; frame-&gt;document()-&gt;securityOrigin()-&gt;equal(securityOrigin.securityOrigin().ptr()))
</ins><span class="cx">                 frames.append(frame);
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -74,9 +75,9 @@
</span><span class="cx">     dispatchLocalStorageEventsToFrames(page-&gt;group(), frames, key, oldValue, newValue, sourceFrame-&gt;document()-&gt;url(), securityOrigin);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void StorageEventDispatcher::dispatchSessionStorageEventsToFrames(Page&amp; page, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, SecurityOrigin* securityOrigin)
</del><ins>+void StorageEventDispatcher::dispatchSessionStorageEventsToFrames(Page&amp; page, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, const SecurityOriginData&amp; securityOrigin)
</ins><span class="cx"> {
</span><del>-    InspectorInstrumentation::didDispatchDOMStorageEvent(page, key, oldValue, newValue, SessionStorage, securityOrigin);
</del><ins>+    InspectorInstrumentation::didDispatchDOMStorageEvent(page, key, oldValue, newValue, SessionStorage, securityOrigin.securityOrigin().ptr());
</ins><span class="cx"> 
</span><span class="cx">     for (auto&amp; frame : frames) {
</span><span class="cx">         auto result = frame-&gt;document()-&gt;domWindow()-&gt;sessionStorage();
</span><span class="lines">@@ -85,10 +86,10 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void StorageEventDispatcher::dispatchLocalStorageEventsToFrames(PageGroup&amp; pageGroup, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, SecurityOrigin* securityOrigin)
</del><ins>+void StorageEventDispatcher::dispatchLocalStorageEventsToFrames(PageGroup&amp; pageGroup, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, const SecurityOriginData&amp; securityOrigin)
</ins><span class="cx"> {
</span><span class="cx">     for (auto&amp; page : pageGroup.pages())
</span><del>-        InspectorInstrumentation::didDispatchDOMStorageEvent(*page, key, oldValue, newValue, LocalStorage, securityOrigin);
</del><ins>+        InspectorInstrumentation::didDispatchDOMStorageEvent(*page, key, oldValue, newValue, LocalStorage, securityOrigin.securityOrigin().ptr());
</ins><span class="cx"> 
</span><span class="cx">     for (auto&amp; frame : frames) {
</span><span class="cx">         auto result = frame-&gt;document()-&gt;domWindow()-&gt;localStorage();
</span></span></pre></div>
<a id="trunkSourceWebCorestorageStorageEventDispatcherh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/StorageEventDispatcher.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/StorageEventDispatcher.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/storage/StorageEventDispatcher.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -37,15 +37,15 @@
</span><span class="cx"> class Frame;
</span><span class="cx"> class Page;
</span><span class="cx"> class PageGroup;
</span><del>-class SecurityOrigin;
</del><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> class StorageEventDispatcher {
</span><span class="cx"> public:
</span><del>-    WEBCORE_EXPORT static void dispatchSessionStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, SecurityOrigin*, Frame* sourceFrame);
-    WEBCORE_EXPORT static void dispatchLocalStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, SecurityOrigin*, Frame* sourceFrame);
</del><ins>+    WEBCORE_EXPORT static void dispatchSessionStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const SecurityOriginData&amp;, Frame* sourceFrame);
+    WEBCORE_EXPORT static void dispatchLocalStorageEvents(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const SecurityOriginData&amp;, Frame* sourceFrame);
</ins><span class="cx"> 
</span><del>-    WEBCORE_EXPORT static void dispatchSessionStorageEventsToFrames(Page&amp;, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, SecurityOrigin*);
-    WEBCORE_EXPORT static void dispatchLocalStorageEventsToFrames(PageGroup&amp;, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, SecurityOrigin*);
</del><ins>+    WEBCORE_EXPORT static void dispatchSessionStorageEventsToFrames(Page&amp;, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, const SecurityOriginData&amp;);
+    WEBCORE_EXPORT static void dispatchLocalStorageEventsToFrames(PageGroup&amp;, const Vector&lt;RefPtr&lt;Frame&gt;&gt;&amp; frames, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; url, const SecurityOriginData&amp;);
</ins><span class="cx"> private:
</span><span class="cx">     // Do not instantiate.
</span><span class="cx">     StorageEventDispatcher();
</span></span></pre></div>
<a id="trunkSourceWebCorestorageStorageNamespaceh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/StorageNamespace.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/StorageNamespace.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/storage/StorageNamespace.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -31,13 +31,13 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> class Page;
</span><del>-class SecurityOrigin;
</del><span class="cx"> class StorageArea;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> 
</span><span class="cx"> class StorageNamespace : public RefCounted&lt;StorageNamespace&gt; {
</span><span class="cx"> public:
</span><span class="cx">     virtual ~StorageNamespace() { }
</span><del>-    virtual RefPtr&lt;StorageArea&gt; storageArea(RefPtr&lt;SecurityOrigin&gt;&amp;&amp;) = 0;
</del><ins>+    virtual RefPtr&lt;StorageArea&gt; storageArea(const SecurityOriginData&amp;) = 0;
</ins><span class="cx">     virtual RefPtr&lt;StorageNamespace&gt; copy(Page* newPage) = 0;
</span><span class="cx"> };
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorestorageStorageNamespaceProvidercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/storage/StorageNamespaceProvider.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/storage/StorageNamespaceProvider.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebCore/storage/StorageNamespaceProvider.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;StorageNamespaceProvider.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Document.h&quot;
</span><ins>+#include &quot;SecurityOriginData.h&quot;
</ins><span class="cx"> #include &quot;StorageArea.h&quot;
</span><span class="cx"> #include &quot;StorageNamespace.h&quot;
</span><span class="cx"> 
</span><span class="lines">@@ -62,7 +63,7 @@
</span><span class="cx"> {
</span><span class="cx">     auto&amp; storageNamespace = document.securityOrigin()-&gt;canAccessLocalStorage(document.topOrigin()) ? localStorageNamespace() : transientLocalStorageNamespace(*document.topOrigin());
</span><span class="cx"> 
</span><del>-    return storageNamespace.storageArea(document.securityOrigin());
</del><ins>+    return storageNamespace.storageArea(SecurityOriginData::fromSecurityOrigin(*document.securityOrigin()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> StorageNamespace&amp; StorageNamespaceProvider::localStorageNamespace()
</span></span></pre></div>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/ChangeLog        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2016-11-14  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
+        https://bugs.webkit.org/show_bug.cgi?id=164720
+
+        Reviewed by Brady Eidson.
+
+        * Storage/StorageAreaImpl.cpp:
+        (WebKit::StorageAreaImpl::StorageAreaImpl):
+        (WebKit::StorageAreaImpl::create):
+        (WebKit::StorageAreaImpl::dispatchStorageEvent):
+        * Storage/StorageAreaImpl.h:
+        * Storage/StorageNamespaceImpl.cpp:
+        (WebKit::StorageNamespaceImpl::storageArea):
+        (WebKit::StorageNamespaceImpl::clearOriginForDeletion):
+        * Storage/StorageNamespaceImpl.h:
+        * Storage/StorageTracker.cpp:
+        (WebKit::StorageTracker::origins):
+        (WebKit::StorageTracker::deleteOriginWithIdentifier):
+        (WebKit::StorageTracker::deleteOrigin):
+        * Storage/StorageTracker.h:
+        * Storage/WebStorageNamespaceProvider.cpp:
+        (WebKit::WebStorageNamespaceProvider::clearLocalStorageForOrigin):
+        * Storage/WebStorageNamespaceProvider.h:
+
</ins><span class="cx"> 2016-11-11  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [WK2] autocorrect and autocapitalize attributes do not work in contenteditable elements
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageAreaImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageAreaImpl.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageAreaImpl.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/StorageAreaImpl.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -44,9 +44,9 @@
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-inline StorageAreaImpl::StorageAreaImpl(StorageType storageType, RefPtr&lt;SecurityOrigin&gt;&amp;&amp; origin, RefPtr&lt;StorageSyncManager&gt;&amp;&amp; syncManager, unsigned quota)
</del><ins>+inline StorageAreaImpl::StorageAreaImpl(StorageType storageType, const SecurityOriginData&amp; origin, RefPtr&lt;StorageSyncManager&gt;&amp;&amp; syncManager, unsigned quota)
</ins><span class="cx">     : m_storageType(storageType)
</span><del>-    , m_securityOrigin(WTFMove(origin))
</del><ins>+    , m_securityOrigin(origin)
</ins><span class="cx">     , m_storageMap(StorageMap::create(quota))
</span><span class="cx">     , m_storageSyncManager(WTFMove(syncManager))
</span><span class="cx"> #ifndef NDEBUG
</span><span class="lines">@@ -56,7 +56,6 @@
</span><span class="cx">     , m_closeDatabaseTimer(*this, &amp;StorageAreaImpl::closeDatabaseTimerFired)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    ASSERT(m_securityOrigin);
</del><span class="cx">     ASSERT(m_storageMap);
</span><span class="cx">     
</span><span class="cx">     // Accessing the shared global StorageTracker when a StorageArea is created 
</span><span class="lines">@@ -64,13 +63,13 @@
</span><span class="cx">     StorageTracker::tracker();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;StorageAreaImpl&gt; StorageAreaImpl::create(StorageType storageType, RefPtr&lt;SecurityOrigin&gt;&amp;&amp; origin, RefPtr&lt;StorageSyncManager&gt;&amp;&amp; syncManager, unsigned quota)
</del><ins>+Ref&lt;StorageAreaImpl&gt; StorageAreaImpl::create(StorageType storageType, const SecurityOriginData&amp; origin, RefPtr&lt;StorageSyncManager&gt;&amp;&amp; syncManager, unsigned quota)
</ins><span class="cx"> {
</span><del>-    Ref&lt;StorageAreaImpl&gt; area = adoptRef(*new StorageAreaImpl(storageType, WTFMove(origin), WTFMove(syncManager), quota));
</del><ins>+    Ref&lt;StorageAreaImpl&gt; area = adoptRef(*new StorageAreaImpl(storageType, origin, WTFMove(syncManager), quota));
</ins><span class="cx">     // FIXME: If there's no backing storage for LocalStorage, the default WebKit behavior should be that of private browsing,
</span><span class="cx">     // not silently ignoring it. https://bugs.webkit.org/show_bug.cgi?id=25894
</span><span class="cx">     if (area-&gt;m_storageSyncManager) {
</span><del>-        area-&gt;m_storageAreaSync = StorageAreaSync::create(area-&gt;m_storageSyncManager.get(), area.copyRef(), SecurityOriginData::fromSecurityOrigin(*area-&gt;m_securityOrigin).databaseIdentifier());
</del><ins>+        area-&gt;m_storageAreaSync = StorageAreaSync::create(area-&gt;m_storageSyncManager.get(), area.copyRef(), area-&gt;m_securityOrigin.databaseIdentifier());
</ins><span class="cx">         ASSERT(area-&gt;m_storageAreaSync);
</span><span class="cx">     }
</span><span class="cx">     return area;
</span><span class="lines">@@ -84,7 +83,7 @@
</span><span class="cx"> 
</span><span class="cx"> StorageAreaImpl::StorageAreaImpl(const StorageAreaImpl&amp; area)
</span><span class="cx">     : m_storageType(area.m_storageType)
</span><del>-    , m_securityOrigin(area.m_securityOrigin.copyRef())
</del><ins>+    , m_securityOrigin(area.m_securityOrigin)
</ins><span class="cx">     , m_storageMap(area.m_storageMap)
</span><span class="cx">     , m_storageSyncManager(area.m_storageSyncManager)
</span><span class="cx"> #ifndef NDEBUG
</span><span class="lines">@@ -94,7 +93,6 @@
</span><span class="cx">     , m_closeDatabaseTimer(*this, &amp;StorageAreaImpl::closeDatabaseTimerFired)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><del>-    ASSERT(m_securityOrigin);
</del><span class="cx">     ASSERT(m_storageMap);
</span><span class="cx">     ASSERT(!m_isShutdown);
</span><span class="cx"> }
</span><span class="lines">@@ -293,9 +291,9 @@
</span><span class="cx"> void StorageAreaImpl::dispatchStorageEvent(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, Frame* sourceFrame)
</span><span class="cx"> {
</span><span class="cx">     if (m_storageType == LocalStorage)
</span><del>-        StorageEventDispatcher::dispatchLocalStorageEvents(key, oldValue, newValue, m_securityOrigin.get(), sourceFrame);
</del><ins>+        StorageEventDispatcher::dispatchLocalStorageEvents(key, oldValue, newValue, m_securityOrigin, sourceFrame);
</ins><span class="cx">     else
</span><del>-        StorageEventDispatcher::dispatchSessionStorageEvents(key, oldValue, newValue, m_securityOrigin.get(), sourceFrame);
</del><ins>+        StorageEventDispatcher::dispatchSessionStorageEvents(key, oldValue, newValue, m_securityOrigin, sourceFrame);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageAreaImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageAreaImpl.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageAreaImpl.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/StorageAreaImpl.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;WebCore/StorageArea.h&gt;
</span><span class="cx"> #include &lt;WebCore/Timer.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="lines">@@ -41,7 +42,7 @@
</span><span class="cx"> 
</span><span class="cx"> class StorageAreaImpl : public WebCore::StorageArea {
</span><span class="cx"> public:
</span><del>-    static Ref&lt;StorageAreaImpl&gt; create(WebCore::StorageType, RefPtr&lt;WebCore::SecurityOrigin&gt;&amp;&amp;, RefPtr&lt;WebCore::StorageSyncManager&gt;&amp;&amp;, unsigned quota);
</del><ins>+    static Ref&lt;StorageAreaImpl&gt; create(WebCore::StorageType, const WebCore::SecurityOriginData&amp;, RefPtr&lt;WebCore::StorageSyncManager&gt;&amp;&amp;, unsigned quota);
</ins><span class="cx">     virtual ~StorageAreaImpl();
</span><span class="cx"> 
</span><span class="cx">     unsigned length() override;
</span><span class="lines">@@ -61,7 +62,7 @@
</span><span class="cx">     void decrementAccessCount() override;
</span><span class="cx">     void closeDatabaseIfIdle() override;
</span><span class="cx"> 
</span><del>-    WebCore::SecurityOrigin&amp; securityOrigin() override { return *m_securityOrigin.get(); }
</del><ins>+    WebCore::SecurityOriginData securityOrigin() const override { return m_securityOrigin; }
</ins><span class="cx"> 
</span><span class="cx">     Ref&lt;StorageAreaImpl&gt; copy();
</span><span class="cx">     void close();
</span><span class="lines">@@ -75,7 +76,7 @@
</span><span class="cx">     void sync();
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    StorageAreaImpl(WebCore::StorageType, RefPtr&lt;WebCore::SecurityOrigin&gt;&amp;&amp;, RefPtr&lt;WebCore::StorageSyncManager&gt;&amp;&amp;, unsigned quota);
</del><ins>+    StorageAreaImpl(WebCore::StorageType, const WebCore::SecurityOriginData&amp;, RefPtr&lt;WebCore::StorageSyncManager&gt;&amp;&amp;, unsigned quota);
</ins><span class="cx">     explicit StorageAreaImpl(const StorageAreaImpl&amp;);
</span><span class="cx"> 
</span><span class="cx">     void blockUntilImportComplete() const;
</span><span class="lines">@@ -84,7 +85,7 @@
</span><span class="cx">     void dispatchStorageEvent(const String&amp; key, const String&amp; oldValue, const String&amp; newValue, WebCore::Frame* sourceFrame);
</span><span class="cx"> 
</span><span class="cx">     WebCore::StorageType m_storageType;
</span><del>-    RefPtr&lt;WebCore::SecurityOrigin&gt; m_securityOrigin;
</del><ins>+    WebCore::SecurityOriginData m_securityOrigin;
</ins><span class="cx">     RefPtr&lt;WebCore::StorageMap&gt; m_storageMap;
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;StorageAreaSync&gt; m_storageAreaSync;
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageNamespaceImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageNamespaceImpl.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageNamespaceImpl.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/StorageNamespaceImpl.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -101,16 +101,16 @@
</span><span class="cx">     return newNamespace;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;StorageArea&gt; StorageNamespaceImpl::storageArea(RefPtr&lt;SecurityOrigin&gt;&amp;&amp; origin)
</del><ins>+RefPtr&lt;StorageArea&gt; StorageNamespaceImpl::storageArea(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx">     ASSERT(!m_isShutdown);
</span><span class="cx"> 
</span><span class="cx">     RefPtr&lt;StorageAreaImpl&gt; storageArea;
</span><del>-    if ((storageArea = m_storageAreaMap.get(origin.get())))
</del><ins>+    if ((storageArea = m_storageAreaMap.get(origin)))
</ins><span class="cx">         return storageArea;
</span><span class="cx"> 
</span><del>-    storageArea = StorageAreaImpl::create(m_storageType, origin.get(), m_syncManager.get(), m_quota);
</del><ins>+    storageArea = StorageAreaImpl::create(m_storageType, origin, m_syncManager.get(), m_quota);
</ins><span class="cx">     m_storageAreaMap.set(origin, storageArea.get());
</span><span class="cx">     return storageArea;
</span><span class="cx"> }
</span><span class="lines">@@ -138,7 +138,7 @@
</span><span class="cx">     m_isShutdown = true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void StorageNamespaceImpl::clearOriginForDeletion(SecurityOrigin* origin)
</del><ins>+void StorageNamespaceImpl::clearOriginForDeletion(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageNamespaceImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageNamespaceImpl.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageNamespaceImpl.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/StorageNamespaceImpl.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -25,7 +25,7 @@
</span><span class="cx"> 
</span><span class="cx"> #pragma once
</span><span class="cx"> 
</span><del>-#include &lt;WebCore/SecurityOriginHash.h&gt;
</del><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;WebCore/StorageArea.h&gt;
</span><span class="cx"> #include &lt;WebCore/StorageNamespace.h&gt;
</span><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="lines">@@ -48,7 +48,7 @@
</span><span class="cx">     // we're just deleting the underlying db file. If an item is added immediately
</span><span class="cx">     // after file deletion, we want the same StorageArea to eventually trigger
</span><span class="cx">     // a sync and for StorageAreaSync to recreate the backing db file.
</span><del>-    void clearOriginForDeletion(WebCore::SecurityOrigin*);
</del><ins>+    void clearOriginForDeletion(const WebCore::SecurityOriginData&amp;);
</ins><span class="cx">     void clearAllOriginsForDeletion();
</span><span class="cx">     void sync();
</span><span class="cx">     void closeIdleLocalStorageDatabases();
</span><span class="lines">@@ -56,10 +56,10 @@
</span><span class="cx"> private:
</span><span class="cx">     StorageNamespaceImpl(WebCore::StorageType, const String&amp; path, unsigned quota);
</span><span class="cx"> 
</span><del>-    RefPtr&lt;WebCore::StorageArea&gt; storageArea(RefPtr&lt;WebCore::SecurityOrigin&gt;&amp;&amp;) override;
</del><ins>+    RefPtr&lt;WebCore::StorageArea&gt; storageArea(const WebCore::SecurityOriginData&amp;) override;
</ins><span class="cx">     RefPtr&lt;StorageNamespace&gt; copy(WebCore::Page* newPage) override;
</span><span class="cx"> 
</span><del>-    typedef HashMap&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;, RefPtr&lt;StorageAreaImpl&gt;&gt; StorageAreaMap;
</del><ins>+    typedef HashMap&lt;WebCore::SecurityOriginData, RefPtr&lt;StorageAreaImpl&gt;&gt; StorageAreaMap;
</ins><span class="cx">     StorageAreaMap m_storageAreaMap;
</span><span class="cx"> 
</span><span class="cx">     WebCore::StorageType m_storageType;
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageTracker.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageTracker.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/StorageTracker.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -344,17 +344,26 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void StorageTracker::origins(Vector&lt;RefPtr&lt;SecurityOrigin&gt;&gt;&amp; result)
</del><ins>+Vector&lt;SecurityOriginData&gt; StorageTracker::origins()
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(m_isActive);
</span><span class="cx">     
</span><span class="cx">     if (!m_isActive)
</span><del>-        return;
</del><ins>+        return { };
</ins><span class="cx"> 
</span><span class="cx">     LockHolder locker(m_originSetMutex);
</span><span class="cx"> 
</span><del>-    for (OriginSet::const_iterator it = m_originSet.begin(), end = m_originSet.end(); it != end; ++it)
-        result.append(SecurityOrigin::createFromDatabaseIdentifier(*it));
</del><ins>+    Vector&lt;SecurityOriginData&gt; result;
+    result.reserveInitialCapacity(m_originSet.size());
+    for (auto&amp; identifier : m_originSet) {
+        auto origin = SecurityOriginData::fromDatabaseIdentifier(identifier);
+        if (!origin) {
+            ASSERT_NOT_REACHED();
+            continue;
+        }
+        result.uncheckedAppend(origin.value());
+    }
+    return result;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void StorageTracker::deleteAllOrigins()
</span><span class="lines">@@ -451,10 +460,15 @@
</span><span class="cx"> 
</span><span class="cx"> void StorageTracker::deleteOriginWithIdentifier(const String&amp; originIdentifier)
</span><span class="cx"> {
</span><del>-    deleteOrigin(&amp;SecurityOrigin::createFromDatabaseIdentifier(originIdentifier).get());
</del><ins>+    auto origin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier);
+    if (!origin) {
+        ASSERT_NOT_REACHED();
+        return;
+    }
+    deleteOrigin(origin.value());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void StorageTracker::deleteOrigin(SecurityOrigin* origin)
</del><ins>+void StorageTracker::deleteOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {    
</span><span class="cx">     ASSERT(m_isActive);
</span><span class="cx">     ASSERT(isMainThread());
</span><span class="lines">@@ -471,7 +485,7 @@
</span><span class="cx">     // StorageTracker db deletion.
</span><span class="cx">     WebStorageNamespaceProvider::clearLocalStorageForOrigin(origin);
</span><span class="cx"> 
</span><del>-    String originId = SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier();
</del><ins>+    String originId = origin.databaseIdentifier();
</ins><span class="cx">     
</span><span class="cx">     {
</span><span class="cx">         LockHolder locker(m_originSetMutex);
</span></span></pre></div>
<a id="trunkSourceWebKitStorageStorageTrackerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/StorageTracker.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/StorageTracker.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/StorageTracker.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -35,6 +35,7 @@
</span><span class="cx"> class StorageThread;
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx"> class StorageTrackerClient;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -49,9 +50,9 @@
</span><span class="cx">     void setOriginDetails(const String&amp; originIdentifier, const String&amp; databaseFile);
</span><span class="cx">     
</span><span class="cx">     void deleteAllOrigins();
</span><del>-    void deleteOrigin(WebCore::SecurityOrigin*);
</del><ins>+    void deleteOrigin(const WebCore::SecurityOriginData&amp;);
</ins><span class="cx">     void deleteOriginWithIdentifier(const String&amp; originIdentifier);
</span><del>-    void origins(Vector&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;&gt;&amp; result);
</del><ins>+    Vector&lt;WebCore::SecurityOriginData&gt; origins();
</ins><span class="cx">     long long diskUsageForOrigin(WebCore::SecurityOrigin*);
</span><span class="cx">     
</span><span class="cx">     void cancelDeletingOrigin(const String&amp; originIdentifier);
</span></span></pre></div>
<a id="trunkSourceWebKitStorageWebStorageNamespaceProvidercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -72,7 +72,7 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebStorageNamespaceProvider::clearLocalStorageForOrigin(SecurityOrigin* origin)
</del><ins>+void WebStorageNamespaceProvider::clearLocalStorageForOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     for (const auto&amp; storageNamespaceProvider : storageNamespaceProviders()) {
</span><span class="cx">         if (auto* localStorageNamespace = storageNamespaceProvider-&gt;optionalLocalStorageNamespace())
</span></span></pre></div>
<a id="trunkSourceWebKitStorageWebStorageNamespaceProviderh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/Storage/WebStorageNamespaceProvider.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -27,6 +27,10 @@
</span><span class="cx"> 
</span><span class="cx"> #include &lt;WebCore/StorageNamespaceProvider.h&gt;
</span><span class="cx"> 
</span><ins>+namespace WebCore {
+struct SecurityOriginData;
+}
+
</ins><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> class WebStorageNamespaceProvider final : public WebCore::StorageNamespaceProvider {
</span><span class="lines">@@ -37,7 +41,7 @@
</span><span class="cx">     static void closeLocalStorage();
</span><span class="cx"> 
</span><span class="cx">     static void clearLocalStorageForAllOrigins();
</span><del>-    static void clearLocalStorageForOrigin(WebCore::SecurityOrigin*);
</del><ins>+    static void clearLocalStorageForOrigin(const WebCore::SecurityOriginData&amp;);
</ins><span class="cx">     static void closeIdleLocalStorageDatabases();
</span><span class="cx">     // DumpRenderTree helper that triggers a StorageArea sync.
</span><span class="cx">     static void syncLocalStorage();
</span></span></pre></div>
<a id="trunkSourceWebKitmacChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/ChangeLog (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/ChangeLog        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/ChangeLog        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -1,3 +1,36 @@
</span><ins>+2016-11-14  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
+        https://bugs.webkit.org/show_bug.cgi?id=164720
+
+        Reviewed by Brady Eidson.
+
+        * Storage/WebDatabaseManager.mm:
+        (-[WebDatabaseManager origins]):
+        (-[WebDatabaseManager databasesWithOrigin:]):
+        (-[WebDatabaseManager deleteOrigin:]):
+        (-[WebDatabaseManager deleteDatabase:withOrigin:]):
+        * Storage/WebDatabaseManagerClient.h:
+        * Storage/WebDatabaseManagerClient.mm:
+        (DidModifyOriginData::dispatchToMainThread):
+        (DidModifyOriginData::DidModifyOriginData):
+        (WebDatabaseManagerClient::dispatchDidModifyOrigin):
+        (WebDatabaseManagerClient::dispatchDidModifyDatabase):
+        * Storage/WebDatabaseQuotaManager.mm:
+        (-[WebDatabaseQuotaManager usage]):
+        (-[WebDatabaseQuotaManager quota]):
+        (-[WebDatabaseQuotaManager setQuota:]):
+        * Storage/WebStorageManager.mm:
+        (-[WebStorageManager origins]):
+        (-[WebStorageManager deleteOrigin:]):
+        * Storage/WebStorageTrackerClient.h:
+        * Storage/WebStorageTrackerClient.mm:
+        (WebStorageTrackerClient::dispatchDidModifyOrigin):
+        * WebCoreSupport/WebSecurityOrigin.mm:
+        (-[WebSecurityOrigin usage]):
+        (-[WebSecurityOrigin quota]):
+        (-[WebSecurityOrigin setQuota:]):
+
</ins><span class="cx"> 2016-11-13  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix exception handling in SQL database code, streamline and update code
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebDatabaseManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebDatabaseManager.mm        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -96,7 +96,7 @@
</span><span class="cx">     auto coreOrigins = DatabaseTracker::singleton().origins();
</span><span class="cx">     NSMutableArray *webOrigins = [[NSMutableArray alloc] initWithCapacity:coreOrigins.size()];
</span><span class="cx">     for (auto&amp; coreOrigin : coreOrigins) {
</span><del>-        WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:coreOrigin.ptr()];
</del><ins>+        WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:coreOrigin.securityOrigin().ptr()];
</ins><span class="cx">         [webOrigins addObject:webOrigin];
</span><span class="cx">         [webOrigin release];
</span><span class="cx">     }
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (!origin)
</span><span class="cx">         return nil;
</span><del>-    Vector&lt;String&gt; nameVector = DatabaseTracker::singleton().databaseNames(*[origin _core]);
</del><ins>+    Vector&lt;String&gt; nameVector = DatabaseTracker::singleton().databaseNames(SecurityOriginData::fromSecurityOrigin(*[origin _core]));
</ins><span class="cx">     NSMutableArray *names = [[NSMutableArray alloc] initWithCapacity:nameVector.size()];
</span><span class="cx">     for (auto&amp; name : nameVector)
</span><span class="cx">         [names addObject:(NSString *)name];
</span><span class="lines">@@ -143,12 +143,12 @@
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)deleteOrigin:(WebSecurityOrigin *)origin
</span><span class="cx"> {
</span><del>-    return origin &amp;&amp; DatabaseTracker::singleton().deleteOrigin(*[origin _core]);
</del><ins>+    return origin &amp;&amp; DatabaseTracker::singleton().deleteOrigin(SecurityOriginData::fromSecurityOrigin(*[origin _core]));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (BOOL)deleteDatabase:(NSString *)databaseIdentifier withOrigin:(WebSecurityOrigin *)origin
</span><span class="cx"> {
</span><del>-    return origin &amp;&amp; DatabaseTracker::singleton().deleteDatabase(*[origin _core], databaseIdentifier);
</del><ins>+    return origin &amp;&amp; DatabaseTracker::singleton().deleteDatabase(SecurityOriginData::fromSecurityOrigin(*[origin _core]), databaseIdentifier);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // For DumpRenderTree support only
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebDatabaseManagerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -30,11 +30,11 @@
</span><span class="cx">     static WebDatabaseManagerClient* sharedWebDatabaseManagerClient();
</span><span class="cx">     
</span><span class="cx">     virtual ~WebDatabaseManagerClient();
</span><del>-    void dispatchDidModifyOrigin(WebCore::SecurityOrigin&amp;) final;
-    void dispatchDidModifyDatabase(WebCore::SecurityOrigin&amp;, const WTF::String&amp; databaseIdentifier) final;
</del><ins>+    void dispatchDidModifyOrigin(const WebCore::SecurityOriginData&amp;) final;
+    void dispatchDidModifyDatabase(const WebCore::SecurityOriginData&amp;, const WTF::String&amp; databaseIdentifier) final;
</ins><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>-    void dispatchDidAddNewOrigin(WebCore::SecurityOrigin&amp;) final;
</del><ins>+    void dispatchDidAddNewOrigin() final;
</ins><span class="cx">     void dispatchDidDeleteDatabase() final;
</span><span class="cx">     void dispatchDidDeleteDatabaseOrigin() final;
</span><span class="cx">     void newDatabaseOriginWasAdded();
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebDatabaseManagerClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.mm (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.mm        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebDatabaseManagerClient.mm        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -95,7 +95,7 @@
</span><span class="cx"> 
</span><span class="cx"> class DidModifyOriginData {
</span><span class="cx"> public:
</span><del>-    static void dispatchToMainThread(WebDatabaseManagerClient&amp; client, SecurityOrigin&amp; origin)
</del><ins>+    static void dispatchToMainThread(WebDatabaseManagerClient&amp; client, const SecurityOriginData&amp; origin)
</ins><span class="cx">     {
</span><span class="cx">         auto context = std::make_unique&lt;DidModifyOriginData&gt;(client, origin);
</span><span class="cx">         callOnMainThread([context = WTFMove(context)] {
</span><span class="lines">@@ -103,7 +103,7 @@
</span><span class="cx">         });
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    DidModifyOriginData(WebDatabaseManagerClient&amp; client, SecurityOrigin&amp; origin)
</del><ins>+    DidModifyOriginData(WebDatabaseManagerClient&amp; client, const SecurityOriginData&amp; origin)
</ins><span class="cx">         : client(client)
</span><span class="cx">         , origin(origin.isolatedCopy())
</span><span class="cx">     {
</span><span class="lines">@@ -111,10 +111,10 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebDatabaseManagerClient&amp; client;
</span><del>-    Ref&lt;SecurityOrigin&gt; origin;
</del><ins>+    SecurityOriginData origin;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-void WebDatabaseManagerClient::dispatchDidModifyOrigin(SecurityOrigin&amp; origin)
</del><ins>+void WebDatabaseManagerClient::dispatchDidModifyOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     if (!isMainThread()) {
</span><span class="cx">         DidModifyOriginData::dispatchToMainThread(*this, origin);
</span><span class="lines">@@ -121,12 +121,12 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:&amp;origin]);
</del><ins>+    auto webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin.securityOrigin().ptr()]);
</ins><span class="cx"> 
</span><span class="cx">     [[NSNotificationCenter defaultCenter] postNotificationName:WebDatabaseDidModifyOriginNotification object:webSecurityOrigin.get()];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebDatabaseManagerClient::dispatchDidModifyDatabase(SecurityOrigin&amp; origin, const String&amp; databaseIdentifier)
</del><ins>+void WebDatabaseManagerClient::dispatchDidModifyDatabase(const SecurityOriginData&amp; origin, const String&amp; databaseIdentifier)
</ins><span class="cx"> {
</span><span class="cx">     if (!isMainThread()) {
</span><span class="cx">         DidModifyOriginData::dispatchToMainThread(*this, origin);
</span><span class="lines">@@ -133,7 +133,7 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    auto webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:&amp;origin]);
</del><ins>+    auto webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin.securityOrigin().ptr()]);
</ins><span class="cx">     auto userInfo = adoptNS([[NSDictionary alloc] initWithObjectsAndKeys:(NSString *)databaseIdentifier, WebDatabaseIdentifierKey, nil]);
</span><span class="cx">     [[NSNotificationCenter defaultCenter] postNotificationName:WebDatabaseDidModifyDatabaseNotification object:webSecurityOrigin.get() userInfo:userInfo.get()];
</span><span class="cx"> }
</span><span class="lines">@@ -140,11 +140,11 @@
</span><span class="cx"> 
</span><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx"> 
</span><del>-void WebDatabaseManagerClient::dispatchDidAddNewOrigin(SecurityOrigin&amp;)
</del><ins>+void WebDatabaseManagerClient::dispatchDidAddNewOrigin()
</ins><span class="cx"> {    
</span><span class="cx">     m_isHandlingNewDatabaseOriginNotification = true;
</span><span class="cx">     // Send a notification to all apps that a new origin has been added, so other apps with opened database can refresh their origin maps.
</span><del>-    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), WebDatabaseOriginWasAddedNotification, 0, 0, true);
</del><ins>+    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), WebDatabaseOriginWasAddedNotification, nullptr, nullptr, true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebDatabaseManagerClient::dispatchDidDeleteDatabase()
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> {
</span><span class="cx">     m_isHandlingDeleteDatabaseNotification = true;
</span><span class="cx">     // Send a notification to all apps that a database has been deleted, so other apps with the deleted database open will close it properly.
</span><del>-    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), WebDatabaseWasDeletedNotification, 0, 0, true);
</del><ins>+    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), WebDatabaseWasDeletedNotification, nullptr, nullptr, true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebDatabaseManagerClient::dispatchDidDeleteDatabaseOrigin()
</span><span class="lines">@@ -158,7 +158,7 @@
</span><span class="cx"> {
</span><span class="cx">     m_isHandlingDeleteDatabaseOriginNotification = true;
</span><span class="cx">     // Send a notification to all apps that an origin has been deleted, so other apps can update their origin maps.
</span><del>-    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), WebDatabaseOriginWasDeletedNotification, 0, 0, true);
</del><ins>+    CFNotificationCenterPostNotification(CFNotificationCenterGetDarwinNotifyCenter(), WebDatabaseOriginWasDeletedNotification, nullptr, nullptr, true);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebDatabaseManagerClient::newDatabaseOriginWasAdded()
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebDatabaseQuotaManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebDatabaseQuotaManager.mm (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebDatabaseQuotaManager.mm        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebDatabaseQuotaManager.mm        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> 
</span><span class="cx"> #import &quot;WebSecurityOriginInternal.h&quot;
</span><span class="cx"> #import &lt;WebCore/DatabaseTracker.h&gt;
</span><ins>+#import &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><span class="lines">@@ -52,12 +53,12 @@
</span><span class="cx"> 
</span><span class="cx"> - (unsigned long long)usage
</span><span class="cx"> {
</span><del>-    return DatabaseTracker::singleton().usage(*[_origin _core]);
</del><ins>+    return DatabaseTracker::singleton().usage(SecurityOriginData::fromSecurityOrigin(*[_origin _core]));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (unsigned long long)quota
</span><span class="cx"> {
</span><del>-    return DatabaseTracker::singleton().quota(*[_origin _core]);
</del><ins>+    return DatabaseTracker::singleton().quota(SecurityOriginData::fromSecurityOrigin(*[_origin _core]));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // If the quota is set to a value lower than the current usage, that quota will
</span><span class="lines">@@ -65,7 +66,7 @@
</span><span class="cx"> // prevent new data from being added to databases in that origin.
</span><span class="cx"> - (void)setQuota:(unsigned long long)quota
</span><span class="cx"> {
</span><del>-    DatabaseTracker::singleton().setQuota(*[_origin _core], quota);
</del><ins>+    DatabaseTracker::singleton().setQuota(SecurityOriginData::fromSecurityOrigin(*[_origin _core]), quota);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebStorageManagermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebStorageManager.mm (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebStorageManager.mm        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebStorageManager.mm        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #import &quot;WebStorageTrackerClient.h&quot;
</span><span class="cx"> #import &lt;WebCore/PageGroup.h&gt;
</span><span class="cx"> #import &lt;WebCore/SecurityOrigin.h&gt;
</span><ins>+#import &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #import &lt;pthread.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="lines">@@ -64,14 +65,12 @@
</span><span class="cx"> 
</span><span class="cx"> - (NSArray *)origins
</span><span class="cx"> {
</span><del>-    Vector&lt;RefPtr&lt;SecurityOrigin&gt;&gt; coreOrigins;
</del><ins>+    auto coreOrigins = WebKit::StorageTracker::tracker().origins();
</ins><span class="cx"> 
</span><del>-    WebKit::StorageTracker::tracker().origins(coreOrigins);
-
</del><span class="cx">     NSMutableArray *webOrigins = [[NSMutableArray alloc] initWithCapacity:coreOrigins.size()];
</span><span class="cx"> 
</span><del>-    for (size_t i = 0; i &lt; coreOrigins.size(); ++i) {
-        WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:coreOrigins[i].get()];
</del><ins>+    for (auto&amp; origin : coreOrigins) {
+        WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin.securityOrigin().ptr()];
</ins><span class="cx">         [webOrigins addObject:webOrigin];
</span><span class="cx">         [webOrigin release];
</span><span class="cx">     }
</span><span class="lines">@@ -91,7 +90,7 @@
</span><span class="cx"> 
</span><span class="cx"> - (void)deleteOrigin:(WebSecurityOrigin *)origin
</span><span class="cx"> {
</span><del>-    WebKit::StorageTracker::tracker().deleteOrigin([origin _core]);
</del><ins>+    WebKit::StorageTracker::tracker().deleteOrigin(SecurityOriginData::fromSecurityOrigin(*[origin _core]));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (unsigned long long)diskUsageForOrigin:(WebSecurityOrigin *)origin
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebStorageTrackerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx">     
</span><span class="cx">     virtual ~WebStorageTrackerClient();
</span><span class="cx">     void dispatchDidModifyOrigin(const String&amp; originIdentifier) override;
</span><del>-    virtual void dispatchDidModifyOrigin(PassRefPtr&lt;SecurityOrigin&gt;);
</del><ins>+    virtual void dispatchDidModifyOrigin(SecurityOrigin*);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebStorageTrackerClient();
</span></span></pre></div>
<a id="trunkSourceWebKitmacStorageWebStorageTrackerClientmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.mm (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.mm        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/Storage/WebStorageTrackerClient.mm        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> #import &quot;WebSecurityOriginInternal.h&quot;
</span><span class="cx"> #import &quot;WebStorageManagerPrivate.h&quot;
</span><span class="cx"> #import &lt;WebCore/SecurityOrigin.h&gt;
</span><ins>+#import &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #import &lt;wtf/MainThread.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="cx"> #import &lt;wtf/text/WTFString.h&gt;
</span><span class="lines">@@ -48,9 +49,9 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebStorageTrackerClient::dispatchDidModifyOrigin(PassRefPtr&lt;SecurityOrigin&gt; origin)
</del><ins>+void WebStorageTrackerClient::dispatchDidModifyOrigin(SecurityOrigin* origin)
</ins><span class="cx"> {
</span><del>-    RetainPtr&lt;WebSecurityOrigin&gt; webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin.get()]);
</del><ins>+    RetainPtr&lt;WebSecurityOrigin&gt; webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin]);
</ins><span class="cx"> 
</span><span class="cx">     [[NSNotificationCenter defaultCenter] postNotificationName:WebStorageDidModifyOriginNotification 
</span><span class="cx">                                                         object:webSecurityOrigin.get()];
</span><span class="lines">@@ -58,15 +59,20 @@
</span><span class="cx"> 
</span><span class="cx"> void WebStorageTrackerClient::dispatchDidModifyOrigin(const String&amp; originIdentifier)
</span><span class="cx"> {
</span><del>-    auto origin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
</del><ins>+    auto origin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier);
</ins><span class="cx"> 
</span><ins>+    if (!origin) {
+        ASSERT_NOT_REACHED();
+        return;
+    }
+    
</ins><span class="cx">     if (isMainThread()) {
</span><del>-        dispatchDidModifyOrigin(WTFMove(origin));
</del><ins>+        dispatchDidModifyOrigin(origin-&gt;securityOrigin().ptr());
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    callOnMainThread([origin = WTFMove(origin)]() mutable {
-        WebStorageTrackerClient::sharedWebStorageTrackerClient()-&gt;dispatchDidModifyOrigin(WTFMove(origin));
</del><ins>+    callOnMainThread([origin = origin-&gt;securityOrigin()-&gt;isolatedCopy()]() mutable {
+        WebStorageTrackerClient::sharedWebStorageTrackerClient()-&gt;dispatchDidModifyOrigin(origin.ptr());
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKitmacWebCoreSupportWebSecurityOriginmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebSecurityOrigin.mm (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/mac/WebCoreSupport/WebSecurityOrigin.mm        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebSecurityOrigin.mm        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -42,11 +42,11 @@
</span><span class="cx"> 
</span><span class="cx"> + (id)webSecurityOriginFromDatabaseIdentifier:(NSString *)databaseIdentifier
</span><span class="cx"> {
</span><del>-    RefPtr&lt;SecurityOrigin&gt; origin = SecurityOrigin::maybeCreateFromDatabaseIdentifier(databaseIdentifier);
</del><ins>+    auto origin = SecurityOriginData::fromDatabaseIdentifier(databaseIdentifier);
</ins><span class="cx">     if (!origin)
</span><span class="cx">         return nil;
</span><span class="cx"> 
</span><del>-    return [[[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin.get()] autorelease];
</del><ins>+    return [[[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin-&gt;securityOrigin().ptr()] autorelease];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (id)initWithURL:(NSURL *)url
</span><span class="lines">@@ -169,17 +169,17 @@
</span><span class="cx"> 
</span><span class="cx"> - (unsigned long long)usage
</span><span class="cx"> {
</span><del>-    return DatabaseTracker::singleton().usage(*reinterpret_cast&lt;SecurityOrigin*&gt;(_private));
</del><ins>+    return DatabaseTracker::singleton().usage(SecurityOriginData::fromSecurityOrigin(*reinterpret_cast&lt;SecurityOrigin*&gt;(_private)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (unsigned long long)quota
</span><span class="cx"> {
</span><del>-    return DatabaseTracker::singleton().quota(*reinterpret_cast&lt;SecurityOrigin*&gt;(_private));
</del><ins>+    return DatabaseTracker::singleton().quota(SecurityOriginData::fromSecurityOrigin(*reinterpret_cast&lt;SecurityOrigin*&gt;(_private)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> - (void)setQuota:(unsigned long long)quota
</span><span class="cx"> {
</span><del>-    DatabaseTracker::singleton().setQuota(*reinterpret_cast&lt;SecurityOrigin*&gt;(_private), quota);
</del><ins>+    DatabaseTracker::singleton().setQuota(SecurityOriginData::fromSecurityOrigin(*reinterpret_cast&lt;SecurityOrigin*&gt;(_private)), quota);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> @end
</span></span></pre></div>
<a id="trunkSourceWebKitwinChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/ChangeLog (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/ChangeLog        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/win/ChangeLog        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2016-11-14  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
+        https://bugs.webkit.org/show_bug.cgi?id=164720
+
+        Reviewed by Brady Eidson.
+
+        * WebDatabaseManager.cpp:
+        (DidModifyOriginData::dispatchToMainThread):
+        (DidModifyOriginData::DidModifyOriginData):
+        (WebDatabaseManager::dispatchDidModifyOrigin):
+        (WebDatabaseManager::dispatchDidModifyDatabase):
+        * WebDatabaseManager.h:
+        * WebSecurityOrigin.cpp:
+        (WebSecurityOrigin::usage):
+        (WebSecurityOrigin::quota):
+        (WebSecurityOrigin::setQuota):
+
</ins><span class="cx"> 2016-11-13  Darin Adler  &lt;darin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Fix exception handling in SQL database code, streamline and update code
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebDatabaseManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebDatabaseManager.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebDatabaseManager.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/win/WebDatabaseManager.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -41,6 +41,7 @@
</span><span class="cx"> #include &lt;WebCore/DatabaseTracker.h&gt;
</span><span class="cx"> #include &lt;WebCore/FileSystem.h&gt;
</span><span class="cx"> #include &lt;WebCore/SecurityOrigin.h&gt;
</span><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><span class="lines">@@ -230,7 +231,7 @@
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;RefPtr&lt;SecurityOrigin&gt;&gt; origins;
</span><span class="cx">     for (auto&amp; origin : DatabaseTracker::singleton().origins())
</span><del>-        origins.append(origin.ptr());
</del><ins>+        origins.append(origin.securityOrigin());
</ins><span class="cx"> 
</span><span class="cx">     COMPtr&lt;COMEnumVariant&lt;Vector&lt;RefPtr&lt;SecurityOrigin&gt;&gt;&gt;&gt; enumVariant(AdoptCOM, COMEnumVariant&lt;Vector&lt;RefPtr&lt;SecurityOrigin&gt;&gt;&gt;::adopt(origins));
</span><span class="cx"> 
</span><span class="lines">@@ -255,7 +256,7 @@
</span><span class="cx">     if (!webSecurityOrigin)
</span><span class="cx">         return E_FAIL;
</span><span class="cx"> 
</span><del>-    auto databaseNames = DatabaseTracker::singleton().databaseNames(*webSecurityOrigin-&gt;securityOrigin());
</del><ins>+    auto databaseNames = DatabaseTracker::singleton().databaseNames(SecurityOriginData::fromSecurityOrigin(*webSecurityOrigin-&gt;securityOrigin()));
</ins><span class="cx"> 
</span><span class="cx">     COMPtr&lt;COMEnumVariant&lt;Vector&lt;String&gt;&gt;&gt; enumVariant(AdoptCOM, COMEnumVariant&lt;Vector&lt;String&gt;&gt;::adopt(databaseNames));
</span><span class="cx"> 
</span><span class="lines">@@ -310,7 +311,7 @@
</span><span class="cx">     if (!webSecurityOrigin)
</span><span class="cx">         return E_FAIL;
</span><span class="cx"> 
</span><del>-    DatabaseTracker::singleton().deleteOrigin(*webSecurityOrigin-&gt;securityOrigin());
</del><ins>+    DatabaseTracker::singleton().deleteOrigin(SecurityOriginData::fromSecurityOrigin(*webSecurityOrigin-&gt;securityOrigin()));
</ins><span class="cx"> 
</span><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="lines">@@ -330,7 +331,7 @@
</span><span class="cx">     if (!webSecurityOrigin)
</span><span class="cx">         return E_FAIL;
</span><span class="cx"> 
</span><del>-    DatabaseTracker::singleton().deleteDatabase(*webSecurityOrigin-&gt;securityOrigin(), String(databaseName, SysStringLen(databaseName)));
</del><ins>+    DatabaseTracker::singleton().deleteDatabase(SecurityOriginData::fromSecurityOrigin(*webSecurityOrigin-&gt;securityOrigin()), String(databaseName, SysStringLen(databaseName)));
</ins><span class="cx"> 
</span><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="lines">@@ -346,9 +347,9 @@
</span><span class="cx"> class DidModifyOriginData {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(DidModifyOriginData);
</span><span class="cx"> public:
</span><del>-    static void dispatchToMainThread(WebDatabaseManager* databaseManager, SecurityOrigin* origin)
</del><ins>+    static void dispatchToMainThread(WebDatabaseManager* databaseManager, const SecurityOriginData&amp; origin)
</ins><span class="cx">     {
</span><del>-        DidModifyOriginData* context = new DidModifyOriginData(databaseManager, origin-&gt;isolatedCopy());
</del><ins>+        DidModifyOriginData* context = new DidModifyOriginData(databaseManager, origin.isolatedCopy());
</ins><span class="cx">         callOnMainThread([context] {
</span><span class="cx">             dispatchDidModifyOriginOnMainThread(context);
</span><span class="cx">         });
</span><span class="lines">@@ -355,7 +356,7 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    DidModifyOriginData(WebDatabaseManager* databaseManager, PassRefPtr&lt;SecurityOrigin&gt; origin)
</del><ins>+    DidModifyOriginData(WebDatabaseManager* databaseManager, const SecurityOriginData&amp; origin)
</ins><span class="cx">         : databaseManager(databaseManager)
</span><span class="cx">         , origin(origin)
</span><span class="cx">     {
</span><span class="lines">@@ -365,18 +366,18 @@
</span><span class="cx">     {
</span><span class="cx">         ASSERT(isMainThread());
</span><span class="cx">         DidModifyOriginData* info = static_cast&lt;DidModifyOriginData*&gt;(context);
</span><del>-        info-&gt;databaseManager-&gt;dispatchDidModifyOrigin(*info-&gt;origin);
</del><ins>+        info-&gt;databaseManager-&gt;dispatchDidModifyOrigin(info-&gt;origin);
</ins><span class="cx">         delete info;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     WebDatabaseManager* databaseManager;
</span><del>-    RefPtr&lt;SecurityOrigin&gt; origin;
</del><ins>+    SecurityOriginData origin;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><del>-void WebDatabaseManager::dispatchDidModifyOrigin(SecurityOrigin&amp; origin)
</del><ins>+void WebDatabaseManager::dispatchDidModifyOrigin(const SecurityOriginData&amp; origin)
</ins><span class="cx"> {
</span><span class="cx">     if (!isMainThread()) {
</span><del>-        DidModifyOriginData::dispatchToMainThread(this, &amp;origin);
</del><ins>+        DidModifyOriginData::dispatchToMainThread(this, origin);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -383,7 +384,7 @@
</span><span class="cx">     static BSTR databaseDidModifyOriginName = SysAllocString(WebDatabaseDidModifyOriginNotification);
</span><span class="cx">     IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal();
</span><span class="cx"> 
</span><del>-    COMPtr&lt;WebSecurityOrigin&gt; securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(&amp;origin));
</del><ins>+    COMPtr&lt;WebSecurityOrigin&gt; securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin.securityOrigin().ptr()));
</ins><span class="cx">     notifyCenter-&gt;postNotificationName(databaseDidModifyOriginName, securityOrigin.get(), 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -395,15 +396,15 @@
</span><span class="cx">     if (this != s_sharedWebDatabaseManager)
</span><span class="cx">         return E_FAIL;
</span><span class="cx"> 
</span><del>-    DatabaseTracker::singleton().setQuota(SecurityOrigin::createFromString(origin), quota);
</del><ins>+    DatabaseTracker::singleton().setQuota(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromString(origin)), quota);
</ins><span class="cx"> 
</span><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebDatabaseManager::dispatchDidModifyDatabase(SecurityOrigin&amp; origin, const String&amp; databaseName)
</del><ins>+void WebDatabaseManager::dispatchDidModifyDatabase(const SecurityOriginData&amp; origin, const String&amp; databaseName)
</ins><span class="cx"> {
</span><span class="cx">     if (!isMainThread()) {
</span><del>-        DidModifyOriginData::dispatchToMainThread(this, &amp;origin);
</del><ins>+        DidModifyOriginData::dispatchToMainThread(this, origin);
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -410,7 +411,7 @@
</span><span class="cx">     static BSTR databaseDidModifyOriginName = SysAllocString(WebDatabaseDidModifyDatabaseNotification);
</span><span class="cx">     IWebNotificationCenter* notifyCenter = WebNotificationCenter::defaultCenterInternal();
</span><span class="cx"> 
</span><del>-    COMPtr&lt;WebSecurityOrigin&gt; securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(&amp;origin));
</del><ins>+    COMPtr&lt;WebSecurityOrigin&gt; securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin.securityOrigin().ptr()));
</ins><span class="cx"> 
</span><span class="cx">     HashMap&lt;String, String&gt; userInfo;
</span><span class="cx">     userInfo.set(WebDatabaseNameKey, databaseName);
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebDatabaseManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebDatabaseManager.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebDatabaseManager.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/win/WebDatabaseManager.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -31,6 +31,10 @@
</span><span class="cx"> #include &quot;WebKit.h&quot;
</span><span class="cx"> #include &lt;WebCore/DatabaseManagerClient.h&gt;
</span><span class="cx"> 
</span><ins>+namespace WebCore {
+struct SecurityOriginData;
+}
+
</ins><span class="cx"> class WebDatabaseManager : public IWebDatabaseManager2, private WebCore::DatabaseManagerClient {
</span><span class="cx"> public:
</span><span class="cx">     static WebDatabaseManager* createInstance();
</span><span class="lines">@@ -54,8 +58,8 @@
</span><span class="cx">     virtual HRESULT STDMETHODCALLTYPE deleteAllIndexedDatabases();
</span><span class="cx"> 
</span><span class="cx">     // DatabaseManagerClient
</span><del>-    virtual void dispatchDidModifyOrigin(WebCore::SecurityOrigin&amp;);
-    virtual void dispatchDidModifyDatabase(WebCore::SecurityOrigin&amp;, const WTF::String&amp; databaseName);
</del><ins>+    virtual void dispatchDidModifyOrigin(const WebCore::SecurityOriginData&amp;);
+    virtual void dispatchDidModifyDatabase(const WebCore::SecurityOriginData&amp;, const WTF::String&amp; databaseName);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebDatabaseManager();
</span></span></pre></div>
<a id="trunkSourceWebKitwinWebSecurityOrigincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebSecurityOrigin.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebSecurityOrigin.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit/win/WebSecurityOrigin.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -32,6 +32,7 @@
</span><span class="cx"> #include &quot;MarshallingHelpers.h&quot;
</span><span class="cx"> #include &lt;WebCore/BString.h&gt;
</span><span class="cx"> #include &lt;WebCore/DatabaseTracker.h&gt;
</span><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;WebCore/URL.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="lines">@@ -129,7 +130,7 @@
</span><span class="cx">     if (!result)
</span><span class="cx">         return E_POINTER;
</span><span class="cx"> 
</span><del>-    *result = DatabaseTracker::singleton().usage(*m_securityOrigin);
</del><ins>+    *result = DatabaseTracker::singleton().usage(SecurityOriginData::fromSecurityOrigin(*m_securityOrigin));
</ins><span class="cx"> 
</span><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="lines">@@ -139,13 +140,13 @@
</span><span class="cx">     if (!result)
</span><span class="cx">         return E_POINTER;
</span><span class="cx"> 
</span><del>-    *result = DatabaseTracker::singleton().quota(*m_securityOrigin);
</del><ins>+    *result = DatabaseTracker::singleton().quota(SecurityOriginData::fromSecurityOrigin(*m_securityOrigin));
</ins><span class="cx">     return S_OK;
</span><span class="cx"> }
</span><span class="cx">         
</span><span class="cx"> HRESULT WebSecurityOrigin::setQuota(unsigned long long quota) 
</span><span class="cx"> {
</span><del>-    DatabaseTracker::singleton().setQuota(*m_securityOrigin, quota);
</del><ins>+    DatabaseTracker::singleton().setQuota(SecurityOriginData::fromSecurityOrigin(*m_securityOrigin), quota);
</ins><span class="cx"> 
</span><span class="cx">     return S_OK;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/ChangeLog        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -1,3 +1,60 @@
</span><ins>+2016-11-14  Alex Christensen  &lt;achristensen@webkit.org&gt;
+
+        Move SecurityOrigin::createFromDatabaseIdentifier to SecurityOriginData
+        https://bugs.webkit.org/show_bug.cgi?id=164720
+
+        Reviewed by Brady Eidson.
+
+        * DatabaseProcess/DatabaseProcess.cpp:
+        (WebKit::DatabaseProcess::indexedDatabaseOrigins):
+        * DatabaseProcess/DatabaseProcess.h:
+        * NetworkProcess/NetworkProcess.cpp:
+        (WebKit::fetchDiskCacheEntries):
+        * Shared/API/c/WKSecurityOriginRef.cpp:
+        (WKSecurityOriginCreateFromDatabaseIdentifier):
+        * Shared/WebsiteData/WebsiteData.cpp:
+        (WebKit::WebsiteData::Entry::encode):
+        (WebKit::WebsiteData::Entry::decode):
+        * Shared/WebsiteData/WebsiteData.h:
+        * UIProcess/API/C/WKKeyValueStorageManager.cpp:
+        (WKKeyValueStorageManagerGetStorageDetailsByOrigin):
+        * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
+        (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
+        (WebKit::LocalStorageDatabaseTracker::origins):
+        * UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
+        (WebKit::UserMediaPermissionRequestManagerProxy::requestUserMediaPermissionForFrame):
+        (WebKit::UserMediaPermissionRequestManagerProxy::enumerateMediaDevicesForFrame):
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::exceededDatabaseQuota):
+        (WebKit::WebPageProxy::reachedApplicationCacheOriginQuota):
+        (WebKit::WebPageProxy::requestGeolocationPermissionForFrame):
+        * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+        (WebKit::WebsiteDataStore::fetchData):
+        (WebKit::WebsiteDataStore::removeData):
+        (WebKit::WebsiteDataStore::mediaKeyOrigins):
+        * WebProcess/InjectedBundle/API/c/WKBundle.cpp:
+        (WKBundleSetDatabaseQuota):
+        * WebProcess/MediaCache/WebMediaKeyStorageManager.cpp:
+        (WebKit::WebMediaKeyStorageManager::getMediaKeyOrigins):
+        * WebProcess/Storage/StorageAreaImpl.cpp:
+        (WebKit::StorageAreaImpl::create):
+        (WebKit::StorageAreaImpl::StorageAreaImpl):
+        (WebKit::StorageAreaImpl::securityOrigin):
+        * WebProcess/Storage/StorageAreaImpl.h:
+        * WebProcess/Storage/StorageAreaMap.cpp:
+        (WebKit::StorageAreaMap::dispatchSessionStorageEvent):
+        (WebKit::StorageAreaMap::dispatchLocalStorageEvent):
+        * WebProcess/Storage/StorageAreaMap.h:
+        (WebKit::StorageAreaMap::securityOrigin):
+        * WebProcess/Storage/StorageNamespaceImpl.cpp:
+        (WebKit::StorageNamespaceImpl::didDestroyStorageAreaMap):
+        (WebKit::StorageNamespaceImpl::storageArea):
+        * WebProcess/Storage/StorageNamespaceImpl.h:
+        * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+        (WebKit::WebChromeClient::exceededDatabaseQuota):
+        * WebProcess/WebProcess.cpp:
+        (WebKit::WebProcess::fetchWebsiteData):
+
</ins><span class="cx"> 2016-11-14  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Mac][iOS][WK2] Tighten permissions to change CapsLock delay
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessDatabaseProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -268,17 +268,17 @@
</span><span class="cx">         extension-&gt;revoke();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Vector&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;&gt; DatabaseProcess::indexedDatabaseOrigins()
</del><ins>+Vector&lt;WebCore::SecurityOriginData&gt; DatabaseProcess::indexedDatabaseOrigins()
</ins><span class="cx"> {
</span><span class="cx">     if (m_indexedDatabaseDirectory.isEmpty())
</span><span class="cx">         return { };
</span><span class="cx"> 
</span><del>-    Vector&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;&gt; securityOrigins;
</del><ins>+    Vector&lt;WebCore::SecurityOriginData&gt; securityOrigins;
</ins><span class="cx">     for (auto&amp; originPath : listDirectory(m_indexedDatabaseDirectory, &quot;*&quot;)) {
</span><span class="cx">         String databaseIdentifier = pathGetFileName(originPath);
</span><span class="cx"> 
</span><del>-        if (auto securityOrigin = SecurityOrigin::maybeCreateFromDatabaseIdentifier(databaseIdentifier))
-            securityOrigins.append(WTFMove(securityOrigin));
</del><ins>+        if (auto securityOrigin = SecurityOriginData::fromDatabaseIdentifier(databaseIdentifier))
+            securityOrigins.append(WTFMove(*securityOrigin));
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return securityOrigins;
</span></span></pre></div>
<a id="trunkSourceWebKit2DatabaseProcessDatabaseProcessh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/DatabaseProcess/DatabaseProcess.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -109,7 +109,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(INDEXED_DATABASE)
</span><del>-    Vector&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;&gt; indexedDatabaseOrigins();
</del><ins>+    Vector&lt;WebCore::SecurityOriginData&gt; indexedDatabaseOrigins();
</ins><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="cx">     // For execution on work queue thread only
</span></span></pre></div>
<a id="trunkSourceWebKit2NetworkProcessNetworkProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/NetworkProcess/NetworkProcess.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -311,7 +311,7 @@
</span><span class="cx"> {
</span><span class="cx"> #if ENABLE(NETWORK_CACHE)
</span><span class="cx">     if (NetworkCache::singleton().isEnabled()) {
</span><del>-        HashMap&lt;RefPtr&lt;SecurityOrigin&gt;, uint64_t&gt; originsAndSizes;
</del><ins>+        HashMap&lt;SecurityOriginData, uint64_t&gt; originsAndSizes;
</ins><span class="cx">         NetworkCache::singleton().traverse([fetchOptions, completionHandler = WTFMove(completionHandler), originsAndSizes = WTFMove(originsAndSizes)](auto* traversalEntry) mutable {
</span><span class="cx">             if (!traversalEntry) {
</span><span class="cx">                 Vector&lt;WebsiteData::Entry&gt; entries;
</span><span class="lines">@@ -326,7 +326,8 @@
</span><span class="cx">                 return;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            auto result = originsAndSizes.add(SecurityOrigin::create(traversalEntry-&gt;entry.response().url()), 0);
</del><ins>+            auto url = traversalEntry-&gt;entry.response().url();
+            auto result = originsAndSizes.add({url.protocol().toString(), url.host(), url.port()}, 0);
</ins><span class="cx"> 
</span><span class="cx">             if (fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes))
</span><span class="cx">                 result.iterator-&gt;value += traversalEntry-&gt;entry.sourceStorageRecord().header.size() + traversalEntry-&gt;recordInfo.bodySize;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedAPIcWKSecurityOriginRefcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/API/c/WKSecurityOriginRef.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/API/c/WKSecurityOriginRef.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/Shared/API/c/WKSecurityOriginRef.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -44,7 +44,10 @@
</span><span class="cx"> 
</span><span class="cx"> WKSecurityOriginRef WKSecurityOriginCreateFromDatabaseIdentifier(WKStringRef identifier)
</span><span class="cx"> {
</span><del>-    return toAPI(API::SecurityOrigin::create(WebCore::SecurityOrigin::createFromDatabaseIdentifier((toImpl(identifier)-&gt;string()))).leakRef());
</del><ins>+    auto origin = WebCore::SecurityOriginData::fromDatabaseIdentifier(toImpl(identifier)-&gt;string());
+    if (!origin)
+        return nullptr;
+    return toAPI(API::SecurityOrigin::create(origin.value().securityOrigin()).leakRef());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WKSecurityOriginRef WKSecurityOriginCreate(WKStringRef protocol, WKStringRef host, int port)
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebsiteDataWebsiteDatacpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WebsiteData::Entry::encode(IPC::Encoder&amp; encoder) const
</span><span class="cx"> {
</span><del>-    encoder &lt;&lt; WebCore::SecurityOriginData::fromSecurityOrigin(*origin);
</del><ins>+    encoder &lt;&lt; origin;
</ins><span class="cx">     encoder.encodeEnum(type);
</span><span class="cx">     encoder &lt;&lt; size;
</span><span class="cx"> }
</span><span class="lines">@@ -51,7 +51,7 @@
</span><span class="cx">     if (!decoder.decode(result.size))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    result.origin = securityOriginData.securityOrigin();
</del><ins>+    result.origin = securityOriginData;
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedWebsiteDataWebsiteDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/Shared/WebsiteData/WebsiteData.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -23,10 +23,9 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef WebsiteData_h
-#define WebsiteData_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><del>-#include &lt;WebCore/SecurityOrigin.h&gt;
</del><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;wtf/HashMap.h&gt;
</span><span class="cx"> #include &lt;wtf/HashSet.h&gt;
</span><span class="cx"> #include &lt;wtf/Vector.h&gt;
</span><span class="lines">@@ -42,7 +41,7 @@
</span><span class="cx"> 
</span><span class="cx"> struct WebsiteData {
</span><span class="cx">     struct Entry {
</span><del>-        RefPtr&lt;WebCore::SecurityOrigin&gt; origin;
</del><ins>+        WebCore::SecurityOriginData origin;
</ins><span class="cx">         WebsiteDataType type;
</span><span class="cx">         uint64_t size;
</span><span class="cx"> 
</span><span class="lines">@@ -62,5 +61,3 @@
</span><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> }
</span><del>-
-#endif // WebsiteData_h
</del></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKKeyValueStorageManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -97,7 +97,7 @@
</span><span class="cx">         for (const auto&amp; originDetails : storageDetails) {
</span><span class="cx">             HashMap&lt;String, RefPtr&lt;API::Object&gt;&gt; detailsMap;
</span><span class="cx"> 
</span><del>-            RefPtr&lt;API::Object&gt; origin = API::SecurityOrigin::create(WebCore::SecurityOrigin::createFromDatabaseIdentifier(originDetails.originIdentifier));
</del><ins>+            RefPtr&lt;API::Object&gt; origin = API::SecurityOrigin::create(WebCore::SecurityOriginData::fromDatabaseIdentifier(originDetails.originIdentifier)-&gt;securityOrigin());
</ins><span class="cx"> 
</span><span class="cx">             detailsMap.set(toImpl(WKKeyValueStorageManagerGetOriginKey())-&gt;string(), origin);
</span><span class="cx">             if (originDetails.creationTime)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflewk_database_managercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_database_manager.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx">     Vector&lt;RefPtr&lt;API::Object&gt;&gt; securityOrigins;
</span><span class="cx">     securityOrigins.reserveInitialCapacity(origins.size());
</span><span class="cx">     for (auto&amp; originIdentifier : origins)
</span><del>-        securityOrigins.uncheckedAppend(API::SecurityOrigin::create(originIdentifier));
</del><ins>+        securityOrigins.uncheckedAppend(API::SecurityOrigin::create(originIdentifier.securityOrigin().get()));
</ins><span class="cx"> 
</span><span class="cx">     arrayCallback-&gt;performCallbackWithReturnValue(API::Array::create(WTFMove(securityOrigins)).ptr());
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -161,8 +161,10 @@
</span><span class="cx">     for (const auto&amp; originIdentifier : originIdentifiersToDelete) {
</span><span class="cx">         removeDatabaseWithOriginIdentifier(originIdentifier);
</span><span class="cx"> 
</span><del>-        // FIXME: Move createFromDatabaseIdentifier to SecurityOriginData.
-        deletedDatabaseOrigins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier)));
</del><ins>+        if (auto origin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier))
+            deletedDatabaseOrigins.uncheckedAppend(*origin);
+        else
+            ASSERT_NOT_REACHED();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return deletedDatabaseOrigins;
</span><span class="lines">@@ -173,8 +175,12 @@
</span><span class="cx">     Vector&lt;SecurityOriginData&gt; origins;
</span><span class="cx">     origins.reserveInitialCapacity(m_origins.size());
</span><span class="cx"> 
</span><del>-    for (const String&amp; origin : m_origins)
-        origins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(origin)));
</del><ins>+    for (const String&amp; originIdentifier : m_origins) {
+        if (auto origin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier))
+            origins.uncheckedAppend(*origin);
+        else
+            ASSERT_NOT_REACHED();
+    }
</ins><span class="cx"> 
</span><span class="cx">     return origins;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessUserMediaPermissionRequestManagerProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/UIProcess/UserMediaPermissionRequestManagerProxy.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> #include &lt;WebCore/MediaConstraintsImpl.h&gt;
</span><span class="cx"> #include &lt;WebCore/MockRealtimeMediaSourceCenter.h&gt;
</span><span class="cx"> #include &lt;WebCore/RealtimeMediaSource.h&gt;
</span><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="cx"> 
</span><span class="lines">@@ -181,8 +182,8 @@
</span><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        auto userMediaOrigin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(userMediaDocumentOriginIdentifier));
-        auto topLevelOrigin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(topLevelDocumentOriginIdentifier));
</del><ins>+        auto userMediaOrigin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(userMediaDocumentOriginIdentifier)-&gt;securityOrigin());
+        auto topLevelOrigin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(topLevelDocumentOriginIdentifier)-&gt;securityOrigin());
</ins><span class="cx">         auto request = createRequest(userMediaID, audioDeviceUIDs, videoDeviceUIDs);
</span><span class="cx"> 
</span><span class="cx">         if (!m_page.uiClient().decidePolicyForUserMediaPermissionRequest(m_page, *m_page.process().webFrame(frameID), *userMediaOrigin.get(), *topLevelOrigin.get(), request.get())) {
</span><span class="lines">@@ -212,8 +213,8 @@
</span><span class="cx">     auto request = UserMediaPermissionCheckProxy::create(*this, userMediaID);
</span><span class="cx">     m_pendingDeviceRequests.add(userMediaID, request.ptr());
</span><span class="cx"> 
</span><del>-    auto userMediaOrigin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(userMediaDocumentOriginIdentifier));
-    auto topLevelOrigin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(topLevelDocumentOriginIdentifier));
</del><ins>+    auto userMediaOrigin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(userMediaDocumentOriginIdentifier).valueOr(SecurityOriginData()).securityOrigin());
+    auto topLevelOrigin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(topLevelDocumentOriginIdentifier).valueOr(SecurityOriginData()).securityOrigin());
</ins><span class="cx"> 
</span><span class="cx">     if (!m_page.uiClient().checkUserMediaPermissionForOrigin(m_page, *m_page.process().webFrame(frameID), *userMediaOrigin.get(), *topLevelOrigin.get(), request.get())) {
</span><span class="cx">         m_pendingDeviceRequests.take(userMediaID);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -5638,7 +5638,7 @@
</span><span class="cx">         WebFrameProxy* frame = m_process-&gt;webFrame(record-&gt;frameID);
</span><span class="cx">         MESSAGE_CHECK(frame);
</span><span class="cx"> 
</span><del>-        RefPtr&lt;API::SecurityOrigin&gt; origin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(record-&gt;originIdentifier));
</del><ins>+        RefPtr&lt;API::SecurityOrigin&gt; origin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(record-&gt;originIdentifier)-&gt;securityOrigin());
</ins><span class="cx">         auto currentReply = record-&gt;reply;
</span><span class="cx">         m_uiClient-&gt;exceededDatabaseQuota(this, frame, origin.get(),
</span><span class="cx">             record-&gt;databaseName, record-&gt;displayName, record-&gt;currentQuota,
</span><span class="lines">@@ -5651,7 +5651,7 @@
</span><span class="cx"> 
</span><span class="cx"> void WebPageProxy::reachedApplicationCacheOriginQuota(const String&amp; originIdentifier, uint64_t currentQuota, uint64_t totalBytesNeeded, PassRefPtr&lt;Messages::WebPageProxy::ReachedApplicationCacheOriginQuota::DelayedReply&gt; reply)
</span><span class="cx"> {
</span><del>-    Ref&lt;SecurityOrigin&gt; securityOrigin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
</del><ins>+    Ref&lt;SecurityOrigin&gt; securityOrigin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier)-&gt;securityOrigin();
</ins><span class="cx">     m_uiClient-&gt;reachedApplicationCacheOriginQuota(this, securityOrigin.get(), currentQuota, totalBytesNeeded, [reply](unsigned long long newQuota) { reply-&gt;send(newQuota); });
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -5661,7 +5661,7 @@
</span><span class="cx">     MESSAGE_CHECK(frame);
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Geolocation should probably be using toString() as its string representation instead of databaseIdentifier().
</span><del>-    RefPtr&lt;API::SecurityOrigin&gt; origin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
</del><ins>+    RefPtr&lt;API::SecurityOrigin&gt; origin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(originIdentifier)-&gt;securityOrigin());
</ins><span class="cx">     RefPtr&lt;GeolocationPermissionRequestProxy&gt; request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
</span><span class="cx"> 
</span><span class="cx">     if (m_uiClient-&gt;decidePolicyForGeolocationPermissionRequest(this, frame, origin.get(), request.get()))
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataStorecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -179,7 +179,7 @@
</span><span class="cx">             --pendingCallbacks;
</span><span class="cx"> 
</span><span class="cx">             for (auto&amp; entry : websiteData.entries) {
</span><del>-                auto displayName = WebsiteDataRecord::displayNameForOrigin(WebCore::SecurityOriginData::fromSecurityOrigin(*entry.origin));
</del><ins>+                auto displayName = WebsiteDataRecord::displayNameForOrigin(entry.origin);
</ins><span class="cx">                 if (!displayName)
</span><span class="cx">                     continue;
</span><span class="cx"> 
</span><span class="lines">@@ -187,7 +187,7 @@
</span><span class="cx">                 if (!record.displayName)
</span><span class="cx">                     record.displayName = WTFMove(displayName);
</span><span class="cx"> 
</span><del>-                record.add(entry.type, WebCore::SecurityOriginData::fromSecurityOrigin(*entry.origin));
</del><ins>+                record.add(entry.type, entry.origin);
</ins><span class="cx"> 
</span><span class="cx">                 if (fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes)) {
</span><span class="cx">                     if (!record.size)
</span><span class="lines">@@ -258,11 +258,12 @@
</span><span class="cx">     if (dataTypes.contains(WebsiteDataType::DiskCache)) {
</span><span class="cx">         callbackAggregator-&gt;addPendingCallback();
</span><span class="cx">         m_queue-&gt;dispatch([fetchOptions, mediaCacheDirectory = m_configuration.mediaCacheDirectory.isolatedCopy(), callbackAggregator] {
</span><ins>+            // FIXME: Make HTMLMediaElement::originsInMediaCache return a collection of SecurityOriginDatas.
</ins><span class="cx">             HashSet&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;&gt; origins = WebCore::HTMLMediaElement::originsInMediaCache(mediaCacheDirectory);
</span><span class="cx">             WebsiteData websiteData;
</span><span class="cx">             
</span><span class="cx">             for (auto&amp; origin : origins) {
</span><del>-                WebsiteData::Entry entry { origin, WebsiteDataType::DiskCache, 0 };
</del><ins>+                WebsiteData::Entry entry { WebCore::SecurityOriginData::fromSecurityOrigin(*origin), WebsiteDataType::DiskCache, 0 };
</ins><span class="cx">                 websiteData.entries.append(WTFMove(entry));
</span><span class="cx">             }
</span><span class="cx">             
</span><span class="lines">@@ -329,7 +330,7 @@
</span><span class="cx">             WebsiteData websiteData;
</span><span class="cx"> 
</span><span class="cx">             while (!origins.isEmpty())
</span><del>-                websiteData.entries.append(WebsiteData::Entry { origins.takeAny().securityOrigin(), WebsiteDataType::SessionStorage, 0 });
</del><ins>+                websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::SessionStorage, 0 });
</ins><span class="cx"> 
</span><span class="cx">             callbackAggregator-&gt;removePendingCallback(WTFMove(websiteData));
</span><span class="cx">         });
</span><span class="lines">@@ -342,7 +343,7 @@
</span><span class="cx">             WebsiteData websiteData;
</span><span class="cx"> 
</span><span class="cx">             while (!origins.isEmpty())
</span><del>-                websiteData.entries.append(WebsiteData::Entry { origins.takeAny().securityOrigin(), WebsiteDataType::LocalStorage, 0 });
</del><ins>+                websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::LocalStorage, 0 });
</ins><span class="cx"> 
</span><span class="cx">             callbackAggregator-&gt;removePendingCallback(WTFMove(websiteData));
</span><span class="cx">         });
</span><span class="lines">@@ -357,11 +358,12 @@
</span><span class="cx">             WebsiteData websiteData;
</span><span class="cx"> 
</span><span class="cx">             HashSet&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;&gt; origins;
</span><ins>+            // FIXME: getOriginsWithCache should return a collection of SecurityOriginDatas.
</ins><span class="cx">             storage-&gt;getOriginsWithCache(origins);
</span><span class="cx"> 
</span><span class="cx">             for (auto&amp; origin : origins) {
</span><span class="cx">                 uint64_t size = fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes) ? storage-&gt;diskUsageForOrigin(*origin) : 0;
</span><del>-                WebsiteData::Entry entry { origin, WebsiteDataType::OfflineWebApplicationCache, size };
</del><ins>+                WebsiteData::Entry entry { WebCore::SecurityOriginData::fromSecurityOrigin(*origin), WebsiteDataType::OfflineWebApplicationCache, size };
</ins><span class="cx"> 
</span><span class="cx">                 websiteData.entries.append(WTFMove(entry));
</span><span class="cx">             }
</span><span class="lines">@@ -408,7 +410,7 @@
</span><span class="cx">             RunLoop::main().dispatch([callbackAggregator, origins = WTFMove(origins)]() mutable {
</span><span class="cx">                 WebsiteData websiteData;
</span><span class="cx">                 for (auto&amp; origin : origins)
</span><del>-                    websiteData.entries.append(WebsiteData::Entry { origin.securityOrigin().ptr(), WebsiteDataType::MediaKeys, 0 });
</del><ins>+                    websiteData.entries.append(WebsiteData::Entry { origin, WebsiteDataType::MediaKeys, 0 });
</ins><span class="cx"> 
</span><span class="cx">                 callbackAggregator-&gt;removePendingCallback(WTFMove(websiteData));
</span><span class="cx">             });
</span><span class="lines">@@ -898,7 +900,7 @@
</span><span class="cx">         m_queue-&gt;dispatch([origins = WTFMove(origins), callbackAggregator, webSQLDatabaseDirectory = m_configuration.webSQLDatabaseDirectory.isolatedCopy()] {
</span><span class="cx">             auto databaseTracker = WebCore::DatabaseTracker::trackerWithDatabasePath(webSQLDatabaseDirectory);
</span><span class="cx">             for (auto&amp; origin : origins)
</span><del>-                databaseTracker-&gt;deleteOrigin(origin.securityOrigin());
</del><ins>+                databaseTracker-&gt;deleteOrigin(origin);
</ins><span class="cx">             RunLoop::main().dispatch([callbackAggregator] {
</span><span class="cx">                 callbackAggregator-&gt;removePendingCallback();
</span><span class="cx">             });
</span><span class="lines">@@ -1096,8 +1098,8 @@
</span><span class="cx"> 
</span><span class="cx">         auto mediaKeyIdentifier = WebCore::pathGetFileName(originPath);
</span><span class="cx"> 
</span><del>-        if (auto securityOrigin = WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier(mediaKeyIdentifier))
-            origins.append(WebCore::SecurityOriginData::fromSecurityOrigin(*securityOrigin));
</del><ins>+        if (auto securityOrigin = WebCore::SecurityOriginData::fromDatabaseIdentifier(mediaKeyIdentifier))
+            origins.append(*securityOrigin);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return origins;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessInjectedBundleAPIcWKBundlecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/InjectedBundle/API/c/WKBundle.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -218,7 +218,7 @@
</span><span class="cx"> void WKBundleSetDatabaseQuota(WKBundleRef bundleRef, uint64_t quota)
</span><span class="cx"> {
</span><span class="cx">     // Historically, we've used the following (somewhat nonsensical) string for the databaseIdentifier of local files.
</span><del>-    DatabaseTracker::singleton().setQuota(SecurityOrigin::createFromDatabaseIdentifier(&quot;file__0&quot;), quota);
</del><ins>+    DatabaseTracker::singleton().setQuota(*SecurityOriginData::fromDatabaseIdentifier(&quot;file__0&quot;), quota);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WKDataRef WKBundleCreateWKDataFromUInt8Array(WKBundleRef bundle, JSContextRef context, JSValueRef data)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessMediaCacheWebMediaKeyStorageManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/MediaCache/WebMediaKeyStorageManager.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -70,11 +70,11 @@
</span><span class="cx"> 
</span><span class="cx">         String mediaKeyIdentifier = url.lastPathComponent();
</span><span class="cx"> 
</span><del>-        RefPtr&lt;SecurityOrigin&gt; securityOrigin = SecurityOrigin::maybeCreateFromDatabaseIdentifier(mediaKeyIdentifier);
</del><ins>+        auto securityOrigin = SecurityOriginData::fromDatabaseIdentifier(mediaKeyIdentifier);
</ins><span class="cx">         if (!securityOrigin)
</span><span class="cx">             continue;
</span><span class="cx"> 
</span><del>-        results.append(SecurityOriginData::fromSecurityOrigin(*securityOrigin));
</del><ins>+        results.append(*securityOrigin);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     return results;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessStorageStorageAreaImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &lt;WebCore/Frame.h&gt;
</span><span class="cx"> #include &lt;WebCore/Page.h&gt;
</span><span class="cx"> #include &lt;WebCore/SchemeRegistry.h&gt;
</span><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;WebCore/Settings.h&gt;
</span><span class="cx"> 
</span><span class="cx"> using namespace WebCore;
</span><span class="lines">@@ -43,14 +44,14 @@
</span><span class="cx">     return ++storageAreaID;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-Ref&lt;StorageAreaImpl&gt; StorageAreaImpl::create(PassRefPtr&lt;StorageAreaMap&gt; storageAreaMap)
</del><ins>+Ref&lt;StorageAreaImpl&gt; StorageAreaImpl::create(Ref&lt;StorageAreaMap&gt;&amp;&amp; storageAreaMap)
</ins><span class="cx"> {
</span><del>-    return adoptRef(*new StorageAreaImpl(storageAreaMap));
</del><ins>+    return adoptRef(*new StorageAreaImpl(WTFMove(storageAreaMap)));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-StorageAreaImpl::StorageAreaImpl(PassRefPtr&lt;StorageAreaMap&gt; storageAreaMap)
</del><ins>+StorageAreaImpl::StorageAreaImpl(Ref&lt;StorageAreaMap&gt;&amp;&amp; storageAreaMap)
</ins><span class="cx">     : m_storageAreaID(generateStorageAreaID())
</span><del>-    , m_storageAreaMap(storageAreaMap)
</del><ins>+    , m_storageAreaMap(WTFMove(storageAreaMap))
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -126,9 +127,9 @@
</span><span class="cx">     ASSERT_NOT_REACHED();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-WebCore::SecurityOrigin&amp; StorageAreaImpl::securityOrigin()
</del><ins>+WebCore::SecurityOriginData StorageAreaImpl::securityOrigin() const
</ins><span class="cx"> {
</span><del>-    return m_storageAreaMap-&gt;securityOrigin();
</del><ins>+    return WebCore::SecurityOriginData::fromSecurityOrigin(m_storageAreaMap-&gt;securityOrigin());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessStorageStorageAreaImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaImpl.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -41,13 +41,13 @@
</span><span class="cx"> 
</span><span class="cx"> class StorageAreaImpl final : public WebCore::StorageArea {
</span><span class="cx"> public:
</span><del>-    static Ref&lt;StorageAreaImpl&gt; create(PassRefPtr&lt;StorageAreaMap&gt;);
</del><ins>+    static Ref&lt;StorageAreaImpl&gt; create(Ref&lt;StorageAreaMap&gt;&amp;&amp;);
</ins><span class="cx">     virtual ~StorageAreaImpl();
</span><span class="cx"> 
</span><span class="cx">     uint64_t storageAreaID() const { return m_storageAreaID; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    StorageAreaImpl(PassRefPtr&lt;StorageAreaMap&gt;);
</del><ins>+    StorageAreaImpl(Ref&lt;StorageAreaMap&gt;&amp;&amp;);
</ins><span class="cx"> 
</span><span class="cx">     // WebCore::StorageArea.
</span><span class="cx">     unsigned length() override;
</span><span class="lines">@@ -63,10 +63,10 @@
</span><span class="cx">     void incrementAccessCount() override;
</span><span class="cx">     void decrementAccessCount() override;
</span><span class="cx">     void closeDatabaseIfIdle() override;
</span><del>-    WebCore::SecurityOrigin&amp; securityOrigin() override;
</del><ins>+    WebCore::SecurityOriginData securityOrigin() const override;
</ins><span class="cx"> 
</span><span class="cx">     uint64_t m_storageAreaID;
</span><del>-    RefPtr&lt;StorageAreaMap&gt; m_storageAreaMap;
</del><ins>+    Ref&lt;StorageAreaMap&gt; m_storageAreaMap;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessStorageStorageAreaMapcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -344,7 +344,7 @@
</span><span class="cx">         frames.append(frame);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    StorageEventDispatcher::dispatchSessionStorageEventsToFrames(*page, frames, key, oldValue, newValue, urlString, m_securityOrigin.ptr());
</del><ins>+    StorageEventDispatcher::dispatchSessionStorageEventsToFrames(*page, frames, key, oldValue, newValue, urlString, SecurityOriginData::fromSecurityOrigin(m_securityOrigin));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void StorageAreaMap::dispatchLocalStorageEvent(uint64_t sourceStorageAreaID, const String&amp; key, const String&amp; oldValue, const String&amp; newValue, const String&amp; urlString)
</span><span class="lines">@@ -375,7 +375,7 @@
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    StorageEventDispatcher::dispatchLocalStorageEventsToFrames(pageGroup, frames, key, oldValue, newValue, urlString, m_securityOrigin.ptr());
</del><ins>+    StorageEventDispatcher::dispatchLocalStorageEventsToFrames(pageGroup, frames, key, oldValue, newValue, urlString, SecurityOriginData::fromSecurityOrigin(m_securityOrigin));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessStorageStorageAreaMaph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageAreaMap.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -59,7 +59,7 @@
</span><span class="cx">     void clear(WebCore::Frame* sourceFrame, StorageAreaImpl* sourceArea);
</span><span class="cx">     bool contains(const String&amp; key);
</span><span class="cx"> 
</span><del>-    WebCore::SecurityOrigin&amp; securityOrigin() { return m_securityOrigin.get(); }
</del><ins>+    const WebCore::SecurityOrigin&amp; securityOrigin() const { return m_securityOrigin.get(); }
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     StorageAreaMap(StorageNamespaceImpl*, Ref&lt;WebCore::SecurityOrigin&gt;&amp;&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessStorageStorageNamespaceImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -68,21 +68,21 @@
</span><span class="cx"> 
</span><span class="cx"> void StorageNamespaceImpl::didDestroyStorageAreaMap(StorageAreaMap&amp; map)
</span><span class="cx"> {
</span><del>-    m_storageAreaMaps.remove(&amp;map.securityOrigin());
</del><ins>+    m_storageAreaMaps.remove(SecurityOriginData::fromSecurityOrigin(map.securityOrigin()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-RefPtr&lt;StorageArea&gt; StorageNamespaceImpl::storageArea(RefPtr&lt;SecurityOrigin&gt;&amp;&amp; securityOrigin)
</del><ins>+RefPtr&lt;StorageArea&gt; StorageNamespaceImpl::storageArea(const SecurityOriginData&amp; securityOrigin)
</ins><span class="cx"> {
</span><span class="cx">     RefPtr&lt;StorageAreaMap&gt; map;
</span><span class="cx"> 
</span><del>-    auto&amp; slot = m_storageAreaMaps.add(securityOrigin.get(), nullptr).iterator-&gt;value;
</del><ins>+    auto&amp; slot = m_storageAreaMaps.add(securityOrigin, nullptr).iterator-&gt;value;
</ins><span class="cx">     if (!slot) {
</span><del>-        map = StorageAreaMap::create(this, *securityOrigin);
</del><ins>+        map = StorageAreaMap::create(this, securityOrigin.securityOrigin());
</ins><span class="cx">         slot = map.get();
</span><span class="cx">     } else
</span><span class="cx">         map = slot;
</span><span class="cx"> 
</span><del>-    return StorageAreaImpl::create(WTFMove(map));
</del><ins>+    return StorageAreaImpl::create(map.releaseNonNull());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> RefPtr&lt;StorageNamespace&gt; StorageNamespaceImpl::copy(Page* newPage)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessStorageStorageNamespaceImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/Storage/StorageNamespaceImpl.h        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -23,9 +23,9 @@
</span><span class="cx">  * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx">  */
</span><span class="cx"> 
</span><del>-#ifndef WebStorageNamespaceImpl_h
-#define WebStorageNamespaceImpl_h
</del><ins>+#pragma once
</ins><span class="cx"> 
</span><ins>+#include &lt;WebCore/SecurityOriginData.h&gt;
</ins><span class="cx"> #include &lt;WebCore/SecurityOriginHash.h&gt;
</span><span class="cx"> #include &lt;WebCore/StorageArea.h&gt;
</span><span class="cx"> #include &lt;WebCore/StorageNamespace.h&gt;
</span><span class="lines">@@ -54,7 +54,7 @@
</span><span class="cx"> private:
</span><span class="cx">     explicit StorageNamespaceImpl(WebCore::StorageType, uint64_t storageNamespaceID, WebCore::SecurityOrigin* topLevelOrigin, unsigned quotaInBytes);
</span><span class="cx"> 
</span><del>-    RefPtr&lt;WebCore::StorageArea&gt; storageArea(RefPtr&lt;WebCore::SecurityOrigin&gt;&amp;&amp;) override;
</del><ins>+    RefPtr&lt;WebCore::StorageArea&gt; storageArea(const WebCore::SecurityOriginData&amp;) override;
</ins><span class="cx">     RefPtr&lt;WebCore::StorageNamespace&gt; copy(WebCore::Page*) override;
</span><span class="cx"> 
</span><span class="cx">     const WebCore::StorageType m_storageType;
</span><span class="lines">@@ -65,9 +65,7 @@
</span><span class="cx"> 
</span><span class="cx">     const unsigned m_quotaInBytes;
</span><span class="cx"> 
</span><del>-    HashMap&lt;RefPtr&lt;WebCore::SecurityOrigin&gt;, StorageAreaMap*&gt; m_storageAreaMaps;
</del><ins>+    HashMap&lt;WebCore::SecurityOriginData, StorageAreaMap*&gt; m_storageAreaMaps;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span><del>-
-#endif // WebStorageNamespaceImpl_h
</del></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebCoreSupportWebChromeClientcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -680,11 +680,12 @@
</span><span class="cx">     if (!origin)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><ins>+    auto originData = SecurityOriginData::fromSecurityOrigin(*origin);
</ins><span class="cx">     auto&amp; tracker = DatabaseTracker::singleton();
</span><del>-    auto currentQuota = tracker.quota(*origin);
-    auto currentOriginUsage = tracker.usage(*origin);
</del><ins>+    auto currentQuota = tracker.quota(originData);
+    auto currentOriginUsage = tracker.usage(originData);
</ins><span class="cx">     uint64_t newQuota = 0;
</span><del>-    RefPtr&lt;API::SecurityOrigin&gt; securityOrigin = API::SecurityOrigin::create(WebCore::SecurityOrigin::createFromDatabaseIdentifier(WebCore::SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier()));
</del><ins>+    RefPtr&lt;API::SecurityOrigin&gt; securityOrigin = API::SecurityOrigin::create(WebCore::SecurityOriginData::fromDatabaseIdentifier(WebCore::SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier())-&gt;securityOrigin());
</ins><span class="cx">     newQuota = m_page-&gt;injectedBundleUIClient().didExceedDatabaseQuota(m_page, securityOrigin.get(), databaseName, details.displayName(), currentQuota, currentOriginUsage, details.currentUsage(), details.expectedUsage());
</span><span class="cx"> 
</span><span class="cx">     if (!newQuota) {
</span><span class="lines">@@ -693,7 +694,7 @@
</span><span class="cx">             Messages::WebPageProxy::ExceededDatabaseQuota::Reply(newQuota), m_page-&gt;pageID(), Seconds::infinity(), IPC::SendSyncOption::InformPlatformProcessWillSuspend);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    tracker.setQuota(*origin, newQuota);
</del><ins>+    tracker.setQuota(originData, newQuota);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebChromeClient::reachedMaxAppCacheSize(int64_t)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebProcesscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebProcess.cpp (208726 => 208727)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebProcess.cpp        2016-11-15 04:28:45 UTC (rev 208726)
+++ trunk/Source/WebKit2/WebProcess/WebProcess.cpp        2016-11-15 06:08:12 UTC (rev 208727)
</span><span class="lines">@@ -1217,7 +1217,7 @@
</span><span class="cx"> {
</span><span class="cx">     if (websiteDataTypes.contains(WebsiteDataType::MemoryCache)) {
</span><span class="cx">         for (auto&amp; origin : MemoryCache::singleton().originsWithCache(sessionID))
</span><del>-            websiteData.entries.append(WebsiteData::Entry { origin, WebsiteDataType::MemoryCache, 0 });
</del><ins>+            websiteData.entries.append(WebsiteData::Entry { SecurityOriginData::fromSecurityOrigin(*origin), WebsiteDataType::MemoryCache, 0 });
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>