summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/extension_host.h
diff options
context:
space:
mode:
authormpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-28 23:36:23 +0000
committermpcomplete@chromium.org <mpcomplete@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-09-28 23:36:23 +0000
commit971c16885e6dca38e4f3d5d5ba5b73214e3526e7 (patch)
treedf8db75694b66ac673f8b98dfedf1ef509c1994a /chrome/browser/extensions/extension_host.h
parente9e3ffdd0c69ecb48c656bd9bd61a10beb731091 (diff)
downloadchromium_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.h15
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