summaryrefslogtreecommitdiffstats
path: root/chrome
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-15 21:50:01 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-06-15 21:50:01 +0000
commit32fc4ff7d286f7a6ee80d969672cdadaa8d3e8d0 (patch)
treec7e59d81962c173d61083003c07819c2805fd042 /chrome
parent080245fa243e0c04ccea332660d3058f710a090c (diff)
downloadchromium_src-32fc4ff7d286f7a6ee80d969672cdadaa8d3e8d0.zip
chromium_src-32fc4ff7d286f7a6ee80d969672cdadaa8d3e8d0.tar.gz
chromium_src-32fc4ff7d286f7a6ee80d969672cdadaa8d3e8d0.tar.bz2
Remove BrowserList::GetLastActive from extensions install dialog code by plumbing through the Browser window. In two places (file_manager_util.cc and download_crx_util.cc) there is no context so I left those with FindLastActiveWithProfile for now.
BUG=129187 Review URL: https://chromiumcodereview.appspot.com/10548057 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@142489 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome')
-rw-r--r--chrome/browser/automation/testing_automation_provider.cc2
-rw-r--r--chrome/browser/chromeos/extensions/file_browser_private_api.cc2
-rw-r--r--chrome/browser/chromeos/extensions/file_manager_util.cc20
-rw-r--r--chrome/browser/chromeos/extensions/file_manager_util.h5
-rw-r--r--chrome/browser/download/download_browsertest.cc10
-rw-r--r--chrome/browser/download/download_crx_util.cc4
-rw-r--r--chrome/browser/extensions/api/permissions/permissions_api.cc2
-rw-r--r--chrome/browser/extensions/api/webstore_private/webstore_private_api.cc5
-rw-r--r--chrome/browser/extensions/bundle_installer.cc17
-rw-r--r--chrome/browser/extensions/bundle_installer.h3
-rw-r--r--chrome/browser/extensions/crx_installer_browsertest.cc12
-rw-r--r--chrome/browser/extensions/extension_browsertest.cc17
-rw-r--r--chrome/browser/extensions/extension_browsertest.h6
-rw-r--r--chrome/browser/extensions/extension_disabled_ui.cc13
-rw-r--r--chrome/browser/extensions/extension_disabled_ui.h4
-rw-r--r--chrome/browser/extensions/extension_install_dialog.cc4
-rw-r--r--chrome/browser/extensions/extension_install_dialog.h6
-rw-r--r--chrome/browser/extensions/extension_install_prompt.cc11
-rw-r--r--chrome/browser/extensions/extension_install_prompt.h6
-rw-r--r--chrome/browser/extensions/extension_install_ui.h3
-rw-r--r--chrome/browser/extensions/extension_install_ui_android.cc2
-rw-r--r--chrome/browser/extensions/extension_install_ui_browsertest.cc20
-rw-r--r--chrome/browser/extensions/extension_install_ui_default.cc17
-rw-r--r--chrome/browser/extensions/extension_install_ui_default.h5
-rw-r--r--chrome/browser/extensions/extension_management_api.cc2
-rw-r--r--chrome/browser/extensions/extension_management_browsertest.cc2
-rw-r--r--chrome/browser/extensions/extension_navigation_observer.cc5
-rw-r--r--chrome/browser/extensions/extension_service.cc5
-rw-r--r--chrome/browser/extensions/unpacked_installer.cc4
-rw-r--r--chrome/browser/extensions/webstore_inline_installer.cc7
-rw-r--r--chrome/browser/infobars/infobars_browsertest.cc2
-rw-r--r--chrome/browser/ui/browser.cc2
-rw-r--r--chrome/browser/ui/browser_list.h7
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.h6
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm16
-rw-r--r--chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller_unittest.mm16
-rw-r--r--chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc22
-rw-r--r--chrome/browser/ui/views/extensions/extension_install_dialog_view.cc20
-rw-r--r--chrome/browser/ui/webui/extensions/extension_settings_handler.cc6
-rw-r--r--chrome/browser/ui/webui/extensions/install_extension_handler.cc7
-rw-r--r--chrome/browser/ui/webui/ntp/app_launcher_handler.cc5
41 files changed, 163 insertions, 167 deletions
diff --git a/chrome/browser/automation/testing_automation_provider.cc b/chrome/browser/automation/testing_automation_provider.cc
index 2bad87e..6673080 100644
--- a/chrome/browser/automation/testing_automation_provider.cc
+++ b/chrome/browser/automation/testing_automation_provider.cc
@@ -3969,7 +3969,7 @@ void TestingAutomationProvider::InstallExtension(
// and install it. Otherwise load it as an unpacked extension.
if (extension_path.MatchesExtension(FILE_PATH_LITERAL(".crx"))) {
ExtensionInstallPrompt* client =
- (with_ui ? new ExtensionInstallPrompt(browser->profile()) : NULL);
+ (with_ui ? new ExtensionInstallPrompt(browser) : NULL);
scoped_refptr<CrxInstaller> installer(
CrxInstaller::Create(service, client));
if (!with_ui)
diff --git a/chrome/browser/chromeos/extensions/file_browser_private_api.cc b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
index b8b5380..6bf93b7 100644
--- a/chrome/browser/chromeos/extensions/file_browser_private_api.cc
+++ b/chrome/browser/chromeos/extensions/file_browser_private_api.cc
@@ -847,7 +847,7 @@ void ViewFilesFunction::GetLocalPathsResponseOnUIThread(
iter != files.end();
++iter) {
bool handled = file_manager_util::ExecuteBuiltinHandler(
- profile(), iter->path, internal_task_id);
+ GetCurrentBrowser(), iter->path, internal_task_id);
if (!handled && files.size() == 1)
success = false;
}
diff --git a/chrome/browser/chromeos/extensions/file_manager_util.cc b/chrome/browser/chromeos/extensions/file_manager_util.cc
index 318d5a6..fb4d597 100644
--- a/chrome/browser/chromeos/extensions/file_manager_util.cc
+++ b/chrome/browser/chromeos/extensions/file_manager_util.cc
@@ -498,6 +498,7 @@ bool ExecuteDefaultHandler(Profile* profile, const FilePath& path) {
std::string extension_id = handler->extension_id();
std::string action_id = handler->id();
+ Browser* browser = browser::FindLastActiveWithProfile(profile);
if (extension_id == kFileBrowserDomain) {
// Only two of the built-in File Browser tasks require opening the File
// Browser tab.
@@ -510,7 +511,7 @@ bool ExecuteDefaultHandler(Profile* profile, const FilePath& path) {
OpenFileBrowser(path, REUSE_SAME_PATH, "");
return true;
} else {
- return ExecuteBuiltinHandler(profile, path, action_id);
+ return ExecuteBuiltinHandler(browser, path, action_id);
}
} else {
// We are executing the task on behalf of File Browser extension.
@@ -531,7 +532,7 @@ bool ExecuteDefaultHandler(Profile* profile, const FilePath& path) {
executor->Execute(urls);
return true;
}
- return ExecuteBuiltinHandler(profile, path, std::string());
+ return ExecuteBuiltinHandler(browser, path, std::string());
}
void ViewFile(const FilePath& path) {
@@ -583,11 +584,12 @@ void ReadUrlFromGDocOnFileThread(const FilePath& file_path) {
base::Bind(OpenNewTab, GURL(edit_url_string), (Profile*)NULL));
}
-bool ExecuteBuiltinHandler(Profile* profile, const FilePath& path,
+bool ExecuteBuiltinHandler(Browser* browser, const FilePath& path,
const std::string& internal_task_id) {
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
+ Profile* profile = browser->profile();
std::string file_extension = path.Extension();
// For things supported natively by the browser, we should open it
// in a tab.
@@ -608,7 +610,7 @@ bool ExecuteBuiltinHandler(Profile* profile, const FilePath& path,
base::Bind(&OnGDataFileFound, profile, path, gdata::REGULAR_FILE));
return true;
}
- OpenNewTab(page_url, (Profile*)NULL);
+ OpenNewTab(page_url, NULL);
return true;
}
@@ -665,7 +667,7 @@ bool ExecuteBuiltinHandler(Profile* profile, const FilePath& path,
}
if (IsCRXFile(file_extension.data())) {
- InstallCRX(profile, path);
+ InstallCRX(browser, path);
return true;
}
@@ -679,14 +681,12 @@ bool ExecuteBuiltinHandler(Profile* profile, const FilePath& path,
return false;
}
-void InstallCRX(Profile* profile, const FilePath& path) {
- ExtensionService* service = profile->GetExtensionService();
+void InstallCRX(Browser* browser, const FilePath& path) {
+ ExtensionService* service = browser->profile()->GetExtensionService();
CHECK(service);
- if (!service)
- return;
scoped_refptr<CrxInstaller> installer(
- CrxInstaller::Create(service, new ExtensionInstallPrompt(profile)));
+ CrxInstaller::Create(service, new ExtensionInstallPrompt(browser)));
installer->set_is_gallery_install(false);
installer->set_allow_silent_install(false);
installer->InstallCrx(path);
diff --git a/chrome/browser/chromeos/extensions/file_manager_util.h b/chrome/browser/chromeos/extensions/file_manager_util.h
index 8e5b688..40a0c19 100644
--- a/chrome/browser/chromeos/extensions/file_manager_util.h
+++ b/chrome/browser/chromeos/extensions/file_manager_util.h
@@ -14,6 +14,7 @@
#include "chrome/browser/ui/select_file_dialog.h"
#include "googleurl/src/gurl.h"
+class Browser;
class Profile;
namespace base {
@@ -78,11 +79,11 @@ void OpenApplication();
// Executes the built-in File Manager handler or tries to open |file| directly
// in the browser. Returns false if neither is possible.
bool ExecuteBuiltinHandler(
- Profile* profile,
+ Browser* browser,
const FilePath& path,
const std::string& internal_task_id);
-void InstallCRX(Profile* profile, const FilePath& path);
+void InstallCRX(Browser* browser, const FilePath& path);
bool ShouldBeOpenedWithPdfPlugin(Profile* profile, const char* file_extension);
diff --git a/chrome/browser/download/download_browsertest.cc b/chrome/browser/download/download_browsertest.cc
index dfb1a6f..94508eb2 100644
--- a/chrome/browser/download/download_browsertest.cc
+++ b/chrome/browser/download/download_browsertest.cc
@@ -170,8 +170,8 @@ class MockAbortExtensionInstallPrompt : public ExtensionInstallPrompt {
// installation.
class MockAutoConfirmExtensionInstallPrompt : public ExtensionInstallPrompt {
public:
- explicit MockAutoConfirmExtensionInstallPrompt(Profile* profile)
- : ExtensionInstallPrompt(profile) {}
+ explicit MockAutoConfirmExtensionInstallPrompt(Browser* browser)
+ : ExtensionInstallPrompt(browser) {}
// Proceed without confirmation prompt.
virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) {
@@ -1717,7 +1717,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) {
// Install a mock install UI that simulates a user allowing permission to
// finish the install.
download_crx_util::SetMockInstallPromptForTesting(
- new MockAutoConfirmExtensionInstallPrompt(browser()->profile()));
+ new MockAutoConfirmExtensionInstallPrompt(browser()));
scoped_ptr<DownloadTestObserver> observer(
DangerousDownloadWaiter(
@@ -1748,7 +1748,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) {
// finish the install, and dismisses any error message. We check that the
// install failed below.
download_crx_util::SetMockInstallPromptForTesting(
- new MockAutoConfirmExtensionInstallPrompt(browser()->profile()));
+ new MockAutoConfirmExtensionInstallPrompt(browser()));
scoped_ptr<DownloadTestObserver> observer(
DangerousDownloadWaiter(
@@ -1776,7 +1776,7 @@ IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) {
// Install a mock install UI that simulates a user allowing permission to
// finish the install.
download_crx_util::SetMockInstallPromptForTesting(
- new MockAutoConfirmExtensionInstallPrompt(browser()->profile()));
+ new MockAutoConfirmExtensionInstallPrompt(browser()));
scoped_ptr<DownloadTestObserver> observer(
DangerousDownloadWaiter(
diff --git a/chrome/browser/download/download_crx_util.cc b/chrome/browser/download/download_crx_util.cc
index c76dbb3..c867ad3 100644
--- a/chrome/browser/download/download_crx_util.cc
+++ b/chrome/browser/download/download_crx_util.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/extensions/webstore_installer.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/chrome_notification_types.h"
#include "chrome/common/extensions/extension_switch_utils.h"
#include "content/public/browser/download_item.h"
@@ -38,7 +39,8 @@ ExtensionInstallPrompt* CreateExtensionInstallPrompt(Profile* profile) {
result = mock_install_prompt_for_testing;
mock_install_prompt_for_testing = NULL;
} else {
- result = new ExtensionInstallPrompt(profile);
+ Browser* browser = browser::FindLastActiveWithProfile(profile);
+ result = new ExtensionInstallPrompt(browser);
}
return result;
diff --git a/chrome/browser/extensions/api/permissions/permissions_api.cc b/chrome/browser/extensions/api/permissions/permissions_api.cc
index 0af5db5..747a74e 100644
--- a/chrome/browser/extensions/api/permissions/permissions_api.cc
+++ b/chrome/browser/extensions/api/permissions/permissions_api.cc
@@ -203,7 +203,7 @@ bool RequestPermissionsFunction::RunImpl() {
InstallUIAbort(true);
} else {
CHECK_EQ(DO_NOT_SKIP, auto_confirm_for_tests);
- install_ui_.reset(new ExtensionInstallPrompt(profile()));
+ install_ui_.reset(new ExtensionInstallPrompt(GetCurrentBrowser()));
install_ui_->ConfirmPermissions(
this, GetExtension(), requested_permissions_.get());
}
diff --git a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
index 00f7e85..b6d32f2 100644
--- a/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
+++ b/chrome/browser/extensions/api/webstore_private/webstore_private_api.cc
@@ -197,7 +197,7 @@ bool InstallBundleFunction::RunImpl() {
if (!ReadBundleInfo(extensions, &items))
return false;
- bundle_ = new BundleInstaller(profile(), items);
+ bundle_ = new BundleInstaller(GetCurrentBrowser(), items);
AddRef(); // Balanced in OnBundleInstallCompleted / OnBundleInstallCanceled.
@@ -228,7 +228,6 @@ bool InstallBundleFunction::ReadBundleInfo(ListValue* extensions,
void InstallBundleFunction::OnBundleInstallApproved() {
bundle_->CompleteInstall(
&(dispatcher()->delegate()->GetAssociatedWebContents()->GetController()),
- GetCurrentBrowser(),
this);
}
@@ -367,7 +366,7 @@ void BeginInstallWithManifestFunction::OnWebstoreParseSuccess(
return;
}
- install_prompt_.reset(new ExtensionInstallPrompt(profile()));
+ install_prompt_.reset(new ExtensionInstallPrompt(GetCurrentBrowser()));
install_prompt_->ConfirmWebstoreInstall(this, dummy_extension_, &icon_);
// Control flow finishes up in InstallUIProceed or InstallUIAbort.
}
diff --git a/chrome/browser/extensions/bundle_installer.cc b/chrome/browser/extensions/bundle_installer.cc
index 5cfa4f0..ffd5f1f 100644
--- a/chrome/browser/extensions/bundle_installer.cc
+++ b/chrome/browser/extensions/bundle_installer.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/extensions/extension_install_dialog.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_manifest_constants.h"
@@ -100,11 +101,11 @@ string16 BundleInstaller::Item::GetNameForDisplay() {
return l10n_util::GetStringFUTF16(IDS_EXTENSION_PERMISSION_LINE, name);
}
-BundleInstaller::BundleInstaller(Profile* profile,
+BundleInstaller::BundleInstaller(Browser* browser,
const BundleInstaller::ItemList& items)
: approved_(false),
- browser_(NULL),
- profile_(profile),
+ browser_(browser),
+ profile_(browser->profile()),
delegate_(NULL) {
BrowserList::AddObserver(this);
for (size_t i = 0; i < items.size(); ++i) {
@@ -134,11 +135,9 @@ void BundleInstaller::PromptForApproval(Delegate* delegate) {
}
void BundleInstaller::CompleteInstall(NavigationController* controller,
- Browser* browser,
Delegate* delegate) {
CHECK(approved_);
- browser_ = browser;
delegate_ = delegate;
AddRef(); // Balanced in ReportComplete();
@@ -267,7 +266,13 @@ void BundleInstaller::ShowPrompt() {
} else if (g_auto_approve_for_test == ABORT) {
InstallUIAbort(true);
} else {
- install_ui_.reset(new ExtensionInstallPrompt(profile_));
+ Browser* browser = browser_;
+ if (!browser) {
+ // The browser that we got initially could have gone away during our
+ // thread hopping.
+ browser = browser::FindLastActiveWithProfile(profile_);
+ }
+ install_ui_.reset(new ExtensionInstallPrompt(browser));
install_ui_->ConfirmBundleInstall(this, permissions);
}
}
diff --git a/chrome/browser/extensions/bundle_installer.h b/chrome/browser/extensions/bundle_installer.h
index 168581e..05262a9 100644
--- a/chrome/browser/extensions/bundle_installer.h
+++ b/chrome/browser/extensions/bundle_installer.h
@@ -76,7 +76,7 @@ class BundleInstaller : public WebstoreInstallHelper::Delegate,
typedef std::vector<Item> ItemList;
- BundleInstaller(Profile* profile, const ItemList& items);
+ BundleInstaller(Browser* browser, const ItemList& items);
// Returns true if the user has approved the bundle's permissions.
bool approved() const { return approved_; }
@@ -97,7 +97,6 @@ class BundleInstaller : public WebstoreInstallHelper::Delegate,
// the specified |browser|.
// Note: the |delegate| must stay alive until receiving the callback.
void CompleteInstall(content::NavigationController* controller,
- Browser* browser,
Delegate* delegate);
// We change the headings in the install prompt and installed bubble depending
diff --git a/chrome/browser/extensions/crx_installer_browsertest.cc b/chrome/browser/extensions/crx_installer_browsertest.cc
index 18c321f..6ecf682 100644
--- a/chrome/browser/extensions/crx_installer_browsertest.cc
+++ b/chrome/browser/extensions/crx_installer_browsertest.cc
@@ -27,8 +27,8 @@ namespace {
class MockInstallPrompt : public ExtensionInstallPrompt {
public:
- explicit MockInstallPrompt(Profile* profile) :
- ExtensionInstallPrompt(profile),
+ explicit MockInstallPrompt(Browser* browser) :
+ ExtensionInstallPrompt(browser),
did_succeed_(false),
confirmation_requested_(false) {}
@@ -68,8 +68,7 @@ class ExtensionCrxInstallerTest : public ExtensionBrowserTest {
bool DidWhitelistInstallPrompt(const std::string& ext_relpath,
const std::string& id) {
ExtensionService* service = browser()->profile()->GetExtensionService();
- MockInstallPrompt* mock_install_prompt =
- new MockInstallPrompt(browser()->profile());
+ MockInstallPrompt* mock_install_prompt = new MockInstallPrompt(browser());
FilePath ext_path = test_data_dir_.AppendASCII(ext_relpath);
std::string error;
@@ -153,7 +152,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, PackAndInstallExtension) {
std::string crx_path_string(crx_path.value().begin(), crx_path.value().end());
GURL url = GURL(std::string("file:///").append(crx_path_string));
- MockInstallPrompt* mock_prompt = new MockInstallPrompt(browser()->profile());
+ MockInstallPrompt* mock_prompt = new MockInstallPrompt(browser());
download_crx_util::SetMockInstallPromptForTesting(mock_prompt);
LOG(ERROR) << "PackAndInstallExtension: Getting download manager";
@@ -186,8 +185,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionCrxInstallerTest, MAYBE_AllowOffStore) {
const bool kTestData[] = {false, true};
for (size_t i = 0; i < arraysize(kTestData); ++i) {
- MockInstallPrompt* mock_prompt =
- new MockInstallPrompt(browser()->profile());
+ MockInstallPrompt* mock_prompt = new MockInstallPrompt(browser());
scoped_refptr<CrxInstaller> crx_installer(
CrxInstaller::Create(service, mock_prompt));
crx_installer->set_install_cause(
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc
index 9444001..50365fe 100644
--- a/chrome/browser/extensions/extension_browsertest.cc
+++ b/chrome/browser/extensions/extension_browsertest.cc
@@ -245,8 +245,8 @@ class MockAbortExtensionInstallPrompt : public ExtensionInstallPrompt {
class MockAutoConfirmExtensionInstallPrompt : public ExtensionInstallPrompt {
public:
- explicit MockAutoConfirmExtensionInstallPrompt(Profile* profile) :
- ExtensionInstallPrompt(profile) {}
+ explicit MockAutoConfirmExtensionInstallPrompt(Browser* browser) :
+ ExtensionInstallPrompt(browser) {}
// Proceed without confirmation prompt.
virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) {
@@ -258,8 +258,7 @@ const Extension* ExtensionBrowserTest::InstallExtensionFromWebstore(
const FilePath& path,
int expected_change) {
return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_NONE,
- expected_change, browser()->profile(),
- true);
+ expected_change, browser(), true);
}
const Extension* ExtensionBrowserTest::InstallOrUpdateExtension(
@@ -268,7 +267,7 @@ const Extension* ExtensionBrowserTest::InstallOrUpdateExtension(
InstallUIType ui_type,
int expected_change) {
return InstallOrUpdateExtension(id, path, ui_type, expected_change,
- browser()->profile(), false);
+ browser(), false);
}
const Extension* ExtensionBrowserTest::InstallOrUpdateExtension(
@@ -276,9 +275,9 @@ const Extension* ExtensionBrowserTest::InstallOrUpdateExtension(
const FilePath& path,
InstallUIType ui_type,
int expected_change,
- Profile* profile,
+ Browser* browser,
bool from_webstore) {
- ExtensionService* service = profile->GetExtensionService();
+ ExtensionService* service = browser->profile()->GetExtensionService();
service->set_show_extensions_prompts(false);
size_t num_before = service->extensions()->size();
@@ -287,9 +286,9 @@ const Extension* ExtensionBrowserTest::InstallOrUpdateExtension(
if (ui_type == INSTALL_UI_TYPE_CANCEL)
install_ui = new MockAbortExtensionInstallPrompt();
else if (ui_type == INSTALL_UI_TYPE_NORMAL)
- install_ui = new ExtensionInstallPrompt(profile);
+ install_ui = new ExtensionInstallPrompt(browser);
else if (ui_type == INSTALL_UI_TYPE_AUTO_CONFIRM)
- install_ui = new MockAutoConfirmExtensionInstallPrompt(profile);
+ install_ui = new MockAutoConfirmExtensionInstallPrompt(browser);
// TODO(tessamac): Update callers to always pass an unpacked extension
// and then always pack the extension here.
diff --git a/chrome/browser/extensions/extension_browsertest.h b/chrome/browser/extensions/extension_browsertest.h
index 3c2c7ab..30d345d 100644
--- a/chrome/browser/extensions/extension_browsertest.h
+++ b/chrome/browser/extensions/extension_browsertest.h
@@ -92,9 +92,9 @@ class ExtensionBrowserTest
const extensions::Extension* InstallExtensionWithUIAutoConfirm(
const FilePath& path,
int expected_change,
- Profile* profile) {
+ Browser* browser) {
return InstallOrUpdateExtension("", path, INSTALL_UI_TYPE_AUTO_CONFIRM,
- expected_change, profile, false);
+ expected_change, browser, false);
}
// Begins install process but simulates a user cancel.
@@ -187,7 +187,7 @@ class ExtensionBrowserTest
const FilePath& path,
InstallUIType ui_type,
int expected_change,
- Profile* profile,
+ Browser* browser,
bool from_webstore);
bool WaitForExtensionViewsToLoad();
diff --git a/chrome/browser/extensions/extension_disabled_ui.cc b/chrome/browser/extensions/extension_disabled_ui.cc
index 7a023a4..344a233 100644
--- a/chrome/browser/extensions/extension_disabled_ui.cc
+++ b/chrome/browser/extensions/extension_disabled_ui.cc
@@ -71,7 +71,7 @@ class ExtensionDisabledDialogDelegate
: public ExtensionInstallPrompt::Delegate,
public base::RefCountedThreadSafe<ExtensionDisabledDialogDelegate> {
public:
- ExtensionDisabledDialogDelegate(Profile* profile,
+ ExtensionDisabledDialogDelegate(Browser* browser,
ExtensionService* service,
const Extension* extension);
@@ -92,13 +92,13 @@ class ExtensionDisabledDialogDelegate
};
ExtensionDisabledDialogDelegate::ExtensionDisabledDialogDelegate(
- Profile* profile,
+ Browser* browser,
ExtensionService* service,
const Extension* extension)
: service_(service), extension_(extension) {
AddRef(); // Balanced in Proceed or Abort.
- install_ui_.reset(new ExtensionInstallPrompt(profile));
+ install_ui_.reset(new ExtensionInstallPrompt(browser));
install_ui_->ConfirmReEnable(this, extension_);
}
@@ -256,8 +256,7 @@ void ExtensionDisabledGlobalError::OnBubbleViewDidClose(Browser* browser) {
void ExtensionDisabledGlobalError::BubbleViewAcceptButtonPressed(
Browser* browser) {
- new ExtensionDisabledDialogDelegate(service_->profile(), service_,
- extension_);
+ new ExtensionDisabledDialogDelegate(browser, service_, extension_);
}
void ExtensionDisabledGlobalError::BubbleViewCancelButtonPressed(
@@ -318,10 +317,10 @@ void AddExtensionDisabledError(ExtensionService* service,
AddGlobalError(new ExtensionDisabledGlobalError(service, extension));
}
-void ShowExtensionDisabledDialog(ExtensionService* service, Profile* profile,
+void ShowExtensionDisabledDialog(ExtensionService* service, Browser* browser,
const Extension* extension) {
// This object manages its own lifetime.
- new ExtensionDisabledDialogDelegate(profile, service, extension);
+ new ExtensionDisabledDialogDelegate(browser, service, extension);
}
} // namespace extensions
diff --git a/chrome/browser/extensions/extension_disabled_ui.h b/chrome/browser/extensions/extension_disabled_ui.h
index 1899cf3..b5a66c60 100644
--- a/chrome/browser/extensions/extension_disabled_ui.h
+++ b/chrome/browser/extensions/extension_disabled_ui.h
@@ -6,8 +6,8 @@
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_DISABLED_UI_H_
#pragma once
+class Browser;
class ExtensionService;
-class Profile;
namespace extensions {
@@ -19,7 +19,7 @@ void AddExtensionDisabledError(ExtensionService* service,
const Extension* extension);
// Shows the extension install dialog.
-void ShowExtensionDisabledDialog(ExtensionService* service, Profile* profile,
+void ShowExtensionDisabledDialog(ExtensionService* service, Browser* browser,
const Extension* extension);
} // namespace extensions
diff --git a/chrome/browser/extensions/extension_install_dialog.cc b/chrome/browser/extensions/extension_install_dialog.cc
index 3f40064..10bd82c 100644
--- a/chrome/browser/extensions/extension_install_dialog.cc
+++ b/chrome/browser/extensions/extension_install_dialog.cc
@@ -59,7 +59,7 @@ AutoConfirmForTest CheckAutoConfirmCommandLineSwitch() {
} // namespace
-void ShowExtensionInstallDialog(Profile* profile,
+void ShowExtensionInstallDialog(Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt) {
AutoConfirmForTest auto_confirm = CheckAutoConfirmCommandLineSwitch();
@@ -67,5 +67,5 @@ void ShowExtensionInstallDialog(Profile* profile,
DoAutoConfirm(auto_confirm, delegate);
return;
}
- ShowExtensionInstallDialogImpl(profile, delegate, prompt);
+ ShowExtensionInstallDialogImpl(browser, delegate, prompt);
}
diff --git a/chrome/browser/extensions/extension_install_dialog.h b/chrome/browser/extensions/extension_install_dialog.h
index 77d84ed..b9db0cd 100644
--- a/chrome/browser/extensions/extension_install_dialog.h
+++ b/chrome/browser/extensions/extension_install_dialog.h
@@ -12,19 +12,19 @@
#include "base/string16.h"
#include "chrome/browser/extensions/extension_install_prompt.h"
-class Profile;
+class Browser;
namespace base {
class DictionaryValue;
}
-void ShowExtensionInstallDialog(Profile* profile,
+void ShowExtensionInstallDialog(Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt);
// The implementations of this function are platform-specific.
void ShowExtensionInstallDialogImpl(
- Profile* profile,
+ Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt);
diff --git a/chrome/browser/extensions/extension_install_prompt.cc b/chrome/browser/extensions/extension_install_prompt.cc
index 9ac5870..14729f0 100644
--- a/chrome/browser/extensions/extension_install_prompt.cc
+++ b/chrome/browser/extensions/extension_install_prompt.cc
@@ -17,6 +17,7 @@
#include "chrome/browser/extensions/extension_install_dialog.h"
#include "chrome/browser/extensions/extension_install_ui.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_navigator.h"
#include "chrome/browser/ui/tab_contents/tab_contents.h"
#include "chrome/common/chrome_switches.h"
@@ -237,11 +238,11 @@ scoped_refptr<Extension>
error);
}
-ExtensionInstallPrompt::ExtensionInstallPrompt(Profile* profile)
- : profile_(profile),
+ExtensionInstallPrompt::ExtensionInstallPrompt(Browser* browser)
+ : browser_(browser),
ui_loop_(MessageLoop::current()),
extension_(NULL),
- install_ui_(ExtensionInstallUI::Create(profile)),
+ install_ui_(ExtensionInstallUI::Create(browser)),
delegate_(NULL),
prompt_(UNSET_PROMPT_TYPE),
prompt_type_(UNSET_PROMPT_TYPE),
@@ -394,12 +395,12 @@ void ExtensionInstallPrompt::ShowConfirmation() {
case INSTALL_PROMPT: {
prompt_.set_extension(extension_);
prompt_.set_icon(gfx::Image(icon_));
- ShowExtensionInstallDialog(profile_, delegate_, prompt_);
+ ShowExtensionInstallDialog(browser_, delegate_, prompt_);
break;
}
case BUNDLE_INSTALL_PROMPT: {
prompt_.set_bundle(bundle_);
- ShowExtensionInstallDialog(profile_, delegate_, prompt_);
+ ShowExtensionInstallDialog(browser_, delegate_, prompt_);
break;
}
default:
diff --git a/chrome/browser/extensions/extension_install_prompt.h b/chrome/browser/extensions/extension_install_prompt.h
index a77c2dc..bac327d 100644
--- a/chrome/browser/extensions/extension_install_prompt.h
+++ b/chrome/browser/extensions/extension_install_prompt.h
@@ -19,10 +19,10 @@
#include "ui/gfx/image/image_skia.h"
#include "ui/gfx/native_widget_types.h"
+class Browser;
class ExtensionInstallUI;
class ExtensionPermissionSet;
class MessageLoop;
-class Profile;
class InfoBarDelegate;
namespace base {
@@ -149,7 +149,7 @@ class ExtensionInstallPrompt : public ImageLoadingTracker::Observer {
const std::string& localized_description,
std::string* error);
- explicit ExtensionInstallPrompt(Profile* profile);
+ explicit ExtensionInstallPrompt(Browser* browser);
virtual ~ExtensionInstallPrompt();
ExtensionInstallUI* install_ui() const { return install_ui_.get(); }
@@ -231,7 +231,7 @@ class ExtensionInstallPrompt : public ImageLoadingTracker::Observer {
// Shows the actual UI (the icon should already be loaded).
void ShowConfirmation();
- Profile* profile_;
+ Browser* browser_;
MessageLoop* ui_loop_;
// The extensions installation icon.
diff --git a/chrome/browser/extensions/extension_install_ui.h b/chrome/browser/extensions/extension_install_ui.h
index b908259..e5fabbe 100644
--- a/chrome/browser/extensions/extension_install_ui.h
+++ b/chrome/browser/extensions/extension_install_ui.h
@@ -12,7 +12,6 @@
#include "base/string16.h"
class Browser;
-class Profile;
class SkBitmap;
namespace extensions {
@@ -24,7 +23,7 @@ class ExtensionWebstorePrivateApiTest;
// around extension installation.
class ExtensionInstallUI {
public:
- static ExtensionInstallUI* Create(Profile* profile);
+ static ExtensionInstallUI* Create(Browser* browser);
virtual ~ExtensionInstallUI();
diff --git a/chrome/browser/extensions/extension_install_ui_android.cc b/chrome/browser/extensions/extension_install_ui_android.cc
index f67c67d..027ec93 100644
--- a/chrome/browser/extensions/extension_install_ui_android.cc
+++ b/chrome/browser/extensions/extension_install_ui_android.cc
@@ -20,7 +20,7 @@ void ExtensionInstallUIAndroid::SetSkipPostInstallUI(bool skip_ui) {
}
// static
-ExtensionInstallUI* ExtensionInstallUI::Create(Profile* profile) {
+ExtensionInstallUI* ExtensionInstallUI::Create(Browser* browser) {
NOTIMPLEMENTED();
return NULL;
}
diff --git a/chrome/browser/extensions/extension_install_ui_browsertest.cc b/chrome/browser/extensions/extension_install_ui_browsertest.cc
index cd67eb9..c739b23 100644
--- a/chrome/browser/extensions/extension_install_ui_browsertest.cc
+++ b/chrome/browser/extensions/extension_install_ui_browsertest.cc
@@ -64,8 +64,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
// Install theme once and undo to verify we go back to default theme.
FilePath theme_crx = PackExtension(test_data_dir_.AppendASCII("theme"));
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
- theme_crx, 1, browser()->profile()));
+ ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_crx, 1, browser()));
const Extension* theme = GetTheme();
ASSERT_TRUE(theme);
std::string theme_id = theme->id();
@@ -76,13 +75,11 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
// We set the |expected_change| to zero in these 'InstallExtensionWithUI'
// calls since the theme has already been installed above and this is an
// overinstall to set the active theme.
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
- theme_crx, 0, browser()->profile()));
+ ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_crx, 0, browser()));
theme = GetTheme();
ASSERT_TRUE(theme);
ASSERT_EQ(theme_id, theme->id());
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
- theme_crx, 0, browser()->profile()));
+ ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_crx, 0, browser()));
theme = GetTheme();
ASSERT_TRUE(theme);
ASSERT_EQ(theme_id, theme->id());
@@ -96,16 +93,14 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
// Install first theme.
FilePath theme_path = test_data_dir_.AppendASCII("theme");
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
- theme_path, 1, browser()->profile()));
+ ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_path, 1, browser()));
const Extension* theme = GetTheme();
ASSERT_TRUE(theme);
std::string theme_id = theme->id();
// Then install second theme.
FilePath theme_path2 = test_data_dir_.AppendASCII("theme2");
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
- theme_path2, 1, browser()->profile()));
+ ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(theme_path2, 1, browser()));
const Extension* theme2 = GetTheme();
ASSERT_TRUE(theme2);
EXPECT_FALSE(theme_id == theme2->id());
@@ -120,8 +115,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
int num_tabs = browser()->tab_count();
FilePath app_dir = test_data_dir_.AppendASCII("app");
- ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(app_dir, 1,
- browser()->profile()));
+ ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(app_dir, 1, browser()));
if (NewTabUI::ShouldShowApps()) {
EXPECT_EQ(num_tabs + 1, browser()->tab_count());
@@ -145,7 +139,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionInstallUIBrowserTest,
FilePath app_dir = test_data_dir_.AppendASCII("app");
ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(app_dir, 1,
- incognito_profile));
+ incognito_browser));
EXPECT_EQ(num_incognito_tabs, incognito_browser->tab_count());
if (NewTabUI::ShouldShowApps()) {
diff --git a/chrome/browser/extensions/extension_install_ui_default.cc b/chrome/browser/extensions/extension_install_ui_default.cc
index db426be..a3b0cda 100644
--- a/chrome/browser/extensions/extension_install_ui_default.cc
+++ b/chrome/browser/extensions/extension_install_ui_default.cc
@@ -44,13 +44,14 @@ bool disable_failure_ui_for_tests = false;
} // namespace
-ExtensionInstallUIDefault::ExtensionInstallUIDefault(Profile* profile)
- : profile_(profile),
+ExtensionInstallUIDefault::ExtensionInstallUIDefault(Browser* browser)
+ : browser_(browser),
skip_post_install_ui_(false),
previous_using_native_theme_(false),
use_app_installed_bubble_(false) {
// Remember the current theme in case the user presses undo.
- if (profile) {
+ if (browser) {
+ Profile* profile = browser->profile();
const Extension* previous_theme =
ThemeServiceFactory::GetThemeForProfile(profile);
if (previous_theme)
@@ -70,13 +71,13 @@ void ExtensionInstallUIDefault::OnInstallSuccess(const Extension* extension,
if (extension->is_theme()) {
ShowThemeInfoBar(previous_theme_id_, previous_using_native_theme_,
- extension, profile_);
+ extension, browser_->profile());
return;
}
// Extensions aren't enabled by default in incognito so we confirm
// the install in a normal window.
- Profile* current_profile = profile_->GetOriginalProfile();
+ Profile* current_profile = browser_->profile()->GetOriginalProfile();
Browser* browser = browser::FindOrCreateTabbedBrowser(current_profile);
if (browser->tab_count() == 0)
browser->AddBlankTab(true);
@@ -104,7 +105,7 @@ void ExtensionInstallUIDefault::OnInstallFailure(const string16& error) {
if (disable_failure_ui_for_tests || skip_post_install_ui_)
return;
- Browser* browser = browser::FindLastActiveWithProfile(profile_);
+ Browser* browser = browser::FindLastActiveWithProfile(browser_->profile());
browser::ShowMessageBox(browser ? browser->window()->GetNativeWindow() : NULL,
l10n_util::GetStringUTF16(IDS_EXTENSION_INSTALL_FAILURE_TITLE), error,
browser::MESSAGE_BOX_TYPE_WARNING);
@@ -178,8 +179,8 @@ InfoBarDelegate* ExtensionInstallUIDefault::GetNewThemeInstalledInfoBarDelegate(
}
// static
-ExtensionInstallUI* ExtensionInstallUI::Create(Profile* profile) {
- return new ExtensionInstallUIDefault(profile);
+ExtensionInstallUI* ExtensionInstallUI::Create(Browser* browser) {
+ return new ExtensionInstallUIDefault(browser);
}
// static
diff --git a/chrome/browser/extensions/extension_install_ui_default.h b/chrome/browser/extensions/extension_install_ui_default.h
index ff2f87c..6c872be 100644
--- a/chrome/browser/extensions/extension_install_ui_default.h
+++ b/chrome/browser/extensions/extension_install_ui_default.h
@@ -9,11 +9,12 @@
#include "chrome/browser/extensions/extension_install_ui.h"
class InfoBarDelegate;
+class Profile;
class TabContents;
class ExtensionInstallUIDefault : public ExtensionInstallUI {
public:
- explicit ExtensionInstallUIDefault(Profile* profile);
+ explicit ExtensionInstallUIDefault(Browser* browser);
virtual ~ExtensionInstallUIDefault();
// ExtensionInstallUI implementation:
@@ -39,7 +40,7 @@ class ExtensionInstallUIDefault : public ExtensionInstallUI {
const std::string& previous_theme_id,
bool previous_using_native_theme);
- Profile* profile_;
+ Browser* browser_;
// Whether or not to show the default UI after completing the installation.
bool skip_post_install_ui_;
diff --git a/chrome/browser/extensions/extension_management_api.cc b/chrome/browser/extensions/extension_management_api.cc
index ac85975..dcc0274 100644
--- a/chrome/browser/extensions/extension_management_api.cc
+++ b/chrome/browser/extensions/extension_management_api.cc
@@ -407,7 +407,7 @@ bool SetEnabledFunction::RunImpl() {
return false;
}
AddRef(); // Matched in InstallUIProceed/InstallUIAbort
- install_prompt_.reset(new ExtensionInstallPrompt(profile_));
+ install_prompt_.reset(new ExtensionInstallPrompt(GetCurrentBrowser()));
install_prompt_->ConfirmReEnable(this, extension);
return true;
}
diff --git a/chrome/browser/extensions/extension_management_browsertest.cc b/chrome/browser/extensions/extension_management_browsertest.cc
index 25773a5..a9d0898 100644
--- a/chrome/browser/extensions/extension_management_browsertest.cc
+++ b/chrome/browser/extensions/extension_management_browsertest.cc
@@ -119,7 +119,7 @@ IN_PROC_BROWSER_TEST_F(ExtensionManagementTest, InstallRequiresConfirm) {
// And the install should succeed when the permissions are accepted.
ASSERT_TRUE(InstallExtensionWithUIAutoConfirm(
- test_data_dir_.AppendASCII("good.crx"), 1, browser()->profile()));
+ test_data_dir_.AppendASCII("good.crx"), 1, browser()));
UninstallExtension(id);
}
diff --git a/chrome/browser/extensions/extension_navigation_observer.cc b/chrome/browser/extensions/extension_navigation_observer.cc
index d54eb45..620c2e6 100644
--- a/chrome/browser/extensions/extension_navigation_observer.cc
+++ b/chrome/browser/extensions/extension_navigation_observer.cc
@@ -5,6 +5,8 @@
#include "chrome/browser/extensions/extension_navigation_observer.h"
#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/profiles/profile.h"
#include "content/public/browser/navigation_controller.h"
#include "content/public/browser/navigation_entry.h"
@@ -73,7 +75,8 @@ void ExtensionNavigationObserver::PromptToEnableExtensionIfNecessary(
in_progress_prompt_extension_id_ = extension->id();
in_progress_prompt_navigation_controller_ = nav_controller;
- extension_install_prompt_.reset(new ExtensionInstallPrompt(profile_));
+ Browser* browser = browser::FindBrowserForController(nav_controller, NULL);
+ extension_install_prompt_.reset(new ExtensionInstallPrompt(browser));
extension_install_prompt_->ConfirmReEnable(this, extension);
}
}
diff --git a/chrome/browser/extensions/extension_service.cc b/chrome/browser/extensions/extension_service.cc
index 61aedb6..710643b 100644
--- a/chrome/browser/extensions/extension_service.cc
+++ b/chrome/browser/extensions/extension_service.cc
@@ -576,9 +576,10 @@ bool ExtensionService::UpdateExtension(
// We want a silent install only for non-pending extensions and
// pending extensions that have install_silently set.
+ Browser* browser = browser::FindLastActiveWithProfile(profile_);
ExtensionInstallPrompt* client =
(!pending_extension_info || pending_extension_info->install_silently()) ?
- NULL : new ExtensionInstallPrompt(profile_);
+ NULL : new ExtensionInstallPrompt(browser);
scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(this, client));
installer->set_expected_id(id);
@@ -1804,7 +1805,7 @@ void ExtensionService::UnloadExtension(
// Clean up runtime data.
extension_runtime_data_.erase(extension_id);
- if (disabled_extensions_.Contains(extension->id())) {
+if (disabled_extensions_.Contains(extension->id())) {
UnloadedExtensionInfo details(extension, reason);
details.already_disabled = true;
disabled_extensions_.Remove(extension->id());
diff --git a/chrome/browser/extensions/unpacked_installer.cc b/chrome/browser/extensions/unpacked_installer.cc
index b73d7bc..e9c04b7 100644
--- a/chrome/browser/extensions/unpacked_installer.cc
+++ b/chrome/browser/extensions/unpacked_installer.cc
@@ -11,6 +11,7 @@
#include "chrome/browser/extensions/extension_prefs.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/permissions_updater.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_file_util.h"
#include "chrome/common/string_ordinal.h"
@@ -48,8 +49,9 @@ SimpleExtensionLoadPrompt::SimpleExtensionLoadPrompt(
base::WeakPtr<ExtensionService> extension_service,
const Extension* extension)
: service_weak_(extension_service),
- install_ui_(new ExtensionInstallPrompt(profile)),
extension_(extension) {
+ Browser* browser = browser::FindLastActiveWithProfile(profile);
+ install_ui_.reset(new ExtensionInstallPrompt(browser));
}
SimpleExtensionLoadPrompt::~SimpleExtensionLoadPrompt() {
diff --git a/chrome/browser/extensions/webstore_inline_installer.cc b/chrome/browser/extensions/webstore_inline_installer.cc
index 8d085e8..f97aed0 100644
--- a/chrome/browser/extensions/webstore_inline_installer.cc
+++ b/chrome/browser/extensions/webstore_inline_installer.cc
@@ -14,6 +14,7 @@
#include "chrome/browser/extensions/extension_install_dialog.h"
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/chrome_utility_messages.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/extensions/extension_constants.h"
@@ -341,8 +342,8 @@ void WebstoreInlineInstaller::OnWebstoreParseSuccess(
manifest_.reset(manifest);
icon_ = icon;
- Profile* profile = Profile::FromBrowserContext(
- web_contents()->GetBrowserContext());
+ Browser* browser = browser::FindBrowserWithWebContents(web_contents());
+ CHECK(browser);
ExtensionInstallPrompt::Prompt prompt(
ExtensionInstallPrompt::INLINE_INSTALL_PROMPT);
@@ -358,7 +359,7 @@ void WebstoreInlineInstaller::OnWebstoreParseSuccess(
return;
}
- install_ui_.reset(new ExtensionInstallPrompt(profile));
+ install_ui_.reset(new ExtensionInstallPrompt(browser));
install_ui_->ConfirmInlineInstall(this, dummy_extension_, &icon_, prompt);
// Control flow finishes up in InstallUIProceed or InstallUIAbort.
}
diff --git a/chrome/browser/infobars/infobars_browsertest.cc b/chrome/browser/infobars/infobars_browsertest.cc
index 6eedec0..495413b 100644
--- a/chrome/browser/infobars/infobars_browsertest.cc
+++ b/chrome/browser/infobars/infobars_browsertest.cc
@@ -38,7 +38,7 @@ class InfoBarsTest : public InProcessBrowserTest {
chrome::NOTIFICATION_EXTENSION_LOADED,
content::NotificationService::AllSources());
- ExtensionInstallPrompt* client = new ExtensionInstallPrompt(profile);
+ ExtensionInstallPrompt* client = new ExtensionInstallPrompt(browser());
scoped_refptr<CrxInstaller> installer(
CrxInstaller::Create(service, client));
installer->set_install_cause(extension_misc::INSTALL_CAUSE_AUTOMATION);
diff --git a/chrome/browser/ui/browser.cc b/chrome/browser/ui/browser.cc
index 0dbe830e..f5f7d91 100644
--- a/chrome/browser/ui/browser.cc
+++ b/chrome/browser/ui/browser.cc
@@ -3835,7 +3835,7 @@ void Browser::OnInstallApplication(TabContents* source,
scoped_refptr<CrxInstaller> installer(CrxInstaller::Create(
extension_service,
extension_service->show_extensions_prompts() ?
- new ExtensionInstallPrompt(profile()) : NULL));
+ new ExtensionInstallPrompt(this) : NULL));
installer->InstallWebApp(web_app);
}
diff --git a/chrome/browser/ui/browser_list.h b/chrome/browser/ui/browser_list.h
index 8d5c8fd..1150d6c 100644
--- a/chrome/browser/ui/browser_list.h
+++ b/chrome/browser/ui/browser_list.h
@@ -110,16 +110,12 @@ class BrowserList {
friend class BrowserView;
friend class CertificateViewerDialog;
friend class ChromeShellDelegate;
- friend class ExtensionInstallDialogView;
friend class FeedbackHandler;
- friend class GtkThemeService;
friend class NetworkProfileBubble;
friend class PrintPreviewHandler;
- friend class QueryTabsFunction;
friend class SelectFileDialogExtension;
friend class StartupBrowserCreatorImpl;
friend class TaskManager;
- friend class TestingAutomationProvider;
friend class WindowSizer;
friend class browser::BrowserActivityObserver;
#if defined(OS_CHROMEOS)
@@ -128,9 +124,6 @@ class BrowserList {
#if defined(OS_MACOSX)
friend Browser* browser::GetLastActiveBrowser();
#endif
-#if defined(TOOLKIT_GTK)
- friend class browser::ExtensionInstallDialog;
-#endif
#if defined(USE_ASH)
friend content::WebContents* GetActiveWebContents();
#endif
diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.h b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.h
index 9c8429f..2ec83f3 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.h
+++ b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.h
@@ -15,7 +15,7 @@
#include "chrome/browser/extensions/extension_install_prompt.h"
#include "ui/gfx/image/image_skia.h"
-class Profile;
+class Browser;
// Displays the extension or bundle install prompt, and notifies the
// ExtensionInstallPrompt::Delegate of success or failure.
@@ -38,7 +38,7 @@ class Profile;
IBOutlet NSTextField* userCountField_;
NSWindow* parentWindow_; // weak
- Profile* profile_; // weak
+ Browser* browser_; // weak
ExtensionInstallPrompt::Delegate* delegate_; // weak
scoped_ptr<ExtensionInstallPrompt::Prompt> prompt_;
}
@@ -57,7 +57,7 @@ class Profile;
@property(nonatomic, readonly) NSTextField* userCountField;
- (id)initWithParentWindow:(NSWindow*)window
- profile:(Profile*)profile
+ browser:(Browser*)browser
delegate:(ExtensionInstallPrompt::Delegate*)delegate
prompt:(const ExtensionInstallPrompt::Prompt&)prompt;
- (void)runAsModalSheet;
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 0561ca2..313b8fb 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller.mm
@@ -89,7 +89,7 @@ void AppendRatingStarsShim(const gfx::ImageSkia* skiaImage, void* data) {
@synthesize userCountField = userCountField_;
- (id)initWithParentWindow:(NSWindow*)window
- profile:(Profile*)profile
+ browser:(Browser*)browser
delegate:(ExtensionInstallPrompt::Delegate*)delegate
prompt:(const ExtensionInstallPrompt::Prompt&)prompt {
NSString* nibpath = nil;
@@ -117,7 +117,7 @@ void AppendRatingStarsShim(const gfx::ImageSkia* skiaImage, void* data) {
if ((self = [super initWithWindowNibPath:nibpath owner:self])) {
parentWindow_ = window;
- profile_ = profile;
+ browser_ = browser;
delegate_ = delegate;
prompt_.reset(new ExtensionInstallPrompt::Prompt(prompt));
}
@@ -135,7 +135,7 @@ void AppendRatingStarsShim(const gfx::ImageSkia* skiaImage, void* data) {
- (IBAction)storeLinkClicked:(id)sender {
GURL store_url(extension_urls::GetWebstoreItemDetailURLPrefix() +
prompt_->extension()->id());
- browser::FindLastActiveWithProfile(profile_)->OpenURL(OpenURLParams(
+ browser_->OpenURL(OpenURLParams(
store_url, Referrer(), NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK,
false));
@@ -318,15 +318,9 @@ void AppendRatingStarsShim(const gfx::ImageSkia* skiaImage, void* data) {
@end // ExtensionInstallDialogController
void ShowExtensionInstallDialogImpl(
- Profile* profile,
+ Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt) {
- Browser* browser = browser::FindLastActiveWithProfile(profile);
- if (!browser) {
- delegate->InstallUIAbort(false);
- return;
- }
-
BrowserWindow* window = browser->window();
if (!window) {
delegate->InstallUIAbort(false);
@@ -338,7 +332,7 @@ void ShowExtensionInstallDialogImpl(
ExtensionInstallDialogController* controller =
[[ExtensionInstallDialogController alloc]
initWithParentWindow:native_window
- profile:profile
+ browser:browser
delegate:delegate
prompt:prompt];
diff --git a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller_unittest.mm b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller_unittest.mm
index 4ddb9db..fc9266d 100644
--- a/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller_unittest.mm
+++ b/chrome/browser/ui/cocoa/extensions/extension_install_dialog_controller_unittest.mm
@@ -119,9 +119,9 @@ TEST_F(ExtensionInstallDialogControllerTest, BasicsNormalCancel) {
scoped_nsobject<ExtensionInstallDialogController>
controller([[ExtensionInstallDialogController alloc]
initWithParentWindow:test_window()
- profile:profile()
- delegate:&delegate
- prompt:prompt]);
+ browser:browser()
+ delegate:&delegate
+ prompt:prompt]);
[controller window]; // force nib load
@@ -175,7 +175,7 @@ TEST_F(ExtensionInstallDialogControllerTest, BasicsNormalOK) {
scoped_nsobject<ExtensionInstallDialogController>
controller([[ExtensionInstallDialogController alloc]
initWithParentWindow:test_window()
- profile:profile()
+ browser:browser()
delegate:&delegate
prompt:prompt]);
@@ -210,7 +210,7 @@ TEST_F(ExtensionInstallDialogControllerTest, MultipleWarnings) {
scoped_nsobject<ExtensionInstallDialogController>
controller1([[ExtensionInstallDialogController alloc]
initWithParentWindow:test_window()
- profile:profile()
+ browser:browser()
delegate:&delegate1
prompt:one_warning_prompt]);
@@ -219,7 +219,7 @@ TEST_F(ExtensionInstallDialogControllerTest, MultipleWarnings) {
scoped_nsobject<ExtensionInstallDialogController>
controller2([[ExtensionInstallDialogController alloc]
initWithParentWindow:test_window()
- profile:profile()
+ browser:browser()
delegate:&delegate2
prompt:two_warnings_prompt]);
@@ -255,7 +255,7 @@ TEST_F(ExtensionInstallDialogControllerTest, BasicsSkinny) {
scoped_nsobject<ExtensionInstallDialogController>
controller([[ExtensionInstallDialogController alloc]
initWithParentWindow:test_window()
- profile:profile()
+ browser:browser()
delegate:&delegate
prompt:no_warnings_prompt]);
@@ -301,7 +301,7 @@ TEST_F(ExtensionInstallDialogControllerTest, BasicsInline) {
scoped_nsobject<ExtensionInstallDialogController>
controller([[ExtensionInstallDialogController alloc]
initWithParentWindow:test_window()
- profile:profile()
+ browser:browser()
delegate:&delegate
prompt:inline_prompt]);
diff --git a/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc b/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc
index 3df8f3a..53fb89b 100644
--- a/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc
+++ b/chrome/browser/ui/gtk/extensions/extension_install_dialog_gtk.cc
@@ -57,7 +57,8 @@ namespace browser {
// ExtensionInstallPrompt::Delegate instance.
class ExtensionInstallDialog {
public:
- ExtensionInstallDialog(GtkWindow* parent,
+ ExtensionInstallDialog(Browser* browser,
+ GtkWindow* parent,
ExtensionInstallPrompt::Delegate *delegate,
const ExtensionInstallPrompt::Prompt& prompt);
private:
@@ -66,16 +67,19 @@ class ExtensionInstallDialog {
CHROMEGTK_CALLBACK_1(ExtensionInstallDialog, void, OnResponse, int);
CHROMEGTK_CALLBACK_0(ExtensionInstallDialog, void, OnStoreLinkClick);
+ Browser* browser_;
ExtensionInstallPrompt::Delegate* delegate_;
std::string extension_id_; // Set for INLINE_INSTALL_PROMPT.
GtkWidget* dialog_;
};
ExtensionInstallDialog::ExtensionInstallDialog(
+ Browser* browser,
GtkWindow* parent,
ExtensionInstallPrompt::Delegate *delegate,
const ExtensionInstallPrompt::Prompt& prompt)
- : delegate_(delegate),
+ : browser_(browser),
+ delegate_(delegate),
dialog_(NULL) {
bool show_permissions = prompt.GetPermissionCount() > 0;
bool is_inline_install =
@@ -257,7 +261,7 @@ void ExtensionInstallDialog::OnResponse(GtkWidget* dialog, int response_id) {
void ExtensionInstallDialog::OnStoreLinkClick(GtkWidget* sender) {
GURL store_url(
extension_urls::GetWebstoreItemDetailURLPrefix() + extension_id_);
- BrowserList::GetLastActive()->OpenURL(OpenURLParams(
+ browser_->OpenURL(OpenURLParams(
store_url, content::Referrer(), NEW_FOREGROUND_TAB,
content::PAGE_TRANSITION_LINK, false));
@@ -267,15 +271,9 @@ void ExtensionInstallDialog::OnStoreLinkClick(GtkWidget* sender) {
} // namespace browser
void ShowExtensionInstallDialogImpl(
- Profile* profile,
+ Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt) {
- Browser* browser = browser::FindLastActiveWithProfile(profile);
- if (!browser) {
- delegate->InstallUIAbort(false);
- return;
- }
-
BrowserWindowGtk* browser_window = static_cast<BrowserWindowGtk*>(
browser->window());
if (!browser_window) {
@@ -283,6 +281,6 @@ void ShowExtensionInstallDialogImpl(
return;
}
- new browser::ExtensionInstallDialog(browser_window->window(), delegate,
- prompt);
+ new browser::ExtensionInstallDialog(browser, browser_window->window(),
+ delegate, prompt);
}
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 9391873..d233019 100644
--- a/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
+++ b/chrome/browser/ui/views/extensions/extension_install_dialog_view.cc
@@ -75,7 +75,8 @@ void AddResourceIcon(const gfx::ImageSkia* skia_image, void* data) {
class ExtensionInstallDialogView : public views::DialogDelegateView,
public views::LinkListener {
public:
- ExtensionInstallDialogView(ExtensionInstallPrompt::Delegate* delegate,
+ ExtensionInstallDialogView(Browser* browser,
+ ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt);
virtual ~ExtensionInstallDialogView();
@@ -102,6 +103,7 @@ class ExtensionInstallDialogView : public views::DialogDelegateView,
return prompt_.type() == ExtensionInstallPrompt::BUNDLE_INSTALL_PROMPT;
}
+ Browser* browser_;
ExtensionInstallPrompt::Delegate* delegate_;
ExtensionInstallPrompt::Prompt prompt_;
@@ -109,9 +111,11 @@ class ExtensionInstallDialogView : public views::DialogDelegateView,
};
ExtensionInstallDialogView::ExtensionInstallDialogView(
+ Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt)
- : delegate_(delegate),
+ : browser_(browser),
+ delegate_(delegate),
prompt_(prompt) {
// Possible grid layouts:
// Inline install
@@ -345,20 +349,14 @@ void ExtensionInstallDialogView::LinkClicked(views::Link* source,
OpenURLParams params(
store_url, Referrer(), NEW_FOREGROUND_TAB, content::PAGE_TRANSITION_LINK,
false);
- BrowserList::GetLastActive()->OpenURL(params);
+ browser_->OpenURL(params);
GetWidget()->Close();
}
void ShowExtensionInstallDialogImpl(
- Profile* profile,
+ Browser* browser,
ExtensionInstallPrompt::Delegate* delegate,
const ExtensionInstallPrompt::Prompt& prompt) {
- Browser* browser = browser::FindLastActiveWithProfile(profile);
- if (!browser) {
- delegate->InstallUIAbort(false);
- return;
- }
-
BrowserWindow* browser_window = browser->window();
if (!browser_window) {
delegate->InstallUIAbort(false);
@@ -366,7 +364,7 @@ void ShowExtensionInstallDialogImpl(
}
ExtensionInstallDialogView* dialog = new ExtensionInstallDialogView(
- delegate, prompt);
+ browser, delegate, prompt);
views::Widget* window = views::Widget::CreateWindowWithParent(
dialog, browser_window->GetNativeWindow());
diff --git a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
index 6e01596..1605be8 100644
--- a/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
+++ b/chrome/browser/ui/webui/extensions/extension_settings_handler.cc
@@ -28,6 +28,7 @@
#include "chrome/browser/prefs/pref_service.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/tab_contents/background_contents.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/browser/ui/webui/extensions/extension_icon_source.h"
#include "chrome/browser/view_type_utils.h"
#include "chrome/common/chrome_notification_types.h"
@@ -45,6 +46,7 @@
#include "content/public/browser/site_instance.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_view.h"
+#include "content/public/browser/web_ui.h"
#include "grit/browser_resources.h"
#include "grit/chromium_strings.h"
#include "grit/generated_resources.h"
@@ -600,8 +602,10 @@ void ExtensionSettingsHandler::HandleEnableMessage(const ListValue* args) {
if (enable_str == "true") {
ExtensionPrefs* prefs = extension_service_->extension_prefs();
if (prefs->DidExtensionEscalatePermissions(extension_id)) {
+ Browser* browser = browser::FindBrowserWithWebContents(
+ web_ui()->GetWebContents());
extensions::ShowExtensionDisabledDialog(
- extension_service_, Profile::FromWebUI(web_ui()), extension);
+ extension_service_, browser, extension);
} else {
extension_service_->EnableExtension(extension_id);
}
diff --git a/chrome/browser/ui/webui/extensions/install_extension_handler.cc b/chrome/browser/ui/webui/extensions/install_extension_handler.cc
index 3a53ff6..78b1b2c 100644
--- a/chrome/browser/ui/webui/extensions/install_extension_handler.cc
+++ b/chrome/browser/ui/webui/extensions/install_extension_handler.cc
@@ -12,6 +12,7 @@
#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/extensions/extension_system.h"
#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser_finder.h"
#include "chrome/common/extensions/extension_switch_utils.h"
#include "content/public/browser/web_contents.h"
#include "content/public/browser/web_contents_view.h"
@@ -79,11 +80,13 @@ void InstallExtensionHandler::HandleInstallMessage(const ListValue* args) {
return;
}
- Profile* profile = Profile::FromWebUI(web_ui());
+ Browser* browser = browser::FindBrowserWithWebContents(
+ web_ui()->GetWebContents());
+ Profile* profile = browser->profile();
scoped_refptr<CrxInstaller> crx_installer(
CrxInstaller::Create(
ExtensionSystem::Get(profile)->extension_service(),
- new ExtensionInstallPrompt(profile)));
+ new ExtensionInstallPrompt(browser)));
crx_installer->set_off_store_install_allow_reason(
CrxInstaller::OffStoreInstallAllowedFromSettingsPage);
diff --git a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
index a07b3be..58a3aae 100644
--- a/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
+++ b/chrome/browser/ui/webui/ntp/app_launcher_handler.cc
@@ -983,8 +983,9 @@ ExtensionUninstallDialog* AppLauncherHandler::GetExtensionUninstallDialog() {
ExtensionInstallPrompt* AppLauncherHandler::GetExtensionInstallPrompt() {
if (!extension_install_ui_.get()) {
- extension_install_ui_.reset(
- new ExtensionInstallPrompt(Profile::FromWebUI(web_ui())));
+ Browser* browser = browser::FindBrowserWithWebContents(
+ web_ui()->GetWebContents());
+ extension_install_ui_.reset(new ExtensionInstallPrompt(browser));
}
return extension_install_ui_.get();
}