diff options
author | jamescook@chromium.org <jamescook@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-12 09:22:22 +0000 |
---|---|---|
committer | jamescook@chromium.org <jamescook@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-02-12 09:22:22 +0000 |
commit | 7f165344a122f5cdb2c3154eecbcdd4dacc854d3 (patch) | |
tree | 2e1979ebcf7d923518c62a737f4e7d76a30c4de5 | |
parent | cc04a159cd1ef9daa7f35257372f1f432ffd2162 (diff) | |
download | chromium_src-7f165344a122f5cdb2c3154eecbcdd4dacc854d3.zip chromium_src-7f165344a122f5cdb2c3154eecbcdd4dacc854d3.tar.gz chromium_src-7f165344a122f5cdb2c3154eecbcdd4dacc854d3.tar.bz2 |
Fix crash when running chrome --install-from-webstore
We were using an invisible dummy WebContents to decide where to parent the
confirmation dialog. This crashes under Aura.
BUG=334524
TEST=manual, "chrome --install-from-webstore=gplegfbjlmmehdoakndmohflojccocli" should not crash
Review URL: https://codereview.chromium.org/160093002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@250657 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/extensions/extension_install_prompt.cc | 5 | ||||
-rw-r--r-- | chrome/browser/extensions/webstore_startup_installer.cc | 8 | ||||
-rw-r--r-- | chrome/browser/extensions/webstore_startup_installer.h | 3 |
3 files changed, 14 insertions, 2 deletions
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc index f4d9ff6..983b3bb 100644 --- a/chrome/browser/extensions/extension_install_prompt.cc +++ b/chrome/browser/extensions/extension_install_prompt.cc @@ -535,12 +535,12 @@ scoped_refptr<Extension> error); } -ExtensionInstallPrompt::ExtensionInstallPrompt( - content::WebContents* contents) +ExtensionInstallPrompt::ExtensionInstallPrompt(content::WebContents* contents) : OAuth2TokenService::Consumer("extensions_install"), record_oauth2_grant_(false), ui_loop_(base::MessageLoop::current()), extension_(NULL), + bundle_(NULL), install_ui_(ExtensionInstallUI::Create(ProfileForWebContents(contents))), show_params_(contents), delegate_(NULL), @@ -556,6 +556,7 @@ ExtensionInstallPrompt::ExtensionInstallPrompt( record_oauth2_grant_(false), ui_loop_(base::MessageLoop::current()), extension_(NULL), + bundle_(NULL), install_ui_(ExtensionInstallUI::Create(profile)), show_params_(native_window, navigator), delegate_(NULL), diff --git a/chrome/browser/extensions/webstore_startup_installer.cc b/chrome/browser/extensions/webstore_startup_installer.cc index 114f85e..9a26f8e 100644 --- a/chrome/browser/extensions/webstore_startup_installer.cc +++ b/chrome/browser/extensions/webstore_startup_installer.cc @@ -45,6 +45,14 @@ WebstoreStartupInstaller::CreateInstallPrompt() const { return prompt.Pass(); } +scoped_ptr<ExtensionInstallPrompt> WebstoreStartupInstaller::CreateInstallUI() { + // The WebContents passed to ExtensionInstallPrompt is used to find a parent + // window for the dialog. This class uses a dummy WebContents and has no + // associated browser window. Pass NULL so the dialog is placed in the middle + // of the screen. + return make_scoped_ptr(new ExtensionInstallPrompt(NULL)); +} + bool WebstoreStartupInstaller::ShouldShowPostInstallUI() const { return false; } diff --git a/chrome/browser/extensions/webstore_startup_installer.h b/chrome/browser/extensions/webstore_startup_installer.h index b89195b..4d96bf0 100644 --- a/chrome/browser/extensions/webstore_startup_installer.h +++ b/chrome/browser/extensions/webstore_startup_installer.h @@ -45,6 +45,7 @@ class WebstoreStartupInstaller virtual content::WebContents* GetWebContents() const OVERRIDE; virtual scoped_ptr<ExtensionInstallPrompt::Prompt> CreateInstallPrompt() const OVERRIDE; + virtual scoped_ptr<ExtensionInstallPrompt> CreateInstallUI() OVERRIDE; virtual bool CheckInlineInstallPermitted( const base::DictionaryValue& webstore_data, std::string* error) const OVERRIDE; @@ -55,6 +56,8 @@ class WebstoreStartupInstaller private: bool show_prompt_; GURL dummy_requestor_url_; + + // A non-visible WebContents used to download data from the webstore. scoped_ptr<content::WebContents> dummy_web_contents_; DISALLOW_IMPLICIT_CONSTRUCTORS(WebstoreStartupInstaller); |