Diff
Modified: trunk/Source/WebCore/ChangeLog (208632 => 208633)
--- 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)
@@ -1,3 +1,22 @@
+2016-11-11 Alex Christensen <achristen...@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.
+
2016-11-11 Ryosuke Niwa <rn...@webkit.org>
Hovering over a slotted Text node clears hover state
Modified: trunk/Source/WebCore/page/SecurityOriginData.h (208632 => 208633)
--- 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)
@@ -33,6 +33,12 @@
class SecurityOrigin;
struct SecurityOriginData {
+ SecurityOriginData() = default;
+ SecurityOriginData(WTF::HashTableDeletedValueType)
+ : protocol(WTF::HashTableDeletedValue)
+ {
+ }
+
WEBCORE_EXPORT static SecurityOriginData fromSecurityOrigin(const SecurityOrigin&);
WEBCORE_EXPORT static SecurityOriginData fromFrame(Frame*);
@@ -54,6 +60,16 @@
template<class Encoder> void encode(Encoder&) const;
template<class Decoder> static bool decode(Decoder&, SecurityOriginData&);
+ bool isEmpty() const
+ {
+ return protocol.isNull() && host.isNull() && port == Nullopt;
+ }
+
+ bool isHashTableDeletedValue() const
+ {
+ return protocol.isHashTableDeletedValue();
+ }
+
#if !LOG_DISABLED
String debugString() const;
#endif
@@ -82,4 +98,33 @@
return true;
}
+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;
+};
+
} // namespace WebCore
+
+namespace WTF {
+
+template<> struct HashTraits<WebCore::SecurityOriginData> : WebCore::SecurityOriginDataHashTraits { };
+template<> struct DefaultHash<WebCore::SecurityOriginData> {
+ typedef WebCore::SecurityOriginDataHash Hash;
+};
+
+} // namespace WTF
Modified: trunk/Source/WebKit2/ChangeLog (208632 => 208633)
--- 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)
@@ -1,3 +1,91 @@
+2016-11-11 Alex Christensen <achristen...@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!
+
2016-11-11 Ryosuke Niwa <rn...@webkit.org>
Hovering over a slotted Text node clears hover state
Modified: trunk/Source/WebKit2/Platform/IPC/HandleMessage.h (208632 => 208633)
--- 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)
@@ -1,3 +1,28 @@
+/*
+ * 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.
+ */
+
#pragma once
#include "ArgumentCoders.h"
@@ -54,7 +79,7 @@
template <typename C, typename MF, typename ArgsTuple, size_t... ArgsIndex>
void callMemberFunctionImpl(C* object, MF function, Connection& connection, ArgsTuple&& args, std::index_sequence<ArgsIndex...>)
{
- (object->*function)(connection, std::get<ArgsIndex>(args)...);
+ (object->*function)(connection, std::get<ArgsIndex>(std::forward<ArgsTuple>(args))...);
}
template<typename C, typename MF, typename ArgsTuple, typename ArgsIndicies = std::make_index_sequence<std::tuple_size<ArgsTuple>::value>>
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKApplicationCacheManager.cpp (208632 => 208633)
--- 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)
@@ -44,7 +44,7 @@
Vector<RefPtr<API::Object>> securityOrigins;
for (const auto& dataRecord : dataRecords) {
for (const auto& origin : dataRecord.origins)
- securityOrigins.append(API::SecurityOrigin::create(*origin));
+ securityOrigins.append(API::SecurityOrigin::create(origin.securityOrigin()));
}
callback(toAPI(API::Array::create(WTFMove(securityOrigins)).ptr()), nullptr, context);
@@ -56,7 +56,7 @@
auto& websiteDataStore = toImpl(reinterpret_cast<WKWebsiteDataStoreRef>(applicationCacheManager))->websiteDataStore();
WebsiteDataRecord dataRecord;
- dataRecord.add(WebsiteDataType::OfflineWebApplicationCache, &toImpl(origin)->securityOrigin());
+ dataRecord.add(WebsiteDataType::OfflineWebApplicationCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
websiteDataStore.removeData(WebsiteDataType::OfflineWebApplicationCache, { dataRecord }, [] { });
}
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKKeyValueStorageManager.cpp (208632 => 208633)
--- 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)
@@ -73,7 +73,7 @@
Vector<RefPtr<API::Object>> webSecurityOrigins;
webSecurityOrigins.reserveInitialCapacity(securityOrigins.size());
for (auto& origin : securityOrigins)
- webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(*origin));
+ webSecurityOrigins.uncheckedAppend(API::SecurityOrigin::create(origin.securityOrigin()));
callback(toAPI(API::Array::create(WTFMove(webSecurityOrigins)).ptr()), nullptr, context);
});
@@ -118,7 +118,7 @@
if (!storageManager)
return;
- storageManager->deleteLocalStorageEntriesForOrigin(toImpl(origin)->securityOrigin());
+ storageManager->deleteLocalStorageEntriesForOrigin(WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
}
void WKKeyValueStorageManagerDeleteAllEntries(WKKeyValueStorageManagerRef keyValueStorageManager)
Modified: trunk/Source/WebKit2/UIProcess/API/C/WKResourceCacheManager.cpp (208632 => 208633)
--- 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)
@@ -56,7 +56,7 @@
Vector<RefPtr<API::Object>> securityOrigins;
for (const auto& dataRecord : dataRecords) {
for (const auto& origin : dataRecord.origins)
- securityOrigins.append(API::SecurityOrigin::create(*origin));
+ securityOrigins.append(API::SecurityOrigin::create(origin.securityOrigin()));
}
callback(toAPI(API::Array::create(WTFMove(securityOrigins)).ptr()), nullptr, context);
@@ -71,7 +71,7 @@
{
WebsiteDataRecord dataRecord;
- dataRecord.add(WebsiteDataType::MemoryCache, &toImpl(origin)->securityOrigin());
+ dataRecord.add(WebsiteDataType::MemoryCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
dataRecords.append(dataRecord);
}
@@ -78,7 +78,7 @@
if (cachesToClear == WKResourceCachesToClearAll) {
WebsiteDataRecord dataRecord;
- dataRecord.add(WebsiteDataType::DiskCache, &toImpl(origin)->securityOrigin());
+ dataRecord.add(WebsiteDataType::DiskCache, WebCore::SecurityOriginData::fromSecurityOrigin(toImpl(origin)->securityOrigin()));
dataRecords.append(dataRecord);
}
Modified: trunk/Source/WebKit2/UIProcess/API/Cocoa/WKWebsiteDataStore.mm (208632 => 208633)
--- 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)
@@ -153,7 +153,7 @@
if (options & _WKWebsiteDataStoreFetchOptionComputeSizes)
fetchOptions |= WebKit::WebsiteDataFetchOption::ComputeSizes;
- _websiteDataStore->websiteDataStore().fetchData(WebKit::toWebsiteDataTypes(dataTypes), fetchOptions, [completionHandlerCopy](auto websiteDataRecords) {
+ _websiteDataStore->websiteDataStore().fetchData(WebKit::toWebsiteDataTypes(dataTypes), fetchOptions, [completionHandlerCopy = WTFMove(completionHandlerCopy)](auto websiteDataRecords) {
Vector<RefPtr<API::Object>> elements;
elements.reserveInitialCapacity(websiteDataRecords.size());
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.cpp (208632 => 208633)
--- 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)
@@ -102,7 +102,7 @@
send(Messages::DatabaseProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
}
-void DatabaseProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()> completionHandler)
+void DatabaseProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, std::function<void()> completionHandler)
{
ASSERT(canSendMessage());
@@ -109,11 +109,7 @@
uint64_t callbackID = generateCallbackID();
m_pendingDeleteWebsiteDataForOriginsCallbacks.add(callbackID, WTFMove(completionHandler));
- Vector<SecurityOriginData> originData;
- for (auto& origin : origins)
- originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
-
- send(Messages::DatabaseProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData, callbackID), 0);
+ send(Messages::DatabaseProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, callbackID), 0);
}
void DatabaseProcessProxy::getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply> reply)
Modified: trunk/Source/WebKit2/UIProcess/Databases/DatabaseProcessProxy.h (208632 => 208633)
--- 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)
@@ -37,6 +37,7 @@
namespace WebCore {
class SecurityOrigin;
class SessionID;
+struct SecurityOriginData;
}
namespace WebKit {
@@ -50,9 +51,9 @@
static Ref<DatabaseProcessProxy> create(WebProcessPool*);
~DatabaseProcessProxy();
- 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);
+ 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);
void getDatabaseProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetDatabaseProcessConnection::DelayedReply>);
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.cpp (208632 => 208633)
--- 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)
@@ -100,7 +100,7 @@
ASSERT_UNUSED(connection, this->connection() == &connection);
}
-void NetworkProcessProxy::getNetworkProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply> reply)
+void NetworkProcessProxy::getNetworkProcessConnection(RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>&& reply)
{
m_pendingConnectionReplies.append(reply);
@@ -149,7 +149,7 @@
send(Messages::NetworkProcess::DeleteWebsiteData(sessionID, dataTypes, modifiedSince, callbackID), 0);
}
-void NetworkProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, const Vector<String>& cookieHostNames, std::function<void ()> completionHandler)
+void NetworkProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, const Vector<String>& cookieHostNames, std::function<void()> completionHandler)
{
ASSERT(canSendMessage());
@@ -162,11 +162,7 @@
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);
});
- Vector<SecurityOriginData> originData;
- for (auto& origin : origins)
- originData.append(SecurityOriginData::fromSecurityOrigin(*origin));
-
- send(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, originData, cookieHostNames, callbackID), 0);
+ send(Messages::NetworkProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins, cookieHostNames, callbackID), 0);
}
void NetworkProcessProxy::networkProcessCrashedOrFailedToLaunch()
Modified: trunk/Source/WebKit2/UIProcess/Network/NetworkProcessProxy.h (208632 => 208633)
--- 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)
@@ -40,6 +40,7 @@
class ProtectionSpace;
class ResourceRequest;
class SecurityOrigin;
+struct SecurityOriginData;
class SessionID;
}
@@ -58,13 +59,13 @@
static Ref<NetworkProcessProxy> create(WebProcessPool&);
~NetworkProcessProxy();
- void getNetworkProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>);
+ void getNetworkProcessConnection(RefPtr<Messages::WebProcessProxy::GetNetworkProcessConnection::DelayedReply>&&);
DownloadProxy* createDownloadProxy(const WebCore::ResourceRequest&);
- 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);
+ 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);
#if PLATFORM(COCOA)
void setProcessSuppressionEnabled(bool);
Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.cpp (208632 => 208633)
--- 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)
@@ -46,16 +46,16 @@
namespace WebKit {
-Ref<LocalStorageDatabase> LocalStorageDatabase::create(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, Ref<SecurityOrigin>&& securityOrigin)
+Ref<LocalStorageDatabase> LocalStorageDatabase::create(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, const SecurityOriginData& securityOrigin)
{
- return adoptRef(*new LocalStorageDatabase(WTFMove(queue), WTFMove(tracker), WTFMove(securityOrigin)));
+ return adoptRef(*new LocalStorageDatabase(WTFMove(queue), WTFMove(tracker), securityOrigin));
}
-LocalStorageDatabase::LocalStorageDatabase(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, Ref<SecurityOrigin>&& securityOrigin)
+LocalStorageDatabase::LocalStorageDatabase(Ref<WorkQueue>&& queue, Ref<LocalStorageDatabaseTracker>&& tracker, const SecurityOriginData& securityOrigin)
: m_queue(WTFMove(queue))
, m_tracker(WTFMove(tracker))
- , m_securityOrigin(WTFMove(securityOrigin))
- , m_databasePath(m_tracker->databasePath(m_securityOrigin.ptr()))
+ , m_securityOrigin(securityOrigin)
+ , m_databasePath(m_tracker->databasePath(m_securityOrigin))
, m_failedToOpenDatabase(false)
, m_didImportItems(false)
, m_isClosed(false)
@@ -80,7 +80,7 @@
}
if (m_database.isOpen())
- m_tracker->didOpenDatabaseWithOrigin(m_securityOrigin.ptr());
+ m_tracker->didOpenDatabaseWithOrigin(m_securityOrigin);
}
bool LocalStorageDatabase::tryToOpenDatabase(DatabaseOpeningStrategy openingStrategy)
@@ -230,7 +230,7 @@
m_database.close();
if (isEmpty)
- m_tracker->deleteDatabaseWithOrigin(m_securityOrigin.ptr());
+ m_tracker->deleteDatabaseWithOrigin(m_securityOrigin);
}
void LocalStorageDatabase::itemDidChange(const String& key, const String& value)
Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabase.h (208632 => 208633)
--- 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)
@@ -26,6 +26,7 @@
#pragma once
#include <WebCore/SQLiteDatabase.h>
+#include <WebCore/SecurityOriginData.h>
#include <wtf/Forward.h>
#include <wtf/HashMap.h>
#include <wtf/RefPtr.h>
@@ -44,7 +45,7 @@
class LocalStorageDatabase : public ThreadSafeRefCounted<LocalStorageDatabase> {
public:
- static Ref<LocalStorageDatabase> create(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, Ref<WebCore::SecurityOrigin>&&);
+ static Ref<LocalStorageDatabase> create(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, const WebCore::SecurityOriginData&);
~LocalStorageDatabase();
// Will block until the import is complete.
@@ -58,7 +59,7 @@
void close();
private:
- LocalStorageDatabase(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, Ref<WebCore::SecurityOrigin>&&);
+ LocalStorageDatabase(Ref<WorkQueue>&&, Ref<LocalStorageDatabaseTracker>&&, const WebCore::SecurityOriginData&);
enum DatabaseOpeningStrategy {
CreateIfNonExistent,
@@ -79,7 +80,7 @@
Ref<WorkQueue> m_queue;
Ref<LocalStorageDatabaseTracker> m_tracker;
- Ref<WebCore::SecurityOrigin> m_securityOrigin;
+ WebCore::SecurityOriginData m_securityOrigin;
String m_databasePath;
WebCore::SQLiteDatabase m_database;
Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.cpp (208632 => 208633)
--- 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)
@@ -62,19 +62,19 @@
{
}
-String LocalStorageDatabaseTracker::databasePath(SecurityOrigin* securityOrigin) const
+String LocalStorageDatabaseTracker::databasePath(const SecurityOriginData& securityOrigin) const
{
- return databasePath(SecurityOriginData::fromSecurityOrigin(*securityOrigin).databaseIdentifier() + ".localstorage");
+ return databasePath(securityOrigin.databaseIdentifier() + ".localstorage");
}
-void LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin(SecurityOrigin* securityOrigin)
+void LocalStorageDatabaseTracker::didOpenDatabaseWithOrigin(const SecurityOriginData& securityOrigin)
{
- addDatabaseWithOriginIdentifier(SecurityOriginData::fromSecurityOrigin(*securityOrigin).databaseIdentifier(), databasePath(securityOrigin));
+ addDatabaseWithOriginIdentifier(securityOrigin.databaseIdentifier(), databasePath(securityOrigin));
}
-void LocalStorageDatabaseTracker::deleteDatabaseWithOrigin(SecurityOrigin* securityOrigin)
+void LocalStorageDatabaseTracker::deleteDatabaseWithOrigin(const SecurityOriginData& securityOrigin)
{
- removeDatabaseWithOriginIdentifier(SecurityOriginData::fromSecurityOrigin(*securityOrigin).databaseIdentifier());
+ removeDatabaseWithOriginIdentifier(securityOrigin.databaseIdentifier());
}
void LocalStorageDatabaseTracker::deleteAllDatabases()
@@ -140,7 +140,7 @@
return time;
}
-Vector<Ref<SecurityOrigin>> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
+Vector<SecurityOriginData> LocalStorageDatabaseTracker::deleteDatabasesModifiedSince(std::chrono::system_clock::time_point time)
{
Vector<String> originIdentifiersToDelete;
@@ -155,25 +155,26 @@
originIdentifiersToDelete.append(origin);
}
- Vector<Ref<SecurityOrigin>> deletedDatabaseOrigins;
+ Vector<SecurityOriginData> deletedDatabaseOrigins;
deletedDatabaseOrigins.reserveInitialCapacity(originIdentifiersToDelete.size());
for (const auto& originIdentifier : originIdentifiersToDelete) {
removeDatabaseWithOriginIdentifier(originIdentifier);
- deletedDatabaseOrigins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier));
+ // FIXME: Move createFromDatabaseIdentifier to SecurityOriginData.
+ deletedDatabaseOrigins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(originIdentifier)));
}
return deletedDatabaseOrigins;
}
-Vector<Ref<WebCore::SecurityOrigin>> LocalStorageDatabaseTracker::origins() const
+Vector<SecurityOriginData> LocalStorageDatabaseTracker::origins() const
{
- Vector<Ref<SecurityOrigin>> origins;
+ Vector<SecurityOriginData> origins;
origins.reserveInitialCapacity(m_origins.size());
for (const String& origin : m_origins)
- origins.uncheckedAppend(SecurityOrigin::createFromDatabaseIdentifier(origin));
+ origins.uncheckedAppend(SecurityOriginData::fromSecurityOrigin(SecurityOrigin::createFromDatabaseIdentifier(origin)));
return origins;
}
Modified: trunk/Source/WebKit2/UIProcess/Storage/LocalStorageDatabaseTracker.h (208632 => 208633)
--- 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)
@@ -36,6 +36,7 @@
namespace WebCore {
class SecurityOrigin;
+struct SecurityOriginData;
}
namespace WebKit {
@@ -47,16 +48,16 @@
static Ref<LocalStorageDatabaseTracker> create(Ref<WorkQueue>&&, const String& localStorageDirectory);
~LocalStorageDatabaseTracker();
- String databasePath(WebCore::SecurityOrigin*) const;
+ String databasePath(const WebCore::SecurityOriginData&) const;
- void didOpenDatabaseWithOrigin(WebCore::SecurityOrigin*);
- void deleteDatabaseWithOrigin(WebCore::SecurityOrigin*);
+ void didOpenDatabaseWithOrigin(const WebCore::SecurityOriginData&);
+ void deleteDatabaseWithOrigin(const WebCore::SecurityOriginData&);
void deleteAllDatabases();
// Returns a vector of the origins whose databases have been deleted.
- Vector<Ref<WebCore::SecurityOrigin>> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
+ Vector<WebCore::SecurityOriginData> deleteDatabasesModifiedSince(std::chrono::system_clock::time_point);
- Vector<Ref<WebCore::SecurityOrigin>> origins() const;
+ Vector<WebCore::SecurityOriginData> origins() const;
struct OriginDetails {
String originIdentifier;
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.cpp (208632 => 208633)
--- 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)
@@ -45,10 +45,10 @@
class StorageManager::StorageArea : public ThreadSafeRefCounted<StorageManager::StorageArea> {
public:
- static Ref<StorageArea> create(LocalStorageNamespace*, Ref<SecurityOrigin>&&, unsigned quotaInBytes);
+ static Ref<StorageArea> create(LocalStorageNamespace*, const SecurityOriginData&, unsigned quotaInBytes);
~StorageArea();
- SecurityOrigin& securityOrigin() { return m_securityOrigin.get(); }
+ const WebCore::SecurityOriginData& securityOrigin() const { return m_securityOrigin; }
void addListener(IPC::Connection&, uint64_t storageMapID);
void removeListener(IPC::Connection&, uint64_t storageMapID);
@@ -59,24 +59,24 @@
void removeItem(IPC::Connection* sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& urlString);
void clear(IPC::Connection* sourceConnection, uint64_t sourceStorageAreaID, const String& urlString);
- const HashMap<String, String>& items();
+ const HashMap<String, String>& items() const;
void clear();
bool isSessionStorage() const { return !m_localStorageNamespace; }
private:
- explicit StorageArea(LocalStorageNamespace*, Ref<SecurityOrigin>&&, unsigned quotaInBytes);
+ explicit StorageArea(LocalStorageNamespace*, const SecurityOriginData&, unsigned quotaInBytes);
- void openDatabaseAndImportItemsIfNeeded();
+ void openDatabaseAndImportItemsIfNeeded() const;
void dispatchEvents(IPC::Connection* sourceConnection, uint64_t sourceStorageAreaID, const String& key, const String& oldValue, const String& newValue, const String& urlString) const;
// Will be null if the storage area belongs to a session storage namespace.
LocalStorageNamespace* m_localStorageNamespace;
- RefPtr<LocalStorageDatabase> m_localStorageDatabase;
- bool m_didImportItemsFromDatabase;
+ mutable RefPtr<LocalStorageDatabase> m_localStorageDatabase;
+ mutable bool m_didImportItemsFromDatabase { false };
- Ref<SecurityOrigin> m_securityOrigin;
+ SecurityOriginData m_securityOrigin;
unsigned m_quotaInBytes;
RefPtr<StorageMap> m_storageMap;
@@ -90,10 +90,10 @@
StorageManager* storageManager() const { return m_storageManager; }
- Ref<StorageArea> getOrCreateStorageArea(Ref<SecurityOrigin>&&);
+ Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&&);
void didDestroyStorageArea(StorageArea*);
- void clearStorageAreasMatchingOrigin(const SecurityOrigin&);
+ void clearStorageAreasMatchingOrigin(const SecurityOriginData&);
void clearAllStorageAreas();
private:
@@ -104,7 +104,7 @@
unsigned m_quotaInBytes;
// We don't hold an explicit reference to the StorageAreas; they are kept alive by the m_storageAreasByConnection map in StorageManager.
- HashMap<RefPtr<SecurityOrigin>, StorageArea*> m_storageAreaMap;
+ HashMap<SecurityOriginData, StorageArea*> m_storageAreaMap;
};
class StorageManager::TransientLocalStorageNamespace : public ThreadSafeRefCounted<TransientLocalStorageNamespace> {
@@ -118,21 +118,16 @@
{
}
- Ref<StorageArea> getOrCreateStorageArea(Ref<SecurityOrigin>&& securityOrigin)
+ Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&& securityOrigin)
{
- 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;
+ return *m_storageAreaMap.ensure(securityOrigin, [this, securityOrigin]() mutable {
+ return StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes);
+ }).iterator->value.copyRef();
}
- Vector<Ref<SecurityOrigin>> origins() const
+ Vector<SecurityOriginData> origins() const
{
- Vector<Ref<SecurityOrigin>> origins;
+ Vector<SecurityOriginData> origins;
for (const auto& storageArea : m_storageAreaMap.values()) {
if (!storageArea->items().isEmpty())
@@ -142,10 +137,10 @@
return origins;
}
- void clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
+ void clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
{
for (auto& storageArea : m_storageAreaMap.values()) {
- if (storageArea->securityOrigin().equal(&securityOrigin))
+ if (storageArea->securityOrigin() == securityOrigin)
storageArea->clear();
}
}
@@ -163,18 +158,17 @@
const unsigned m_quotaInBytes = 5 * 1024 * 1024;
- HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea>> m_storageAreaMap;
+ HashMap<SecurityOriginData, RefPtr<StorageArea>> m_storageAreaMap;
};
-Ref<StorageManager::StorageArea> StorageManager::StorageArea::create(LocalStorageNamespace* localStorageNamespace, Ref<SecurityOrigin>&& securityOrigin, unsigned quotaInBytes)
+auto StorageManager::StorageArea::create(LocalStorageNamespace* localStorageNamespace, const SecurityOriginData& securityOrigin, unsigned quotaInBytes) -> Ref<StorageManager::StorageArea>
{
- return adoptRef(*new StorageArea(localStorageNamespace, WTFMove(securityOrigin), quotaInBytes));
+ return adoptRef(*new StorageArea(localStorageNamespace, securityOrigin, quotaInBytes));
}
-StorageManager::StorageArea::StorageArea(LocalStorageNamespace* localStorageNamespace, Ref<SecurityOrigin>&& securityOrigin, unsigned quotaInBytes)
+StorageManager::StorageArea::StorageArea(LocalStorageNamespace* localStorageNamespace, const SecurityOriginData& securityOrigin, unsigned quotaInBytes)
: m_localStorageNamespace(localStorageNamespace)
- , m_didImportItemsFromDatabase(false)
- , m_securityOrigin(WTFMove(securityOrigin))
+ , m_securityOrigin(securityOrigin)
, m_quotaInBytes(quotaInBytes)
, m_storageMap(StorageMap::create(m_quotaInBytes))
{
@@ -207,7 +201,7 @@
{
ASSERT(!m_localStorageNamespace);
- auto storageArea = StorageArea::create(0, m_securityOrigin.copyRef(), m_quotaInBytes);
+ auto storageArea = StorageArea::create(nullptr, m_securityOrigin, m_quotaInBytes);
storageArea->m_storageMap = m_storageMap;
return storageArea;
@@ -265,7 +259,7 @@
dispatchEvents(sourceConnection, sourceStorageAreaID, String(), String(), String(), urlString);
}
-const HashMap<String, String>& StorageManager::StorageArea::items()
+const HashMap<String, String>& StorageManager::StorageArea::items() const
{
openDatabaseAndImportItemsIfNeeded();
@@ -285,7 +279,7 @@
it->first->send(Messages::StorageAreaMap::ClearCache(), it->second);
}
-void StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded()
+void StorageManager::StorageArea::openDatabaseAndImportItemsIfNeeded() const
{
if (!m_localStorageNamespace)
return;
@@ -292,7 +286,7 @@
// 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.
if (!m_localStorageDatabase)
- m_localStorageDatabase = LocalStorageDatabase::create(m_localStorageNamespace->storageManager()->m_queue.copyRef(), m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker.copyRef(), m_securityOrigin.copyRef());
+ m_localStorageDatabase = LocalStorageDatabase::create(m_localStorageNamespace->storageManager()->m_queue.copyRef(), m_localStorageNamespace->storageManager()->m_localStorageDatabaseTracker.copyRef(), m_securityOrigin);
if (m_didImportItemsFromDatabase)
return;
@@ -329,9 +323,9 @@
ASSERT(m_storageAreaMap.isEmpty());
}
-Ref<StorageManager::StorageArea> StorageManager::LocalStorageNamespace::getOrCreateStorageArea(Ref<SecurityOrigin>&& securityOrigin)
+auto StorageManager::LocalStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin) -> Ref<StorageArea>
{
- auto& slot = m_storageAreaMap.add(securityOrigin.ptr(), nullptr).iterator->value;
+ auto& slot = m_storageAreaMap.add(securityOrigin, nullptr).iterator->value;
if (slot)
return *slot;
@@ -343,9 +337,9 @@
void StorageManager::LocalStorageNamespace::didDestroyStorageArea(StorageArea* storageArea)
{
- ASSERT(m_storageAreaMap.contains(&storageArea->securityOrigin()));
+ ASSERT(m_storageAreaMap.contains(storageArea->securityOrigin()));
- m_storageAreaMap.remove(&storageArea->securityOrigin());
+ m_storageAreaMap.remove(storageArea->securityOrigin());
if (!m_storageAreaMap.isEmpty())
return;
@@ -353,10 +347,10 @@
m_storageManager->m_localStorageNamespaces.remove(m_storageNamespaceID);
}
-void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
+void StorageManager::LocalStorageNamespace::clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
{
for (const auto& originAndStorageArea : m_storageAreaMap) {
- if (originAndStorageArea.key->equal(&securityOrigin))
+ if (originAndStorageArea.key == securityOrigin)
originAndStorageArea.value->clear();
}
}
@@ -363,8 +357,8 @@
void StorageManager::LocalStorageNamespace::clearAllStorageAreas()
{
- for (auto it = m_storageAreaMap.begin(), end = m_storageAreaMap.end(); it != end; ++it)
- it->value->clear();
+ for (auto* storageArea : m_storageAreaMap.values())
+ storageArea->clear();
}
class StorageManager::SessionStorageNamespace : public ThreadSafeRefCounted<SessionStorageNamespace> {
@@ -377,13 +371,13 @@
IPC::Connection* allowedConnection() const { return m_allowedConnection.get(); }
void setAllowedConnection(IPC::Connection*);
- Ref<StorageArea> getOrCreateStorageArea(Ref<SecurityOrigin>&&);
+ Ref<StorageArea> getOrCreateStorageArea(SecurityOriginData&&);
void cloneTo(SessionStorageNamespace& newSessionStorageNamespace);
- Vector<Ref<SecurityOrigin>> origins() const
+ Vector<SecurityOriginData> origins() const
{
- Vector<Ref<SecurityOrigin>> origins;
+ Vector<SecurityOriginData> origins;
for (const auto& storageArea : m_storageAreaMap.values()) {
if (!storageArea->items().isEmpty())
@@ -393,10 +387,10 @@
return origins;
}
- void clearStorageAreasMatchingOrigin(const SecurityOrigin& securityOrigin)
+ void clearStorageAreasMatchingOrigin(const SecurityOriginData& securityOrigin)
{
for (auto& storageArea : m_storageAreaMap.values()) {
- if (storageArea->securityOrigin().equal(&securityOrigin))
+ if (storageArea->securityOrigin() == securityOrigin)
storageArea->clear();
}
}
@@ -413,7 +407,7 @@
RefPtr<IPC::Connection> m_allowedConnection;
unsigned m_quotaInBytes;
- HashMap<RefPtr<SecurityOrigin>, RefPtr<StorageArea>> m_storageAreaMap;
+ HashMap<SecurityOriginData, RefPtr<StorageArea>> m_storageAreaMap;
};
Ref<StorageManager::SessionStorageNamespace> StorageManager::SessionStorageNamespace::create(unsigned quotaInBytes)
@@ -437,13 +431,11 @@
m_allowedConnection = allowedConnection;
}
-Ref<StorageManager::StorageArea> StorageManager::SessionStorageNamespace::getOrCreateStorageArea(Ref<SecurityOrigin>&& securityOrigin)
+auto StorageManager::SessionStorageNamespace::getOrCreateStorageArea(SecurityOriginData&& securityOrigin) -> Ref<StorageArea>
{
- auto& slot = m_storageAreaMap.add(securityOrigin.ptr(), nullptr).iterator->value;
- if (!slot)
- slot = StorageArea::create(0, WTFMove(securityOrigin), m_quotaInBytes);
-
- return *slot;
+ return *m_storageAreaMap.ensure(securityOrigin, [this, securityOrigin]() mutable {
+ return StorageArea::create(nullptr, WTFMove(securityOrigin), m_quotaInBytes);
+ }).iterator->value.copyRef();
}
void StorageManager::SessionStorageNamespace::cloneTo(SessionStorageNamespace& newSessionStorageNamespace)
@@ -450,8 +442,8 @@
{
ASSERT_UNUSED(newSessionStorageNamespace, newSessionStorageNamespace.isEmpty());
- 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());
+ for (auto& pair : m_storageAreaMap)
+ newSessionStorageNamespace.m_storageAreaMap.add(pair.key, pair.value->clone());
}
Ref<StorageManager> StorageManager::create(const String& localStorageDirectory)
@@ -539,16 +531,14 @@
});
}
-void StorageManager::getSessionStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler)
+void StorageManager::getSessionStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler)
{
- RefPtr<StorageManager> storageManager(this);
-
m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
- HashSet<RefPtr<SecurityOrigin>> origins;
+ HashSet<SecurityOriginData> origins;
for (const auto& sessionStorageNamespace : m_sessionStorageNamespaces.values()) {
for (auto& origin : sessionStorageNamespace->origins())
- origins.add(WTFMove(origin));
+ origins.add(origin);
}
RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {
@@ -557,7 +547,7 @@
});
}
-void StorageManager::deleteSessionStorageOrigins(std::function<void ()>&& completionHandler)
+void StorageManager::deleteSessionStorageOrigins(std::function<void()>&& completionHandler)
{
m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values())
@@ -567,18 +557,18 @@
});
}
-void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()>&& completionHandler)
+void StorageManager::deleteSessionStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, std::function<void()>&& completionHandler)
{
- Vector<RefPtr<WebCore::SecurityOrigin>> copiedOrigins;
+ Vector<WebCore::SecurityOriginData> copiedOrigins;
copiedOrigins.reserveInitialCapacity(origins.size());
for (auto& origin : origins)
- copiedOrigins.uncheckedAppend(origin->isolatedCopy());
+ copiedOrigins.uncheckedAppend(origin.isolatedCopy());
m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable {
for (auto& origin : copiedOrigins) {
for (auto& sessionStorageNamespace : m_sessionStorageNamespaces.values())
- sessionStorageNamespace->clearStorageAreasMatchingOrigin(*origin);
+ sessionStorageNamespace->clearStorageAreasMatchingOrigin(origin);
}
RunLoop::main().dispatch(WTFMove(completionHandler));
@@ -585,17 +575,17 @@
});
}
-void StorageManager::getLocalStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler)
+void StorageManager::getLocalStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler)
{
m_queue->dispatch([this, protectedThis = makeRef(*this), completionHandler = WTFMove(completionHandler)]() mutable {
- HashSet<RefPtr<SecurityOrigin>> origins;
+ HashSet<SecurityOriginData> origins;
for (auto& origin : m_localStorageDatabaseTracker->origins())
- origins.add(WTFMove(origin));
+ origins.add(origin);
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values()) {
for (auto& origin : transientLocalStorageNamespace->origins())
- origins.add(WTFMove(origin));
+ origins.add(origin);
}
RunLoop::main().dispatch([origins = WTFMove(origins), completionHandler = WTFMove(completionHandler)]() mutable {
@@ -615,7 +605,7 @@
});
}
-void StorageManager::deleteLocalStorageEntriesForOrigin(const SecurityOrigin& securityOrigin)
+void StorageManager::deleteLocalStorageEntriesForOrigin(SecurityOriginData&& securityOrigin)
{
m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigin = securityOrigin.isolatedCopy()]() mutable {
for (auto& localStorageNamespace : m_localStorageNamespaces.values())
@@ -624,11 +614,11 @@
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(copiedOrigin);
- m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(copiedOrigin.ptr());
+ m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(copiedOrigin);
});
}
-void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void ()>&& completionHandler)
+void StorageManager::deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point time, std::function<void()>&& completionHandler)
{
m_queue->dispatch([this, protectedThis = makeRef(*this), time, completionHandler = WTFMove(completionHandler)]() mutable {
auto deletedOrigins = m_localStorageDatabaseTracker->deleteDatabasesModifiedSince(time);
@@ -635,7 +625,7 @@
for (const auto& origin : deletedOrigins) {
for (auto& localStorageNamespace : m_localStorageNamespaces.values())
- localStorageNamespace->clearStorageAreasMatchingOrigin(origin.get());
+ localStorageNamespace->clearStorageAreasMatchingOrigin(origin);
}
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
@@ -645,23 +635,23 @@
});
}
-void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, std::function<void ()>&& completionHandler)
+void StorageManager::deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>& origins, std::function<void()>&& completionHandler)
{
- Vector<RefPtr<WebCore::SecurityOrigin>> copiedOrigins;
+ Vector<SecurityOriginData> copiedOrigins;
copiedOrigins.reserveInitialCapacity(origins.size());
for (auto& origin : origins)
- copiedOrigins.uncheckedAppend(origin->isolatedCopy());
+ copiedOrigins.uncheckedAppend(origin.isolatedCopy());
m_queue->dispatch([this, protectedThis = makeRef(*this), copiedOrigins = WTFMove(copiedOrigins), completionHandler = WTFMove(completionHandler)]() mutable {
for (auto& origin : copiedOrigins) {
for (auto& localStorageNamespace : m_localStorageNamespaces.values())
- localStorageNamespace->clearStorageAreasMatchingOrigin(*origin);
+ localStorageNamespace->clearStorageAreasMatchingOrigin(origin);
for (auto& transientLocalStorageNamespace : m_transientLocalStorageNamespaces.values())
- transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(*origin);
+ transientLocalStorageNamespace->clearStorageAreasMatchingOrigin(origin);
- m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin.get());
+ m_localStorageDatabaseTracker->deleteDatabaseWithOrigin(origin);
}
RunLoop::main().dispatch(WTFMove(completionHandler));
@@ -668,7 +658,7 @@
});
}
-void StorageManager::createLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& securityOriginData)
+void StorageManager::createLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& securityOriginData)
{
std::pair<RefPtr<IPC::Connection>, uint64_t> connectionAndStorageMapIDPair(&connection, storageMapID);
@@ -686,19 +676,17 @@
// FIXME: This should be a message check.
ASSERT(localStorageNamespace);
- auto storageArea = localStorageNamespace->getOrCreateStorageArea(securityOriginData.securityOrigin());
+ auto storageArea = localStorageNamespace->getOrCreateStorageArea(WTFMove(securityOriginData));
storageArea->addListener(connection, storageMapID);
result.iterator->value = WTFMove(storageArea);
}
-void StorageManager::createTransientLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& topLevelOriginData, const SecurityOriginData& securityOriginData)
+void StorageManager::createTransientLocalStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& topLevelOriginData, SecurityOriginData&& origin)
{
// FIXME: This should be a message check.
ASSERT(m_storageAreasByConnection.isValidKey({ &connection, storageMapID }));
- Ref<SecurityOrigin> origin = securityOriginData.securityOrigin();
-
// See if we already have session storage for this connection/origin combo.
// If so, update the map with the new ID, otherwise keep on trucking.
for (auto it = m_storageAreasByConnection.begin(), end = m_storageAreasByConnection.end(); it != end; ++it) {
@@ -707,7 +695,7 @@
Ref<StorageArea> area = *it->value;
if (!area->isSessionStorage())
continue;
- if (!origin->isSameSchemeHostPort(&area->securityOrigin()))
+ if (!origin.securityOrigin()->isSameSchemeHostPort(area->securityOrigin().securityOrigin().ptr()))
continue;
area->addListener(connection, storageMapID);
m_storageAreasByConnection.remove(it);
@@ -720,15 +708,15 @@
// FIXME: This should be a message check.
ASSERT(!slot);
- TransientLocalStorageNamespace* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, topLevelOriginData.securityOrigin());
+ TransientLocalStorageNamespace* transientLocalStorageNamespace = getOrCreateTransientLocalStorageNamespace(storageNamespaceID, WTFMove(topLevelOriginData));
- auto storageArea = transientLocalStorageNamespace->getOrCreateStorageArea(securityOriginData.securityOrigin());
+ auto storageArea = transientLocalStorageNamespace->getOrCreateStorageArea(WTFMove(origin));
storageArea->addListener(connection, storageMapID);
slot = WTFMove(storageArea);
}
-void StorageManager::createSessionStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, const SecurityOriginData& securityOriginData)
+void StorageManager::createSessionStorageMap(IPC::Connection& connection, uint64_t storageMapID, uint64_t storageNamespaceID, SecurityOriginData&& securityOriginData)
{
// FIXME: This should be a message check.
ASSERT(m_sessionStorageNamespaces.isValidKey(storageNamespaceID));
@@ -751,7 +739,7 @@
// FIXME: This should be a message check.
ASSERT(&connection == sessionStorageNamespace->allowedConnection());
- auto storageArea = sessionStorageNamespace->getOrCreateStorageArea(securityOriginData.securityOrigin());
+ auto storageArea = sessionStorageNamespace->getOrCreateStorageArea(WTFMove(securityOriginData));
storageArea->addListener(connection, storageMapID);
slot = WTFMove(storageArea);
@@ -859,7 +847,7 @@
StorageManager::LocalStorageNamespace* StorageManager::getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID)
{
if (!m_localStorageNamespaces.isValidKey(storageNamespaceID))
- return 0;
+ return nullptr;
auto& slot = m_localStorageNamespaces.add(storageNamespaceID, nullptr).iterator->value;
if (!slot)
@@ -868,12 +856,12 @@
return slot.get();
}
-StorageManager::TransientLocalStorageNamespace* StorageManager::getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOrigin& topLevelOrigin)
+StorageManager::TransientLocalStorageNamespace* StorageManager::getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin)
{
- if (!m_transientLocalStorageNamespaces.isValidKey({ storageNamespaceID, &topLevelOrigin }))
+ if (!m_transientLocalStorageNamespaces.isValidKey({ storageNamespaceID, topLevelOrigin }))
return nullptr;
- auto& slot = m_transientLocalStorageNamespaces.add({ storageNamespaceID, &topLevelOrigin }, nullptr).iterator->value;
+ auto& slot = m_transientLocalStorageNamespaces.add({ storageNamespaceID, WTFMove(topLevelOrigin) }, nullptr).iterator->value;
if (!slot)
slot = TransientLocalStorageNamespace::create();
Modified: trunk/Source/WebKit2/UIProcess/Storage/StorageManager.h (208632 => 208633)
--- 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)
@@ -23,11 +23,11 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef StorageManager_h
-#define StorageManager_h
+#pragma once
#include "Connection.h"
#include "LocalStorageDatabaseTracker.h"
+#include <WebCore/SecurityOriginData.h>
#include <WebCore/SecurityOriginHash.h>
#include <chrono>
#include <wtf/Forward.h>
@@ -37,7 +37,6 @@
namespace WebCore {
class SecurityOrigin;
-struct SecurityOriginData;
}
namespace WebKit {
@@ -59,17 +58,17 @@
void processDidCloseConnection(WebProcessProxy&, IPC::Connection&);
void applicationWillTerminate();
- 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);
+ 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);
- void getLocalStorageOrigins(std::function<void (HashSet<RefPtr<WebCore::SecurityOrigin>>&&)>&& completionHandler);
- void deleteLocalStorageEntriesForOrigin(const WebCore::SecurityOrigin&);
+ void getLocalStorageOrigins(std::function<void(HashSet<WebCore::SecurityOriginData>&&)>&& completionHandler);
+ void deleteLocalStorageEntriesForOrigin(WebCore::SecurityOriginData&&);
- void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void ()>&& completionHandler);
- void deleteLocalStorageEntriesForOrigins(const Vector<RefPtr<WebCore::SecurityOrigin>>&, std::function<void ()>&& completionHandler);
+ void deleteLocalStorageOriginsModifiedSince(std::chrono::system_clock::time_point, std::function<void()>&& completionHandler);
+ void deleteLocalStorageEntriesForOrigins(const Vector<WebCore::SecurityOriginData>&, std::function<void()>&& completionHandler);
- void getLocalStorageOriginDetails(std::function<void (Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler);
+ void getLocalStorageOriginDetails(std::function<void(Vector<LocalStorageDatabaseTracker::OriginDetails>)>&& completionHandler);
private:
explicit StorageManager(const String& localStorageDirectory);
@@ -79,9 +78,9 @@
void didReceiveSyncMessage(IPC::Connection&, IPC::Decoder&, std::unique_ptr<IPC::Encoder>& replyEncoder) override;
// Message handlers.
- 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&);
+ 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&&);
void destroyStorageMap(IPC::Connection&, uint64_t storageMapID);
void getValues(IPC::Connection&, uint64_t storageMapID, uint64_t storageMapSeed, HashMap<String, String>& values);
@@ -96,7 +95,7 @@
LocalStorageNamespace* getOrCreateLocalStorageNamespace(uint64_t storageNamespaceID);
class TransientLocalStorageNamespace;
- TransientLocalStorageNamespace* getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOrigin& topLevelOrigin);
+ TransientLocalStorageNamespace* getOrCreateTransientLocalStorageNamespace(uint64_t storageNamespaceID, WebCore::SecurityOriginData&& topLevelOrigin);
Ref<WorkQueue> m_queue;
@@ -103,7 +102,7 @@
Ref<LocalStorageDatabaseTracker> m_localStorageDatabaseTracker;
HashMap<uint64_t, RefPtr<LocalStorageNamespace>> m_localStorageNamespaces;
- HashMap<std::pair<uint64_t, RefPtr<WebCore::SecurityOrigin>>, RefPtr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
+ HashMap<std::pair<uint64_t, WebCore::SecurityOriginData>, RefPtr<TransientLocalStorageNamespace>> m_transientLocalStorageNamespaces;
class SessionStorageNamespace;
HashMap<uint64_t, RefPtr<SessionStorageNamespace>> m_sessionStorageNamespaces;
@@ -112,5 +111,3 @@
};
} // namespace WebKit
-
-#endif // StorageManager_h
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.cpp (208632 => 208633)
--- 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)
@@ -749,7 +749,7 @@
});
}
-void WebProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<RefPtr<WebCore::SecurityOrigin>>& origins, Function<void ()> completionHandler)
+void WebProcessProxy::deleteWebsiteDataForOrigins(SessionID sessionID, OptionSet<WebsiteDataType> dataTypes, const Vector<WebCore::SecurityOriginData>& origins, Function<void()> completionHandler)
{
ASSERT(canSendMessage());
@@ -756,11 +756,7 @@
auto token = throttler().backgroundActivityToken();
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);
- 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) {
+ connection()->sendWithReply(Messages::WebProcess::DeleteWebsiteDataForOrigins(sessionID, dataTypes, origins), 0, RunLoop::main(), [this, token, completionHandler = WTFMove(completionHandler), sessionID](auto reply) {
completionHandler();
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);
});
Modified: trunk/Source/WebKit2/UIProcess/WebProcessProxy.h (208632 => 208633)
--- 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)
@@ -118,9 +118,9 @@
void didSaveToPageCache();
void releasePageCache();
- 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);
+ 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);
void enableSuddenTermination();
void disableSuddenTermination();
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.cpp (208632 => 208633)
--- 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)
@@ -66,9 +66,9 @@
}
#endif
-String WebsiteDataRecord::displayNameForOrigin(const WebCore::SecurityOrigin& securityOrigin)
+String WebsiteDataRecord::displayNameForOrigin(const WebCore::SecurityOriginData& securityOrigin)
{
- const auto& protocol = securityOrigin.protocol();
+ const auto& protocol = securityOrigin.protocol;
if (protocol == "file")
return displayNameForLocalFiles();
@@ -75,17 +75,17 @@
#if ENABLE(PUBLIC_SUFFIX_LIST)
if (protocol == "http" || protocol == "https")
- return WebCore::topPrivatelyControlledDomain(securityOrigin.host());
+ return WebCore::topPrivatelyControlledDomain(securityOrigin.host);
#endif
return String();
}
-void WebsiteDataRecord::add(WebsiteDataType type, RefPtr<WebCore::SecurityOrigin>&& origin)
+void WebsiteDataRecord::add(WebsiteDataType type, const WebCore::SecurityOriginData& origin)
{
types |= type;
- origins.add(WTFMove(origin));
+ origins.add(origin);
}
void WebsiteDataRecord::addCookieHostName(const String& hostName)
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataRecord.h (208632 => 208633)
--- 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)
@@ -23,10 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebsiteDataRecord_h
-#define WebsiteDataRecord_h
+#pragma once
#include "WebsiteDataType.h"
+#include <WebCore/SecurityOriginData.h>
#include <WebCore/SecurityOriginHash.h>
#include <wtf/HashMap.h>
#include <wtf/HashSet.h>
@@ -46,9 +46,9 @@
#if ENABLE(NETSCAPE_PLUGIN_API)
static String displayNameForPluginDataHostName(const String& hostName);
#endif
- static String displayNameForOrigin(const WebCore::SecurityOrigin&);
+ static String displayNameForOrigin(const WebCore::SecurityOriginData&);
- void add(WebsiteDataType, RefPtr<WebCore::SecurityOrigin>&&);
+ void add(WebsiteDataType, const WebCore::SecurityOriginData&);
void addCookieHostName(const String& hostName);
#if ENABLE(NETSCAPE_PLUGIN_API)
void addPluginDataHostName(const String& hostName);
@@ -63,7 +63,7 @@
};
Optional<Size> size;
- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
+ HashSet<WebCore::SecurityOriginData> origins;
HashSet<String> cookieHostNames;
#if ENABLE(NETSCAPE_PLUGIN_API)
HashSet<String> pluginDataHostNames;
@@ -71,5 +71,3 @@
};
}
-
-#endif // WebsiteDataRecord_h
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.cpp (208632 => 208633)
--- 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)
@@ -179,7 +179,7 @@
--pendingCallbacks;
for (auto& entry : websiteData.entries) {
- auto displayName = WebsiteDataRecord::displayNameForOrigin(*entry.origin);
+ auto displayName = WebsiteDataRecord::displayNameForOrigin(WebCore::SecurityOriginData::fromSecurityOrigin(*entry.origin));
if (!displayName)
continue;
@@ -187,7 +187,7 @@
if (!record.displayName)
record.displayName = WTFMove(displayName);
- record.add(entry.type, WTFMove(entry.origin));
+ record.add(entry.type, WebCore::SecurityOriginData::fromSecurityOrigin(*entry.origin));
if (fetchOptions.contains(WebsiteDataFetchOption::ComputeSizes)) {
if (!record.size)
@@ -325,11 +325,11 @@
if (dataTypes.contains(WebsiteDataType::SessionStorage) && m_storageManager) {
callbackAggregator->addPendingCallback();
- m_storageManager->getSessionStorageOrigins([callbackAggregator](HashSet<RefPtr<WebCore::SecurityOrigin>>&& origins) {
+ m_storageManager->getSessionStorageOrigins([callbackAggregator](HashSet<WebCore::SecurityOriginData>&& origins) {
WebsiteData websiteData;
while (!origins.isEmpty())
- websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::SessionStorage, 0 });
+ websiteData.entries.append(WebsiteData::Entry { origins.takeAny().securityOrigin(), WebsiteDataType::SessionStorage, 0 });
callbackAggregator->removePendingCallback(WTFMove(websiteData));
});
@@ -338,11 +338,11 @@
if (dataTypes.contains(WebsiteDataType::LocalStorage) && m_storageManager) {
callbackAggregator->addPendingCallback();
- m_storageManager->getLocalStorageOrigins([callbackAggregator](HashSet<RefPtr<WebCore::SecurityOrigin>>&& origins) {
+ m_storageManager->getLocalStorageOrigins([callbackAggregator](HashSet<WebCore::SecurityOriginData>&& origins) {
WebsiteData websiteData;
while (!origins.isEmpty())
- websiteData.entries.append(WebsiteData::Entry { origins.takeAny(), WebsiteDataType::LocalStorage, 0 });
+ websiteData.entries.append(WebsiteData::Entry { origins.takeAny().securityOrigin(), WebsiteDataType::LocalStorage, 0 });
callbackAggregator->removePendingCallback(WTFMove(websiteData));
});
@@ -411,7 +411,7 @@
RunLoop::main().dispatch([callbackAggregator, origins = WTFMove(origins)]() mutable {
WebsiteData websiteData;
for (auto& origin : origins)
- websiteData.entries.append(WebsiteData::Entry { WTFMove(origin), WebsiteDataType::MediaKeys, 0 });
+ websiteData.entries.append(WebsiteData::Entry { origin.securityOrigin().ptr(), WebsiteDataType::MediaKeys, 0 });
callbackAggregator->removePendingCallback(WTFMove(websiteData));
});
@@ -534,7 +534,7 @@
}
unsigned pendingCallbacks = 0;
- std::function<void ()> completionHandler;
+ std::function<void()> completionHandler;
};
RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
@@ -735,7 +735,7 @@
void WebsiteDataStore::removeData(OptionSet<WebsiteDataType> dataTypes, const Vector<WebsiteDataRecord>& dataRecords, std::function<void ()> completionHandler)
{
- Vector<RefPtr<WebCore::SecurityOrigin>> origins;
+ Vector<WebCore::SecurityOriginData> origins;
for (const auto& dataRecord : dataRecords) {
for (auto& origin : dataRecord.origins)
@@ -768,13 +768,13 @@
}
unsigned pendingCallbacks = 0;
- std::function<void ()> completionHandler;
+ std::function<void()> completionHandler;
};
RefPtr<CallbackAggregator> callbackAggregator = adoptRef(new CallbackAggregator(WTFMove(completionHandler)));
if (dataTypes.contains(WebsiteDataType::DiskCache)) {
- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
+ HashSet<WebCore::SecurityOriginData> origins;
for (const auto& dataRecord : dataRecords) {
for (const auto& origin : dataRecord.origins)
origins.add(origin);
@@ -783,7 +783,13 @@
#if ENABLE(VIDEO)
callbackAggregator->addPendingCallback();
m_queue->dispatch([origins = WTFMove(origins), mediaCacheDirectory = m_configuration.mediaCacheDirectory.isolatedCopy(), callbackAggregator] {
- WebCore::HTMLMediaElement::clearMediaCacheForOrigins(mediaCacheDirectory, origins);
+
+ // 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);
WTF::RunLoop::main().dispatch([callbackAggregator] {
callbackAggregator->removePendingCallback();
@@ -865,7 +871,7 @@
}
if (dataTypes.contains(WebsiteDataType::OfflineWebApplicationCache) && isPersistent()) {
- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
+ HashSet<WebCore::SecurityOriginData> origins;
for (const auto& dataRecord : dataRecords) {
for (const auto& origin : dataRecord.origins)
origins.add(origin);
@@ -876,7 +882,7 @@
auto storage = WebCore::ApplicationCacheStorage::create(applicationCacheDirectory, applicationCacheFlatFileSubdirectoryName);
for (const auto& origin : origins)
- storage->deleteCacheForOrigin(*origin);
+ storage->deleteCacheForOrigin(origin.securityOrigin());
WTF::RunLoop::main().dispatch([callbackAggregator] {
callbackAggregator->removePendingCallback();
@@ -885,7 +891,7 @@
}
if (dataTypes.contains(WebsiteDataType::WebSQLDatabases) && isPersistent()) {
- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
+ HashSet<WebCore::SecurityOriginData> origins;
for (const auto& dataRecord : dataRecords) {
for (const auto& origin : dataRecord.origins)
origins.add(origin);
@@ -896,7 +902,7 @@
auto databaseTracker = WebCore::DatabaseTracker::trackerWithDatabasePath(webSQLDatabaseDirectory);
for (const auto& origin : origins)
- databaseTracker->deleteOrigin(origin.get());
+ databaseTracker->deleteOrigin(origin.securityOrigin().ptr());
RunLoop::main().dispatch([callbackAggregator] {
callbackAggregator->removePendingCallback();
@@ -918,7 +924,7 @@
#endif
if (dataTypes.contains(WebsiteDataType::MediaKeys) && isPersistent()) {
- HashSet<RefPtr<WebCore::SecurityOrigin>> origins;
+ HashSet<WebCore::SecurityOriginData> origins;
for (const auto& dataRecord : dataRecords) {
for (const auto& origin : dataRecord.origins)
origins.add(origin);
@@ -1082,11 +1088,11 @@
return WebCore::pathByAppendingComponent(mediaKeyDirectory, "SecureStop.plist");
}
-Vector<RefPtr<WebCore::SecurityOrigin>> WebsiteDataStore::mediaKeyOrigins(const String& mediaKeysStorageDirectory)
+Vector<WebCore::SecurityOriginData> WebsiteDataStore::mediaKeyOrigins(const String& mediaKeysStorageDirectory)
{
ASSERT(!mediaKeysStorageDirectory.isEmpty());
- Vector<RefPtr<WebCore::SecurityOrigin>> origins;
+ Vector<WebCore::SecurityOriginData> origins;
for (const auto& originPath : WebCore::listDirectory(mediaKeysStorageDirectory, "*")) {
auto mediaKeyFile = computeMediaKeyFile(originPath);
@@ -1096,7 +1102,7 @@
auto mediaKeyIdentifier = WebCore::pathGetFileName(originPath);
if (auto securityOrigin = WebCore::SecurityOrigin::maybeCreateFromDatabaseIdentifier(mediaKeyIdentifier))
- origins.append(WTFMove(securityOrigin));
+ origins.append(WebCore::SecurityOriginData::fromSecurityOrigin(*securityOrigin));
}
return origins;
@@ -1121,12 +1127,12 @@
}
}
-void WebsiteDataStore::removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<RefPtr<WebCore::SecurityOrigin>>& origins)
+void WebsiteDataStore::removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>& origins)
{
ASSERT(!mediaKeysStorageDirectory.isEmpty());
for (const auto& origin : origins) {
- auto mediaKeyDirectory = WebCore::pathByAppendingComponent(mediaKeysStorageDirectory, WebCore::SecurityOriginData::fromSecurityOrigin(*origin).databaseIdentifier());
+ auto mediaKeyDirectory = WebCore::pathByAppendingComponent(mediaKeysStorageDirectory, origin.databaseIdentifier());
auto mediaKeyFile = computeMediaKeyFile(mediaKeyDirectory);
WebCore::deleteFile(mediaKeyFile);
Modified: trunk/Source/WebKit2/UIProcess/WebsiteData/WebsiteDataStore.h (208632 => 208633)
--- 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)
@@ -23,10 +23,10 @@
* THE POSSIBILITY OF SUCH DAMAGE.
*/
-#ifndef WebsiteDataStore_h
-#define WebsiteDataStore_h
+#pragma once
#include "WebProcessLifetimeObserver.h"
+#include <WebCore/SecurityOriginData.h>
#include <WebCore/SecurityOriginHash.h>
#include <WebCore/SessionID.h>
#include <functional>
@@ -110,9 +110,9 @@
Vector<PluginModuleInfo> plugins() const;
#endif
- static Vector<RefPtr<WebCore::SecurityOrigin>> mediaKeyOrigins(const String& mediaKeysStorageDirectory);
+ static Vector<WebCore::SecurityOriginData> mediaKeyOrigins(const String& mediaKeysStorageDirectory);
static void removeMediaKeys(const String& mediaKeysStorageDirectory, std::chrono::system_clock::time_point modifiedSince);
- static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<RefPtr<WebCore::SecurityOrigin>>&);
+ static void removeMediaKeys(const String& mediaKeysStorageDirectory, const HashSet<WebCore::SecurityOriginData>&);
const uint64_t m_identifier;
const WebCore::SessionID m_sessionID;
@@ -126,5 +126,3 @@
};
}
-
-#endif // WebsiteDataStore_h