Index: chrome/browser/extensions/extension_browsertest.cc |
diff --git a/chrome/browser/extensions/extension_browsertest.cc b/chrome/browser/extensions/extension_browsertest.cc |
index 817884805c762fb63faf4f13b6aee645e01389b4..fca41d94200eb3b3c2da188b10615bae7509e555 100644 |
--- a/chrome/browser/extensions/extension_browsertest.cc |
+++ b/chrome/browser/extensions/extension_browsertest.cc |
@@ -8,10 +8,12 @@ |
#include "base/command_line.h" |
#include "base/file_path.h" |
+#include "base/file_util.h" |
#include "base/path_service.h" |
#include "base/string_number_conversions.h" |
#include "chrome/browser/browser_window.h" |
#include "chrome/browser/extensions/crx_installer.h" |
+#include "chrome/browser/extensions/extension_creator.h" |
#include "chrome/browser/extensions/extension_error_reporter.h" |
#include "chrome/browser/extensions/extension_host.h" |
#include "chrome/browser/extensions/extension_install_ui.h" |
@@ -101,6 +103,40 @@ bool ExtensionBrowserTest::LoadExtensionIncognito(const FilePath& path) { |
return LoadExtensionImpl(path, true); |
} |
+FilePath ExtensionBrowserTest::PackExtension(const FilePath& dir_path) { |
+ FilePath crx_path; |
+ if (!PathService::Get(base::DIR_TEMP, &crx_path)) { |
+ ADD_FAILURE() << "Failed to get DIR_TEMP from PathService."; |
+ return FilePath(); |
+ } |
+ crx_path = crx_path.AppendASCII("temp.crx"); |
+ if (!file_util::Delete(crx_path, false)) { |
+ ADD_FAILURE() << "Failed to delete crx: " << crx_path.value(); |
+ return FilePath(); |
+ } |
+ |
+ FilePath pem_path = crx_path.DirName().AppendASCII("temp.pem"); |
+ if (!file_util::Delete(pem_path, false)) { |
+ ADD_FAILURE() << "Failed to delete pem: " << pem_path.value(); |
+ return FilePath(); |
+ } |
+ |
+ scoped_ptr<ExtensionCreator> creator(new ExtensionCreator()); |
+ if (!creator->Run(dir_path, |
+ crx_path, |
+ FilePath(), // no existing pem, use empty path |
+ pem_path)) { |
+ ADD_FAILURE() << "ExtensionCreator::Run() failed."; |
+ return FilePath(); |
+ } |
+ |
+ if (!file_util::PathExists(crx_path)) { |
+ ADD_FAILURE() << crx_path.value() << " was not created."; |
+ return FilePath(); |
+ } |
+ return crx_path; |
+} |
+ |
// This class is used to simulate an installation abort by the user. |
class MockAbortExtensionInstallUI : public ExtensionInstallUI { |
public: |
@@ -120,11 +156,31 @@ class MockAbortExtensionInstallUI : public ExtensionInstallUI { |
virtual void OnInstallFailure(const std::string& error) {} |
}; |
+class MockAutoConfirmExtensionInstallUI : public ExtensionInstallUI { |
+ public: |
+ MockAutoConfirmExtensionInstallUI(Profile* profile) : |
+ ExtensionInstallUI(profile) {} |
+ |
+ // Proceed without confirmation prompt. |
+ virtual void ConfirmInstall(Delegate* delegate, const Extension* extension) { |
+ delegate->InstallUIProceed(); |
+ } |
+}; |
+ |
bool ExtensionBrowserTest::InstallOrUpdateExtension(const std::string& id, |
const FilePath& path, |
InstallUIType ui_type, |
int expected_change) { |
- ExtensionService* service = browser()->profile()->GetExtensionService(); |
+ return InstallOrUpdateExtension(id, path, ui_type, expected_change, |
+ browser()->profile()); |
+} |
+ |
+bool ExtensionBrowserTest::InstallOrUpdateExtension(const std::string& id, |
+ const FilePath& path, |
+ InstallUIType ui_type, |
+ int expected_change, |
+ Profile* profile) { |
+ ExtensionService* service = profile->GetExtensionService(); |
service->set_show_extensions_prompts(false); |
size_t num_before = service->extensions()->size(); |
@@ -141,12 +197,23 @@ bool ExtensionBrowserTest::InstallOrUpdateExtension(const std::string& id, |
if (ui_type == INSTALL_UI_TYPE_CANCEL) |
install_ui = new MockAbortExtensionInstallUI(); |
else if (ui_type == INSTALL_UI_TYPE_NORMAL) |
- install_ui = new ExtensionInstallUI(browser()->profile()); |
+ install_ui = new ExtensionInstallUI(profile); |
+ else if (ui_type == INSTALL_UI_TYPE_AUTO_CONFIRM) |
+ install_ui = new MockAutoConfirmExtensionInstallUI(profile); |
+ |
+ // TODO(tessamac): Update callers to always pass an unpacked extension |
+ // and then always pack the extension here. |
+ FilePath crx_path = path; |
+ if (crx_path.Extension() != FILE_PATH_LITERAL(".crx")) { |
+ crx_path = PackExtension(path); |
+ } |
+ if (crx_path.empty()) |
+ return false; |
scoped_refptr<CrxInstaller> installer( |
new CrxInstaller(service, install_ui)); |
installer->set_expected_id(id); |
- installer->InstallCrx(path); |
+ installer->InstallCrx(crx_path); |
ui_test_utils::RunMessageLoop(); |
} |