WebKit Bugzilla
Attachment 339838 Details for
Bug 185413
: Introduce WebResourceLoadStatisticsStoreClient
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch
bug-185413-20180508111211.patch (text/plain), 21.51 KB, created by
Alex Christensen
on 2018-05-08 11:12:11 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Alex Christensen
Created:
2018-05-08 11:12:11 PDT
Size:
21.51 KB
patch
obsolete
>Index: Source/WebKit/ChangeLog >=================================================================== >--- Source/WebKit/ChangeLog (revision 231478) >+++ Source/WebKit/ChangeLog (working copy) >@@ -1,3 +1,33 @@ >+2018-05-08 Alex Christensen <achristensen@webkit.org> >+ >+ Introduce WebResourceLoadStatisticsStoreClient >+ https://bugs.webkit.org/show_bug.cgi?id=185413 >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ There's a reference cycle still, but now it's more obvious and fixable. >+ >+ * UIProcess/WebResourceLoadStatisticsStore.cpp: >+ (WebKit::WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore): >+ (WebKit::WebResourceLoadStatisticsStore::hasStorageAccess): >+ (WebKit::WebResourceLoadStatisticsStore::requestStorageAccess): >+ (WebKit::WebResourceLoadStatisticsStore::requestStorageAccessUnderOpener): >+ (WebKit::WebResourceLoadStatisticsStore::removeAllStorageAccess): >+ (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioning): >+ (WebKit::WebResourceLoadStatisticsStore::updateCookiePartitioningForDomains): >+ (WebKit::WebResourceLoadStatisticsStore::clearPartitioningStateForDomains): >+ * UIProcess/WebResourceLoadStatisticsStore.h: >+ (WebKit::WebResourceLoadStatisticsStoreClient::~WebResourceLoadStatisticsStoreClient): >+ * UIProcess/WebsiteData/WebsiteDataStore.cpp: >+ (WebKit::WebsiteDataStore::hasStorageAccessForFrame): >+ (WebKit::WebsiteDataStore::grantStorageAccess): >+ (WebKit::WebsiteDataStore::removeAllStorageAccess): >+ (WebKit::WebsiteDataStore::enableResourceLoadStatisticsAndSetTestingCallback): >+ (WebKit::WebsiteDataStore::hasStorageAccessForFrameHandler): Deleted. >+ (WebKit::WebsiteDataStore::grantStorageAccessHandler): Deleted. >+ (WebKit::WebsiteDataStore::removeAllStorageAccessHandler): Deleted. >+ * UIProcess/WebsiteData/WebsiteDataStore.h: >+ > 2018-05-07 Daniel Bates <dabates@apple.com> > > Abstract logic to log console messages and send CSP violation reports into a client >Index: Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp (revision 231465) >+++ Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.cpp (working copy) >@@ -154,14 +154,10 @@ static Vector<OperatingDate> mergeOperat > return mergedDates; > } > >-WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore(const String& resourceLoadStatisticsDirectory, Function<void(const String&)>&& testingCallback, bool isEphemeral, UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler&& updatePrevalentDomainsToPartitionOrBlockCookiesHandler, HasStorageAccessForFrameHandler&& hasStorageAccessForFrameHandler, GrantStorageAccessHandler&& grantStorageAccessHandler, RemoveAllStorageAccessHandler&& removeAllStorageAccessHandler, RemovePrevalentDomainsHandler&& removeDomainsHandler) >+WebResourceLoadStatisticsStore::WebResourceLoadStatisticsStore(const String& resourceLoadStatisticsDirectory, Function<void(const String&)>&& testingCallback, bool isEphemeral, WebResourceLoadStatisticsStoreClient* client) > : m_statisticsQueue(WorkQueue::create("WebResourceLoadStatisticsStore Process Data Queue", WorkQueue::Type::Serial, WorkQueue::QOS::Utility)) > , m_persistentStorage(*this, resourceLoadStatisticsDirectory, isEphemeral ? ResourceLoadStatisticsPersistentStorage::IsReadOnly::Yes : ResourceLoadStatisticsPersistentStorage::IsReadOnly::No) >- , m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler(WTFMove(updatePrevalentDomainsToPartitionOrBlockCookiesHandler)) >- , m_hasStorageAccessForFrameHandler(WTFMove(hasStorageAccessForFrameHandler)) >- , m_grantStorageAccessHandler(WTFMove(grantStorageAccessHandler)) >- , m_removeAllStorageAccessHandler(WTFMove(removeAllStorageAccessHandler)) >- , m_removeDomainsHandler(WTFMove(removeDomainsHandler)) >+ , m_client(client) > , m_dailyTasksTimer(RunLoop::main(), this, &WebResourceLoadStatisticsStore::performDailyTasks) > , m_statisticsTestingCallback(WTFMove(testingCallback)) > { >@@ -351,7 +347,10 @@ void WebResourceLoadStatisticsStore::has > return; > } > >- m_hasStorageAccessForFrameHandler(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, WTFMove(callback)); >+ if (m_client) >+ m_client->hasStorageAccessForFrame(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, WTFMove(callback)); >+ else >+ callback(false); > }); > } > >@@ -386,11 +385,17 @@ void WebResourceLoadStatisticsStore::req > > subFrameStatistic.timesAccessedAsFirstPartyDueToStorageAccessAPI++; > >- m_grantStorageAccessHandler(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, [callback = WTFMove(callback)] (bool value) mutable { >- callOnMainThread([value, callback = WTFMove(callback)] { >- callback(value); >+ if (m_client) { >+ m_client->grantStorageAccess(subFramePrimaryDomain, topFramePrimaryDomain, frameID, pageID, [callback = WTFMove(callback)] (bool value) mutable { >+ callOnMainThread([value, callback = WTFMove(callback)] { >+ callback(value); >+ }); > }); >- }); >+ } else { >+ callOnMainThread([callback = WTFMove(callback)] () mutable { >+ callback(false); >+ }); >+ } > }); > } > >@@ -413,7 +418,8 @@ void WebResourceLoadStatisticsStore::req > if (!cookiesBlocked && !shouldPartitionCookies(domainInNeedOfStorageAccessStatistic)) > return; > >- m_grantStorageAccessHandler(WTFMove(domainInNeedOfStorageAccess), WTFMove(openerDomain), std::nullopt, openerPageID, [](bool) { }); >+ if (m_client) >+ m_client->grantStorageAccess(WTFMove(domainInNeedOfStorageAccess), WTFMove(openerDomain), std::nullopt, openerPageID, [](bool) { }); > #if !RELEASE_LOG_DISABLED > RELEASE_LOG_INFO_IF(m_debugLoggingEnabled, ResourceLoadStatisticsDebug, "Grant storage access for %{public}s under opener %{public}s, %{public}s user interaction.", domainInNeedOfStorageAccess.utf8().data(), openerDomain.utf8().data(), (isTriggeredByUserGesture ? "with" : "without")); > #endif >@@ -423,7 +429,8 @@ void WebResourceLoadStatisticsStore::rem > { > ASSERT(!RunLoop::isMain()); > RunLoop::main().dispatch([this, protectedThis = makeRef(*this)] () { >- m_removeAllStorageAccessHandler(); >+ if (m_client) >+ m_client->removeAllStorageAccess(); > }); > } > >@@ -1078,7 +1085,8 @@ void WebResourceLoadStatisticsStore::upd > #endif > > RunLoop::main().dispatch([this, protectedThis = makeRef(*this), domainsToPartition = crossThreadCopy(domainsToPartition), domainsToBlock = crossThreadCopy(domainsToBlock), domainsToNeitherPartitionNorBlock = crossThreadCopy(domainsToNeitherPartitionNorBlock), callback = WTFMove(callback)] () { >- m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, ShouldClearFirst::No); >+ if (m_client) >+ m_client->updatePrevalentDomainsToPartitionOrBlockCookies(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, ShouldClearFirst::No); > callback(); > #if !RELEASE_LOG_DISABLED > RELEASE_LOG_INFO_IF(m_debugLoggingEnabled, ResourceLoadStatisticsDebug, "Done updating cookie partitioning and blocking."); >@@ -1095,7 +1103,8 @@ void WebResourceLoadStatisticsStore::upd > } > > RunLoop::main().dispatch([this, shouldClearFirst, protectedThis = makeRef(*this), domainsToPartition = crossThreadCopy(domainsToPartition), domainsToBlock = crossThreadCopy(domainsToBlock), domainsToNeitherPartitionNorBlock = crossThreadCopy(domainsToNeitherPartitionNorBlock)] () { >- m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst); >+ if (m_client) >+ m_client->updatePrevalentDomainsToPartitionOrBlockCookies(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst); > }); > > if (shouldClearFirst == ShouldClearFirst::Yes) >@@ -1126,7 +1135,8 @@ void WebResourceLoadStatisticsStore::cle > } > > RunLoop::main().dispatch([this, protectedThis = makeRef(*this), domains = crossThreadCopy(domains)] () { >- m_removeDomainsHandler(domains); >+ if (m_client) >+ m_client->removePrevalentDomains(domains); > }); > > for (auto& domain : domains) { >Index: Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h >=================================================================== >--- Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h (revision 231460) >+++ Source/WebKit/UIProcess/WebResourceLoadStatisticsStore.h (working copy) >@@ -59,16 +59,25 @@ class WebProcessProxy; > > enum class ShouldClearFirst; > >+class WebResourceLoadStatisticsStoreClient { >+public: >+#if HAVE(CFNETWORK_STORAGE_PARTITIONING) >+ virtual void updatePrevalentDomainsToPartitionOrBlockCookies(const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst) = 0; >+ virtual void hasStorageAccessForFrame(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool)>&&) = 0; >+ virtual void grantStorageAccess(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, CompletionHandler<void(bool)>&&) = 0; >+ virtual void removeAllStorageAccess() = 0; >+ virtual void removePrevalentDomains(const Vector<String>&) = 0; >+#endif >+ virtual void ref() = 0; >+ virtual void deref() = 0; >+ virtual ~WebResourceLoadStatisticsStoreClient() { }; >+}; >+ > class WebResourceLoadStatisticsStore final : public IPC::Connection::WorkQueueMessageReceiver { > public: >- using UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler = WTF::Function<void(const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst)>; >- using HasStorageAccessForFrameHandler = WTF::Function<void(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::Function<void(bool hasAccess)>&& callback)>; >- using GrantStorageAccessHandler = WTF::Function<void(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::Function<void(bool wasGranted)>&& callback)>; >- using RemoveAllStorageAccessHandler = WTF::Function<void()>; >- using RemovePrevalentDomainsHandler = WTF::Function<void (const Vector<String>&)>; >- static Ref<WebResourceLoadStatisticsStore> create(const String& resourceLoadStatisticsDirectory, Function<void (const String&)>&& testingCallback, bool isEphemeral, UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler&& updatePrevalentDomainsToPartitionOrBlockCookiesHandler = [](const WTF::Vector<String>&, const WTF::Vector<String>&, const WTF::Vector<String>&, ShouldClearFirst) { }, HasStorageAccessForFrameHandler&& hasStorageAccessForFrameHandler = [](const String&, const String&, uint64_t, uint64_t, WTF::Function<void(bool)>&&) { }, GrantStorageAccessHandler&& grantStorageAccessHandler = [](const String&, const String&, std::optional<uint64_t>, uint64_t, WTF::Function<void(bool)>&&) { }, RemoveAllStorageAccessHandler&& removeAllStorageAccessHandler = []() { }, RemovePrevalentDomainsHandler&& removeDomainsHandler = [] (const WTF::Vector<String>&) { }) >+ static Ref<WebResourceLoadStatisticsStore> create(const String& resourceLoadStatisticsDirectory, Function<void(const String&)>&& testingCallback, bool isEphemeral, WebResourceLoadStatisticsStoreClient* client) > { >- return adoptRef(*new WebResourceLoadStatisticsStore(resourceLoadStatisticsDirectory, WTFMove(testingCallback), isEphemeral, WTFMove(updatePrevalentDomainsToPartitionOrBlockCookiesHandler), WTFMove(hasStorageAccessForFrameHandler), WTFMove(grantStorageAccessHandler), WTFMove(removeAllStorageAccessHandler), WTFMove(removeDomainsHandler))); >+ return adoptRef(*new WebResourceLoadStatisticsStore(resourceLoadStatisticsDirectory, WTFMove(testingCallback), isEphemeral, client)); > } > > ~WebResourceLoadStatisticsStore(); >@@ -152,7 +161,7 @@ public: > void logTestingEvent(const String&); > > private: >- WebResourceLoadStatisticsStore(const String&, Function<void(const String&)>&& testingCallback, bool isEphemeral, UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler&&, HasStorageAccessForFrameHandler&&, GrantStorageAccessHandler&&, RemoveAllStorageAccessHandler&&, RemovePrevalentDomainsHandler&&); >+ WebResourceLoadStatisticsStore(const String&, Function<void(const String&)>&& testingCallback, bool isEphemeral, WebResourceLoadStatisticsStoreClient*); > > void removeDataRecords(CompletionHandler<void()>&&); > >@@ -211,11 +220,7 @@ private: > ResourceLoadStatisticsPersistentStorage m_persistentStorage; > Vector<OperatingDate> m_operatingDates; > >- UpdatePrevalentDomainsToPartitionOrBlockCookiesHandler m_updatePrevalentDomainsToPartitionOrBlockCookiesHandler; >- HasStorageAccessForFrameHandler m_hasStorageAccessForFrameHandler; >- GrantStorageAccessHandler m_grantStorageAccessHandler; >- RemoveAllStorageAccessHandler m_removeAllStorageAccessHandler; >- RemovePrevalentDomainsHandler m_removeDomainsHandler; >+ RefPtr<WebResourceLoadStatisticsStoreClient> m_client; > > WallTime m_endOfGrandfatheringTimestamp; > RunLoop::Timer<WebResourceLoadStatisticsStore> m_dailyTasksTimer; >Index: Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp >=================================================================== >--- Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (revision 231460) >+++ Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.cpp (working copy) >@@ -1198,7 +1198,7 @@ void WebsiteDataStore::updatePrevalentDo > processPool->sendToNetworkingProcess(Messages::NetworkProcess::UpdatePrevalentDomainsToPartitionOrBlockCookies(m_sessionID, domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst == ShouldClearFirst::Yes)); > } > >-void WebsiteDataStore::hasStorageAccessForFrameHandler(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void(bool hasAccess)>&& callback) >+void WebsiteDataStore::hasStorageAccessForFrame(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void(bool hasAccess)>&& callback) > { > for (auto& processPool : processPools()) > processPool->networkProcess()->hasStorageAccessForFrame(m_sessionID, resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(callback)); >@@ -1210,13 +1210,13 @@ void WebsiteDataStore::getAllStorageAcce > processPool->networkProcess()->getAllStorageAccessEntries(m_sessionID, WTFMove(callback)); > } > >-void WebsiteDataStore::grantStorageAccessHandler(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::CompletionHandler<void(bool wasGranted)>&& callback) >+void WebsiteDataStore::grantStorageAccess(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::CompletionHandler<void(bool wasGranted)>&& callback) > { > for (auto& processPool : processPools()) > processPool->networkProcess()->grantStorageAccess(m_sessionID, resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(callback)); > } > >-void WebsiteDataStore::removeAllStorageAccessHandler() >+void WebsiteDataStore::removeAllStorageAccess() > { > for (auto& processPool : processPools()) { > if (auto networkProcess = processPool->networkProcess()) >@@ -1449,19 +1449,9 @@ void WebsiteDataStore::enableResourceLoa > } > > #if HAVE(CFNETWORK_STORAGE_PARTITIONING) >- m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(m_configuration.resourceLoadStatisticsDirectory, WTFMove(callback), m_sessionID.isEphemeral(), [this, protectedThis = makeRef(*this)] (const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst shouldClearFirst) { >- updatePrevalentDomainsToPartitionOrBlockCookies(domainsToPartition, domainsToBlock, domainsToNeitherPartitionNorBlock, shouldClearFirst); >- }, [this, protectedThis = makeRef(*this)] (const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void(bool hasAccess)>&& callback) { >- hasStorageAccessForFrameHandler(resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(callback)); >- }, [this, protectedThis = makeRef(*this)] (const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::CompletionHandler<void(bool wasGranted)>&& callback) { >- grantStorageAccessHandler(resourceDomain, firstPartyDomain, frameID, pageID, WTFMove(callback)); >- }, [this, protectedThis = makeRef(*this)] () { >- removeAllStorageAccessHandler(); >- }, [this, protectedThis = makeRef(*this)] (const Vector<String>& domainsToRemove) { >- removePrevalentDomains(domainsToRemove); >- }); >+ m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(m_configuration.resourceLoadStatisticsDirectory, WTFMove(callback), m_sessionID.isEphemeral(), this); > #else >- m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(m_configuration.resourceLoadStatisticsDirectory, WTFMove(callback), m_sessionID.isEphemeral()); >+ m_resourceLoadStatistics = WebResourceLoadStatisticsStore::create(m_configuration.resourceLoadStatisticsDirectory, WTFMove(callback), m_sessionID.isEphemeral(), nullptr); > #endif > > for (auto& processPool : processPools()) >Index: Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h >=================================================================== >--- Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (revision 231460) >+++ Source/WebKit/UIProcess/WebsiteData/WebsiteDataStore.h (working copy) >@@ -27,6 +27,7 @@ > > #include "NetworkSessionCreationParameters.h" > #include "WebProcessLifetimeObserver.h" >+#include "WebResourceLoadStatisticsStore.h" > #include <WebCore/Cookie.h> > #include <WebCore/SecurityOriginData.h> > #include <WebCore/SecurityOriginHash.h> >@@ -66,7 +67,7 @@ struct PluginModuleInfo; > > enum class ShouldClearFirst { No, Yes }; > >-class WebsiteDataStore : public RefCounted<WebsiteDataStore>, public WebProcessLifetimeObserver, public Identified<WebsiteDataStore> { >+class WebsiteDataStore : public RefCounted<WebsiteDataStore>, public WebProcessLifetimeObserver, public Identified<WebsiteDataStore>, public WebResourceLoadStatisticsStoreClient { > public: > constexpr static uint64_t defaultCacheStoragePerOriginQuota = 50 * 1024 * 1024; > >@@ -123,15 +124,18 @@ public: > void removeDataForTopPrivatelyControlledDomains(OptionSet<WebsiteDataType>, OptionSet<WebsiteDataFetchOption>, const Vector<String>& topPrivatelyControlledDomains, Function<void(HashSet<String>&&)>&& completionHandler); > > #if HAVE(CFNETWORK_STORAGE_PARTITIONING) >- void updatePrevalentDomainsToPartitionOrBlockCookies(const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst); >- void hasStorageAccessForFrameHandler(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void(bool hasAccess)>&& callback); >+ void updatePrevalentDomainsToPartitionOrBlockCookies(const Vector<String>& domainsToPartition, const Vector<String>& domainsToBlock, const Vector<String>& domainsToNeitherPartitionNorBlock, ShouldClearFirst) override; >+ void hasStorageAccessForFrame(const String& resourceDomain, const String& firstPartyDomain, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void(bool hasAccess)>&& callback) override; > void getAllStorageAccessEntries(CompletionHandler<void(Vector<String>&& domains)>&&); >- void grantStorageAccessHandler(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::CompletionHandler<void(bool wasGranted)>&& callback); >- void removeAllStorageAccessHandler(); >- void removePrevalentDomains(const Vector<String>& domains); >- void hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void (bool)>&& callback); >- void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, WTF::CompletionHandler<void (bool)>&& callback); >+ void grantStorageAccess(const String& resourceDomain, const String& firstPartyDomain, std::optional<uint64_t> frameID, uint64_t pageID, WTF::CompletionHandler<void(bool)>&&) override; >+ void removeAllStorageAccess() override; >+ void removePrevalentDomains(const Vector<String>& domains) override; >+ void hasStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool)>&&); >+ void requestStorageAccess(String&& subFrameHost, String&& topFrameHost, uint64_t frameID, uint64_t pageID, CompletionHandler<void(bool)>&&); > #endif >+ void ref() override { RefCounted<WebsiteDataStore>::ref(); } >+ void deref() override { RefCounted<WebsiteDataStore>::deref(); } >+ > void networkProcessDidCrash(); > void resolveDirectoriesIfNecessary(); > const String& resolvedApplicationCacheDirectory() const { return m_resolvedConfiguration.applicationCacheDirectory; }
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Flags:
achristensen
:
review-
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 185413
:
339796
|
339835
| 339838