<!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 <achristensen@webkit.org> 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 <achristensen@webkit.org>
+
+ 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 <pecoraro@apple.com>
</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<StaticLock> locker(guidMutex);
</span><span class="cx">
</span><del>- m_guid = guidForOriginAndName(securityOrigin().toString(), name);
</del><ins>+ m_guid = guidForOriginAndName(securityOrigin().securityOrigin()->toString(), name);
</ins><span class="cx"> guidToDatabaseMap().ensure(m_guid, [] {
</span><span class="cx"> return HashSet<Database*>();
</span><span class="cx"> }).iterator->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& Database::securityOrigin()
</del><ins>+SecurityOriginData Database::securityOrigin()
</ins><span class="cx"> {
</span><span class="cx"> if (m_scriptExecutionContext->isContextThread())
</span><del>- return m_contextThreadSecurityOrigin.get();
</del><ins>+ return SecurityOriginData::fromSecurityOrigin(m_contextThreadSecurityOrigin.get());
</ins><span class="cx"> auto& 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<String> tableNames();
</span><span class="cx">
</span><del>- SecurityOrigin& 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 "SchemeRegistry.h"
</span><span class="cx"> #include "ScriptExecutionContext.h"
</span><span class="cx"> #include "SecurityOrigin.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include "Settings.h"
</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->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->securityOrigin();
</del><ins>+ return SecurityOriginData::fromSecurityOrigin(*m_scriptExecutionContext->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<DatabaseContext>, private ActiveDOMObject {
</span><span class="cx"> public:
</span><span class="lines">@@ -60,7 +61,7 @@
</span><span class="cx"> void databaseExceededQuota(const String& 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 "ScriptController.h"
</span><span class="cx"> #include "ScriptExecutionContext.h"
</span><span class="cx"> #include "SecurityOrigin.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include <wtf/NeverDestroyed.h>
</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& name, SecurityOrigin& 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& context, const String& 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&) = 0;
- virtual void dispatchDidModifyDatabase(SecurityOrigin&, const String& databaseName) = 0;
</del><ins>+ virtual void dispatchDidModifyOrigin(const SecurityOriginData&) = 0;
+ virtual void dispatchDidModifyDatabase(const SecurityOriginData&, const String& databaseName) = 0;
</ins><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>- virtual void dispatchDidAddNewOrigin(SecurityOrigin&) = 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&) { }
</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<void> DatabaseTracker::hasAdequateQuotaForOrigin(SecurityOrigin& origin, unsigned estimatedSize)
</del><ins>+ExceptionOr<void> DatabaseTracker::hasAdequateQuotaForOrigin(const SecurityOriginData& origin, unsigned estimatedSize)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> auto usage = this->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& 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& 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& origin)
</del><ins>+bool DatabaseTracker::hasEntryForOriginNoLock(const SecurityOriginData& 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& origin, const String& databaseIdentifier)
</del><ins>+bool DatabaseTracker::hasEntryForDatabase(const SecurityOriginData& origin, const String& 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& 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& origin) const
</del><ins>+String DatabaseTracker::originPath(const SecurityOriginData& 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& origin, const String& name, bool createIfNotExists)
</del><ins>+String DatabaseTracker::fullPathForDatabaseNoLock(const SecurityOriginData& origin, const String& 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->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& origin, const String& name, bool createIfNotExists)
</del><ins>+String DatabaseTracker::fullPathForDatabase(const SecurityOriginData& origin, const String& 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<Ref<SecurityOrigin>> DatabaseTracker::origins()
</del><ins>+Vector<SecurityOriginData> 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<Ref<SecurityOrigin>> origins;
</del><ins>+ Vector<SecurityOriginData> 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))->isolatedCopy());
</del><ins>+ origins.append(SecurityOriginData::fromDatabaseIdentifier(statement.getColumnText(0))->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<String> DatabaseTracker::databaseNamesNoLock(SecurityOrigin& origin)
</del><ins>+Vector<String> DatabaseTracker::databaseNamesNoLock(const SecurityOriginData& 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<String> 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("Failed to retrieve all database names for origin %s", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Failed to retrieve all database names for origin %s", 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<String> DatabaseTracker::databaseNames(SecurityOrigin& origin)
</del><ins>+Vector<String> DatabaseTracker::databaseNames(const SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> Vector<String> 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& name, SecurityOrigin& origin)
</del><ins>+DatabaseDetails DatabaseTracker::detailsForNameAndOrigin(const String& name, const SecurityOriginData& 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& origin, const String& name, const String& displayName, unsigned estimatedSize)
</del><ins>+void DatabaseTracker::setDatabaseDetails(const SecurityOriginData& origin, const String& name, const String& 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<DatabaseOriginMap>();
</span><span class="cx">
</span><del>- auto& origin = database.securityOrigin();
</del><ins>+ auto origin = database.securityOrigin();
</ins><span class="cx">
</span><del>- auto* nameMap = m_openDatabaseMap->get(&origin);
</del><ins>+ auto* nameMap = m_openDatabaseMap->get(origin);
</ins><span class="cx"> if (!nameMap) {
</span><span class="cx"> nameMap = new DatabaseNameMap;
</span><span class="cx"> m_openDatabaseMap->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->get(&database.securityOrigin());
</del><ins>+ DatabaseNameMap* nameMap = m_openDatabaseMap->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->isEmpty())
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- m_openDatabaseMap->remove(&database.securityOrigin());
</del><ins>+ m_openDatabaseMap->remove(database.securityOrigin());
</ins><span class="cx"> delete nameMap;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<OriginLock> DatabaseTracker::originLockFor(SecurityOrigin& origin)
</del><ins>+RefPtr<OriginLock> DatabaseTracker::originLockFor(const SecurityOriginData& 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& origin)
</del><ins>+void DatabaseTracker::deleteOriginLockFor(const SecurityOriginData& 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& origin)
</del><ins>+unsigned long long DatabaseTracker::usage(const SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> String originPath = this->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& origin)
</del><ins>+unsigned long long DatabaseTracker::quotaNoLock(const SecurityOriginData& 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("Failed to prepare statement.");
</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& origin)
</del><ins>+unsigned long long DatabaseTracker::quota(const SecurityOriginData& 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& origin, unsigned long long quota)
</del><ins>+void DatabaseTracker::setQuota(const SecurityOriginData& 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, "INSERT INTO Origins VALUES (?, ?)");
</span><span class="cx"> if (statement.prepare() != SQLITE_OK) {
</span><del>- LOG_ERROR("Unable to establish origin %s in the tracker", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to establish origin %s in the tracker", 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("Unable to establish origin %s in the tracker", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to establish origin %s in the tracker", 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("Failed to set quota %llu in tracker database for origin %s", quota, SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Failed to set quota %llu in tracker database for origin %s", 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->dispatchDidAddNewOrigin(origin);
</del><ins>+ m_client->dispatchDidAddNewOrigin();
</ins><span class="cx"> m_client->dispatchDidModifyOrigin(origin);
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool DatabaseTracker::addDatabase(SecurityOrigin& origin, const String& name, const String& path)
</del><ins>+bool DatabaseTracker::addDatabase(const SecurityOriginData& origin, const String& name, const String& 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("Failed to add database %s to origin %s: %s\n", name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data(), m_database.lastErrorMsg());
</del><ins>+ LOG_ERROR("Failed to add database %s to origin %s: %s\n", 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& origin)
</del><ins>+bool DatabaseTracker::deleteOrigin(const SecurityOriginData& 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& origin, DeletionMode deletionMode)
</del><ins>+bool DatabaseTracker::deleteOrigin(const SecurityOriginData& origin, DeletionMode deletionMode)
</ins><span class="cx"> {
</span><span class="cx"> Vector<String> 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("Unable to retrieve list of database names for origin %s", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to retrieve list of database names for origin %s", 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("Tried to delete an origin (%s) while either creating database in it or already deleting it", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Tried to delete an origin (%s) while either creating database in it or already deleting it", 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& 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("Unable to delete file for database %s in origin %s", name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to delete file for database %s in origin %s", 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, "DELETE FROM Databases WHERE origin=?");
</span><span class="cx"> if (statement.prepare() != SQLITE_OK) {
</span><del>- LOG_ERROR("Unable to prepare deletion of databases from origin %s from tracker", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to prepare deletion of databases from origin %s from tracker", 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("Unable to execute deletion of databases from origin %s from tracker", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to execute deletion of databases from origin %s from tracker", 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, "DELETE FROM Origins WHERE origin=?");
</span><span class="cx"> if (originStatement.prepare() != SQLITE_OK) {
</span><del>- LOG_ERROR("Unable to prepare deletion of origin %s from tracker", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to prepare deletion of origin %s from tracker", 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("Unable to execute deletion of databases from origin %s from tracker", SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to execute deletion of databases from origin %s from tracker", 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<SecurityOrigin> 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& origin, const String& name)
</del><ins>+bool DatabaseTracker::isDeletingDatabaseOrOriginFor(const SecurityOriginData& origin, const String& 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& origin, const String& name)
</del><ins>+void DatabaseTracker::recordCreatingDatabase(const SecurityOriginData& origin, const String& 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(&origin);
</del><ins>+ auto* nameSet = m_beingCreated.get(origin);
</ins><span class="cx"> if (!nameSet) {
</span><span class="cx"> auto ownedSet = std::make_unique<HashCountedSet<String>>();
</span><span class="cx"> nameSet = ownedSet.get();
</span><span class="lines">@@ -922,13 +921,13 @@
</span><span class="cx"> nameSet->add(name.isolatedCopy());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseTracker::doneCreatingDatabase(SecurityOrigin& origin, const String& name)
</del><ins>+void DatabaseTracker::doneCreatingDatabase(const SecurityOriginData& origin, const String& name)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">
</span><del>- ASSERT(m_beingCreated.contains(&origin));
</del><ins>+ ASSERT(m_beingCreated.contains(origin));
</ins><span class="cx">
</span><del>- auto iterator = m_beingCreated.find(&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& origin, const String& name)
</del><ins>+bool DatabaseTracker::creatingDatabase(const SecurityOriginData& origin, const String& name)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx">
</span><del>- auto iterator = m_beingCreated.find(&origin);
</del><ins>+ auto iterator = m_beingCreated.find(origin);
</ins><span class="cx"> return iterator != m_beingCreated.end() && iterator->value->contains(name);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool DatabaseTracker::canDeleteDatabase(SecurityOrigin& origin, const String& name)
</del><ins>+bool DatabaseTracker::canDeleteDatabase(const SecurityOriginData& origin, const String& name)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><span class="cx"> return !creatingDatabase(origin, name) && !isDeletingDatabase(origin, name);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseTracker::recordDeletingDatabase(SecurityOrigin& origin, const String& name)
</del><ins>+void DatabaseTracker::recordDeletingDatabase(const SecurityOriginData& origin, const String& 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(&origin);
</del><ins>+ auto* nameSet = m_beingDeleted.get(origin);
</ins><span class="cx"> if (!nameSet) {
</span><span class="cx"> auto ownedSet = std::make_unique<HashSet<String>>();
</span><span class="cx"> nameSet = ownedSet.get();
</span><span class="lines">@@ -969,12 +968,12 @@
</span><span class="cx"> nameSet->add(name.isolatedCopy());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseTracker::doneDeletingDatabase(SecurityOrigin& origin, const String& name)
</del><ins>+void DatabaseTracker::doneDeletingDatabase(const SecurityOriginData& origin, const String& name)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><del>- ASSERT(m_beingDeleted.contains(&origin));
</del><ins>+ ASSERT(m_beingDeleted.contains(origin));
</ins><span class="cx">
</span><del>- auto iterator = m_beingDeleted.find(&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& origin, const String& name)
</del><ins>+bool DatabaseTracker::isDeletingDatabase(const SecurityOriginData& origin, const String& name)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><del>- auto* nameSet = m_beingDeleted.get(&origin);
</del><ins>+ auto* nameSet = m_beingDeleted.get(origin);
</ins><span class="cx"> return nameSet && nameSet->contains(name);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-bool DatabaseTracker::canDeleteOrigin(SecurityOrigin& origin)
</del><ins>+bool DatabaseTracker::canDeleteOrigin(const SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><del>- return !(isDeletingOrigin(origin) || m_beingCreated.get(&origin));
</del><ins>+ return !(isDeletingOrigin(origin) || m_beingCreated.get(origin));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-bool DatabaseTracker::isDeletingOrigin(SecurityOrigin& origin)
</del><ins>+bool DatabaseTracker::isDeletingOrigin(const SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!m_databaseGuard.tryLock());
</span><del>- return m_originsBeingDeleted.contains(&origin);
</del><ins>+ return m_originsBeingDeleted.contains(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseTracker::recordDeletingOrigin(SecurityOrigin& origin)
</del><ins>+void DatabaseTracker::recordDeletingOrigin(const SecurityOriginData& 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& origin)
</del><ins>+void DatabaseTracker::doneDeletingOrigin(const SecurityOriginData& 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(&origin);
</del><ins>+ m_originsBeingDeleted.remove(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-bool DatabaseTracker::deleteDatabase(SecurityOrigin& origin, const String& name)
</del><ins>+bool DatabaseTracker::deleteDatabase(const SecurityOriginData& origin, const String& 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("Unable to delete file for database %s in origin %s", name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to delete file for database %s in origin %s", 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, "DELETE FROM Databases WHERE origin=? AND name=?");
</span><span class="cx"> if (statement.prepare() != SQLITE_OK) {
</span><del>- LOG_ERROR("Unable to prepare deletion of database %s from origin %s from tracker", name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to prepare deletion of database %s from origin %s from tracker", 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("Unable to execute deletion of database %s from origin %s from tracker", name.utf8().data(), SecurityOriginData::fromSecurityOrigin(origin).databaseIdentifier().utf8().data());
</del><ins>+ LOG_ERROR("Unable to execute deletion of database %s from origin %s from tracker", 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& origin, const String& name, DeletionMode deletionMode)
</del><ins>+bool DatabaseTracker::deleteDatabaseFile(const SecurityOriginData& origin, const String& 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->get(&origin)) {
</del><ins>+ if (auto* nameMap = m_openDatabaseMap->get(origin)) {
</ins><span class="cx"> if (auto* databaseSet = nameMap->get(name)) {
</span><span class="cx"> for (auto& 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<RefPtr<Database>> deletedDatabases;
</span><del>- Vector<std::pair<Ref<SecurityOrigin>, Vector<String>>> deletedDatabaseNames;
</del><ins>+ Vector<std::pair<SecurityOriginData, Vector<String>>> 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& openDatabase : *m_openDatabaseMap) {
</span><del>- auto& origin = *openDatabase.key;
</del><ins>+ auto& origin = openDatabase.key;
</ins><span class="cx"> DatabaseNameMap* databaseNameMap = openDatabase.value;
</span><span class="cx"> Vector<String> 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, "SELECT path FROM Databases WHERE origin=? AND name=?;");
</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<std::pair<Ref<SecurityOrigin>, String>>;
</del><ins>+using NotificationQueue = Vector<std::pair<SecurityOriginData, String>>;
</ins><span class="cx">
</span><span class="cx"> static NotificationQueue& 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& origin, const String& name)
</del><ins>+void DatabaseTracker::scheduleNotifyDatabaseChanged(const SecurityOriginData& origin, const String& 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 "DatabaseDetails.h"
</span><span class="cx"> #include "ExceptionOr.h"
</span><span class="cx"> #include "SQLiteDatabase.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include "SecurityOriginHash.h"
</span><span class="cx"> #include <wtf/HashCountedSet.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</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<void> canEstablishDatabase(DatabaseContext&, const String& name, unsigned estimatedSize);
</span><span class="cx"> ExceptionOr<void> retryCanEstablishDatabase(DatabaseContext&, const String& name, unsigned estimatedSize);
</span><span class="cx">
</span><del>- void setDatabaseDetails(SecurityOrigin&, const String& name, const String& displayName, unsigned estimatedSize);
- String fullPathForDatabase(SecurityOrigin&, const String& name, bool createIfDoesNotExist);
</del><ins>+ void setDatabaseDetails(const SecurityOriginData&, const String& name, const String& displayName, unsigned estimatedSize);
+ String fullPathForDatabase(const SecurityOriginData&, const String& name, bool createIfDoesNotExist);
</ins><span class="cx">
</span><span class="cx"> void addOpenDatabase(Database&);
</span><span class="cx"> void removeOpenDatabase(Database&);
</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<Ref<SecurityOrigin>> origins();
- WEBCORE_EXPORT Vector<String> databaseNames(SecurityOrigin&);
</del><ins>+ WEBCORE_EXPORT Vector<SecurityOriginData> origins();
+ WEBCORE_EXPORT Vector<String> databaseNames(const SecurityOriginData&);
</ins><span class="cx">
</span><del>- DatabaseDetails detailsForNameAndOrigin(const String&, SecurityOrigin&);
</del><ins>+ DatabaseDetails detailsForNameAndOrigin(const String&, const SecurityOriginData&);
</ins><span class="cx">
</span><del>- WEBCORE_EXPORT unsigned long long usage(SecurityOrigin&);
- WEBCORE_EXPORT unsigned long long quota(SecurityOrigin&);
- WEBCORE_EXPORT void setQuota(SecurityOrigin&, unsigned long long);
- RefPtr<OriginLock> originLockFor(SecurityOrigin&);
</del><ins>+ WEBCORE_EXPORT unsigned long long usage(const SecurityOriginData&);
+ WEBCORE_EXPORT unsigned long long quota(const SecurityOriginData&);
+ WEBCORE_EXPORT void setQuota(const SecurityOriginData&, unsigned long long);
+ RefPtr<OriginLock> originLockFor(const SecurityOriginData&);
</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&);
- WEBCORE_EXPORT bool deleteDatabase(SecurityOrigin&, const String& name);
</del><ins>+ WEBCORE_EXPORT bool deleteOrigin(const SecurityOriginData&);
+ WEBCORE_EXPORT bool deleteDatabase(const SecurityOriginData&, const String& 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&, const String& name);
</del><ins>+ void scheduleNotifyDatabaseChanged(const SecurityOriginData&, const String& name);
</ins><span class="cx">
</span><span class="cx"> void doneCreatingDatabase(Database&);
</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& databasePath);
</span><span class="cx">
</span><del>- ExceptionOr<void> hasAdequateQuotaForOrigin(SecurityOrigin&, unsigned estimatedSize);
</del><ins>+ ExceptionOr<void> hasAdequateQuotaForOrigin(const SecurityOriginData&, unsigned estimatedSize);
</ins><span class="cx">
</span><del>- bool hasEntryForOriginNoLock(SecurityOrigin&);
- String fullPathForDatabaseNoLock(SecurityOrigin&, const String& name, bool createIfDoesNotExist);
- Vector<String> databaseNamesNoLock(SecurityOrigin&);
- unsigned long long quotaNoLock(SecurityOrigin&);
</del><ins>+ bool hasEntryForOriginNoLock(const SecurityOriginData&);
+ String fullPathForDatabaseNoLock(const SecurityOriginData&, const String& name, bool createIfDoesNotExist);
+ Vector<String> databaseNamesNoLock(const SecurityOriginData&);
+ unsigned long long quotaNoLock(const SecurityOriginData&);
</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&) const;
</del><ins>+ String originPath(const SecurityOriginData&) const;
</ins><span class="cx">
</span><del>- bool hasEntryForDatabase(SecurityOrigin&, const String& databaseIdentifier);
</del><ins>+ bool hasEntryForDatabase(const SecurityOriginData&, const String& databaseIdentifier);
</ins><span class="cx">
</span><del>- bool addDatabase(SecurityOrigin&, const String& name, const String& path);
</del><ins>+ bool addDatabase(const SecurityOriginData&, const String& name, const String& 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&, DeletionMode);
- bool deleteDatabaseFile(SecurityOrigin&, const String& name, DeletionMode);
</del><ins>+ bool deleteOrigin(const SecurityOriginData&, DeletionMode);
+ bool deleteDatabaseFile(const SecurityOriginData&, const String& name, DeletionMode);
</ins><span class="cx">
</span><del>- void deleteOriginLockFor(SecurityOrigin&);
</del><ins>+ void deleteOriginLockFor(const SecurityOriginData&);
</ins><span class="cx">
</span><span class="cx"> using DatabaseSet = HashSet<Database*>;
</span><span class="cx"> using DatabaseNameMap = HashMap<String, DatabaseSet*>;
</span><del>- using DatabaseOriginMap = HashMap<RefPtr<SecurityOrigin>, DatabaseNameMap*>;
</del><ins>+ using DatabaseOriginMap = HashMap<SecurityOriginData, DatabaseNameMap*>;
</ins><span class="cx">
</span><span class="cx"> Lock m_openDatabaseMapGuard;
</span><span class="cx"> mutable std::unique_ptr<DatabaseOriginMap> 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<RefPtr<SecurityOrigin>, std::unique_ptr<HashCountedSet<String>>> m_beingCreated;
- HashMap<RefPtr<SecurityOrigin>, std::unique_ptr<HashSet<String>>> m_beingDeleted;
- HashSet<RefPtr<SecurityOrigin>> m_originsBeingDeleted;
- bool isDeletingDatabaseOrOriginFor(SecurityOrigin&, const String& name);
- void recordCreatingDatabase(SecurityOrigin&, const String& name);
- void doneCreatingDatabase(SecurityOrigin&, const String& name);
- bool creatingDatabase(SecurityOrigin&, const String& name);
- bool canDeleteDatabase(SecurityOrigin&, const String& name);
- void recordDeletingDatabase(SecurityOrigin&, const String& name);
- void doneDeletingDatabase(SecurityOrigin&, const String& name);
- bool isDeletingDatabase(SecurityOrigin&, const String& name);
- bool canDeleteOrigin(SecurityOrigin&);
- bool isDeletingOrigin(SecurityOrigin&);
- void recordDeletingOrigin(SecurityOrigin&);
- void doneDeletingOrigin(SecurityOrigin&);
</del><ins>+ HashMap<SecurityOriginData, std::unique_ptr<HashCountedSet<String>>> m_beingCreated;
+ HashMap<SecurityOriginData, std::unique_ptr<HashSet<String>>> m_beingDeleted;
+ HashSet<SecurityOriginData> m_originsBeingDeleted;
+ bool isDeletingDatabaseOrOriginFor(const SecurityOriginData&, const String& name);
+ void recordCreatingDatabase(const SecurityOriginData&, const String& name);
+ void doneCreatingDatabase(const SecurityOriginData&, const String& name);
+ bool creatingDatabase(const SecurityOriginData&, const String& name);
+ bool canDeleteDatabase(const SecurityOriginData&, const String& name);
+ void recordDeletingDatabase(const SecurityOriginData&, const String& name);
+ void doneDeletingDatabase(const SecurityOriginData&, const String& name);
+ bool isDeletingDatabase(const SecurityOriginData&, const String& name);
+ bool canDeleteOrigin(const SecurityOriginData&);
+ bool isDeletingOrigin(const SecurityOriginData&);
+ void recordDeletingOrigin(const SecurityOriginData&);
+ void doneDeletingOrigin(const SecurityOriginData&);
</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& 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 "Page.h"
</span><span class="cx"> #include "PageGroup.h"
</span><span class="cx"> #include "SecurityOrigin.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include "Storage.h"
</span><span class="cx"> #include "StorageNamespace.h"
</span><span class="cx"> #include "StorageNamespaceProvider.h"
</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->page().sessionStorage()->storageArea(targetFrame->document()->securityOrigin());
</del><ins>+ return m_pageAgent->page().sessionStorage()->storageArea(SecurityOriginData::fromSecurityOrigin(*targetFrame->document()->securityOrigin()));
</ins><span class="cx"> return m_pageAgent->page().storageNamespaceProvider().localStorageArea(*targetFrame->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& 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<StorageArea> storageArea(RefPtr<SecurityOrigin>&&) override { return adoptRef(new EmptyStorageArea); }
</del><ins>+ RefPtr<StorageArea> storageArea(const SecurityOriginData&) override { return adoptRef(new EmptyStorageArea); }
</ins><span class="cx"> RefPtr<StorageNamespace> 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 "Screen.h"
</span><span class="cx"> #include "ScriptController.h"
</span><span class="cx"> #include "SecurityOrigin.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include "SecurityPolicy.h"
</span><span class="cx"> #include "SerializedScriptValue.h"
</span><span class="cx"> #include "Settings.h"
</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->sessionStorage()->storageArea(document->securityOrigin());
</del><ins>+ auto storageArea = page->sessionStorage()->storageArea(SecurityOriginData::fromSecurityOrigin(*document->securityOrigin()));
</ins><span class="cx"> if (!storageArea->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<uint16_t>::max();
-
</del><span class="cx"> static bool schemeRequiresHost(const URL& 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<SecurityOrigin> SecurityOrigin::maybeCreateFromDatabaseIdentifier(const String& 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(&portOkay);
- bool portAbsent = (separator2 == databaseIdentifier.length() - 1);
- if (!(portOkay || portAbsent))
- return nullptr;
-
- if (port < 0 || port > 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 + "://" + host + "/"));
- origin->m_port = port;
- return WTFMove(origin);
-}
-
-Ref<SecurityOrigin> SecurityOrigin::createFromDatabaseIdentifier(const String& databaseIdentifier)
-{
- if (RefPtr<SecurityOrigin> origin = maybeCreateFromDatabaseIdentifier(databaseIdentifier))
- return origin.releaseNonNull();
- return create(URL());
-}
-
</del><span class="cx"> Ref<SecurityOrigin> SecurityOrigin::create(const String& protocol, const String& host, Optional<uint16_t> 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<SecurityOrigin> create(const URL&);
</span><span class="cx"> static Ref<SecurityOrigin> createUnique();
</span><span class="cx">
</span><del>- WEBCORE_EXPORT static Ref<SecurityOrigin> createFromDatabaseIdentifier(const String&);
- // 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<SecurityOrigin> maybeCreateFromDatabaseIdentifier(const String&);
-
</del><span class="cx"> WEBCORE_EXPORT static Ref<SecurityOrigin> createFromString(const String&);
</span><span class="cx"> WEBCORE_EXPORT static Ref<SecurityOrigin> create(const String& protocol, const String& host, Optional<uint16_t> 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<SecurityOriginData> SecurityOriginData::fromDatabaseIdentifier(const String& 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(&portOkay);
+ bool portAbsent = (separator2 == databaseIdentifier.length() - 1);
+ if (!(portOkay || portAbsent))
+ return Nullopt;
+
+ if (port < 0 || port > std::numeric_limits<uint16_t>::max())
+ return Nullopt;
+
+ return SecurityOriginData {databaseIdentifier.substring(0, separator1), databaseIdentifier.substring(separator1 + 1, separator2 - separator1 - 1), static_cast<uint16_t>(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& protocol, const String& host, Optional<uint16_t> 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<SecurityOriginData> fromDatabaseIdentifier(const String&);
</ins><span class="cx">
</span><span class="cx"> template<class Encoder> void encode(Encoder&) const;
</span><span class="cx"> template<class Decoder> static bool decode(Decoder&, SecurityOriginData&);
</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<StorageArea> {
</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& 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 "Page.h"
</span><span class="cx"> #include "PageGroup.h"
</span><span class="cx"> #include "SecurityOrigin.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include "StorageEvent.h"
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx">
</span><del>-void StorageEventDispatcher::dispatchSessionStorageEvents(const String& key, const String& oldValue, const String& newValue, SecurityOrigin* securityOrigin, Frame* sourceFrame)
</del><ins>+void StorageEventDispatcher::dispatchSessionStorageEvents(const String& key, const String& oldValue, const String& newValue, const SecurityOriginData& securityOrigin, Frame* sourceFrame)
</ins><span class="cx"> {
</span><span class="cx"> Page* page = sourceFrame->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 = &page->mainFrame(); frame; frame = frame->tree().traverseNext()) {
</span><del>- if (sourceFrame != frame && frame->document()->securityOrigin()->equal(securityOrigin))
</del><ins>+ if (sourceFrame != frame && frame->document()->securityOrigin()->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->document()->url(), securityOrigin);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageEventDispatcher::dispatchLocalStorageEvents(const String& key, const String& oldValue, const String& newValue, SecurityOrigin* securityOrigin, Frame* sourceFrame)
</del><ins>+void StorageEventDispatcher::dispatchLocalStorageEvents(const String& key, const String& oldValue, const String& newValue, const SecurityOriginData& securityOrigin, Frame* sourceFrame)
</ins><span class="cx"> {
</span><span class="cx"> Page* page = sourceFrame->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& pageInGroup : page->group().pages()) {
</span><span class="cx"> for (Frame* frame = &pageInGroup->mainFrame(); frame; frame = frame->tree().traverseNext()) {
</span><del>- if (sourceFrame != frame && frame->document()->securityOrigin()->equal(securityOrigin))
</del><ins>+ if (sourceFrame != frame && frame->document()->securityOrigin()->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->group(), frames, key, oldValue, newValue, sourceFrame->document()->url(), securityOrigin);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageEventDispatcher::dispatchSessionStorageEventsToFrames(Page& page, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, SecurityOrigin* securityOrigin)
</del><ins>+void StorageEventDispatcher::dispatchSessionStorageEventsToFrames(Page& page, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, const SecurityOriginData& 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& frame : frames) {
</span><span class="cx"> auto result = frame->document()->domWindow()->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& pageGroup, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, SecurityOrigin* securityOrigin)
</del><ins>+void StorageEventDispatcher::dispatchLocalStorageEventsToFrames(PageGroup& pageGroup, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><span class="cx"> for (auto& 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& frame : frames) {
</span><span class="cx"> auto result = frame->document()->domWindow()->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& key, const String& oldValue, const String& newValue, SecurityOrigin*, Frame* sourceFrame);
- WEBCORE_EXPORT static void dispatchLocalStorageEvents(const String& key, const String& oldValue, const String& newValue, SecurityOrigin*, Frame* sourceFrame);
</del><ins>+ WEBCORE_EXPORT static void dispatchSessionStorageEvents(const String& key, const String& oldValue, const String& newValue, const SecurityOriginData&, Frame* sourceFrame);
+ WEBCORE_EXPORT static void dispatchLocalStorageEvents(const String& key, const String& oldValue, const String& newValue, const SecurityOriginData&, Frame* sourceFrame);
</ins><span class="cx">
</span><del>- WEBCORE_EXPORT static void dispatchSessionStorageEventsToFrames(Page&, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, SecurityOrigin*);
- WEBCORE_EXPORT static void dispatchLocalStorageEventsToFrames(PageGroup&, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, SecurityOrigin*);
</del><ins>+ WEBCORE_EXPORT static void dispatchSessionStorageEventsToFrames(Page&, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, const SecurityOriginData&);
+ WEBCORE_EXPORT static void dispatchLocalStorageEventsToFrames(PageGroup&, const Vector<RefPtr<Frame>>& frames, const String& key, const String& oldValue, const String& newValue, const String& url, const SecurityOriginData&);
</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<StorageNamespace> {
</span><span class="cx"> public:
</span><span class="cx"> virtual ~StorageNamespace() { }
</span><del>- virtual RefPtr<StorageArea> storageArea(RefPtr<SecurityOrigin>&&) = 0;
</del><ins>+ virtual RefPtr<StorageArea> storageArea(const SecurityOriginData&) = 0;
</ins><span class="cx"> virtual RefPtr<StorageNamespace> 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 "StorageNamespaceProvider.h"
</span><span class="cx">
</span><span class="cx"> #include "Document.h"
</span><ins>+#include "SecurityOriginData.h"
</ins><span class="cx"> #include "StorageArea.h"
</span><span class="cx"> #include "StorageNamespace.h"
</span><span class="cx">
</span><span class="lines">@@ -62,7 +63,7 @@
</span><span class="cx"> {
</span><span class="cx"> auto& storageNamespace = document.securityOrigin()->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& 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 <achristensen@webkit.org>
+
+ 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 <wenson_hsieh@apple.com>
</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<SecurityOrigin>&& origin, RefPtr<StorageSyncManager>&& syncManager, unsigned quota)
</del><ins>+inline StorageAreaImpl::StorageAreaImpl(StorageType storageType, const SecurityOriginData& origin, RefPtr<StorageSyncManager>&& 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, &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<StorageAreaImpl> StorageAreaImpl::create(StorageType storageType, RefPtr<SecurityOrigin>&& origin, RefPtr<StorageSyncManager>&& syncManager, unsigned quota)
</del><ins>+Ref<StorageAreaImpl> StorageAreaImpl::create(StorageType storageType, const SecurityOriginData& origin, RefPtr<StorageSyncManager>&& syncManager, unsigned quota)
</ins><span class="cx"> {
</span><del>- Ref<StorageAreaImpl> area = adoptRef(*new StorageAreaImpl(storageType, WTFMove(origin), WTFMove(syncManager), quota));
</del><ins>+ Ref<StorageAreaImpl> 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->m_storageSyncManager) {
</span><del>- area->m_storageAreaSync = StorageAreaSync::create(area->m_storageSyncManager.get(), area.copyRef(), SecurityOriginData::fromSecurityOrigin(*area->m_securityOrigin).databaseIdentifier());
</del><ins>+ area->m_storageAreaSync = StorageAreaSync::create(area->m_storageSyncManager.get(), area.copyRef(), area->m_securityOrigin.databaseIdentifier());
</ins><span class="cx"> ASSERT(area->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& 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, &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& key, const String& oldValue, const String& 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 <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/StorageArea.h>
</span><span class="cx"> #include <WebCore/Timer.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</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<StorageAreaImpl> create(WebCore::StorageType, RefPtr<WebCore::SecurityOrigin>&&, RefPtr<WebCore::StorageSyncManager>&&, unsigned quota);
</del><ins>+ static Ref<StorageAreaImpl> create(WebCore::StorageType, const WebCore::SecurityOriginData&, RefPtr<WebCore::StorageSyncManager>&&, 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& 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<StorageAreaImpl> 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<WebCore::SecurityOrigin>&&, RefPtr<WebCore::StorageSyncManager>&&, unsigned quota);
</del><ins>+ StorageAreaImpl(WebCore::StorageType, const WebCore::SecurityOriginData&, RefPtr<WebCore::StorageSyncManager>&&, unsigned quota);
</ins><span class="cx"> explicit StorageAreaImpl(const StorageAreaImpl&);
</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& key, const String& oldValue, const String& newValue, WebCore::Frame* sourceFrame);
</span><span class="cx">
</span><span class="cx"> WebCore::StorageType m_storageType;
</span><del>- RefPtr<WebCore::SecurityOrigin> m_securityOrigin;
</del><ins>+ WebCore::SecurityOriginData m_securityOrigin;
</ins><span class="cx"> RefPtr<WebCore::StorageMap> m_storageMap;
</span><span class="cx">
</span><span class="cx"> RefPtr<StorageAreaSync> 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<StorageArea> StorageNamespaceImpl::storageArea(RefPtr<SecurityOrigin>&& origin)
</del><ins>+RefPtr<StorageArea> StorageNamespaceImpl::storageArea(const SecurityOriginData& 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<StorageAreaImpl> 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& 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 <WebCore/SecurityOriginHash.h>
</del><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/StorageArea.h>
</span><span class="cx"> #include <WebCore/StorageNamespace.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</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&);
</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& path, unsigned quota);
</span><span class="cx">
</span><del>- RefPtr<WebCore::StorageArea> storageArea(RefPtr<WebCore::SecurityOrigin>&&) override;
</del><ins>+ RefPtr<WebCore::StorageArea> storageArea(const WebCore::SecurityOriginData&) override;
</ins><span class="cx"> RefPtr<StorageNamespace> copy(WebCore::Page* newPage) override;
</span><span class="cx">
</span><del>- typedef HashMap<RefPtr<WebCore::SecurityOrigin>, RefPtr<StorageAreaImpl>> StorageAreaMap;
</del><ins>+ typedef HashMap<WebCore::SecurityOriginData, RefPtr<StorageAreaImpl>> 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<RefPtr<SecurityOrigin>>& result)
</del><ins>+Vector<SecurityOriginData> 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<SecurityOriginData> result;
+ result.reserveInitialCapacity(m_originSet.size());
+ for (auto& 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& originIdentifier)
</span><span class="cx"> {
</span><del>- deleteOrigin(&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& 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& originIdentifier, const String& databaseFile);
</span><span class="cx">
</span><span class="cx"> void deleteAllOrigins();
</span><del>- void deleteOrigin(WebCore::SecurityOrigin*);
</del><ins>+ void deleteOrigin(const WebCore::SecurityOriginData&);
</ins><span class="cx"> void deleteOriginWithIdentifier(const String& originIdentifier);
</span><del>- void origins(Vector<RefPtr<WebCore::SecurityOrigin>>& result);
</del><ins>+ Vector<WebCore::SecurityOriginData> origins();
</ins><span class="cx"> long long diskUsageForOrigin(WebCore::SecurityOrigin*);
</span><span class="cx">
</span><span class="cx"> void cancelDeletingOrigin(const String& 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& origin)
</ins><span class="cx"> {
</span><span class="cx"> for (const auto& storageNamespaceProvider : storageNamespaceProviders()) {
</span><span class="cx"> if (auto* localStorageNamespace = storageNamespaceProvider->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 <WebCore/StorageNamespaceProvider.h>
</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&);
</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 <achristensen@webkit.org>
+
+ 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 <darin@apple.com>
</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& 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<String> nameVector = DatabaseTracker::singleton().databaseNames(*[origin _core]);
</del><ins>+ Vector<String> 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& 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 && DatabaseTracker::singleton().deleteOrigin(*[origin _core]);
</del><ins>+ return origin && 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 && DatabaseTracker::singleton().deleteDatabase(*[origin _core], databaseIdentifier);
</del><ins>+ return origin && 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&) final;
- void dispatchDidModifyDatabase(WebCore::SecurityOrigin&, const WTF::String& databaseIdentifier) final;
</del><ins>+ void dispatchDidModifyOrigin(const WebCore::SecurityOriginData&) final;
+ void dispatchDidModifyDatabase(const WebCore::SecurityOriginData&, const WTF::String& databaseIdentifier) final;
</ins><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span><del>- void dispatchDidAddNewOrigin(WebCore::SecurityOrigin&) 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& client, SecurityOrigin& origin)
</del><ins>+ static void dispatchToMainThread(WebDatabaseManagerClient& client, const SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> auto context = std::make_unique<DidModifyOriginData>(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& client, SecurityOrigin& origin)
</del><ins>+ DidModifyOriginData(WebDatabaseManagerClient& client, const SecurityOriginData& 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& client;
</span><del>- Ref<SecurityOrigin> origin;
</del><ins>+ SecurityOriginData origin;
</ins><span class="cx"> };
</span><span class="cx">
</span><del>-void WebDatabaseManagerClient::dispatchDidModifyOrigin(SecurityOrigin& origin)
</del><ins>+void WebDatabaseManagerClient::dispatchDidModifyOrigin(const SecurityOriginData& 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:&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& origin, const String& databaseIdentifier)
</del><ins>+void WebDatabaseManagerClient::dispatchDidModifyDatabase(const SecurityOriginData& origin, const String& 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:&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&)
</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 "WebSecurityOriginInternal.h"
</span><span class="cx"> #import <WebCore/DatabaseTracker.h>
</span><ins>+#import <WebCore/SecurityOriginData.h>
</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 "WebStorageTrackerClient.h"
</span><span class="cx"> #import <WebCore/PageGroup.h>
</span><span class="cx"> #import <WebCore/SecurityOrigin.h>
</span><ins>+#import <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #import <pthread.h>
</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<RefPtr<SecurityOrigin>> 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 < coreOrigins.size(); ++i) {
- WebSecurityOrigin *webOrigin = [[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:coreOrigins[i].get()];
</del><ins>+ for (auto& 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& originIdentifier) override;
</span><del>- virtual void dispatchDidModifyOrigin(PassRefPtr<SecurityOrigin>);
</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 "WebSecurityOriginInternal.h"
</span><span class="cx"> #import "WebStorageManagerPrivate.h"
</span><span class="cx"> #import <WebCore/SecurityOrigin.h>
</span><ins>+#import <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #import <wtf/MainThread.h>
</span><span class="cx"> #import <wtf/RetainPtr.h>
</span><span class="cx"> #import <wtf/text/WTFString.h>
</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<SecurityOrigin> origin)
</del><ins>+void WebStorageTrackerClient::dispatchDidModifyOrigin(SecurityOrigin* origin)
</ins><span class="cx"> {
</span><del>- RetainPtr<WebSecurityOrigin> webSecurityOrigin = adoptNS([[WebSecurityOrigin alloc] _initWithWebCoreSecurityOrigin:origin.get()]);
</del><ins>+ RetainPtr<WebSecurityOrigin> 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& 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->securityOrigin().ptr());
</ins><span class="cx"> return;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- callOnMainThread([origin = WTFMove(origin)]() mutable {
- WebStorageTrackerClient::sharedWebStorageTrackerClient()->dispatchDidModifyOrigin(WTFMove(origin));
</del><ins>+ callOnMainThread([origin = origin->securityOrigin()->isolatedCopy()]() mutable {
+ WebStorageTrackerClient::sharedWebStorageTrackerClient()->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<SecurityOrigin> 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->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<SecurityOrigin*>(_private));
</del><ins>+ return DatabaseTracker::singleton().usage(SecurityOriginData::fromSecurityOrigin(*reinterpret_cast<SecurityOrigin*>(_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<SecurityOrigin*>(_private));
</del><ins>+ return DatabaseTracker::singleton().quota(SecurityOriginData::fromSecurityOrigin(*reinterpret_cast<SecurityOrigin*>(_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<SecurityOrigin*>(_private), quota);
</del><ins>+ DatabaseTracker::singleton().setQuota(SecurityOriginData::fromSecurityOrigin(*reinterpret_cast<SecurityOrigin*>(_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 <achristensen@webkit.org>
+
+ 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 <darin@apple.com>
</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 <WebCore/DatabaseTracker.h>
</span><span class="cx"> #include <WebCore/FileSystem.h>
</span><span class="cx"> #include <WebCore/SecurityOrigin.h>
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <wtf/MainThread.h>
</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<RefPtr<SecurityOrigin>> origins;
</span><span class="cx"> for (auto& 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<COMEnumVariant<Vector<RefPtr<SecurityOrigin>>>> enumVariant(AdoptCOM, COMEnumVariant<Vector<RefPtr<SecurityOrigin>>>::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->securityOrigin());
</del><ins>+ auto databaseNames = DatabaseTracker::singleton().databaseNames(SecurityOriginData::fromSecurityOrigin(*webSecurityOrigin->securityOrigin()));
</ins><span class="cx">
</span><span class="cx"> COMPtr<COMEnumVariant<Vector<String>>> enumVariant(AdoptCOM, COMEnumVariant<Vector<String>>::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->securityOrigin());
</del><ins>+ DatabaseTracker::singleton().deleteOrigin(SecurityOriginData::fromSecurityOrigin(*webSecurityOrigin->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->securityOrigin(), String(databaseName, SysStringLen(databaseName)));
</del><ins>+ DatabaseTracker::singleton().deleteDatabase(SecurityOriginData::fromSecurityOrigin(*webSecurityOrigin->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& origin)
</ins><span class="cx"> {
</span><del>- DidModifyOriginData* context = new DidModifyOriginData(databaseManager, origin->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<SecurityOrigin> origin)
</del><ins>+ DidModifyOriginData(WebDatabaseManager* databaseManager, const SecurityOriginData& 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<DidModifyOriginData*>(context);
</span><del>- info->databaseManager->dispatchDidModifyOrigin(*info->origin);
</del><ins>+ info->databaseManager->dispatchDidModifyOrigin(info->origin);
</ins><span class="cx"> delete info;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> WebDatabaseManager* databaseManager;
</span><del>- RefPtr<SecurityOrigin> origin;
</del><ins>+ SecurityOriginData origin;
</ins><span class="cx"> };
</span><span class="cx">
</span><del>-void WebDatabaseManager::dispatchDidModifyOrigin(SecurityOrigin& origin)
</del><ins>+void WebDatabaseManager::dispatchDidModifyOrigin(const SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> if (!isMainThread()) {
</span><del>- DidModifyOriginData::dispatchToMainThread(this, &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<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(&origin));
</del><ins>+ COMPtr<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin.securityOrigin().ptr()));
</ins><span class="cx"> notifyCenter->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& origin, const String& databaseName)
</del><ins>+void WebDatabaseManager::dispatchDidModifyDatabase(const SecurityOriginData& origin, const String& databaseName)
</ins><span class="cx"> {
</span><span class="cx"> if (!isMainThread()) {
</span><del>- DidModifyOriginData::dispatchToMainThread(this, &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<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(&origin));
</del><ins>+ COMPtr<WebSecurityOrigin> securityOrigin(AdoptCOM, WebSecurityOrigin::createInstance(origin.securityOrigin().ptr()));
</ins><span class="cx">
</span><span class="cx"> HashMap<String, String> 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 "WebKit.h"
</span><span class="cx"> #include <WebCore/DatabaseManagerClient.h>
</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&);
- virtual void dispatchDidModifyDatabase(WebCore::SecurityOrigin&, const WTF::String& databaseName);
</del><ins>+ virtual void dispatchDidModifyOrigin(const WebCore::SecurityOriginData&);
+ virtual void dispatchDidModifyDatabase(const WebCore::SecurityOriginData&, const WTF::String& 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 "MarshallingHelpers.h"
</span><span class="cx"> #include <WebCore/BString.h>
</span><span class="cx"> #include <WebCore/DatabaseTracker.h>
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/URL.h>
</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 <achristensen@webkit.org>
+
+ 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 <bfulgham@apple.com>
</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->revoke();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<RefPtr<WebCore::SecurityOrigin>> DatabaseProcess::indexedDatabaseOrigins()
</del><ins>+Vector<WebCore::SecurityOriginData> 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<RefPtr<WebCore::SecurityOrigin>> securityOrigins;
</del><ins>+ Vector<WebCore::SecurityOriginData> securityOrigins;
</ins><span class="cx"> for (auto& originPath : listDirectory(m_indexedDatabaseDirectory, "*")) {
</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<RefPtr<WebCore::SecurityOrigin>> indexedDatabaseOrigins();
</del><ins>+ Vector<WebCore::SecurityOriginData> 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<RefPtr<SecurityOrigin>, uint64_t> originsAndSizes;
</del><ins>+ HashMap<SecurityOriginData, uint64_t> 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<WebsiteData::Entry> 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->entry.response().url()), 0);
</del><ins>+ auto url = traversalEntry->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->value += traversalEntry->entry.sourceStorageRecord().header.size() + traversalEntry->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)->string()))).leakRef());
</del><ins>+ auto origin = WebCore::SecurityOriginData::fromDatabaseIdentifier(toImpl(identifier)->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& encoder) const
</span><span class="cx"> {
</span><del>- encoder << WebCore::SecurityOriginData::fromSecurityOrigin(*origin);
</del><ins>+ encoder << origin;
</ins><span class="cx"> encoder.encodeEnum(type);
</span><span class="cx"> encoder << 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 <WebCore/SecurityOrigin.h>
</del><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="cx"> #include <wtf/Vector.h>
</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<WebCore::SecurityOrigin> 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& originDetails : storageDetails) {
</span><span class="cx"> HashMap<String, RefPtr<API::Object>> detailsMap;
</span><span class="cx">
</span><del>- RefPtr<API::Object> origin = API::SecurityOrigin::create(WebCore::SecurityOrigin::createFromDatabaseIdentifier(originDetails.originIdentifier));
</del><ins>+ RefPtr<API::Object> origin = API::SecurityOrigin::create(WebCore::SecurityOriginData::fromDatabaseIdentifier(originDetails.originIdentifier)->securityOrigin());
</ins><span class="cx">
</span><span class="cx"> detailsMap.set(toImpl(WKKeyValueStorageManagerGetOriginKey())->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<RefPtr<API::Object>> securityOrigins;
</span><span class="cx"> securityOrigins.reserveInitialCapacity(origins.size());
</span><span class="cx"> for (auto& 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->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& 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<SecurityOriginData> origins;
</span><span class="cx"> origins.reserveInitialCapacity(m_origins.size());
</span><span class="cx">
</span><del>- for (const String& origin : m_origins)
- origins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(origin)));
</del><ins>+ for (const String& 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 <WebCore/MediaConstraintsImpl.h>
</span><span class="cx"> #include <WebCore/MockRealtimeMediaSourceCenter.h>
</span><span class="cx"> #include <WebCore/RealtimeMediaSource.h>
</span><ins>+#include <WebCore/SecurityOriginData.h>
</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)->securityOrigin());
+ auto topLevelOrigin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(topLevelDocumentOriginIdentifier)->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->webFrame(record->frameID);
</span><span class="cx"> MESSAGE_CHECK(frame);
</span><span class="cx">
</span><del>- RefPtr<API::SecurityOrigin> origin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(record->originIdentifier));
</del><ins>+ RefPtr<API::SecurityOrigin> origin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(record->originIdentifier)->securityOrigin());
</ins><span class="cx"> auto currentReply = record->reply;
</span><span class="cx"> m_uiClient->exceededDatabaseQuota(this, frame, origin.get(),
</span><span class="cx"> record->databaseName, record->displayName, record->currentQuota,
</span><span class="lines">@@ -5651,7 +5651,7 @@
</span><span class="cx">
</span><span class="cx"> void WebPageProxy::reachedApplicationCacheOriginQuota(const String& originIdentifier, uint64_t currentQuota, uint64_t totalBytesNeeded, PassRefPtr<Messages::WebPageProxy::ReachedApplicationCacheOriginQuota::DelayedReply> reply)
</span><span class="cx"> {
</span><del>- Ref<SecurityOrigin> securityOrigin = SecurityOrigin::createFromDatabaseIdentifier(originIdentifier);
</del><ins>+ Ref<SecurityOrigin> securityOrigin = SecurityOriginData::fromDatabaseIdentifier(originIdentifier)->securityOrigin();
</ins><span class="cx"> m_uiClient->reachedApplicationCacheOriginQuota(this, securityOrigin.get(), currentQuota, totalBytesNeeded, [reply](unsigned long long newQuota) { reply->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<API::SecurityOrigin> origin = API::SecurityOrigin::create(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
</del><ins>+ RefPtr<API::SecurityOrigin> origin = API::SecurityOrigin::create(SecurityOriginData::fromDatabaseIdentifier(originIdentifier)->securityOrigin());
</ins><span class="cx"> RefPtr<GeolocationPermissionRequestProxy> request = m_geolocationPermissionRequestManager.createRequest(geolocationID);
</span><span class="cx">
</span><span class="cx"> if (m_uiClient->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& 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->addPendingCallback();
</span><span class="cx"> m_queue->dispatch([fetchOptions, mediaCacheDirectory = m_configuration.mediaCacheDirectory.isolatedCopy(), callbackAggregator] {
</span><ins>+ // FIXME: Make HTMLMediaElement::originsInMediaCache return a collection of SecurityOriginDatas.
</ins><span class="cx"> HashSet<RefPtr<WebCore::SecurityOrigin>> origins = WebCore::HTMLMediaElement::originsInMediaCache(mediaCacheDirectory);
</span><span class="cx"> WebsiteData websiteData;
</span><span class="cx">
</span><span class="cx"> for (auto& 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->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->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<RefPtr<WebCore::SecurityOrigin>> origins;
</span><ins>+ // FIXME: getOriginsWithCache should return a collection of SecurityOriginDatas.
</ins><span class="cx"> storage->getOriginsWithCache(origins);
</span><span class="cx">
</span><span class="cx"> for (auto& origin : origins) {
</span><span class="cx"> uint64_t size = fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes) ? storage->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& 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->removePendingCallback(WTFMove(websiteData));
</span><span class="cx"> });
</span><span class="lines">@@ -898,7 +900,7 @@
</span><span class="cx"> m_queue->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& origin : origins)
</span><del>- databaseTracker->deleteOrigin(origin.securityOrigin());
</del><ins>+ databaseTracker->deleteOrigin(origin);
</ins><span class="cx"> RunLoop::main().dispatch([callbackAggregator] {
</span><span class="cx"> callbackAggregator->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("file__0"), quota);
</del><ins>+ DatabaseTracker::singleton().setQuota(*SecurityOriginData::fromDatabaseIdentifier("file__0"), 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<SecurityOrigin> 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 <WebCore/Frame.h>
</span><span class="cx"> #include <WebCore/Page.h>
</span><span class="cx"> #include <WebCore/SchemeRegistry.h>
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/Settings.h>
</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<StorageAreaImpl> StorageAreaImpl::create(PassRefPtr<StorageAreaMap> storageAreaMap)
</del><ins>+Ref<StorageAreaImpl> StorageAreaImpl::create(Ref<StorageAreaMap>&& 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<StorageAreaMap> storageAreaMap)
</del><ins>+StorageAreaImpl::StorageAreaImpl(Ref<StorageAreaMap>&& 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& StorageAreaImpl::securityOrigin()
</del><ins>+WebCore::SecurityOriginData StorageAreaImpl::securityOrigin() const
</ins><span class="cx"> {
</span><del>- return m_storageAreaMap->securityOrigin();
</del><ins>+ return WebCore::SecurityOriginData::fromSecurityOrigin(m_storageAreaMap->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<StorageAreaImpl> create(PassRefPtr<StorageAreaMap>);
</del><ins>+ static Ref<StorageAreaImpl> create(Ref<StorageAreaMap>&&);
</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<StorageAreaMap>);
</del><ins>+ StorageAreaImpl(Ref<StorageAreaMap>&&);
</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& securityOrigin() override;
</del><ins>+ WebCore::SecurityOriginData securityOrigin() const override;
</ins><span class="cx">
</span><span class="cx"> uint64_t m_storageAreaID;
</span><del>- RefPtr<StorageAreaMap> m_storageAreaMap;
</del><ins>+ Ref<StorageAreaMap> 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& key, const String& oldValue, const String& newValue, const String& 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& key);
</span><span class="cx">
</span><del>- WebCore::SecurityOrigin& securityOrigin() { return m_securityOrigin.get(); }
</del><ins>+ const WebCore::SecurityOrigin& securityOrigin() const { return m_securityOrigin.get(); }
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> StorageAreaMap(StorageNamespaceImpl*, Ref<WebCore::SecurityOrigin>&&);
</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& map)
</span><span class="cx"> {
</span><del>- m_storageAreaMaps.remove(&map.securityOrigin());
</del><ins>+ m_storageAreaMaps.remove(SecurityOriginData::fromSecurityOrigin(map.securityOrigin()));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-RefPtr<StorageArea> StorageNamespaceImpl::storageArea(RefPtr<SecurityOrigin>&& securityOrigin)
</del><ins>+RefPtr<StorageArea> StorageNamespaceImpl::storageArea(const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><span class="cx"> RefPtr<StorageAreaMap> map;
</span><span class="cx">
</span><del>- auto& slot = m_storageAreaMaps.add(securityOrigin.get(), nullptr).iterator->value;
</del><ins>+ auto& slot = m_storageAreaMaps.add(securityOrigin, nullptr).iterator->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<StorageNamespace> 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 <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/SecurityOriginHash.h>
</span><span class="cx"> #include <WebCore/StorageArea.h>
</span><span class="cx"> #include <WebCore/StorageNamespace.h>
</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<WebCore::StorageArea> storageArea(RefPtr<WebCore::SecurityOrigin>&&) override;
</del><ins>+ RefPtr<WebCore::StorageArea> storageArea(const WebCore::SecurityOriginData&) override;
</ins><span class="cx"> RefPtr<WebCore::StorageNamespace> 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<RefPtr<WebCore::SecurityOrigin>, StorageAreaMap*> m_storageAreaMaps;
</del><ins>+ HashMap<WebCore::SecurityOriginData, StorageAreaMap*> 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& 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<API::SecurityOrigin> securityOrigin = API::SecurityOrigin::create(WebCore::SecurityOrigin::createFromDatabaseIdentifier(WebCore::SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier()));
</del><ins>+ RefPtr<API::SecurityOrigin> securityOrigin = API::SecurityOrigin::create(WebCore::SecurityOriginData::fromDatabaseIdentifier(WebCore::SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier())->securityOrigin());
</ins><span class="cx"> newQuota = m_page->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->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& 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>