summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpkotwicz <pkotwicz@chromium.org>2014-10-22 12:56:28 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-22 19:57:34 +0000
commit2175c6257dd81a2b27af34e7f617f35a024ac5bb (patch)
treea2f65f31b671ea62b17a425225529bd4d120ed46
parent2edfb70f1ecf64d7fd487047364f784eea23a8ea (diff)
downloadchromium_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}
-rw-r--r--chrome/browser/apps/ephemeral_app_launcher.cc3
-rw-r--r--chrome/browser/extensions/extension_install_prompt.cc25
-rw-r--r--chrome/browser/extensions/extension_install_prompt.h19
-rw-r--r--chrome/browser/extensions/external_install_error.cc3
-rw-r--r--chrome/browser/extensions/unpacked_installer.cc2
-rw-r--r--chrome/browser/extensions/webstore_install_with_prompt.cc12
-rw-r--r--chrome/browser/extensions/webstore_install_with_prompt.h7
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm7
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_view_controller.h10
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_view_controller.mm23
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_view_controller_unittest.mm56
-rw-r--r--chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller.mm30
-rw-r--r--chrome/browser/ui/cocoa/extensions/windowed_install_dialog_controller_browsertest.mm2
-rw-r--r--chrome/browser/ui/extensions/extension_enable_flow.cc11
-rw-r--r--chrome/browser/ui/extensions/extension_enable_flow.h6
-rw-r--r--chrome/browser/ui/views/extensions/extension_install_dialog_view.cc24
-rw-r--r--chrome/browser/ui/views/extensions/extension_install_dialog_view.h3
-rw-r--r--chrome/browser/ui/views/extensions/extension_install_dialog_view_browsertest.cc14
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());