<!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>[208633] 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/208633">208633</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2016-11-11 17:18:22 -0800 (Fri, 11 Nov 2016)</dd>
</dl>
<h3>Log Message</h3>
<pre>Use SecurityOriginData as keys in StorageManager
https://bugs.webkit.org/show_bug.cgi?id=159834
<rdar://problem/27346948>
Patch by Alex Christensen <achristensen@webkit.org> on 2016-11-11
Reviewed by Brady Eidson.
Source/WebCore:
No change in behavior.
* page/SecurityOriginData.h:
(WebCore::SecurityOriginData::SecurityOriginData):
(WebCore::SecurityOriginData::isEmpty):
(WebCore::SecurityOriginData::isHashTableDeletedValue):
(WebCore::SecurityOriginDataHashTraits::isEmptyValue):
(WebCore::SecurityOriginDataHash::hash):
(WebCore::SecurityOriginDataHash::equal):
Add some hash functions so a SecurityOriginData can be used as a key in a HashMap.
Source/WebKit2:
* Platform/IPC/HandleMessage.h:
(IPC::callMemberFunctionImpl):
Add a missing std::forward so we can use this callMemberFunctionImpl with rvalues.
* UIProcess/API/C/WKApplicationCacheManager.cpp:
(WKApplicationCacheManagerGetApplicationCacheOrigins):
(WKApplicationCacheManagerDeleteEntriesForOrigin):
* UIProcess/API/C/WKKeyValueStorageManager.cpp:
(WKKeyValueStorageManagerGetKeyValueStorageOrigins):
(WKKeyValueStorageManagerDeleteEntriesForOrigin):
* UIProcess/API/C/WKResourceCacheManager.cpp:
(WKResourceCacheManagerGetCacheOrigins):
(WKResourceCacheManagerClearCacheForOrigin):
* UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
(-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
* UIProcess/Databases/DatabaseProcessProxy.cpp:
(WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
* UIProcess/Databases/DatabaseProcessProxy.h:
* UIProcess/Network/NetworkProcessProxy.cpp:
(WebKit::NetworkProcessProxy::getNetworkProcessConnection):
(WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
* UIProcess/Network/NetworkProcessProxy.h:
* UIProcess/Storage/LocalStorageDatabase.cpp:
(WebKit::LocalStorageDatabase::create):
(WebKit::LocalStorageDatabase::LocalStorageDatabase):
(WebKit::LocalStorageDatabase::openDatabase):
(WebKit::LocalStorageDatabase::close):
* UIProcess/Storage/LocalStorageDatabase.h:
* UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
(WebKit::LocalStorageDatabaseTracker::databasePath):
(WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
(WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin):
(WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
(WebKit::LocalStorageDatabaseTracker::origins):
* UIProcess/Storage/LocalStorageDatabaseTracker.h:
* UIProcess/Storage/StorageManager.cpp:
(WebKit::StorageManager::StorageArea::securityOrigin):
(WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
(WebKit::StorageManager::TransientLocalStorageNamespace::origins):
(WebKit::StorageManager::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
(WebKit::StorageManager::StorageArea::StorageArea):
(WebKit::StorageManager::StorageArea::clone):
(WebKit::StorageManager::StorageArea::items):
(WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
(WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea):
(WebKit::StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin):
(WebKit::StorageManager::LocalStorageNamespace::clearAllStorageAreas):
(WebKit::StorageManager::SessionStorageNamespace::origins):
(WebKit::StorageManager::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
(WebKit::StorageManager::SessionStorageNamespace::cloneTo):
(WebKit::StorageManager::getSessionStorageOrigins):
(WebKit::StorageManager::deleteSessionStorageOrigins):
(WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
(WebKit::StorageManager::getLocalStorageOrigins):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
(WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
(WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
(WebKit::StorageManager::createLocalStorageMap):
(WebKit::StorageManager::createTransientLocalStorageMap):
(WebKit::StorageManager::createSessionStorageMap):
(WebKit::StorageManager::getOrCreateLocalStorageNamespace):
(WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
(WebKit::StorageManager::StorageArea::create): Deleted.
(WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea): Deleted.
(WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea): Deleted.
* UIProcess/Storage/StorageManager.h:
* UIProcess/WebProcessProxy.cpp:
(WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
* UIProcess/WebProcessProxy.h:
* UIProcess/WebsiteData/WebsiteDataRecord.cpp:
(WebKit::WebsiteDataRecord::displayNameForOrigin):
(WebKit::WebsiteDataRecord::add):
* UIProcess/WebsiteData/WebsiteDataRecord.h:
* UIProcess/WebsiteData/WebsiteDataStore.cpp:
(WebKit::WebsiteDataStore::fetchData):
(WebKit::WebsiteDataStore::removeData):
(WebKit::WebsiteDataStore::mediaKeyOrigins):
(WebKit::WebsiteDataStore::removeMediaKeys):
* UIProcess/WebsiteData/WebsiteDataStore.h:
Fewer SecurityOrigin uses in the UIProcess! Hooray!</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageSecurityOriginDatah">trunk/Source/WebCore/page/SecurityOriginData.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2PlatformIPCHandleMessageh">trunk/Source/WebKit2/Platform/IPC/HandleMessage.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKApplicationCacheManagercpp">trunk/Source/WebKit2/UIProcess/API/C/WKApplicationCacheManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKKeyValueStorageManagercpp">trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKResourceCacheManagercpp">trunk/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICocoaWKWebsiteDataStoremm">trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessDatabasesDatabaseProcessProxycpp">trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessDatabasesDatabaseProcessProxyh">trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessNetworkNetworkProcessProxycpp">trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessNetworkNetworkProcessProxyh">trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageLocalStorageDatabasecpp">trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseh">trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseTrackercpp">trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseTrackerh">trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageStorageManagercpp">trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessStorageStorageManagerh">trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessProxycpp">trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebProcessProxyh">trunk/Source/WebKit2/UIProcess/WebProcessProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataRecordcpp">trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataRecordh">trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataStorecpp">trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataStoreh">trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebCore/ChangeLog        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2016-11-11 Alex Christensen <achristensen@webkit.org>
+
+ Use SecurityOriginData as keys in StorageManager
+ https://bugs.webkit.org/show_bug.cgi?id=159834
+ <rdar://problem/27346948>
+
+ Reviewed by Brady Eidson.
+
+ No change in behavior.
+
+ * page/SecurityOriginData.h:
+ (WebCore::SecurityOriginData::SecurityOriginData):
+ (WebCore::SecurityOriginData::isEmpty):
+ (WebCore::SecurityOriginData::isHashTableDeletedValue):
+ (WebCore::SecurityOriginDataHashTraits::isEmptyValue):
+ (WebCore::SecurityOriginDataHash::hash):
+ (WebCore::SecurityOriginDataHash::equal):
+ Add some hash functions so a SecurityOriginData can be used as a key in a HashMap.
+
</ins><span class="cx"> 2016-11-11 Ryosuke Niwa <rniwa@webkit.org>
</span><span class="cx">
</span><span class="cx"> Hovering over a slotted Text node clears hover state
</span></span></pre></div>
<a id="trunkSourceWebCorepageSecurityOriginDatah"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/SecurityOriginData.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/SecurityOriginData.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebCore/page/SecurityOriginData.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -33,6 +33,12 @@
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx">
</span><span class="cx"> struct SecurityOriginData {
</span><ins>+ SecurityOriginData() = default;
+ SecurityOriginData(WTF::HashTableDeletedValueType)
+ : protocol(WTF::HashTableDeletedValue)
+ {
+ }
+
</ins><span class="cx"> WEBCORE_EXPORT static SecurityOriginData fromSecurityOrigin(const SecurityOrigin&);
</span><span class="cx"> WEBCORE_EXPORT static SecurityOriginData fromFrame(Frame*);
</span><span class="cx">
</span><span class="lines">@@ -54,6 +60,16 @@
</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 class="cx">
</span><ins>+ bool isEmpty() const
+ {
+ return protocol.isNull() && host.isNull() && port == Nullopt;
+ }
+
+ bool isHashTableDeletedValue() const
+ {
+ return protocol.isHashTableDeletedValue();
+ }
+
</ins><span class="cx"> #if !LOG_DISABLED
</span><span class="cx"> String debugString() const;
</span><span class="cx"> #endif
</span><span class="lines">@@ -82,4 +98,33 @@
</span><span class="cx"> return true;
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+struct SecurityOriginDataHashTraits : WTF::SimpleClassHashTraits<SecurityOriginData> {
+ static const bool hasIsEmptyValueFunction = true;
+ static const bool emptyValueIsZero = false;
+ static bool isEmptyValue(const SecurityOriginData& data) { return data.isEmpty(); }
+};
+
+struct SecurityOriginDataHash {
+ static unsigned hash(const SecurityOriginData& data)
+ {
+ unsigned hashCodes[3] = {
+ data.protocol.impl() ? data.protocol.impl()->hash() : 0,
+ data.host.impl() ? data.host.impl()->hash() : 0,
+ data.port.valueOr(0)
+ };
+ return StringHasher::hashMemory<sizeof(hashCodes)>(hashCodes);
+ }
+ static bool equal(const SecurityOriginData& a, const SecurityOriginData& b) { return a == b; }
+ static const bool safeToCompareToEmptyOrDeleted = false;
+};
+
</ins><span class="cx"> } // namespace WebCore
</span><ins>+
+namespace WTF {
+
+template<> struct HashTraits<WebCore::SecurityOriginData> : WebCore::SecurityOriginDataHashTraits { };
+template<> struct DefaultHash<WebCore::SecurityOriginData> {
+ typedef WebCore::SecurityOriginDataHash Hash;
+};
+
+} // namespace WTF
</ins></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/ChangeLog        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -1,3 +1,91 @@
</span><ins>+2016-11-11 Alex Christensen <achristensen@webkit.org>
+
+ Use SecurityOriginData as keys in StorageManager
+ https://bugs.webkit.org/show_bug.cgi?id=159834
+ <rdar://problem/27346948>
+
+ Reviewed by Brady Eidson.
+
+ * Platform/IPC/HandleMessage.h:
+ (IPC::callMemberFunctionImpl):
+ Add a missing std::forward so we can use this callMemberFunctionImpl with rvalues.
+ * UIProcess/API/C/WKApplicationCacheManager.cpp:
+ (WKApplicationCacheManagerGetApplicationCacheOrigins):
+ (WKApplicationCacheManagerDeleteEntriesForOrigin):
+ * UIProcess/API/C/WKKeyValueStorageManager.cpp:
+ (WKKeyValueStorageManagerGetKeyValueStorageOrigins):
+ (WKKeyValueStorageManagerDeleteEntriesForOrigin):
+ * UIProcess/API/C/WKResourceCacheManager.cpp:
+ (WKResourceCacheManagerGetCacheOrigins):
+ (WKResourceCacheManagerClearCacheForOrigin):
+ * UIProcess/API/Cocoa/WKWebsiteDataStore.mm:
+ (-[WKWebsiteDataStore _fetchDataRecordsOfTypes:withOptions:completionHandler:]):
+ * UIProcess/Databases/DatabaseProcessProxy.cpp:
+ (WebKit::DatabaseProcessProxy::deleteWebsiteDataForOrigins):
+ * UIProcess/Databases/DatabaseProcessProxy.h:
+ * UIProcess/Network/NetworkProcessProxy.cpp:
+ (WebKit::NetworkProcessProxy::getNetworkProcessConnection):
+ (WebKit::NetworkProcessProxy::deleteWebsiteDataForOrigins):
+ * UIProcess/Network/NetworkProcessProxy.h:
+ * UIProcess/Storage/LocalStorageDatabase.cpp:
+ (WebKit::LocalStorageDatabase::create):
+ (WebKit::LocalStorageDatabase::LocalStorageDatabase):
+ (WebKit::LocalStorageDatabase::openDatabase):
+ (WebKit::LocalStorageDatabase::close):
+ * UIProcess/Storage/LocalStorageDatabase.h:
+ * UIProcess/Storage/LocalStorageDatabaseTracker.cpp:
+ (WebKit::LocalStorageDatabaseTracker::databasePath):
+ (WebKit::LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin):
+ (WebKit::LocalStorageDatabaseTracker::deleteDatabaseWithOrigin):
+ (WebKit::LocalStorageDatabaseTracker::deleteDatabasesModifiedSince):
+ (WebKit::LocalStorageDatabaseTracker::origins):
+ * UIProcess/Storage/LocalStorageDatabaseTracker.h:
+ * UIProcess/Storage/StorageManager.cpp:
+ (WebKit::StorageManager::StorageArea::securityOrigin):
+ (WebKit::StorageManager::TransientLocalStorageNamespace::getOrCreateStorageArea):
+ (WebKit::StorageManager::TransientLocalStorageNamespace::origins):
+ (WebKit::StorageManager::TransientLocalStorageNamespace::clearStorageAreasMatchingOrigin):
+ (WebKit::StorageManager::StorageArea::StorageArea):
+ (WebKit::StorageManager::StorageArea::clone):
+ (WebKit::StorageManager::StorageArea::items):
+ (WebKit::StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded):
+ (WebKit::StorageManager::LocalStorageNamespace::didDestroyStorageArea):
+ (WebKit::StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin):
+ (WebKit::StorageManager::LocalStorageNamespace::clearAllStorageAreas):
+ (WebKit::StorageManager::SessionStorageNamespace::origins):
+ (WebKit::StorageManager::SessionStorageNamespace::clearStorageAreasMatchingOrigin):
+ (WebKit::StorageManager::SessionStorageNamespace::cloneTo):
+ (WebKit::StorageManager::getSessionStorageOrigins):
+ (WebKit::StorageManager::deleteSessionStorageOrigins):
+ (WebKit::StorageManager::deleteSessionStorageEntriesForOrigins):
+ (WebKit::StorageManager::getLocalStorageOrigins):
+ (WebKit::StorageManager::deleteLocalStorageEntriesForOrigin):
+ (WebKit::StorageManager::deleteLocalStorageOriginsModifiedSince):
+ (WebKit::StorageManager::deleteLocalStorageEntriesForOrigins):
+ (WebKit::StorageManager::createLocalStorageMap):
+ (WebKit::StorageManager::createTransientLocalStorageMap):
+ (WebKit::StorageManager::createSessionStorageMap):
+ (WebKit::StorageManager::getOrCreateLocalStorageNamespace):
+ (WebKit::StorageManager::getOrCreateTransientLocalStorageNamespace):
+ (WebKit::StorageManager::StorageArea::create): Deleted.
+ (WebKit::StorageManager::LocalStorageNamespace::getOrCreateStorageArea): Deleted.
+ (WebKit::StorageManager::SessionStorageNamespace::getOrCreateStorageArea): Deleted.
+ * UIProcess/Storage/StorageManager.h:
+ * UIProcess/WebProcessProxy.cpp:
+ (WebKit::WebProcessProxy::deleteWebsiteDataForOrigins):
+ * UIProcess/WebProcessProxy.h:
+ * UIProcess/WebsiteData/WebsiteDataRecord.cpp:
+ (WebKit::WebsiteDataRecord::displayNameForOrigin):
+ (WebKit::WebsiteDataRecord::add):
+ * UIProcess/WebsiteData/WebsiteDataRecord.h:
+ * UIProcess/WebsiteData/WebsiteDataStore.cpp:
+ (WebKit::WebsiteDataStore::fetchData):
+ (WebKit::WebsiteDataStore::removeData):
+ (WebKit::WebsiteDataStore::mediaKeyOrigins):
+ (WebKit::WebsiteDataStore::removeMediaKeys):
+ * UIProcess/WebsiteData/WebsiteDataStore.h:
+ Fewer SecurityOrigin uses in the UIProcess! Hooray!
+
</ins><span class="cx"> 2016-11-11 Ryosuke Niwa <rniwa@webkit.org>
</span><span class="cx">
</span><span class="cx"> Hovering over a slotted Text node clears hover state
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformIPCHandleMessageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Platform/IPC/HandleMessage.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Platform/IPC/HandleMessage.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/Platform/IPC/HandleMessage.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+/*
+ * Copyright (C) 2010-2016 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
</ins><span class="cx"> #pragma once
</span><span class="cx">
</span><span class="cx"> #include "ArgumentCoders.h"
</span><span class="lines">@@ -54,7 +79,7 @@
</span><span class="cx"> template <typename C, typename MF, typename ArgsTuple, size_t... ArgsIndex>
</span><span class="cx"> void callMemberFunctionImpl(C* object, MF function, Connection& connection, ArgsTuple&& args, std::index_sequence<ArgsIndex...>)
</span><span class="cx"> {
</span><del>- (object->*function)(connection, std::get<ArgsIndex>(args)...);
</del><ins>+ (object->*function)(connection, std::get<ArgsIndex>(std::forward<ArgsTuple>(args))...);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> template<typename C, typename MF, typename ArgsTuple, typename ArgsIndicies = std::make_index_sequence<std::tuple_size<ArgsTuple>::value>>
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKApplicationCacheManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKApplicationCacheManager.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKApplicationCacheManager.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKApplicationCacheManager.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -44,7 +44,7 @@
</span><span class="cx"> Vector<RefPtr<API::Object>> securityOrigins;
</span><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (const auto& origin : dataRecord.origins)
</span><del>- securityOrigins.append(API::SecurityOrigin::create(*origin));
</del><ins>+ securityOrigins.append(API::SecurityOrigin::create(origin.securityOrigin()));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> callback(toAPI(API::Array::create(WTFMove(securityOrigins)).ptr()), nullptr, context);
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(applicationCacheManager))->websiteDataStore();
</span><span class="cx">
</span><span class="cx"> WebsiteDataRecord dataRecord;
</span><del>- dataRecord.add(WebsiteDataType::OfflineWebApplicationCache, &toImpl(origin)->securityOrigin());
</del><ins>+ dataRecord.add(WebsiteDataType::OfflineWebApplicationCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
</ins><span class="cx">
</span><span class="cx"> websiteDataStore.removeData(WebsiteDataType::OfflineWebApplicationCache, { dataRecord }, [] { });
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKKeyValueStorageManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -73,7 +73,7 @@
</span><span class="cx"> Vector<RefPtr<API::Object>> webSecurityOrigins;
</span><span class="cx"> webSecurityOrigins.reserveInitialCapacity(securityOrigins.size());
</span><span class="cx"> for (auto& origin : securityOrigins)
</span><del>- webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(*origin));
</del><ins>+ webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(origin.securityOrigin()));
</ins><span class="cx">
</span><span class="cx"> callback(toAPI(API::Array::create(WTFMove(webSecurityOrigins)).ptr()), nullptr, context);
</span><span class="cx"> });
</span><span class="lines">@@ -118,7 +118,7 @@
</span><span class="cx"> if (!storageManager)
</span><span class="cx"> return;
</span><span class="cx">
</span><del>- storageManager->deleteLocalStorageEntriesForOrigin(toImpl(origin)->securityOrigin());
</del><ins>+ storageManager->deleteLocalStorageEntriesForOrigin(WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WKKeyValueStorageManagerDeleteAllEntries(WKKeyValueStorageManagerRef keyValueStorageManager)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKResourceCacheManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -56,7 +56,7 @@
</span><span class="cx"> Vector<RefPtr<API::Object>> securityOrigins;
</span><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (const auto& origin : dataRecord.origins)
</span><del>- securityOrigins.append(API::SecurityOrigin::create(*origin));
</del><ins>+ securityOrigins.append(API::SecurityOrigin::create(origin.securityOrigin()));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> callback(toAPI(API::Array::create(WTFMove(securityOrigins)).ptr()), nullptr, context);
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx">
</span><span class="cx"> {
</span><span class="cx"> WebsiteDataRecord dataRecord;
</span><del>- dataRecord.add(WebsiteDataType::MemoryCache, &toImpl(origin)->securityOrigin());
</del><ins>+ dataRecord.add(WebsiteDataType::MemoryCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
</ins><span class="cx">
</span><span class="cx"> dataRecords.append(dataRecord);
</span><span class="cx"> }
</span><span class="lines">@@ -78,7 +78,7 @@
</span><span class="cx">
</span><span class="cx"> if (cachesToClear == WKResourceCachesToClearAll) {
</span><span class="cx"> WebsiteDataRecord dataRecord;
</span><del>- dataRecord.add(WebsiteDataType::DiskCache, &toImpl(origin)->securityOrigin());
</del><ins>+ dataRecord.add(WebsiteDataType::DiskCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
</ins><span class="cx">
</span><span class="cx"> dataRecords.append(dataRecord);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICocoaWKWebsiteDataStoremm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -153,7 +153,7 @@
</span><span class="cx"> if (options & _WKWebsiteDataStoreFetchOptionComputeSizes)
</span><span class="cx"> fetchOptions |= WebKit::WebsiteDataFetchOption::ComputeSizes;
</span><span class="cx">
</span><del>- _websiteDataStore->websiteDataStore().fetchData(WebKit::toWebsiteDataTypes(dataTypes), fetchOptions, [completionHandlerCopy](auto websiteDataRecords) {
</del><ins>+ _websiteDataStore->websiteDataStore().fetchData(WebKit::toWebsiteDataTypes(dataTypes), fetchOptions, [completionHandlerCopy = WTFMove(completionHandlerCopy)](auto websiteDataRecords) {
</ins><span class="cx"> Vector<RefPtr<API::Object>> elements;
</span><span class="cx"> elements.reserveInitialCapacity(websiteDataRecords.size());
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessDatabasesDatabaseProcessProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -102,7 +102,7 @@
</span><span class="cx"> send(Messages::DatabaseProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void DatabaseProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()> completionHandler)
</del><ins>+void DatabaseProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, std::function<void()> completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(canSendMessage());
</span><span class="cx">
</span><span class="lines">@@ -109,11 +109,7 @@
</span><span class="cx"> uint64_t callbackID = generateCallbackID();
</span><span class="cx"> m_pendingDeleteWebsiteDataForOriginsCallbacks.add(callbackID, WTFMove(completionHandler));
</span><span class="cx">
</span><del>- Vector<SecurityOriginData> originData;
- for (auto& origin : origins)
- originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
-
- send(Messages::DatabaseProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData, callbackID), 0);
</del><ins>+ send(Messages::DatabaseProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, callbackID), 0);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void DatabaseProcessProxy::getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply> reply)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessDatabasesDatabaseProcessProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -37,6 +37,7 @@
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> class SecurityOrigin;
</span><span class="cx"> class SessionID;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -50,9 +51,9 @@
</span><span class="cx"> static Ref<DatabaseProcessProxy> create(WebProcessPool*);
</span><span class="cx"> ~DatabaseProcessProxy();
</span><span class="cx">
</span><del>- void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::function<void (WebsiteData)> completionHandler);
- void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler);
- void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()> completionHandler);
</del><ins>+ void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::function<void(WebsiteData)> completionHandler);
+ void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, std::function<void()> completionHandler);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, std::function<void()> completionHandler);
</ins><span class="cx">
</span><span class="cx"> void getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply>);
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessNetworkNetworkProcessProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -100,7 +100,7 @@
</span><span class="cx"> ASSERT_UNUSED(connection, this->connection() == &connection);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkProcessProxy::getNetworkProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply)
</del><ins>+void NetworkProcessProxy::getNetworkProcessConnection(RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>&& reply)
</ins><span class="cx"> {
</span><span class="cx"> m_pendingConnectionReplies.append(reply);
</span><span class="cx">
</span><span class="lines">@@ -149,7 +149,7 @@
</span><span class="cx"> send(Messages::NetworkProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void NetworkProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, const Vector<String>& cookieHostNames, std::function<void ()> completionHandler)
</del><ins>+void NetworkProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, std::function<void()> completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(canSendMessage());
</span><span class="cx">
</span><span class="lines">@@ -162,11 +162,7 @@
</span><span class="cx"> RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - NetworkProcessProxy is releasing a background assertion because the Network process is done deleting Website data for several origins", this);
</span><span class="cx"> });
</span><span class="cx">
</span><del>- Vector<SecurityOriginData> originData;
- for (auto& origin : origins)
- originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
-
- send(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData, cookieHostNames, callbackID), 0);
</del><ins>+ send(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, cookieHostNames, callbackID), 0);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessNetworkNetworkProcessProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> class ProtectionSpace;
</span><span class="cx"> class ResourceRequest;
</span><span class="cx"> class SecurityOrigin;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> class SessionID;
</span><span class="cx"> }
</span><span class="cx">
</span><span class="lines">@@ -58,13 +59,13 @@
</span><span class="cx"> static Ref<NetworkProcessProxy> create(WebProcessPool&);
</span><span class="cx"> ~NetworkProcessProxy();
</span><span class="cx">
</span><del>- void getNetworkProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>);
</del><ins>+ void getNetworkProcessConnection(RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>&&);
</ins><span class="cx">
</span><span class="cx"> DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&);
</span><span class="cx">
</span><del>- void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, std::function<void (WebsiteData)> completionHandler);
- void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, std::function<void ()> completionHandler);
- void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebKit::WebsiteDataType>, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, const Vector<String>& cookieHostNames, std::function<void ()> completionHandler);
</del><ins>+ void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, std::function<void(WebsiteData)> completionHandler);
+ void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, std::function<void()> completionHandler);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebKit::WebsiteDataType>, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, std::function<void()> completionHandler);
</ins><span class="cx">
</span><span class="cx"> #if PLATFORM(COCOA)
</span><span class="cx"> void setProcessSuppressionEnabled(bool);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageLocalStorageDatabasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -46,16 +46,16 @@
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><span class="cx">
</span><del>-Ref<LocalStorageDatabase> LocalStorageDatabase::create(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, Ref<SecurityOrigin>&& securityOrigin)
</del><ins>+Ref<LocalStorageDatabase> LocalStorageDatabase::create(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><del>- return adoptRef(*new LocalStorageDatabase(WTFMove(queue), WTFMove(tracker), WTFMove(securityOrigin)));
</del><ins>+ return adoptRef(*new LocalStorageDatabase(WTFMove(queue), WTFMove(tracker), securityOrigin));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-LocalStorageDatabase::LocalStorageDatabase(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, Ref<SecurityOrigin>&& securityOrigin)
</del><ins>+LocalStorageDatabase::LocalStorageDatabase(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, const SecurityOriginData& securityOrigin)
</ins><span class="cx"> : m_queue(WTFMove(queue))
</span><span class="cx"> , m_tracker(WTFMove(tracker))
</span><del>- , m_securityOrigin(WTFMove(securityOrigin))
- , m_databasePath(m_tracker->databasePath(m_securityOrigin.ptr()))
</del><ins>+ , m_securityOrigin(securityOrigin)
+ , m_databasePath(m_tracker->databasePath(m_securityOrigin))
</ins><span class="cx"> , m_failedToOpenDatabase(false)
</span><span class="cx"> , m_didImportItems(false)
</span><span class="cx"> , m_isClosed(false)
</span><span class="lines">@@ -80,7 +80,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (m_database.isOpen())
</span><del>- m_tracker->didOpenDatabaseWithOrigin(m_securityOrigin.ptr());
</del><ins>+ m_tracker->didOpenDatabaseWithOrigin(m_securityOrigin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> bool LocalStorageDatabase::tryToOpenDatabase(DatabaseOpeningStrategy openingStrategy)
</span><span class="lines">@@ -230,7 +230,7 @@
</span><span class="cx"> m_database.close();
</span><span class="cx">
</span><span class="cx"> if (isEmpty)
</span><del>- m_tracker->deleteDatabaseWithOrigin(m_securityOrigin.ptr());
</del><ins>+ m_tracker->deleteDatabaseWithOrigin(m_securityOrigin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void LocalStorageDatabase::itemDidChange(const String& key, const String& value)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #pragma once
</span><span class="cx">
</span><span class="cx"> #include <WebCore/SQLiteDatabase.h>
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <wtf/Forward.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/RefPtr.h>
</span><span class="lines">@@ -44,7 +45,7 @@
</span><span class="cx">
</span><span class="cx"> class LocalStorageDatabase : public ThreadSafeRefCounted<LocalStorageDatabase> {
</span><span class="cx"> public:
</span><del>- static Ref<LocalStorageDatabase> create(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, Ref<WebCore::SecurityOrigin>&&);
</del><ins>+ static Ref<LocalStorageDatabase> create(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, const WebCore::SecurityOriginData&);
</ins><span class="cx"> ~LocalStorageDatabase();
</span><span class="cx">
</span><span class="cx"> // Will block until the import is complete.
</span><span class="lines">@@ -58,7 +59,7 @@
</span><span class="cx"> void close();
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- LocalStorageDatabase(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, Ref<WebCore::SecurityOrigin>&&);
</del><ins>+ LocalStorageDatabase(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, const WebCore::SecurityOriginData&);
</ins><span class="cx">
</span><span class="cx"> enum DatabaseOpeningStrategy {
</span><span class="cx"> CreateIfNonExistent,
</span><span class="lines">@@ -79,7 +80,7 @@
</span><span class="cx">
</span><span class="cx"> Ref<WorkQueue> m_queue;
</span><span class="cx"> Ref<LocalStorageDatabaseTracker> m_tracker;
</span><del>- Ref<WebCore::SecurityOrigin> m_securityOrigin;
</del><ins>+ WebCore::SecurityOriginData m_securityOrigin;
</ins><span class="cx">
</span><span class="cx"> String m_databasePath;
</span><span class="cx"> WebCore::SQLiteDatabase m_database;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseTrackercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -62,19 +62,19 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>-String LocalStorageDatabaseTracker::databasePath(SecurityOrigin* securityOrigin) const
</del><ins>+String LocalStorageDatabaseTracker::databasePath(const SecurityOriginData& securityOrigin) const
</ins><span class="cx"> {
</span><del>- return databasePath(SecurityOriginData::fromSecurityOrigin(*securityOrigin).databaseIdentifier() + ".localstorage");
</del><ins>+ return databasePath(securityOrigin.databaseIdentifier() + ".localstorage");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin(SecurityOrigin* securityOrigin)
</del><ins>+void LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin(const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><del>- addDatabaseWithOriginIdentifier(SecurityOriginData::fromSecurityOrigin(*securityOrigin).databaseIdentifier(), databasePath(securityOrigin));
</del><ins>+ addDatabaseWithOriginIdentifier(securityOrigin.databaseIdentifier(), databasePath(securityOrigin));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void LocalStorageDatabaseTracker::deleteDatabaseWithOrigin(SecurityOrigin* securityOrigin)
</del><ins>+void LocalStorageDatabaseTracker::deleteDatabaseWithOrigin(const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><del>- removeDatabaseWithOriginIdentifier(SecurityOriginData::fromSecurityOrigin(*securityOrigin).databaseIdentifier());
</del><ins>+ removeDatabaseWithOriginIdentifier(securityOrigin.databaseIdentifier());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void LocalStorageDatabaseTracker::deleteAllDatabases()
</span><span class="lines">@@ -140,7 +140,7 @@
</span><span class="cx"> return time;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<Ref<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
</del><ins>+Vector<SecurityOriginData> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
</ins><span class="cx"> {
</span><span class="cx"> Vector<String> originIdentifiersToDelete;
</span><span class="cx">
</span><span class="lines">@@ -155,25 +155,26 @@
</span><span class="cx"> originIdentifiersToDelete.append(origin);
</span><span class="cx"> }
</span><span class="cx">
</span><del>- Vector<Ref<SecurityOrigin>> deletedDatabaseOrigins;
</del><ins>+ Vector<SecurityOriginData> deletedDatabaseOrigins;
</ins><span class="cx"> deletedDatabaseOrigins.reserveInitialCapacity(originIdentifiersToDelete.size());
</span><span class="cx">
</span><span class="cx"> for (const auto& originIdentifier : originIdentifiersToDelete) {
</span><span class="cx"> removeDatabaseWithOriginIdentifier(originIdentifier);
</span><span class="cx">
</span><del>- deletedDatabaseOrigins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
</del><ins>+ // FIXME: Move createFromDatabaseIdentifier to SecurityOriginData.
+ deletedDatabaseOrigins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier)));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> return deletedDatabaseOrigins;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<Ref<WebCore::SecurityOrigin>> LocalStorageDatabaseTracker::origins() const
</del><ins>+Vector<SecurityOriginData> LocalStorageDatabaseTracker::origins() const
</ins><span class="cx"> {
</span><del>- Vector<Ref<SecurityOrigin>> origins;
</del><ins>+ Vector<SecurityOriginData> origins;
</ins><span class="cx"> origins.reserveInitialCapacity(m_origins.size());
</span><span class="cx">
</span><span class="cx"> for (const String& origin : m_origins)
</span><del>- origins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(origin));
</del><ins>+ origins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(origin)));
</ins><span class="cx">
</span><span class="cx"> return origins;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageLocalStorageDatabaseTrackerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> class SecurityOrigin;
</span><ins>+struct SecurityOriginData;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -47,16 +48,16 @@
</span><span class="cx"> static Ref<LocalStorageDatabaseTracker> create(Ref<WorkQueue>&&, const String& localStorageDirectory);
</span><span class="cx"> ~LocalStorageDatabaseTracker();
</span><span class="cx">
</span><del>- String databasePath(WebCore::SecurityOrigin*) const;
</del><ins>+ String databasePath(const WebCore::SecurityOriginData&) const;
</ins><span class="cx">
</span><del>- void didOpenDatabaseWithOrigin(WebCore::SecurityOrigin*);
- void deleteDatabaseWithOrigin(WebCore::SecurityOrigin*);
</del><ins>+ void didOpenDatabaseWithOrigin(const WebCore::SecurityOriginData&);
+ void deleteDatabaseWithOrigin(const WebCore::SecurityOriginData&);
</ins><span class="cx"> void deleteAllDatabases();
</span><span class="cx">
</span><span class="cx"> // Returns a vector of the origins whose databases have been deleted.
</span><del>- Vector<Ref<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
</del><ins>+ Vector<WebCore::SecurityOriginData> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
</ins><span class="cx">
</span><del>- Vector<Ref<WebCore::SecurityOrigin>> origins() const;
</del><ins>+ Vector<WebCore::SecurityOriginData> origins() const;
</ins><span class="cx">
</span><span class="cx"> struct OriginDetails {
</span><span class="cx"> String originIdentifier;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageStorageManagercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -45,10 +45,10 @@
</span><span class="cx">
</span><span class="cx"> class StorageManager::StorageArea : public ThreadSafeRefCounted<StorageManager::StorageArea> {
</span><span class="cx"> public:
</span><del>- static Ref<StorageArea> create(LocalStorageNamespace*, Ref<SecurityOrigin>&&, unsigned quotaInBytes);
</del><ins>+ static Ref<StorageArea> create(LocalStorageNamespace*, const SecurityOriginData&, unsigned quotaInBytes);
</ins><span class="cx"> ~StorageArea();
</span><span class="cx">
</span><del>- SecurityOrigin& securityOrigin() { return m_securityOrigin.get(); }
</del><ins>+ const WebCore::SecurityOriginData& securityOrigin() const { return m_securityOrigin; }
</ins><span class="cx">
</span><span class="cx"> void addListener(IPC::Connection&, uint64_t storageMapID);
</span><span class="cx"> void removeListener(IPC::Connection&, uint64_t storageMapID);
</span><span class="lines">@@ -59,24 +59,24 @@
</span><span class="cx"> void removeItem(IPC::Connection* sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& urlString);
</span><span class="cx"> void clear(IPC::Connection* sourceConnection, uint64_t sourceStorageAreaID, const String& urlString);
</span><span class="cx">
</span><del>- const HashMap<String, String>& items();
</del><ins>+ const HashMap<String, String>& items() const;
</ins><span class="cx"> void clear();
</span><span class="cx">
</span><span class="cx"> bool isSessionStorage() const { return !m_localStorageNamespace; }
</span><span class="cx">
</span><span class="cx"> private:
</span><del>- explicit StorageArea(LocalStorageNamespace*, Ref<SecurityOrigin>&&, unsigned quotaInBytes);
</del><ins>+ explicit StorageArea(LocalStorageNamespace*, const SecurityOriginData&, unsigned quotaInBytes);
</ins><span class="cx">
</span><del>- void openDatabaseAndImportItemsIfNeeded();
</del><ins>+ void openDatabaseAndImportItemsIfNeeded() const;
</ins><span class="cx">
</span><span class="cx"> void dispatchEvents(IPC::Connection* sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& oldValue, const String& newValue, const String& urlString) const;
</span><span class="cx">
</span><span class="cx"> // Will be null if the storage area belongs to a session storage namespace.
</span><span class="cx"> LocalStorageNamespace* m_localStorageNamespace;
</span><del>- RefPtr<LocalStorageDatabase> m_localStorageDatabase;
- bool m_didImportItemsFromDatabase;
</del><ins>+ mutable RefPtr<LocalStorageDatabase> m_localStorageDatabase;
+ mutable bool m_didImportItemsFromDatabase { false };
</ins><span class="cx">
</span><del>- Ref<SecurityOrigin> m_securityOrigin;
</del><ins>+ SecurityOriginData m_securityOrigin;
</ins><span class="cx"> unsigned m_quotaInBytes;
</span><span class="cx">
</span><span class="cx"> RefPtr<StorageMap> m_storageMap;
</span><span class="lines">@@ -90,10 +90,10 @@
</span><span class="cx">
</span><span class="cx"> StorageManager* storageManager() const { return m_storageManager; }
</span><span class="cx">
</span><del>- Ref<StorageArea> getOrCreateStorageArea(Ref<SecurityOrigin>&&);
</del><ins>+ Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&&);
</ins><span class="cx"> void didDestroyStorageArea(StorageArea*);
</span><span class="cx">
</span><del>- void clearStorageAreasMatchingOrigin(const SecurityOrigin&);
</del><ins>+ void clearStorageAreasMatchingOrigin(const SecurityOriginData&);
</ins><span class="cx"> void clearAllStorageAreas();
</span><span class="cx">
</span><span class="cx"> private:
</span><span class="lines">@@ -104,7 +104,7 @@
</span><span class="cx"> unsigned m_quotaInBytes;
</span><span class="cx">
</span><span class="cx"> // We don't hold an explicit reference to the StorageAreas; they are kept alive by the m_storageAreasByConnection map in StorageManager.
</span><del>- HashMap<RefPtr<SecurityOrigin>, StorageArea*> m_storageAreaMap;
</del><ins>+ HashMap<SecurityOriginData, StorageArea*> m_storageAreaMap;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> class StorageManager::TransientLocalStorageNamespace : public ThreadSafeRefCounted<TransientLocalStorageNamespace> {
</span><span class="lines">@@ -118,21 +118,16 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx">
</span><del>- Ref<StorageArea> getOrCreateStorageArea(Ref<SecurityOrigin>&& securityOrigin)
</del><ins>+ Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&& securityOrigin)
</ins><span class="cx"> {
</span><del>- auto& slot = m_storageAreaMap.add(securityOrigin.ptr(), nullptr).iterator->value;
- if (slot)
- return *slot;
-
- auto storageArea = StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes);
- slot = &storageArea.get();
-
- return storageArea;
</del><ins>+ return *m_storageAreaMap.ensure(securityOrigin, [this, securityOrigin]() mutable {
+ return StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes);
+ }).iterator->value.copyRef();
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- Vector<Ref<SecurityOrigin>> origins() const
</del><ins>+ Vector<SecurityOriginData> origins() const
</ins><span class="cx"> {
</span><del>- Vector<Ref<SecurityOrigin>> origins;
</del><ins>+ Vector<SecurityOriginData> origins;
</ins><span class="cx">
</span><span class="cx"> for (const auto& storageArea : m_storageAreaMap.values()) {
</span><span class="cx"> if (!storageArea->items().isEmpty())
</span><span class="lines">@@ -142,10 +137,10 @@
</span><span class="cx"> return origins;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- void clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
</del><ins>+ void clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><span class="cx"> for (auto& storageArea : m_storageAreaMap.values()) {
</span><del>- if (storageArea->securityOrigin().equal(&securityOrigin))
</del><ins>+ if (storageArea->securityOrigin() == securityOrigin)
</ins><span class="cx"> storageArea->clear();
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -163,18 +158,17 @@
</span><span class="cx">
</span><span class="cx"> const unsigned m_quotaInBytes = 5 * 1024 * 1024;
</span><span class="cx">
</span><del>- HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea>> m_storageAreaMap;
</del><ins>+ HashMap<SecurityOriginData, RefPtr<StorageArea>> m_storageAreaMap;
</ins><span class="cx"> };
</span><span class="cx">
</span><del>-Ref<StorageManager::StorageArea> StorageManager::StorageArea::create(LocalStorageNamespace* localStorageNamespace, Ref<SecurityOrigin>&& securityOrigin, unsigned quotaInBytes)
</del><ins>+auto StorageManager::StorageArea::create(LocalStorageNamespace* localStorageNamespace, const SecurityOriginData& securityOrigin, unsigned quotaInBytes) -> Ref<StorageManager::StorageArea>
</ins><span class="cx"> {
</span><del>- return adoptRef(*new StorageArea(localStorageNamespace, WTFMove(securityOrigin), quotaInBytes));
</del><ins>+ return adoptRef(*new StorageArea(localStorageNamespace, securityOrigin, quotaInBytes));
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-StorageManager::StorageArea::StorageArea(LocalStorageNamespace* localStorageNamespace, Ref<SecurityOrigin>&& securityOrigin, unsigned quotaInBytes)
</del><ins>+StorageManager::StorageArea::StorageArea(LocalStorageNamespace* localStorageNamespace, const SecurityOriginData& securityOrigin, unsigned quotaInBytes)
</ins><span class="cx"> : m_localStorageNamespace(localStorageNamespace)
</span><del>- , m_didImportItemsFromDatabase(false)
- , m_securityOrigin(WTFMove(securityOrigin))
</del><ins>+ , m_securityOrigin(securityOrigin)
</ins><span class="cx"> , m_quotaInBytes(quotaInBytes)
</span><span class="cx"> , m_storageMap(StorageMap::create(m_quotaInBytes))
</span><span class="cx"> {
</span><span class="lines">@@ -207,7 +201,7 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT(!m_localStorageNamespace);
</span><span class="cx">
</span><del>- auto storageArea = StorageArea::create(0, m_securityOrigin.copyRef(), m_quotaInBytes);
</del><ins>+ auto storageArea = StorageArea::create(nullptr, m_securityOrigin, m_quotaInBytes);
</ins><span class="cx"> storageArea->m_storageMap = m_storageMap;
</span><span class="cx">
</span><span class="cx"> return storageArea;
</span><span class="lines">@@ -265,7 +259,7 @@
</span><span class="cx"> dispatchEvents(sourceConnection, sourceStorageAreaID, String(), String(), String(), urlString);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-const HashMap<String, String>& StorageManager::StorageArea::items()
</del><ins>+const HashMap<String, String>& StorageManager::StorageArea::items() const
</ins><span class="cx"> {
</span><span class="cx"> openDatabaseAndImportItemsIfNeeded();
</span><span class="cx">
</span><span class="lines">@@ -285,7 +279,7 @@
</span><span class="cx"> it->first->send(Messages::StorageAreaMap::ClearCache(), it->second);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded()
</del><ins>+void StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded() const
</ins><span class="cx"> {
</span><span class="cx"> if (!m_localStorageNamespace)
</span><span class="cx"> return;
</span><span class="lines">@@ -292,7 +286,7 @@
</span><span class="cx">
</span><span class="cx"> // We open the database here even if we've already imported our items to ensure that the database is open if we need to write to it.
</span><span class="cx"> if (!m_localStorageDatabase)
</span><del>- m_localStorageDatabase = LocalStorageDatabase::create(m_localStorageNamespace->storageManager()->m_queue.copyRef(), m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker.copyRef(), m_securityOrigin.copyRef());
</del><ins>+ m_localStorageDatabase = LocalStorageDatabase::create(m_localStorageNamespace->storageManager()->m_queue.copyRef(), m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker.copyRef(), m_securityOrigin);
</ins><span class="cx">
</span><span class="cx"> if (m_didImportItemsFromDatabase)
</span><span class="cx"> return;
</span><span class="lines">@@ -329,9 +323,9 @@
</span><span class="cx"> ASSERT(m_storageAreaMap.isEmpty());
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Ref<StorageManager::StorageArea> StorageManager::LocalStorageNamespace::getOrCreateStorageArea(Ref<SecurityOrigin>&& securityOrigin)
</del><ins>+auto StorageManager::LocalStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin) -> Ref<StorageArea>
</ins><span class="cx"> {
</span><del>- auto& slot = m_storageAreaMap.add(securityOrigin.ptr(), nullptr).iterator->value;
</del><ins>+ auto& slot = m_storageAreaMap.add(securityOrigin, nullptr).iterator->value;
</ins><span class="cx"> if (slot)
</span><span class="cx"> return *slot;
</span><span class="cx">
</span><span class="lines">@@ -343,9 +337,9 @@
</span><span class="cx">
</span><span class="cx"> void StorageManager::LocalStorageNamespace::didDestroyStorageArea(StorageArea* storageArea)
</span><span class="cx"> {
</span><del>- ASSERT(m_storageAreaMap.contains(&storageArea->securityOrigin()));
</del><ins>+ ASSERT(m_storageAreaMap.contains(storageArea->securityOrigin()));
</ins><span class="cx">
</span><del>- m_storageAreaMap.remove(&storageArea->securityOrigin());
</del><ins>+ m_storageAreaMap.remove(storageArea->securityOrigin());
</ins><span class="cx"> if (!m_storageAreaMap.isEmpty())
</span><span class="cx"> return;
</span><span class="cx">
</span><span class="lines">@@ -353,10 +347,10 @@
</span><span class="cx"> m_storageManager->m_localStorageNamespaces.remove(m_storageNamespaceID);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
</del><ins>+void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><span class="cx"> for (const auto& originAndStorageArea : m_storageAreaMap) {
</span><del>- if (originAndStorageArea.key->equal(&securityOrigin))
</del><ins>+ if (originAndStorageArea.key == securityOrigin)
</ins><span class="cx"> originAndStorageArea.value->clear();
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -363,8 +357,8 @@
</span><span class="cx">
</span><span class="cx"> void StorageManager::LocalStorageNamespace::clearAllStorageAreas()
</span><span class="cx"> {
</span><del>- for (auto it = m_storageAreaMap.begin(), end = m_storageAreaMap.end(); it != end; ++it)
- it->value->clear();
</del><ins>+ for (auto* storageArea : m_storageAreaMap.values())
+ storageArea->clear();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> class StorageManager::SessionStorageNamespace : public ThreadSafeRefCounted<SessionStorageNamespace> {
</span><span class="lines">@@ -377,13 +371,13 @@
</span><span class="cx"> IPC::Connection* allowedConnection() const { return m_allowedConnection.get(); }
</span><span class="cx"> void setAllowedConnection(IPC::Connection*);
</span><span class="cx">
</span><del>- Ref<StorageArea> getOrCreateStorageArea(Ref<SecurityOrigin>&&);
</del><ins>+ Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&&);
</ins><span class="cx">
</span><span class="cx"> void cloneTo(SessionStorageNamespace& newSessionStorageNamespace);
</span><span class="cx">
</span><del>- Vector<Ref<SecurityOrigin>> origins() const
</del><ins>+ Vector<SecurityOriginData> origins() const
</ins><span class="cx"> {
</span><del>- Vector<Ref<SecurityOrigin>> origins;
</del><ins>+ Vector<SecurityOriginData> origins;
</ins><span class="cx">
</span><span class="cx"> for (const auto& storageArea : m_storageAreaMap.values()) {
</span><span class="cx"> if (!storageArea->items().isEmpty())
</span><span class="lines">@@ -393,10 +387,10 @@
</span><span class="cx"> return origins;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- void clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
</del><ins>+ void clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><span class="cx"> for (auto& storageArea : m_storageAreaMap.values()) {
</span><del>- if (storageArea->securityOrigin().equal(&securityOrigin))
</del><ins>+ if (storageArea->securityOrigin() == securityOrigin)
</ins><span class="cx"> storageArea->clear();
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="lines">@@ -413,7 +407,7 @@
</span><span class="cx"> RefPtr<IPC::Connection> m_allowedConnection;
</span><span class="cx"> unsigned m_quotaInBytes;
</span><span class="cx">
</span><del>- HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea>> m_storageAreaMap;
</del><ins>+ HashMap<SecurityOriginData, RefPtr<StorageArea>> m_storageAreaMap;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> Ref<StorageManager::SessionStorageNamespace> StorageManager::SessionStorageNamespace::create(unsigned quotaInBytes)
</span><span class="lines">@@ -437,13 +431,11 @@
</span><span class="cx"> m_allowedConnection = allowedConnection;
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Ref<StorageManager::StorageArea> StorageManager::SessionStorageNamespace::getOrCreateStorageArea(Ref<SecurityOrigin>&& securityOrigin)
</del><ins>+auto StorageManager::SessionStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin) -> Ref<StorageArea>
</ins><span class="cx"> {
</span><del>- auto& slot = m_storageAreaMap.add(securityOrigin.ptr(), nullptr).iterator->value;
- if (!slot)
- slot = StorageArea::create(0, WTFMove(securityOrigin), m_quotaInBytes);
-
- return *slot;
</del><ins>+ return *m_storageAreaMap.ensure(securityOrigin, [this, securityOrigin]() mutable {
+ return StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes);
+ }).iterator->value.copyRef();
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void StorageManager::SessionStorageNamespace::cloneTo(SessionStorageNamespace& newSessionStorageNamespace)
</span><span class="lines">@@ -450,8 +442,8 @@
</span><span class="cx"> {
</span><span class="cx"> ASSERT_UNUSED(newSessionStorageNamespace, newSessionStorageNamespace.isEmpty());
</span><span class="cx">
</span><del>- for (HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea>>::const_iterator it = m_storageAreaMap.begin(), end = m_storageAreaMap.end(); it != end; ++it)
- newSessionStorageNamespace.m_storageAreaMap.add(it->key, it->value->clone());
</del><ins>+ for (auto& pair : m_storageAreaMap)
+ newSessionStorageNamespace.m_storageAreaMap.add(pair.key, pair.value->clone());
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> Ref<StorageManager> StorageManager::create(const String& localStorageDirectory)
</span><span class="lines">@@ -539,16 +531,14 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::getSessionStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler)
</del><ins>+void StorageManager::getSessionStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler)
</ins><span class="cx"> {
</span><del>- RefPtr<StorageManager> storageManager(this);
-
</del><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
</span><del>- HashSet<RefPtr<SecurityOrigin>> origins;
</del><ins>+ HashSet<SecurityOriginData> origins;
</ins><span class="cx">
</span><span class="cx"> for (const auto& sessionStorageNamespace : m_sessionStorageNamespaces.values()) {
</span><span class="cx"> for (auto& origin : sessionStorageNamespace->origins())
</span><del>- origins.add(WTFMove(origin));
</del><ins>+ origins.add(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {
</span><span class="lines">@@ -557,7 +547,7 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::deleteSessionStorageOrigins(std::function<void ()>&& completionHandler)
</del><ins>+void StorageManager::deleteSessionStorageOrigins(std::function<void()>&& completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
</span><span class="cx"> for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values())
</span><span class="lines">@@ -567,18 +557,18 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()>&& completionHandler)
</del><ins>+void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, std::function<void()>&& completionHandler)
</ins><span class="cx"> {
</span><del>- Vector<RefPtr<WebCore::SecurityOrigin>> copiedOrigins;
</del><ins>+ Vector<WebCore::SecurityOriginData> copiedOrigins;
</ins><span class="cx"> copiedOrigins.reserveInitialCapacity(origins.size());
</span><span class="cx">
</span><span class="cx"> for (auto& origin : origins)
</span><del>- copiedOrigins.uncheckedAppend(origin->isolatedCopy());
</del><ins>+ copiedOrigins.uncheckedAppend(origin.isolatedCopy());
</ins><span class="cx">
</span><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable {
</span><span class="cx"> for (auto& origin : copiedOrigins) {
</span><span class="cx"> for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values())
</span><del>- sessionStorageNamespace->clearStorageAreasMatchingOrigin(*origin);
</del><ins>+ sessionStorageNamespace->clearStorageAreasMatchingOrigin(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RunLoop::main().dispatch(WTFMove(completionHandler));
</span><span class="lines">@@ -585,17 +575,17 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::getLocalStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler)
</del><ins>+void StorageManager::getLocalStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
</span><del>- HashSet<RefPtr<SecurityOrigin>> origins;
</del><ins>+ HashSet<SecurityOriginData> origins;
</ins><span class="cx">
</span><span class="cx"> for (auto& origin : m_localStorageDatabaseTracker->origins())
</span><del>- origins.add(WTFMove(origin));
</del><ins>+ origins.add(origin);
</ins><span class="cx">
</span><span class="cx"> for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values()) {
</span><span class="cx"> for (auto& origin : transientLocalStorageNamespace->origins())
</span><del>- origins.add(WTFMove(origin));
</del><ins>+ origins.add(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {
</span><span class="lines">@@ -615,7 +605,7 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::deleteLocalStorageEntriesForOrigin(const SecurityOrigin& securityOrigin)
</del><ins>+void StorageManager::deleteLocalStorageEntriesForOrigin(SecurityOriginData&& securityOrigin)
</ins><span class="cx"> {
</span><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigin = securityOrigin.isolatedCopy()]() mutable {
</span><span class="cx"> for (auto& localStorageNamespace : m_localStorageNamespaces.values())
</span><span class="lines">@@ -624,11 +614,11 @@
</span><span class="cx"> for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
</span><span class="cx"> transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(copiedOrigin);
</span><span class="cx">
</span><del>- m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(copiedOrigin.ptr());
</del><ins>+ m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(copiedOrigin);
</ins><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void ()>&& completionHandler)
</del><ins>+void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void()>&& completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), time, completionHandler = WTFMove(completionHandler)]() mutable {
</span><span class="cx"> auto deletedOrigins = m_localStorageDatabaseTracker->deleteDatabasesModifiedSince(time);
</span><span class="lines">@@ -635,7 +625,7 @@
</span><span class="cx">
</span><span class="cx"> for (const auto& origin : deletedOrigins) {
</span><span class="cx"> for (auto& localStorageNamespace : m_localStorageNamespaces.values())
</span><del>- localStorageNamespace->clearStorageAreasMatchingOrigin(origin.get());
</del><ins>+ localStorageNamespace->clearStorageAreasMatchingOrigin(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
</span><span class="lines">@@ -645,23 +635,23 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()>&& completionHandler)
</del><ins>+void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, std::function<void()>&& completionHandler)
</ins><span class="cx"> {
</span><del>- Vector<RefPtr<WebCore::SecurityOrigin>> copiedOrigins;
</del><ins>+ Vector<SecurityOriginData> copiedOrigins;
</ins><span class="cx"> copiedOrigins.reserveInitialCapacity(origins.size());
</span><span class="cx">
</span><span class="cx"> for (auto& origin : origins)
</span><del>- copiedOrigins.uncheckedAppend(origin->isolatedCopy());
</del><ins>+ copiedOrigins.uncheckedAppend(origin.isolatedCopy());
</ins><span class="cx">
</span><span class="cx"> m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable {
</span><span class="cx"> for (auto& origin : copiedOrigins) {
</span><span class="cx"> for (auto& localStorageNamespace : m_localStorageNamespaces.values())
</span><del>- localStorageNamespace->clearStorageAreasMatchingOrigin(*origin);
</del><ins>+ localStorageNamespace->clearStorageAreasMatchingOrigin(origin);
</ins><span class="cx">
</span><span class="cx"> for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
</span><del>- transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(*origin);
</del><ins>+ transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(origin);
</ins><span class="cx">
</span><del>- m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin.get());
</del><ins>+ m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> RunLoop::main().dispatch(WTFMove(completionHandler));
</span><span class="lines">@@ -668,7 +658,7 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::createLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& securityOriginData)
</del><ins>+void StorageManager::createLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& securityOriginData)
</ins><span class="cx"> {
</span><span class="cx"> std::pair<RefPtr<IPC::Connection>, uint64_t> connectionAndStorageMapIDPair(&connection, storageMapID);
</span><span class="cx">
</span><span class="lines">@@ -686,19 +676,17 @@
</span><span class="cx"> // FIXME: This should be a message check.
</span><span class="cx"> ASSERT(localStorageNamespace);
</span><span class="cx">
</span><del>- auto storageArea = localStorageNamespace->getOrCreateStorageArea(securityOriginData.securityOrigin());
</del><ins>+ auto storageArea = localStorageNamespace->getOrCreateStorageArea(WTFMove(securityOriginData));
</ins><span class="cx"> storageArea->addListener(connection, storageMapID);
</span><span class="cx">
</span><span class="cx"> result.iterator->value = WTFMove(storageArea);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::createTransientLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& topLevelOriginData, const SecurityOriginData& securityOriginData)
</del><ins>+void StorageManager::createTransientLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& topLevelOriginData, SecurityOriginData&& origin)
</ins><span class="cx"> {
</span><span class="cx"> // FIXME: This should be a message check.
</span><span class="cx"> ASSERT(m_storageAreasByConnection.isValidKey({ &connection, storageMapID }));
</span><span class="cx">
</span><del>- Ref<SecurityOrigin> origin = securityOriginData.securityOrigin();
-
</del><span class="cx"> // See if we already have session storage for this connection/origin combo.
</span><span class="cx"> // If so, update the map with the new ID, otherwise keep on trucking.
</span><span class="cx"> for (auto it = m_storageAreasByConnection.begin(), end = m_storageAreasByConnection.end(); it != end; ++it) {
</span><span class="lines">@@ -707,7 +695,7 @@
</span><span class="cx"> Ref<StorageArea> area = *it->value;
</span><span class="cx"> if (!area->isSessionStorage())
</span><span class="cx"> continue;
</span><del>- if (!origin->isSameSchemeHostPort(&area->securityOrigin()))
</del><ins>+ if (!origin.securityOrigin()->isSameSchemeHostPort(area->securityOrigin().securityOrigin().ptr()))
</ins><span class="cx"> continue;
</span><span class="cx"> area->addListener(connection, storageMapID);
</span><span class="cx"> m_storageAreasByConnection.remove(it);
</span><span class="lines">@@ -720,15 +708,15 @@
</span><span class="cx"> // FIXME: This should be a message check.
</span><span class="cx"> ASSERT(!slot);
</span><span class="cx">
</span><del>- TransientLocalStorageNamespace* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, topLevelOriginData.securityOrigin());
</del><ins>+ TransientLocalStorageNamespace* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, WTFMove(topLevelOriginData));
</ins><span class="cx">
</span><del>- auto storageArea = transientLocalStorageNamespace->getOrCreateStorageArea(securityOriginData.securityOrigin());
</del><ins>+ auto storageArea = transientLocalStorageNamespace->getOrCreateStorageArea(WTFMove(origin));
</ins><span class="cx"> storageArea->addListener(connection, storageMapID);
</span><span class="cx">
</span><span class="cx"> slot = WTFMove(storageArea);
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void StorageManager::createSessionStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& securityOriginData)
</del><ins>+void StorageManager::createSessionStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& securityOriginData)
</ins><span class="cx"> {
</span><span class="cx"> // FIXME: This should be a message check.
</span><span class="cx"> ASSERT(m_sessionStorageNamespaces.isValidKey(storageNamespaceID));
</span><span class="lines">@@ -751,7 +739,7 @@
</span><span class="cx"> // FIXME: This should be a message check.
</span><span class="cx"> ASSERT(&connection == sessionStorageNamespace->allowedConnection());
</span><span class="cx">
</span><del>- auto storageArea = sessionStorageNamespace->getOrCreateStorageArea(securityOriginData.securityOrigin());
</del><ins>+ auto storageArea = sessionStorageNamespace->getOrCreateStorageArea(WTFMove(securityOriginData));
</ins><span class="cx"> storageArea->addListener(connection, storageMapID);
</span><span class="cx">
</span><span class="cx"> slot = WTFMove(storageArea);
</span><span class="lines">@@ -859,7 +847,7 @@
</span><span class="cx"> StorageManager::LocalStorageNamespace* StorageManager::getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID)
</span><span class="cx"> {
</span><span class="cx"> if (!m_localStorageNamespaces.isValidKey(storageNamespaceID))
</span><del>- return 0;
</del><ins>+ return nullptr;
</ins><span class="cx">
</span><span class="cx"> auto& slot = m_localStorageNamespaces.add(storageNamespaceID, nullptr).iterator->value;
</span><span class="cx"> if (!slot)
</span><span class="lines">@@ -868,12 +856,12 @@
</span><span class="cx"> return slot.get();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-StorageManager::TransientLocalStorageNamespace* StorageManager::getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOrigin& topLevelOrigin)
</del><ins>+StorageManager::TransientLocalStorageNamespace* StorageManager::getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin)
</ins><span class="cx"> {
</span><del>- if (!m_transientLocalStorageNamespaces.isValidKey({ storageNamespaceID, &topLevelOrigin }))
</del><ins>+ if (!m_transientLocalStorageNamespaces.isValidKey({ storageNamespaceID, topLevelOrigin }))
</ins><span class="cx"> return nullptr;
</span><span class="cx">
</span><del>- auto& slot = m_transientLocalStorageNamespaces.add({ storageNamespaceID, &topLevelOrigin }, nullptr).iterator->value;
</del><ins>+ auto& slot = m_transientLocalStorageNamespaces.add({ storageNamespaceID, WTFMove(topLevelOrigin) }, nullptr).iterator->value;
</ins><span class="cx"> if (!slot)
</span><span class="cx"> slot = TransientLocalStorageNamespace::create();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessStorageStorageManagerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -23,11 +23,11 @@
</span><span class="cx"> * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef StorageManager_h
-#define StorageManager_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "Connection.h"
</span><span class="cx"> #include "LocalStorageDatabaseTracker.h"
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/SecurityOriginHash.h>
</span><span class="cx"> #include <chrono>
</span><span class="cx"> #include <wtf/Forward.h>
</span><span class="lines">@@ -37,7 +37,6 @@
</span><span class="cx">
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> class SecurityOrigin;
</span><del>-struct SecurityOriginData;
</del><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -59,17 +58,17 @@
</span><span class="cx"> void processDidCloseConnection(WebProcessProxy&, IPC::Connection&);
</span><span class="cx"> void applicationWillTerminate();
</span><span class="cx">
</span><del>- void getSessionStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler);
- void deleteSessionStorageOrigins(std::function<void ()>&& completionHandler);
- void deleteSessionStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>&, std::function<void ()>&& completionHandler);
</del><ins>+ void getSessionStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler);
+ void deleteSessionStorageOrigins(std::function<void()>&& completionHandler);
+ void deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>&, std::function<void()>&& completionHandler);
</ins><span class="cx">
</span><del>- void getLocalStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler);
- void deleteLocalStorageEntriesForOrigin(const WebCore::SecurityOrigin&);
</del><ins>+ void getLocalStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler);
+ void deleteLocalStorageEntriesForOrigin(WebCore::SecurityOriginData&&);
</ins><span class="cx">
</span><del>- void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void ()>&& completionHandler);
- void deleteLocalStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>&, std::function<void ()>&& completionHandler);
</del><ins>+ void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void()>&& completionHandler);
+ void deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>&, std::function<void()>&& completionHandler);
</ins><span class="cx">
</span><del>- void getLocalStorageOriginDetails(std::function<void (Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler);
</del><ins>+ void getLocalStorageOriginDetails(std::function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler);
</ins><span class="cx">
</span><span class="cx"> private:
</span><span class="cx"> explicit StorageManager(const String& localStorageDirectory);
</span><span class="lines">@@ -79,9 +78,9 @@
</span><span class="cx"> void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>& replyEncoder) override;
</span><span class="cx">
</span><span class="cx"> // Message handlers.
</span><del>- void createLocalStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, const WebCore::SecurityOriginData&);
- void createTransientLocalStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, const WebCore::SecurityOriginData& topLevelOriginData, const WebCore::SecurityOriginData&);
- void createSessionStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, const WebCore::SecurityOriginData&);
</del><ins>+ void createLocalStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, WebCore::SecurityOriginData&&);
+ void createTransientLocalStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOriginData, WebCore::SecurityOriginData&&);
+ void createSessionStorageMap(IPC::Connection&, uint64_t storageMapID, uint64_t storageNamespaceID, WebCore::SecurityOriginData&&);
</ins><span class="cx"> void destroyStorageMap(IPC::Connection&, uint64_t storageMapID);
</span><span class="cx">
</span><span class="cx"> void getValues(IPC::Connection&, uint64_t storageMapID, uint64_t storageMapSeed, HashMap<String, String>& values);
</span><span class="lines">@@ -96,7 +95,7 @@
</span><span class="cx"> LocalStorageNamespace* getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID);
</span><span class="cx">
</span><span class="cx"> class TransientLocalStorageNamespace;
</span><del>- TransientLocalStorageNamespace* getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOrigin& topLevelOrigin);
</del><ins>+ TransientLocalStorageNamespace* getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin);
</ins><span class="cx">
</span><span class="cx"> Ref<WorkQueue> m_queue;
</span><span class="cx">
</span><span class="lines">@@ -103,7 +102,7 @@
</span><span class="cx"> Ref<LocalStorageDatabaseTracker> m_localStorageDatabaseTracker;
</span><span class="cx"> HashMap<uint64_t, RefPtr<LocalStorageNamespace>> m_localStorageNamespaces;
</span><span class="cx">
</span><del>- HashMap<std::pair<uint64_t, RefPtr<WebCore::SecurityOrigin>>, RefPtr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
</del><ins>+ HashMap<std::pair<uint64_t, WebCore::SecurityOriginData>, RefPtr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
</ins><span class="cx">
</span><span class="cx"> class SessionStorageNamespace;
</span><span class="cx"> HashMap<uint64_t, RefPtr<SessionStorageNamespace>> m_sessionStorageNamespaces;
</span><span class="lines">@@ -112,5 +111,3 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> } // namespace WebKit
</span><del>-
-#endif // StorageManager_h
</del></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebProcessProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -749,7 +749,7 @@
</span><span class="cx"> });
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, Function<void ()> completionHandler)
</del><ins>+void WebProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, Function<void()> completionHandler)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(canSendMessage());
</span><span class="cx">
</span><span class="lines">@@ -756,11 +756,7 @@
</span><span class="cx"> auto token = throttler().backgroundActivityToken();
</span><span class="cx"> RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - WebProcessProxy is taking a background assertion because the Web process is deleting Website data for several origins", this);
</span><span class="cx">
</span><del>- Vector<SecurityOriginData> originData;
- for (auto& origin : origins)
- originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
-
- connection()->sendWithReply(Messages::WebProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData), 0, RunLoop::main(), [this, token, completionHandler = WTFMove(completionHandler), sessionID](auto reply) {
</del><ins>+ connection()->sendWithReply(Messages::WebProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins), 0, RunLoop::main(), [this, token, completionHandler = WTFMove(completionHandler), sessionID](auto reply) {
</ins><span class="cx"> completionHandler();
</span><span class="cx"> RELEASE_LOG_IF(sessionID.isAlwaysOnLoggingAllowed(), ProcessSuspension, "%p - WebProcessProxy is releasing a background assertion because the Web process is done deleting Website data for several origins", this);
</span><span class="cx"> });
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebProcessProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebProcessProxy.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/WebProcessProxy.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -118,9 +118,9 @@
</span><span class="cx"> void didSaveToPageCache();
</span><span class="cx"> void releasePageCache();
</span><span class="cx">
</span><del>- void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, Function<void (WebsiteData)> completionHandler);
- void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, Function<void ()> completionHandler);
- void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, Function<void ()> completionHandler);
</del><ins>+ void fetchWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, Function<void(WebsiteData)> completionHandler);
+ void deleteWebsiteData(WebCore::SessionID, OptionSet<WebsiteDataType>, std::chrono::system_clock::time_point modifiedSince, Function<void()> completionHandler);
+ void deleteWebsiteDataForOrigins(WebCore::SessionID, OptionSet<WebsiteDataType>, const Vector<WebCore::SecurityOriginData>&, Function<void()> completionHandler);
</ins><span class="cx">
</span><span class="cx"> void enableSuddenTermination();
</span><span class="cx"> void disableSuddenTermination();
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataRecordcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -66,9 +66,9 @@
</span><span class="cx"> }
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>-String WebsiteDataRecord::displayNameForOrigin(const WebCore::SecurityOrigin& securityOrigin)
</del><ins>+String WebsiteDataRecord::displayNameForOrigin(const WebCore::SecurityOriginData& securityOrigin)
</ins><span class="cx"> {
</span><del>- const auto& protocol = securityOrigin.protocol();
</del><ins>+ const auto& protocol = securityOrigin.protocol;
</ins><span class="cx">
</span><span class="cx"> if (protocol == "file")
</span><span class="cx"> return displayNameForLocalFiles();
</span><span class="lines">@@ -75,17 +75,17 @@
</span><span class="cx">
</span><span class="cx"> #if ENABLE(PUBLIC_SUFFIX_LIST)
</span><span class="cx"> if (protocol == "http" || protocol == "https")
</span><del>- return WebCore::topPrivatelyControlledDomain(securityOrigin.host());
</del><ins>+ return WebCore::topPrivatelyControlledDomain(securityOrigin.host);
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> return String();
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebsiteDataRecord::add(WebsiteDataType type, RefPtr<WebCore::SecurityOrigin>&& origin)
</del><ins>+void WebsiteDataRecord::add(WebsiteDataType type, const WebCore::SecurityOriginData& origin)
</ins><span class="cx"> {
</span><span class="cx"> types |= type;
</span><span class="cx">
</span><del>- origins.add(WTFMove(origin));
</del><ins>+ origins.add(origin);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void WebsiteDataRecord::addCookieHostName(const String& hostName)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataRecordh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -23,10 +23,10 @@
</span><span class="cx"> * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef WebsiteDataRecord_h
-#define WebsiteDataRecord_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "WebsiteDataType.h"
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/SecurityOriginHash.h>
</span><span class="cx"> #include <wtf/HashMap.h>
</span><span class="cx"> #include <wtf/HashSet.h>
</span><span class="lines">@@ -46,9 +46,9 @@
</span><span class="cx"> #if ENABLE(NETSCAPE_PLUGIN_API)
</span><span class="cx"> static String displayNameForPluginDataHostName(const String& hostName);
</span><span class="cx"> #endif
</span><del>- static String displayNameForOrigin(const WebCore::SecurityOrigin&);
</del><ins>+ static String displayNameForOrigin(const WebCore::SecurityOriginData&);
</ins><span class="cx">
</span><del>- void add(WebsiteDataType, RefPtr<WebCore::SecurityOrigin>&&);
</del><ins>+ void add(WebsiteDataType, const WebCore::SecurityOriginData&);
</ins><span class="cx"> void addCookieHostName(const String& hostName);
</span><span class="cx"> #if ENABLE(NETSCAPE_PLUGIN_API)
</span><span class="cx"> void addPluginDataHostName(const String& hostName);
</span><span class="lines">@@ -63,7 +63,7 @@
</span><span class="cx"> };
</span><span class="cx"> Optional<Size> size;
</span><span class="cx">
</span><del>- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ HashSet<WebCore::SecurityOriginData> origins;
</ins><span class="cx"> HashSet<String> cookieHostNames;
</span><span class="cx"> #if ENABLE(NETSCAPE_PLUGIN_API)
</span><span class="cx"> HashSet<String> pluginDataHostNames;
</span><span class="lines">@@ -71,5 +71,3 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> }
</span><del>-
-#endif // WebsiteDataRecord_h
</del></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataStorecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp        2016-11-12 01:18:22 UTC (rev 208633)
</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(*entry.origin);
</del><ins>+ auto displayName = WebsiteDataRecord::displayNameForOrigin(WebCore::SecurityOriginData::fromSecurityOrigin(*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, WTFMove(entry.origin));
</del><ins>+ record.add(entry.type, WebCore::SecurityOriginData::fromSecurityOrigin(*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">@@ -325,11 +325,11 @@
</span><span class="cx"> if (dataTypes.contains(WebsiteDataType::SessionStorage) && m_storageManager) {
</span><span class="cx"> callbackAggregator->addPendingCallback();
</span><span class="cx">
</span><del>- m_storageManager->getSessionStorageOrigins([callbackAggregator](HashSet<RefPtr<WebCore::SecurityOrigin>>&& origins) {
</del><ins>+ m_storageManager->getSessionStorageOrigins([callbackAggregator](HashSet<WebCore::SecurityOriginData>&& origins) {
</ins><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(), WebsiteDataType::SessionStorage, 0 });
</del><ins>+ websiteData.entries.append(WebsiteData::Entry { origins.takeAny().securityOrigin(), WebsiteDataType::SessionStorage, 0 });
</ins><span class="cx">
</span><span class="cx"> callbackAggregator->removePendingCallback(WTFMove(websiteData));
</span><span class="cx"> });
</span><span class="lines">@@ -338,11 +338,11 @@
</span><span class="cx"> if (dataTypes.contains(WebsiteDataType::LocalStorage) && m_storageManager) {
</span><span class="cx"> callbackAggregator->addPendingCallback();
</span><span class="cx">
</span><del>- m_storageManager->getLocalStorageOrigins([callbackAggregator](HashSet<RefPtr<WebCore::SecurityOrigin>>&& origins) {
</del><ins>+ m_storageManager->getLocalStorageOrigins([callbackAggregator](HashSet<WebCore::SecurityOriginData>&& origins) {
</ins><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(), WebsiteDataType::LocalStorage, 0 });
</del><ins>+ websiteData.entries.append(WebsiteData::Entry { origins.takeAny().securityOrigin(), WebsiteDataType::LocalStorage, 0 });
</ins><span class="cx">
</span><span class="cx"> callbackAggregator->removePendingCallback(WTFMove(websiteData));
</span><span class="cx"> });
</span><span class="lines">@@ -411,7 +411,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 { WTFMove(origin), WebsiteDataType::MediaKeys, 0 });
</del><ins>+ websiteData.entries.append(WebsiteData::Entry { origin.securityOrigin().ptr(), WebsiteDataType::MediaKeys, 0 });
</ins><span class="cx">
</span><span class="cx"> callbackAggregator->removePendingCallback(WTFMove(websiteData));
</span><span class="cx"> });
</span><span class="lines">@@ -534,7 +534,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> unsigned pendingCallbacks = 0;
</span><del>- std::function<void ()> completionHandler;
</del><ins>+ std::function<void()> completionHandler;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
</span><span class="lines">@@ -735,7 +735,7 @@
</span><span class="cx">
</span><span class="cx"> void WebsiteDataStore::removeData(OptionSet<WebsiteDataType> dataTypes, const Vector<WebsiteDataRecord>& dataRecords, std::function<void ()> completionHandler)
</span><span class="cx"> {
</span><del>- Vector<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ Vector<WebCore::SecurityOriginData> origins;
</ins><span class="cx">
</span><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (auto& origin : dataRecord.origins)
</span><span class="lines">@@ -768,13 +768,13 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> unsigned pendingCallbacks = 0;
</span><del>- std::function<void ()> completionHandler;
</del><ins>+ std::function<void()> completionHandler;
</ins><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
</span><span class="cx">
</span><span class="cx"> if (dataTypes.contains(WebsiteDataType::DiskCache)) {
</span><del>- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ HashSet<WebCore::SecurityOriginData> origins;
</ins><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (const auto& origin : dataRecord.origins)
</span><span class="cx"> origins.add(origin);
</span><span class="lines">@@ -783,7 +783,13 @@
</span><span class="cx"> #if ENABLE(VIDEO)
</span><span class="cx"> callbackAggregator->addPendingCallback();
</span><span class="cx"> m_queue->dispatch([origins = WTFMove(origins), mediaCacheDirectory = m_configuration.mediaCacheDirectory.isolatedCopy(), callbackAggregator] {
</span><del>- WebCore::HTMLMediaElement::clearMediaCacheForOrigins(mediaCacheDirectory, origins);
</del><ins>+
+ // FIXME: Move SecurityOrigin::toRawString to SecurityOriginData and
+ // make HTMLMediaElement::clearMediaCacheForOrigins take SecurityOriginData.
+ HashSet<RefPtr<WebCore::SecurityOrigin>> securityOrigins;
+ for (auto& origin : origins)
+ securityOrigins.add(origin.securityOrigin());
+ WebCore::HTMLMediaElement::clearMediaCacheForOrigins(mediaCacheDirectory, securityOrigins);
</ins><span class="cx">
</span><span class="cx"> WTF::RunLoop::main().dispatch([callbackAggregator] {
</span><span class="cx"> callbackAggregator->removePendingCallback();
</span><span class="lines">@@ -865,7 +871,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (dataTypes.contains(WebsiteDataType::OfflineWebApplicationCache) && isPersistent()) {
</span><del>- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ HashSet<WebCore::SecurityOriginData> origins;
</ins><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (const auto& origin : dataRecord.origins)
</span><span class="cx"> origins.add(origin);
</span><span class="lines">@@ -876,7 +882,7 @@
</span><span class="cx"> auto storage = WebCore::ApplicationCacheStorage::create(applicationCacheDirectory, applicationCacheFlatFileSubdirectoryName);
</span><span class="cx">
</span><span class="cx"> for (const auto& origin : origins)
</span><del>- storage->deleteCacheForOrigin(*origin);
</del><ins>+ storage->deleteCacheForOrigin(origin.securityOrigin());
</ins><span class="cx">
</span><span class="cx"> WTF::RunLoop::main().dispatch([callbackAggregator] {
</span><span class="cx"> callbackAggregator->removePendingCallback();
</span><span class="lines">@@ -885,7 +891,7 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (dataTypes.contains(WebsiteDataType::WebSQLDatabases) && isPersistent()) {
</span><del>- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ HashSet<WebCore::SecurityOriginData> origins;
</ins><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (const auto& origin : dataRecord.origins)
</span><span class="cx"> origins.add(origin);
</span><span class="lines">@@ -896,7 +902,7 @@
</span><span class="cx"> auto databaseTracker = WebCore::DatabaseTracker::trackerWithDatabasePath(webSQLDatabaseDirectory);
</span><span class="cx">
</span><span class="cx"> for (const auto& origin : origins)
</span><del>- databaseTracker->deleteOrigin(origin.get());
</del><ins>+ databaseTracker->deleteOrigin(origin.securityOrigin().ptr());
</ins><span class="cx">
</span><span class="cx"> RunLoop::main().dispatch([callbackAggregator] {
</span><span class="cx"> callbackAggregator->removePendingCallback();
</span><span class="lines">@@ -918,7 +924,7 @@
</span><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> if (dataTypes.contains(WebsiteDataType::MediaKeys) && isPersistent()) {
</span><del>- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ HashSet<WebCore::SecurityOriginData> origins;
</ins><span class="cx"> for (const auto& dataRecord : dataRecords) {
</span><span class="cx"> for (const auto& origin : dataRecord.origins)
</span><span class="cx"> origins.add(origin);
</span><span class="lines">@@ -1082,11 +1088,11 @@
</span><span class="cx"> return WebCore::pathByAppendingComponent(mediaKeyDirectory, "SecureStop.plist");
</span><span class="cx"> }
</span><span class="cx">
</span><del>-Vector<RefPtr<WebCore::SecurityOrigin>> WebsiteDataStore::mediaKeyOrigins(const String& mediaKeysStorageDirectory)
</del><ins>+Vector<WebCore::SecurityOriginData> WebsiteDataStore::mediaKeyOrigins(const String& mediaKeysStorageDirectory)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!mediaKeysStorageDirectory.isEmpty());
</span><span class="cx">
</span><del>- Vector<RefPtr<WebCore::SecurityOrigin>> origins;
</del><ins>+ Vector<WebCore::SecurityOriginData> origins;
</ins><span class="cx">
</span><span class="cx"> for (const auto& originPath : WebCore::listDirectory(mediaKeysStorageDirectory, "*")) {
</span><span class="cx"> auto mediaKeyFile = computeMediaKeyFile(originPath);
</span><span class="lines">@@ -1096,7 +1102,7 @@
</span><span class="cx"> auto mediaKeyIdentifier = WebCore::pathGetFileName(originPath);
</span><span class="cx">
</span><span class="cx"> if (auto securityOrigin = WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier(mediaKeyIdentifier))
</span><del>- origins.append(WTFMove(securityOrigin));
</del><ins>+ origins.append(WebCore::SecurityOriginData::fromSecurityOrigin(*securityOrigin));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> return origins;
</span><span class="lines">@@ -1121,12 +1127,12 @@
</span><span class="cx"> }
</span><span class="cx"> }
</span><span class="cx">
</span><del>-void WebsiteDataStore::removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<RefPtr<WebCore::SecurityOrigin>>& origins)
</del><ins>+void WebsiteDataStore::removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>& origins)
</ins><span class="cx"> {
</span><span class="cx"> ASSERT(!mediaKeysStorageDirectory.isEmpty());
</span><span class="cx">
</span><span class="cx"> for (const auto& origin : origins) {
</span><del>- auto mediaKeyDirectory = WebCore::pathByAppendingComponent(mediaKeysStorageDirectory, WebCore::SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier());
</del><ins>+ auto mediaKeyDirectory = WebCore::pathByAppendingComponent(mediaKeysStorageDirectory, origin.databaseIdentifier());
</ins><span class="cx"> auto mediaKeyFile = computeMediaKeyFile(mediaKeyDirectory);
</span><span class="cx">
</span><span class="cx"> WebCore::deleteFile(mediaKeyFile);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebsiteDataWebsiteDataStoreh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h (208632 => 208633)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h        2016-11-12 01:13:31 UTC (rev 208632)
+++ trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h        2016-11-12 01:18:22 UTC (rev 208633)
</span><span class="lines">@@ -23,10 +23,10 @@
</span><span class="cx"> * THE POSSIBILITY OF SUCH DAMAGE.
</span><span class="cx"> */
</span><span class="cx">
</span><del>-#ifndef WebsiteDataStore_h
-#define WebsiteDataStore_h
</del><ins>+#pragma once
</ins><span class="cx">
</span><span class="cx"> #include "WebProcessLifetimeObserver.h"
</span><ins>+#include <WebCore/SecurityOriginData.h>
</ins><span class="cx"> #include <WebCore/SecurityOriginHash.h>
</span><span class="cx"> #include <WebCore/SessionID.h>
</span><span class="cx"> #include <functional>
</span><span class="lines">@@ -110,9 +110,9 @@
</span><span class="cx"> Vector<PluginModuleInfo> plugins() const;
</span><span class="cx"> #endif
</span><span class="cx">
</span><del>- static Vector<RefPtr<WebCore::SecurityOrigin>> mediaKeyOrigins(const String& mediaKeysStorageDirectory);
</del><ins>+ static Vector<WebCore::SecurityOriginData> mediaKeyOrigins(const String& mediaKeysStorageDirectory);
</ins><span class="cx"> static void removeMediaKeys(const String& mediaKeysStorageDirectory, std::chrono::system_clock::time_point modifiedSince);
</span><del>- static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<RefPtr<WebCore::SecurityOrigin>>&);
</del><ins>+ static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&);
</ins><span class="cx">
</span><span class="cx"> const uint64_t m_identifier;
</span><span class="cx"> const WebCore::SessionID m_sessionID;
</span><span class="lines">@@ -126,5 +126,3 @@
</span><span class="cx"> };
</span><span class="cx">
</span><span class="cx"> }
</span><del>-
-#endif // WebsiteDataStore_h
</del></span></pre>
</div>
</div>
</body>
</html>