Title: [185390] trunk/Source/WebKit2
Revision
185390
Author
[email protected]
Date
2015-06-09 16:09:38 -0700 (Tue, 09 Jun 2015)

Log Message

Change the PluginProcessManager data fetching function to take a completion handler
https://bugs.webkit.org/show_bug.cgi?id=145821

Reviewed by Sam Weinig.

* UIProcess/Plugins/PluginProcessManager.cpp:
(WebKit::PluginProcessManager::fetchWebsiteData):
(WebKit::PluginProcessManager::getSitesWithData): Deleted.
* UIProcess/Plugins/PluginProcessManager.h:
* UIProcess/Plugins/PluginProcessProxy.cpp:
(WebKit::generateCallbackID):
(WebKit::PluginProcessProxy::~PluginProcessProxy):
(WebKit::PluginProcessProxy::fetchWebsiteData):
(WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
(WebKit::PluginProcessProxy::didFinishLaunching):
(WebKit::PluginProcessProxy::didGetSitesWithData):
(WebKit::PluginProcessProxy::getSitesWithData): Deleted.
* UIProcess/Plugins/PluginProcessProxy.h:
* UIProcess/Plugins/WebPluginSiteDataManager.cpp:
(WebKit::WebPluginSiteDataManager::GetSitesWithDataState::getSitesWithDataForNextPlugin):

Modified Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (185389 => 185390)


--- trunk/Source/WebKit2/ChangeLog	2015-06-09 22:57:03 UTC (rev 185389)
+++ trunk/Source/WebKit2/ChangeLog	2015-06-09 23:09:38 UTC (rev 185390)
@@ -1,5 +1,28 @@
 2015-06-09  Anders Carlsson  <[email protected]>
 
+        Change the PluginProcessManager data fetching function to take a completion handler
+        https://bugs.webkit.org/show_bug.cgi?id=145821
+
+        Reviewed by Sam Weinig.
+
+        * UIProcess/Plugins/PluginProcessManager.cpp:
+        (WebKit::PluginProcessManager::fetchWebsiteData):
+        (WebKit::PluginProcessManager::getSitesWithData): Deleted.
+        * UIProcess/Plugins/PluginProcessManager.h:
+        * UIProcess/Plugins/PluginProcessProxy.cpp:
+        (WebKit::generateCallbackID):
+        (WebKit::PluginProcessProxy::~PluginProcessProxy):
+        (WebKit::PluginProcessProxy::fetchWebsiteData):
+        (WebKit::PluginProcessProxy::pluginProcessCrashedOrFailedToLaunch):
+        (WebKit::PluginProcessProxy::didFinishLaunching):
+        (WebKit::PluginProcessProxy::didGetSitesWithData):
+        (WebKit::PluginProcessProxy::getSitesWithData): Deleted.
+        * UIProcess/Plugins/PluginProcessProxy.h:
+        * UIProcess/Plugins/WebPluginSiteDataManager.cpp:
+        (WebKit::WebPluginSiteDataManager::GetSitesWithDataState::getSitesWithDataForNextPlugin):
+
+2015-06-09  Anders Carlsson  <[email protected]>
+
         Add code to keep track of plug-in data host names in website data records
         https://bugs.webkit.org/show_bug.cgi?id=145818
 

Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp (185389 => 185390)


--- trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp	2015-06-09 22:57:03 UTC (rev 185389)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.cpp	2015-06-09 23:09:38 UTC (rev 185390)
@@ -95,10 +95,11 @@
     m_pluginProcesses.remove(vectorIndex);
 }
 
-void PluginProcessManager::getSitesWithData(const PluginModuleInfo& plugin, WebPluginSiteDataManager* webPluginSiteDataManager, uint64_t callbackID)
+void PluginProcessManager::fetchWebsiteData(const PluginModuleInfo& plugin, std::function<void (Vector<String>)> completionHandler)
 {
     PluginProcessProxy* pluginProcess = getOrCreatePluginProcess(pluginProcessToken(plugin, PluginProcessTypeNormal, PluginProcessSandboxPolicyNormal));
-    pluginProcess->getSitesWithData(webPluginSiteDataManager, callbackID);
+
+    pluginProcess->fetchWebsiteData(WTF::move(completionHandler));
 }
 
 void PluginProcessManager::clearSiteData(const PluginModuleInfo& plugin, WebPluginSiteDataManager* webPluginSiteDataManager, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID)

Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h (185389 => 185390)


--- trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h	2015-06-09 22:57:03 UTC (rev 185389)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessManager.h	2015-06-09 23:09:38 UTC (rev 185390)
@@ -62,7 +62,7 @@
     void getPluginProcessConnection(uint64_t pluginProcessToken, PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply>);
     void removePluginProcessProxy(PluginProcessProxy*);
 
-    void getSitesWithData(const PluginModuleInfo&, WebPluginSiteDataManager*, uint64_t callbackID);
+    void fetchWebsiteData(const PluginModuleInfo&, std::function<void (Vector<String>)> completionHandler);
     void clearSiteData(const PluginModuleInfo&, WebPluginSiteDataManager*, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID);
 
 #if PLATFORM(COCOA)

Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp (185389 => 185390)


--- trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp	2015-06-09 22:57:03 UTC (rev 185389)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.cpp	2015-06-09 23:09:38 UTC (rev 185390)
@@ -49,6 +49,13 @@
 static const double shutdownTimeout = 1 * 60;
 static const double snapshottingShutdownTimeout = 15;
 
+static uint64_t generateCallbackID()
+{
+    static uint64_t callbackID;
+
+    return ++callbackID;
+}
+
 PassRefPtr<PluginProcessProxy> PluginProcessProxy::create(PluginProcessManager* PluginProcessManager, const PluginProcessAttributes& pluginProcessAttributes, uint64_t pluginProcessToken)
 {
     return adoptRef(new PluginProcessProxy(PluginProcessManager, pluginProcessAttributes, pluginProcessToken));
@@ -70,6 +77,8 @@
 
 PluginProcessProxy::~PluginProcessProxy()
 {
+    ASSERT(m_pendingFetchWebsiteDataRequests.isEmpty());
+    ASSERT(m_pendingFetchWebsiteDataCallbacks.isEmpty());
 }
 
 void PluginProcessProxy::getLaunchOptions(ProcessLauncher::LaunchOptions& launchOptions)
@@ -99,17 +108,16 @@
     m_connection->send(Messages::PluginProcess::CreateWebProcessConnection(), 0, IPC::DispatchMessageEvenWhenWaitingForSyncReply);
 }
 
-void PluginProcessProxy::getSitesWithData(WebPluginSiteDataManager* webPluginSiteDataManager, uint64_t callbackID)
+void PluginProcessProxy::fetchWebsiteData(std::function<void (Vector<String>)> completionHandler)
 {
-    ASSERT(!m_pendingGetSitesReplies.contains(callbackID));
-    m_pendingGetSitesReplies.set(callbackID, webPluginSiteDataManager);
+    uint64_t callbackID = generateCallbackID();
+    m_pendingFetchWebsiteDataCallbacks.set(callbackID, WTF::move(completionHandler));
 
     if (state() == State::Launching) {
-        m_pendingGetSitesRequests.append(callbackID);
+        m_pendingFetchWebsiteDataRequests.append(callbackID);
         return;
     }
 
-    // Ask the plug-in process for the sites with data.
     m_connection->send(Messages::PluginProcess::GetSitesWithData(callbackID), 0);
 }
 
@@ -147,9 +155,12 @@
 #endif
     }
 
-    while (!m_pendingGetSitesReplies.isEmpty())
-        didGetSitesWithData(Vector<String>(), m_pendingGetSitesReplies.begin()->key);
+    m_pendingFetchWebsiteDataRequests.clear();
 
+    for (const auto& callback : m_pendingFetchWebsiteDataCallbacks.values())
+        callback({ });
+    m_pendingFetchWebsiteDataCallbacks.clear();
+
     while (!m_pendingClearSiteDataReplies.isEmpty())
         didClearSiteData(m_pendingClearSiteDataReplies.begin()->key);
 
@@ -213,10 +224,9 @@
     m_connection->send(Messages::PluginProcess::SetQOS(pluginProcessLatencyQOS(), pluginProcessThroughputQOS()), 0);
 #endif
 
