diff options
author | pkotwicz <pkotwicz@chromium.org> | 2014-10-22 12:56:28 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-10-22 19:57:34 +0000 |
commit | 2175c6257dd81a2b27af34e7f617f35a024ac5bb (patch) | |
tree | a2f65f31b671ea62b17a425225529bd4d120ed46 | |
parent | 2edfb70f1ecf64d7fd487047364f784eea23a8ea (diff) | |
download | chromium_src-2175c6257dd81a2b27af34e7f617f35a024ac5bb.zip chromium_src-2175c6257dd81a2b27af34e7f617f35a024ac5bb.tar.gz chromium_src-2175c6257dd81a2b27af34e7f617f35a024ac5bb.tar.bz2 |
[Refactor] Move creating a browser if necessary to ExtensionInstallDialogView
BUG=422814
TEST=None
Review URL: https://codereview.chromium.org/660643002
Cr-Commit-Position: refs/heads/master@{#300732}
18 files changed, 137 insertions, 120 deletions
diff --git a/chrome/browser/apps/ephemeral_app_launcher.cc b/chrome/browser/apps/ephemeral_app_launcher.cc index ae4b13b..90f423f 100644 --- a/chrome/browser/apps/ephemeral_app_launcher.cc +++ b/chrome/browser/apps/ephemeral_app_launcher.cc @@ -187,8 +187,7 @@ scoped_ptr<ExtensionInstallPrompt> EphemeralAppLauncher::CreateInstallUI() { if (web_contents()) return make_scoped_ptr(new ExtensionInstallPrompt(web_contents())); - return make_scoped_ptr( - new ExtensionInstallPrompt(profile(), parent_window_, NULL)); + return make_scoped_ptr(new ExtensionInstallPrompt(profile(), parent_window_)); } scoped_ptr<WebstoreInstaller::Approval> EphemeralAppLauncher::CreateApproval() diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc index 24bd6a0..d692d9e 100644 --- a/chrome/browser/extensions/extension_install_prompt.cc +++ b/chrome/browser/extensions/extension_install_prompt.cc @@ -614,17 +614,16 @@ bool ExtensionInstallPrompt::Prompt::ShouldDisplayRevokeFilesButton() const { } ExtensionInstallPrompt::ShowParams::ShowParams(content::WebContents* contents) - : parent_web_contents(contents), - parent_window(NativeWindowForWebContents(contents)), - navigator(contents) { + : profile(ProfileForWebContents(contents)), + parent_web_contents(contents), + parent_window(NativeWindowForWebContents(contents)) { } -ExtensionInstallPrompt::ShowParams::ShowParams( - gfx::NativeWindow window, - content::PageNavigator* navigator) - : parent_web_contents(NULL), - parent_window(window), - navigator(navigator) { +ExtensionInstallPrompt::ShowParams::ShowParams(Profile* profile, + gfx::NativeWindow window) + : profile(profile), + parent_web_contents(NULL), + parent_window(window) { } // static @@ -669,16 +668,14 @@ ExtensionInstallPrompt::ExtensionInstallPrompt(content::WebContents* contents) delegate_(NULL) { } -ExtensionInstallPrompt::ExtensionInstallPrompt( - Profile* profile, - gfx::NativeWindow native_window, - content::PageNavigator* navigator) +ExtensionInstallPrompt::ExtensionInstallPrompt(Profile* profile, + gfx::NativeWindow native_window) : profile_(profile), ui_loop_(base::MessageLoop::current()), extension_(NULL), bundle_(NULL), install_ui_(extensions::CreateExtensionInstallUI(profile)), - show_params_(native_window, navigator), + show_params_(profile, native_window), delegate_(NULL) { } diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h index c50216f..dca96db 100644 --- a/chrome/browser/extensions/extension_install_prompt.h +++ b/chrome/browser/extensions/extension_install_prompt.h @@ -30,7 +30,6 @@ class MessageLoop; } // namespace base namespace content { -class PageNavigator; class WebContents; } @@ -282,18 +281,18 @@ class ExtensionInstallPrompt // Parameters to show a prompt dialog. Two sets of the // parameters are supported: either use a parent WebContents or use a - // parent NativeWindow + a PageNavigator. + // parent NativeWindow + a Profile. struct ShowParams { explicit ShowParams(content::WebContents* contents); - ShowParams(gfx::NativeWindow window, content::PageNavigator* navigator); + ShowParams(Profile* profile, gfx::NativeWindow window); + + Profile* profile; // Parent web contents of the install UI dialog. This can be NULL. content::WebContents* parent_web_contents; - // NativeWindow parent and navigator. If initialized using a parent web - // contents, these are derived from it. + // NativeWindow parent. gfx::NativeWindow parent_window; - content::PageNavigator* navigator; }; typedef base::Callback<void(const ExtensionInstallPrompt::ShowParams&, @@ -318,10 +317,10 @@ class ExtensionInstallPrompt // Creates a prompt with a parent web content. explicit ExtensionInstallPrompt(content::WebContents* contents); - // Creates a prompt with a profile, a native window and a page navigator. - ExtensionInstallPrompt(Profile* profile, - gfx::NativeWindow native_window, - content::PageNavigator* navigator); + // Creates a prompt with a profile and a native window. The most recently + // active browser window (or a new browser window if there are no browser + // windows) is used if a new tab needs to be opened. + ExtensionInstallPrompt(Profile* profile, gfx::NativeWindow native_window); virtual ~ExtensionInstallPrompt(); diff --git a/chrome/browser/extensions/external_install_error.cc b/chrome/browser/extensions/external_install_error.cc index 73ce2e8..2cb0d06 100644 --- a/chrome/browser/extensions/external_install_error.cc +++ b/chrome/browser/extensions/external_install_error.cc @@ -366,8 +366,7 @@ void ExternalInstallError::OnFetchComplete() { // to pass ones which may be invalidated. install_ui_.reset( new ExtensionInstallPrompt(Profile::FromBrowserContext(browser_context_), - NULL, // NULL native window. - NULL)); // NULL navigator. + NULL)); // NULL native window. install_ui_->ConfirmExternalInstall( this, diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc index 0c72346e..11a5487 100644 --- a/chrome/browser/extensions/unpacked_installer.cc +++ b/chrome/browser/extensions/unpacked_installer.cc @@ -72,7 +72,7 @@ SimpleExtensionLoadPrompt::SimpleExtensionLoadPrompt( scoped_ptr<extensions::ExtensionInstallUI> ui( extensions::CreateExtensionInstallUI(profile)); install_ui_.reset(new ExtensionInstallPrompt( - profile, ui->GetDefaultInstallDialogParent(), NULL)); + profile, ui->GetDefaultInstallDialogParent())); } SimpleExtensionLoadPrompt::~SimpleExtensionLoadPrompt() { diff --git a/chrome/browser/extensions/webstore_install_with_prompt.cc b/chrome/browser/extensions/webstore_install_with_prompt.cc index 4e69d8d..f66acc1 100644 --- a/chrome/browser/extensions/webstore_install_with_prompt.cc +++ b/chrome/browser/extensions/webstore_install_with_prompt.cc @@ -6,8 +6,6 @@ #include "chrome/browser/extensions/webstore_installer.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" -#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" #include "content/public/browser/web_contents.h" using content::WebContents; @@ -62,8 +60,7 @@ scoped_ptr<ExtensionInstallPrompt> WebstoreInstallWithPrompt::CreateInstallUI() { // Create an ExtensionInstallPrompt. If the parent window is NULL, the dialog // will be placed in the middle of the screen. - return make_scoped_ptr( - new ExtensionInstallPrompt(profile(), parent_window_, this)); + return make_scoped_ptr(new ExtensionInstallPrompt(profile(), parent_window_)); } bool WebstoreInstallWithPrompt::ShouldShowPostInstallUI() const { @@ -94,11 +91,4 @@ bool WebstoreInstallWithPrompt::CheckRequestorPermitted( return true; } -content::WebContents* WebstoreInstallWithPrompt::OpenURL( - const content::OpenURLParams& params) { - chrome::ScopedTabbedBrowserDisplayer displayer(profile(), - chrome::GetActiveDesktop()); - return displayer.browser()->OpenURL(params); -} - } // namespace extensions diff --git a/chrome/browser/extensions/webstore_install_with_prompt.h b/chrome/browser/extensions/webstore_install_with_prompt.h index afb1512..189ec97 100644 --- a/chrome/browser/extensions/webstore_install_with_prompt.h +++ b/chrome/browser/extensions/webstore_install_with_prompt.h @@ -8,7 +8,6 @@ #include "base/basictypes.h" #include "base/memory/scoped_ptr.h" #include "chrome/browser/extensions/webstore_standalone_installer.h" -#include "content/public/browser/page_navigator.h" #include "ui/gfx/native_widget_types.h" #include "url/gurl.h" @@ -28,8 +27,7 @@ namespace extensions { // Clients of this class must be trusted, as verification of the requestor is // skipped. This class stubs out many WebstoreStandaloneInstaller abstract // methods and can be used as a base class. -class WebstoreInstallWithPrompt : public WebstoreStandaloneInstaller, - public content::PageNavigator { +class WebstoreInstallWithPrompt : public WebstoreStandaloneInstaller { public: // Use this constructor when there is no parent window. The install dialog // will be centered on the screen. @@ -64,9 +62,6 @@ class WebstoreInstallWithPrompt : public WebstoreStandaloneInstaller, bool CheckRequestorPermitted(const base::DictionaryValue& webstore_data, std::string* error) const override; - // content::PageNavigator overrides: - content::WebContents* OpenURL(const content::OpenURLParams& params) override; - private: bool show_post_install_ui_; diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm index d3f05ea..f8e4503 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm @@ -43,9 +43,10 @@ ExtensionInstallDialogController::ExtensionInstallDialogController( scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) : delegate_(delegate) { view_controller_.reset([[ExtensionInstallViewController alloc] - initWithNavigator:show_params.navigator - delegate:this - prompt:prompt]); + initWithProfile:show_params.profile + navigator:show_params.parent_web_contents + delegate:this + prompt:prompt]); base::scoped_nsobject<NSWindow> window([[ConstrainedWindowCustomWindow alloc] initWithContentRect:[[view_controller_ view] bounds]]); diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h index 2b403a1..170b293d 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h +++ b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h @@ -15,6 +15,8 @@ #include "chrome/browser/extensions/extension_install_prompt.h" #include "ui/gfx/image/image_skia.h" +class Profile; + namespace content { class PageNavigator; } @@ -41,6 +43,7 @@ class PageNavigator; IBOutlet NSTextField* userCountField_; IBOutlet NSButton* storeLinkButton_; + Profile* profile_; // weak content::PageNavigator* navigator_; // weak ExtensionInstallPrompt::Delegate* delegate_; // weak scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; @@ -62,9 +65,10 @@ class PageNavigator; @property(nonatomic, readonly) NSTextField* userCountField; @property(nonatomic, readonly) NSButton* storeLinkButton; -- (id)initWithNavigator:(content::PageNavigator*)navigator - delegate:(ExtensionInstallPrompt::Delegate*)delegate - prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt; +- (id)initWithProfile:(Profile*)profile + navigator:(content::PageNavigator*)navigator + delegate:(ExtensionInstallPrompt::Delegate*)delegate + prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt; - (IBAction)storeLinkClicked:(id)sender; // Callback for "View details" link. - (IBAction)cancel:(id)sender; - (IBAction)ok:(id)sender; diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm index d621a69..835ba3c 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm @@ -12,7 +12,10 @@ #include "base/strings/sys_string_conversions.h" #include "base/strings/utf_string_conversions.h" #include "chrome/browser/extensions/bundle_installer.h" +#include "chrome/browser/profiles/profile.h" +#include "chrome/browser/ui/browser.h" #import "chrome/browser/ui/chrome_style.h" +#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/grit/generated_resources.h" #include "content/public/browser/page_navigator.h" @@ -186,9 +189,10 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { @synthesize userCountField = userCountField_; @synthesize storeLinkButton = storeLinkButton_; -- (id)initWithNavigator:(content::PageNavigator*)navigator - delegate:(ExtensionInstallPrompt::Delegate*)delegate - prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt { +- (id)initWithProfile:(Profile*)profile + navigator:(content::PageNavigator*)navigator + delegate:(ExtensionInstallPrompt::Delegate*)delegate + prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt { // We use a different XIB in the case of bundle installs, installs with // webstore data, or no permission warnings. These are laid out nicely for // the data they display. @@ -207,6 +211,7 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { if ((self = [super initWithNibName:nibName bundle:base::mac::FrameworkBundle()])) { + profile_ = profile; navigator_ = navigator; delegate_ = delegate; prompt_ = prompt; @@ -218,9 +223,15 @@ bool HasAttribute(id item, CellAttributesMask attributeMask) { - (IBAction)storeLinkClicked:(id)sender { GURL store_url(extension_urls::GetWebstoreItemDetailURLPrefix() + prompt_->extension()->id()); - navigator_->OpenURL(OpenURLParams( - store_url, Referrer(), NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, - false)); + OpenURLParams params(store_url, Referrer(), NEW_FOREGROUND_TAB, + ui::PAGE_TRANSITION_LINK, false); + if (navigator_) { + navigator_->OpenURL(params); + } else { + chrome::ScopedTabbedBrowserDisplayer displayer( + profile_, chrome::GetActiveDesktop()); + displayer.browser()->OpenURL(params); + } delegate_->InstallUIAbort(/*user_initiated=*/true); } diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller_unittest.mm b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller_unittest.mm index 7758f01..584101e 100644 --- a/chrome/browser/ui/cocoa/extensions/extension_install_view_controller_unittest.mm +++ b/chrome/browser/ui/cocoa/extensions/extension_install_view_controller_unittest.mm @@ -48,9 +48,10 @@ TEST_F(ExtensionInstallViewControllerTest, BasicsNormalCancel) { prompt->SetPermissionsDetails(details, type); base::scoped_nsobject<ExtensionInstallViewController> controller( - [[ExtensionInstallViewController alloc] initWithNavigator:browser() - delegate:&delegate - prompt:prompt]); + [[ExtensionInstallViewController alloc] initWithProfile:profile() + navigator:browser() + delegate:&delegate + prompt:prompt]); [controller view]; // Force nib load. @@ -106,9 +107,10 @@ TEST_F(ExtensionInstallViewControllerTest, BasicsNormalOK) { prompt->SetPermissionsDetails(details, type); base::scoped_nsobject<ExtensionInstallViewController> controller( - [[ExtensionInstallViewController alloc] initWithNavigator:browser() - delegate:&delegate - prompt:prompt]); + [[ExtensionInstallViewController alloc] initWithProfile:profile() + navigator:browser() + delegate:&delegate + prompt:prompt]); [controller view]; // Force nib load. [controller ok:nil]; @@ -146,17 +148,19 @@ TEST_F(ExtensionInstallViewControllerTest, MultipleWarnings) { base::scoped_nsobject<ExtensionInstallViewController> controller1( [[ExtensionInstallViewController alloc] - initWithNavigator:browser() - delegate:&delegate1 - prompt:one_warning_prompt]); + initWithProfile:profile() + navigator:browser() + delegate:&delegate1 + prompt:one_warning_prompt]); [controller1 view]; // Force nib load. base::scoped_nsobject<ExtensionInstallViewController> controller2( [[ExtensionInstallViewController alloc] - initWithNavigator:browser() - delegate:&delegate2 - prompt:two_warnings_prompt]); + initWithProfile:profile() + navigator:browser() + delegate:&delegate2 + prompt:two_warnings_prompt]); [controller2 view]; // Force nib load. @@ -181,9 +185,10 @@ TEST_F(ExtensionInstallViewControllerTest, BasicsSkinny) { base::scoped_nsobject<ExtensionInstallViewController> controller( [[ExtensionInstallViewController alloc] - initWithNavigator:browser() - delegate:&delegate - prompt:no_warnings_prompt]); + initWithProfile:profile() + navigator:browser() + delegate:&delegate + prompt:no_warnings_prompt]); [controller view]; // Force nib load. @@ -225,9 +230,10 @@ TEST_F(ExtensionInstallViewControllerTest, BasicsInline) { inline_prompt->set_icon(chrome::LoadInstallPromptIcon()); base::scoped_nsobject<ExtensionInstallViewController> controller( - [[ExtensionInstallViewController alloc] initWithNavigator:browser() - delegate:&delegate - prompt:inline_prompt]); + [[ExtensionInstallViewController alloc] initWithProfile:profile() + navigator:browser() + delegate:&delegate + prompt:inline_prompt]); [controller view]; // Force nib load. @@ -288,9 +294,10 @@ TEST_F(ExtensionInstallViewControllerTest, PostInstallPermissionsPrompt) { prompt->SetPermissionsDetails(details, type); base::scoped_nsobject<ExtensionInstallViewController> controller( - [[ExtensionInstallViewController alloc] initWithNavigator:browser() - delegate:&delegate - prompt:prompt]); + [[ExtensionInstallViewController alloc] initWithProfile:profile() + navigator:browser() + delegate:&delegate + prompt:prompt]); [controller view]; // Force nib load. @@ -320,9 +327,10 @@ TEST_F(ExtensionInstallViewControllerTest, PermissionsDetails) { ExtensionInstallPrompt::PERMISSIONS_DETAILS, 0, true); base::scoped_nsobject<ExtensionInstallViewController> controller( - [[ExtensionInstallViewController alloc] initWithNavigator:browser() - delegate:&delegate - prompt:prompt]); + [[ExtensionInstallViewController alloc] initWithProfile:profile() + navigator:browser() + delegate:&delegate + prompt:prompt]); [controller view]; // Force nib load. diff --git a/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.mm b/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.mm index c457869..e4e894e 100644 --- a/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.mm +++ b/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.mm @@ -7,7 +7,9 @@ #import "base/mac/sdk_forward_declarations.h" #include "base/message_loop/message_loop.h" #include "base/strings/sys_string_conversions.h" +#include "chrome/browser/profiles/profile.h" #import "chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h" +#include "content/public/browser/web_contents.h" #include "ui/base/cocoa/window_size_constants.h" @interface WindowedInstallController @@ -19,9 +21,10 @@ @property(readonly, nonatomic) ExtensionInstallViewController* viewController; -- (id)initWithNavigator:(content::PageNavigator*)navigator - delegate:(WindowedInstallDialogController*)delegate - prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt; +- (id)initWithProfile:(Profile*)profile + navigator:(content::PageNavigator*)navigator + delegate:(WindowedInstallDialogController*)delegate + prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt; @end @@ -31,9 +34,10 @@ WindowedInstallDialogController::WindowedInstallDialogController( scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) : delegate_(delegate) { install_controller_.reset([[WindowedInstallController alloc] - initWithNavigator:show_params.navigator - delegate:this - prompt:prompt]); + initWithProfile:show_params.profile + navigator:show_params.parent_web_contents + delegate:this + prompt:prompt]); [[install_controller_ window] makeKeyAndOrderFront:nil]; } @@ -70,9 +74,10 @@ void WindowedInstallDialogController::InstallUIAbort(bool user_initiated) { @implementation WindowedInstallController -- (id)initWithNavigator:(content::PageNavigator*)navigator - delegate:(WindowedInstallDialogController*)delegate - prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt { +- (id)initWithProfile:(Profile*)profile + navigator:(content::PageNavigator*)navigator + delegate:(WindowedInstallDialogController*)delegate + prompt:(scoped_refptr<ExtensionInstallPrompt::Prompt>)prompt { base::scoped_nsobject<NSWindow> controlledPanel( [[NSPanel alloc] initWithContentRect:ui::kWindowSizeDeterminedLater styleMask:NSTitledWindowMask @@ -81,9 +86,10 @@ void WindowedInstallDialogController::InstallUIAbort(bool user_initiated) { if ((self = [super initWithWindow:controlledPanel])) { dialogController_ = delegate; installViewController_.reset([[ExtensionInstallViewController alloc] - initWithNavigator:navigator - delegate:delegate - prompt:prompt]); + initWithProfile:profile + navigator:navigator + delegate:delegate + prompt:prompt]); NSWindow* window = [self window]; // Ensure the window does not display behind the app launcher window, and is diff --git a/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller_browsertest.mm b/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller_browsertest.mm index 8c9ac58..3987b93 100644 --- a/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller_browsertest.mm +++ b/chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller_browsertest.mm @@ -37,7 +37,7 @@ IN_PROC_BROWSER_TEST_F(WindowedInstallDialogControllerBrowserTest, // Construct a prompt with a NULL parent window, the way ExtensionEnableFlow // will for the Mac app list. For testing, sets a NULL PageNavigator as well. scoped_ptr<ExtensionInstallPrompt> prompt( - new ExtensionInstallPrompt(browser()->profile(), NULL, NULL)); + new ExtensionInstallPrompt(browser()->profile(), NULL)); WindowedInstallDialogController* controller = NULL; chrome::MockExtensionInstallPromptDelegate delegate; diff --git a/chrome/browser/ui/extensions/extension_enable_flow.cc b/chrome/browser/ui/extensions/extension_enable_flow.cc index ebfbdb7..8e305e7 100644 --- a/chrome/browser/ui/extensions/extension_enable_flow.cc +++ b/chrome/browser/ui/extensions/extension_enable_flow.cc @@ -7,9 +7,7 @@ #include "chrome/browser/chrome_notification_types.h" #include "chrome/browser/extensions/extension_service.h" #include "chrome/browser/profiles/profile.h" -#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/extensions/extension_enable_flow_delegate.h" -#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" #include "content/public/browser/notification_details.h" #include "content/public/browser/notification_source.h" #include "extensions/browser/extension_prefs.h" @@ -108,7 +106,7 @@ void ExtensionEnableFlow::CreatePrompt() { parent_window_ = window_getter_.Run(); prompt_.reset(parent_contents_ ? new ExtensionInstallPrompt(parent_contents_) : - new ExtensionInstallPrompt(profile_, parent_window_, this)); + new ExtensionInstallPrompt(profile_, parent_window_)); } void ExtensionEnableFlow::StartObserving() { @@ -171,10 +169,3 @@ void ExtensionEnableFlow::InstallUIAbort(bool user_initiated) { delegate_->ExtensionEnableFlowAborted(user_initiated); // |delegate_| may delete us. } - -content::WebContents* ExtensionEnableFlow::OpenURL( - const content::OpenURLParams& params) { - chrome::ScopedTabbedBrowserDisplayer displayer( - profile_, chrome::GetActiveDesktop()); - return displayer.browser()->OpenURL(params); -} diff --git a/chrome/browser/ui/extensions/extension_enable_flow.h b/chrome/browser/ui/extensions/extension_enable_flow.h index cfe9bbe..fc6bf62 100644 --- a/chrome/browser/ui/extensions/extension_enable_flow.h +++ b/chrome/browser/ui/extensions/extension_enable_flow.h @@ -14,13 +14,11 @@ #include "chrome/browser/extensions/extension_install_prompt.h" #include "content/public/browser/notification_observer.h" #include "content/public/browser/notification_registrar.h" -#include "content/public/browser/page_navigator.h" #include "extensions/browser/extension_registry_observer.h" class ExtensionEnableFlowDelegate; namespace content { -class PageNavigator; class WebContents; } @@ -36,7 +34,6 @@ class ExtensionRegistry; // shown to user. The extension is enabled when user acknowledges it or the // flow is aborted when user declines it. class ExtensionEnableFlow : public ExtensionInstallPrompt::Delegate, - public content::PageNavigator, public content::NotificationObserver, public extensions::ExtensionRegistryObserver { public: @@ -95,9 +92,6 @@ class ExtensionEnableFlow : public ExtensionInstallPrompt::Delegate, void InstallUIProceed() override; void InstallUIAbort(bool user_initiated) override; - // content::PageNavigator overrides: - content::WebContents* OpenURL(const content::OpenURLParams& params) override; - Profile* const profile_; const std::string extension_id_; ExtensionEnableFlowDelegate* const delegate_; // Not owned. diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc index 5eefc58..53582e6 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc @@ -19,6 +19,8 @@ #include "chrome/browser/extensions/extension_install_prompt_experiment.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile_manager.h" +#include "chrome/browser/ui/browser.h" +#include "chrome/browser/ui/scoped_tabbed_browser_displayer.h" #include "chrome/browser/ui/views/constrained_window_views.h" #include "chrome/common/extensions/extension_constants.h" #include "chrome/grit/generated_resources.h" @@ -170,9 +172,12 @@ void ShowExtensionInstallDialogImpl( ExtensionInstallPrompt::Delegate* delegate, scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) { DCHECK_CURRENTLY_ON(content::BrowserThread::UI); - CreateBrowserModalDialogViews( - new ExtensionInstallDialogView(show_params.navigator, delegate, prompt), - show_params.parent_window)->Show(); + ExtensionInstallDialogView* dialog = + new ExtensionInstallDialogView(show_params.profile, + show_params.parent_web_contents, + delegate, + prompt); + CreateBrowserModalDialogViews(dialog, show_params.parent_window)->Show(); } CustomScrollableView::CustomScrollableView() {} @@ -184,10 +189,12 @@ void CustomScrollableView::Layout() { } ExtensionInstallDialogView::ExtensionInstallDialogView( + Profile* profile, content::PageNavigator* navigator, ExtensionInstallPrompt::Delegate* delegate, scoped_refptr<ExtensionInstallPrompt::Prompt> prompt) - : navigator_(navigator), + : profile_(profile), + navigator_(navigator), delegate_(delegate), prompt_(prompt), scroll_view_(NULL), @@ -851,7 +858,14 @@ void ExtensionInstallDialogView::LinkClicked(views::Link* source, store_url, Referrer(), NEW_FOREGROUND_TAB, ui::PAGE_TRANSITION_LINK, false); - navigator_->OpenURL(params); + + if (navigator_) { + navigator_->OpenURL(params); + } else { + chrome::ScopedTabbedBrowserDisplayer displayer( + profile_, chrome::GetActiveDesktop()); + displayer.browser()->OpenURL(params); + } GetWidget()->Close(); } } diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view.h b/chrome/browser/ui/views/extensions/extension_install_dialog_view.h index 3826348..ee88a13 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.h +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.h @@ -15,6 +15,7 @@ typedef std::vector<base::string16> PermissionDetails; class ExpandableContainerView; +class Profile; namespace content { class PageNavigator; @@ -53,6 +54,7 @@ class ExtensionInstallDialogView : public views::DialogDelegateView, public views::ButtonListener { public: ExtensionInstallDialogView( + Profile* profile, content::PageNavigator* navigator, ExtensionInstallPrompt::Delegate* delegate, scoped_refptr<ExtensionInstallPrompt::Prompt> prompt); @@ -126,6 +128,7 @@ class ExtensionInstallDialogView : public views::DialogDelegateView, // "Show permissions" links were shown and/or clicked. void UpdateLinkActionHistogram(int action_type) const; + Profile* profile_; content::PageNavigator* navigator_; ExtensionInstallPrompt::Delegate* delegate_; scoped_refptr<ExtensionInstallPrompt::Prompt> prompt_; diff --git a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc index c75101c..cecada1 100644 --- a/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc +++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc @@ -163,7 +163,10 @@ ScrollbarTest::ScrollbarTest() bool ScrollbarTest::IsScrollbarVisible() { ExtensionInstallPrompt::ShowParams show_params(web_contents()); ExtensionInstallDialogView* dialog = new ExtensionInstallDialogView( - show_params.navigator, delegate(), prompt()); + show_params.profile, + show_params.parent_web_contents, + delegate(), + prompt()); // Create the modal view around the install dialog view. views::Widget* modal = @@ -223,7 +226,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewTest, NotifyDelegate) { // The user confirms the install. MockExtensionInstallPromptDelegate delegate; scoped_ptr<ExtensionInstallDialogView> dialog( - new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); + new ExtensionInstallDialogView( + profile(), web_contents(), &delegate, prompt())); views::DialogDelegateView* delegate_view = dialog.get(); delegate_view->Accept(); @@ -238,7 +242,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewTest, NotifyDelegate) { // The user cancels the install. MockExtensionInstallPromptDelegate delegate; scoped_ptr<ExtensionInstallDialogView> dialog( - new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); + new ExtensionInstallDialogView( + profile(), web_contents(), &delegate, prompt())); views::DialogDelegateView* delegate_view = dialog.get(); delegate_view->Cancel(); @@ -254,7 +259,8 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallDialogViewTest, NotifyDelegate) { // proceed or cancel. MockExtensionInstallPromptDelegate delegate; scoped_ptr<ExtensionInstallDialogView> dialog( - new ExtensionInstallDialogView(web_contents(), &delegate, prompt())); + new ExtensionInstallDialogView( + profile(), web_contents(), &delegate, prompt())); dialog.reset(); EXPECT_EQ(1, delegate.abort_count()); |