From a89b2ebb8e192c5e8cea21079bda2ee2c0c7dddd Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Fri, 25 May 2012 15:09:11 +0200 Subject: Imported WebKit commit eb5c1b8fe4d4b1b90b5137433fc58a91da0e6878 (http://svn.webkit.org/repository/webkit/trunk@118516) --- Source/WebKit2/UIProcess/WebContext.cpp | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) (limited to 'Source/WebKit2/UIProcess/WebContext.cpp') diff --git a/Source/WebKit2/UIProcess/WebContext.cpp b/Source/WebKit2/UIProcess/WebContext.cpp index 6987405be..d2f18070e 100644 --- a/Source/WebKit2/UIProcess/WebContext.cpp +++ b/Source/WebKit2/UIProcess/WebContext.cpp @@ -612,20 +612,20 @@ void WebContext::addVisitedLinkHash(LinkHash linkHash) m_visitedLinkProvider.addVisitedLink(linkHash); } -void WebContext::sendDidGetPlugins(uint64_t requestID, const Vector& pluginInfos) +void WebContext::sendDidGetPlugins(uint64_t requestID, PassOwnPtr > pluginInfos) { ASSERT(isMainThread()); - Vector plugins(pluginInfos); + OwnPtr > plugins(pluginInfos); #if PLATFORM(MAC) // Add built-in PDF last, so that it's not used when a real plug-in is installed. // NOTE: This has to be done on the main thread as it calls localizedString(). if (!omitPDFSupport()) - plugins.append(BuiltInPDFView::pluginInfo()); + plugins->append(BuiltInPDFView::pluginInfo()); #endif - process()->send(Messages::WebProcess::DidGetPlugins(requestID, plugins), 0); + process()->send(Messages::WebProcess::DidGetPlugins(requestID, *plugins), 0); } void WebContext::handleGetPlugins(uint64_t requestID, bool refresh) @@ -633,13 +633,15 @@ void WebContext::handleGetPlugins(uint64_t requestID, bool refresh) if (refresh) m_pluginInfoStore.refresh(); - Vector pluginInfos; + OwnPtr > pluginInfos = adoptPtr(new Vector); Vector plugins = m_pluginInfoStore.plugins(); for (size_t i = 0; i < plugins.size(); ++i) - pluginInfos.append(plugins[i].info); + pluginInfos->append(plugins[i].info); - RunLoop::main()->dispatch(bind(&WebContext::sendDidGetPlugins, this, requestID, pluginInfos)); + // NOTE: We have to pass the PluginInfo vector to the secondary thread via a pointer as otherwise + // we'd end up with a deref() race on all the WTF::Strings it contains. + RunLoop::main()->dispatch(bind(&WebContext::sendDidGetPlugins, this, requestID, pluginInfos.release())); } void WebContext::getPlugins(CoreIPC::Connection*, uint64_t requestID, bool refresh) @@ -653,11 +655,11 @@ void WebContext::getPluginPath(const String& mimeType, const String& urlString, String newMimeType = mimeType.lower(); + blocked = false; PluginModuleInfo plugin = pluginInfoStore().findPlugin(newMimeType, KURL(KURL(), urlString)); if (!plugin.path) return; - blocked = false; if (pluginInfoStore().shouldBlockPlugin(plugin)) { blocked = true; return; -- cgit v1.2.1