-    // Send all our pending requests.
-    for (size_t i = 0; i < m_pendingGetSitesRequests.size(); ++i)
-        m_connection->send(Messages::PluginProcess::GetSitesWithData(m_pendingGetSitesRequests[i]), 0);
-    m_pendingGetSitesRequests.clear();
+    for (auto callbackID : m_pendingFetchWebsiteDataRequests)
+        m_connection->send(Messages::PluginProcess::GetSitesWithData(callbackID), 0);
+    m_pendingFetchWebsiteDataRequests.clear();
 
     for (size_t i = 0; i < m_pendingClearSiteDataRequests.size(); ++i) {
         const ClearSiteDataRequest& request = m_pendingClearSiteDataRequests[i];
@@ -253,10 +263,8 @@
 
 void PluginProcessProxy::didGetSitesWithData(const Vector<String>& sites, uint64_t callbackID)
 {
-    RefPtr<WebPluginSiteDataManager> webPluginSiteDataManager = m_pendingGetSitesReplies.take(callbackID);
-    ASSERT(webPluginSiteDataManager);
-
-    webPluginSiteDataManager->didGetSitesWithDataForSinglePlugin(sites, callbackID);
+    auto callback = m_pendingFetchWebsiteDataCallbacks.take(callbackID);
+    callback(sites);
 }
 
 void PluginProcessProxy::didClearSiteData(uint64_t callbackID)

Modified: trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h (185389 => 185390)


--- trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h	2015-06-09 22:57:03 UTC (rev 185389)
+++ trunk/Source/WebKit2/UIProcess/Plugins/PluginProcessProxy.h	2015-06-09 23:09:38 UTC (rev 185390)
@@ -78,10 +78,9 @@
     // Asks the plug-in process to create a new connection to a web process. The connection identifier will be
     // encoded in the given argument encoder and sent back to the connection of the given web process.
     void getPluginProcessConnection(PassRefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply>);
-    
-    // Asks the plug-in process to get a list of domains for which the plug-in has data stored.
-    void getSitesWithData(WebPluginSiteDataManager*, uint64_t callbackID);
 
+    void fetchWebsiteData(std::function<void (Vector<String>)> completionHandler);
+
     // Asks the plug-in process to clear the data for the given sites.
     void clearSiteData(WebPluginSiteDataManager*, const Vector<String>& sites, uint64_t flags, uint64_t maxAgeInSeconds, uint64_t callbackID);
 
@@ -164,8 +163,8 @@
 
     Deque<RefPtr<Messages::WebProcessProxy::GetPluginProcessConnection::DelayedReply>> m_pendingConnectionReplies;
 
-    Vector<uint64_t> m_pendingGetSitesRequests;
-    HashMap<uint64_t, RefPtr<WebPluginSiteDataManager>> m_pendingGetSitesReplies;
+    Vector<uint64_t> m_pendingFetchWebsiteDataRequests;
+    HashMap<uint64_t, std::function<void (Vector<String>)>> m_pendingFetchWebsiteDataCallbacks;
 
     struct ClearSiteDataRequest {
         Vector<String> sites;

Modified: trunk/Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp (185389 => 185390)


--- trunk/Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp	2015-06-09 22:57:03 UTC (rev 185389)
+++ trunk/Source/WebKit2/UIProcess/Plugins/WebPluginSiteDataManager.cpp	2015-06-09 23:09:38 UTC (rev 185390)
@@ -56,7 +56,12 @@
             return;
         }
 
-        PluginProcessManager::singleton().getSitesWithData(m_plugins.last(), m_webPluginSiteDataManager, m_callbackID);
+        RefPtr<WebPluginSiteDataManager> webPluginSiteDataManager = m_webPluginSiteDataManager;
+        uint64_t callbackID = m_callbackID;
+        PluginProcessManager::singleton().fetchWebsiteData(m_plugins.last(), [webPluginSiteDataManager, callbackID](Vector<String> hostNames) {
+            webPluginSiteDataManager->didGetSitesWithDataForSinglePlugin(sites, callbackID);
+        });
+
         m_plugins.removeLast();
     }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to