diff options
author | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-28 23:36:23 +0000 |
---|---|---|
committer | mpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-09-28 23:36:23 +0000 |
commit | 971c16885e6dca38e4f3d5d5ba5b73214e3526e7 (patch) | |
tree | df8db75694b66ac673f8b98dfedf1ef509c1994a /chrome/browser/extensions/extension_host.h | |
parent | e9e3ffdd0c69ecb48c656bd9bd61a10beb731091 (diff) | |
download | chromium_src-971c16885e6dca38e4f3d5d5ba5b73214e3526e7.zip chromium_src-971c16885e6dca38e4f3d5d5ba5b73214e3526e7.tar.gz chromium_src-971c16885e6dca38e4f3d5d5ba5b73214e3526e7.tar.bz2 |
Retry r27137. Create renderers for ExtensionHosts one at a time to avoid blocking the UI.
I added a process.Close() to the fast shutdown path for renderers. The problem
was that we were trying to use an old terminated process handle.
BUG=14040
TEST=Install a bunch of extensions with toolstrips, then restart Chrome. The
UI should be responsive while the toolstrips are loading.
Review URL: http://codereview.chromium.org/243007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@27434 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_host.h')
-rw-r--r-- | chrome/browser/extensions/extension_host.h | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/chrome/browser/extensions/extension_host.h b/chrome/browser/extensions/extension_host.h index 3a129a7..7f3ad2cf 100644 --- a/chrome/browser/extensions/extension_host.h +++ b/chrome/browser/extensions/extension_host.h @@ -38,6 +38,8 @@ class ExtensionHost : public RenderViewHostDelegate, public ExtensionFunctionDispatcher::Delegate, public NotificationObserver { public: + class ProcessCreationQueue; + // Enable DOM automation in created render view hosts. static void EnableDOMAutomation() { enable_dom_automation_ = true; } @@ -75,10 +77,10 @@ class ExtensionHost : public RenderViewHostDelegate, // Returns true if the render view is initialized and didn't crash. bool IsRenderViewLive() const; - // Initializes our RenderViewHost by creating its RenderView and navigating - // to this host's url. Uses host_view for the RenderViewHost's view (can be - // NULL). - void CreateRenderView(RenderWidgetHostView* host_view); + // Prepares to initializes our RenderViewHost by creating its RenderView and + // navigating to this host's url. Uses host_view for the RenderViewHost's view + // (can be NULL). This happens delayed to avoid locking the UI. + void CreateRenderViewSoon(RenderWidgetHostView* host_view); // Sets |url_| and navigates |render_view_host_|. void NavigateToURL(const GURL& url); @@ -137,10 +139,15 @@ class ExtensionHost : public RenderViewHostDelegate, const NotificationDetails& details); private: + friend class ProcessCreationQueue; + // Whether to allow DOM automation for created RenderViewHosts. This is used // for testing. static bool enable_dom_automation_; + // Actually create the RenderView for this host. See CreateRenderViewSoon. + void CreateRenderViewNow(); + // ExtensionFunctionDispatcher::Delegate // If this ExtensionHost has a view, this returns the Browser that view is a // part of. If this is a global background page, we use the active Browser |