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();
}