From 35fa6a20ef621d22e6ba79e7306abad870cab4e4 Mon Sep 17 00:00:00 2001 From: "jam@chromium.org" Date: Sat, 15 Aug 2009 00:04:01 +0000 Subject: Ensure we don't load plugins on the IO thread. I had to move the locks from PluginService to PluginList, so that a lock (which can block other threads) isn't held while loading the plugins. BUG=17938 TEST=added asserts which crash if plugins loaded on IO thread, current UI tests exercise them Review URL: http://codereview.chromium.org/164305 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23501 0039d316-1c4b-4281-b951-d872f2087c98 --- .../browser/renderer_host/buffered_resource_handler.h | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'chrome/browser/renderer_host/buffered_resource_handler.h') diff --git a/chrome/browser/renderer_host/buffered_resource_handler.h b/chrome/browser/renderer_host/buffered_resource_handler.h index 3799b99..1a0af52 100644 --- a/chrome/browser/renderer_host/buffered_resource_handler.h +++ b/chrome/browser/renderer_host/buffered_resource_handler.h @@ -30,6 +30,7 @@ class BufferedResourceHandler : public ResourceHandler { bool OnResponseCompleted(int request_id, const URLRequestStatus& status, const std::string& security_info); + void OnRequestClosed(); private: // Returns true if we should delay OnResponseStarted forwarding. @@ -49,6 +50,22 @@ class BufferedResourceHandler : public ResourceHandler { // this is invoked from |OnResponseCompleted|. bool CompleteResponseStarted(int request_id, bool in_complete); + // Returns true if we have to wait until the plugin list is generated. + bool ShouldWaitForPlugins(); + + // A test to determining whether the request should be forwarded to the + // download thread. If need_plugin_list was passed in and was set to true, + // that means that the check couldn't be fully done because the plugins aren't + // loaded. The function should be called again after the plugin list is + // loaded. + bool ShouldDownload(bool* need_plugin_list); + + // Called on the file thread to load the list of plugins. + void LoadPlugins(); + + // Called on the IO thread once the list of plugins has been loaded. + void OnPluginsLoaded(); + scoped_refptr real_handler_; scoped_refptr response_; ResourceDispatcherHost* host_; @@ -59,6 +76,7 @@ class BufferedResourceHandler : public ResourceHandler { int bytes_read_; bool sniff_content_; bool should_buffer_; + bool wait_for_plugins_; bool buffering_; bool finished_; -- cgit v1.1