summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjamescook@chromium.org <jamescook@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-12 09:22:22 +0000
committerjamescook@chromium.org <jamescook@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-02-12 09:22:22 +0000
commit7f165344a122f5cdb2c3154eecbcdd4dacc854d3 (patch)
tree2e1979ebcf7d923518c62a737f4e7d76a30c4de5
parentcc04a159cd1ef9daa7f35257372f1f432ffd2162 (diff)
downloadchromium_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.cc5
-rw-r--r--chrome/browser/extensions/webstore_startup_installer.cc8
-rw-r--r--chrome/browser/extensions/webstore_startup_installer.h3
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);