| Index: chrome/browser/extensions/extension_management_api_browsertest.cc
|
| ===================================================================
|
| --- chrome/browser/extensions/extension_management_api_browsertest.cc (revision 75613)
|
| +++ chrome/browser/extensions/extension_management_api_browsertest.cc (working copy)
|
| @@ -1,19 +1,57 @@
|
| -// Copyright (c) 2010 The Chromium Authors. All rights reserved.
|
| +// Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| // Use of this source code is governed by a BSD-style license that can be
|
| // found in the LICENSE file.
|
|
|
| #include "chrome/browser/extensions/extension_browsertest.h"
|
| +#include "chrome/browser/extensions/extension_service.h"
|
| #include "chrome/browser/extensions/extension_test_message_listener.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/browser.h"
|
|
|
| -class ExtensionManagementApiBrowserTest : public ExtensionBrowserTest {};
|
| +class ExtensionManagementApiBrowserTest : public ExtensionBrowserTest {
|
| + public:
|
| + // Loads the extension at "test_data_dir_/|path_suffix|" and waits for it to
|
| + // call chrome.test.sendMessge("ready") indicating that it's ready for the
|
| + // test to proceed.
|
| + void LoadExtensionAndWaitForReady(const char* path_suffix) {
|
| + ExtensionTestMessageListener ready("ready", false);
|
| + ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(path_suffix)));
|
| + ASSERT_TRUE(ready.WaitUntilSatisfied());
|
| + }
|
|
|
| + void InstallThemeAndWait(const char* path_suffix,
|
| + bool is_update, /* is this an update of a theme? */
|
| + const char* wait_message) {
|
| + ExtensionTestMessageListener listener(wait_message, false);
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII(path_suffix),
|
| + is_update ? 0 : 1));
|
| + ASSERT_TRUE(listener.WaitUntilSatisfied());
|
| + }
|
| +
|
| +
|
| + void LoadExtensionWithTest(const char* extension_path,
|
| + const char* js_file) {
|
| + ExtensionTestMessageListener bootstrap("bootstrap", true);
|
| + ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII(extension_path)));
|
| + ASSERT_TRUE(bootstrap.WaitUntilSatisfied());
|
| +
|
| + ExtensionTestMessageListener ready("ready", false);
|
| + bootstrap.Reply(std::string(js_file));
|
| + ASSERT_TRUE(ready.WaitUntilSatisfied());
|
| + }
|
| +
|
| + void InstallTwoThemes() {
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme.crx"),
|
| + 1));
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme2.crx"),
|
| + 0));
|
| + }
|
| +};
|
| +
|
| // We test this here instead of in an ExtensionApiTest because normal extensions
|
| // are not allowed to call the install function.
|
| IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, InstallEvent) {
|
| - ExtensionTestMessageListener listener1("ready", false);
|
| - ASSERT_TRUE(LoadExtension(
|
| - test_data_dir_.AppendASCII("management/install_event")));
|
| - ASSERT_TRUE(listener1.WaitUntilSatisfied());
|
| + LoadExtensionAndWaitForReady("management/install_event");
|
|
|
| ExtensionTestMessageListener listener2("got_event", false);
|
| ASSERT_TRUE(LoadExtension(
|
| @@ -43,3 +81,150 @@
|
| test_data_dir_.AppendASCII("management/launch_app_from_background")));
|
| ASSERT_TRUE(listener1.WaitUntilSatisfied());
|
| }
|
| +
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, ThemeBasics) {
|
| + LoadExtensionWithTest("management/themes", "basics.js");
|
| +
|
| + // Install one theme - we should send events for install and enable.
|
| + InstallThemeAndWait("theme.crx", false, "step1");
|
| +
|
| + ExtensionTestMessageListener step3("step3", true);
|
| + ExtensionTestMessageListener step4("step4", true);
|
| +
|
| + // Install a second theme - we should send install/enable events for the
|
| + // first theme and a disable event for the second one.
|
| + InstallThemeAndWait("theme2.crx", true, "step2");
|
| +
|
| + // Now tell the extension to go ahead and disable theme2.
|
| + ASSERT_TRUE(step3.WaitUntilSatisfied());
|
| + step3.Reply("step3_ack");
|
| + ASSERT_TRUE(step4.WaitUntilSatisfied());
|
| +
|
| + // Make sure the theme is no longer enabled.
|
| + ExtensionService* service = browser()->profile()->GetExtensionService();
|
| + std::string id("pjpgmfcmabopnnfonnhmdjglfpjjfkbf");
|
| + ASSERT_EQ(NULL, service->GetExtensionById(id, false));
|
| + ASSERT_TRUE(service->GetExtensionById(id, true) != NULL);
|
| + ASSERT_EQ(NULL, browser()->profile()->GetTheme());
|
| +}
|
| +
|
| +// Install theme1, then undo.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, ThemeUndo1) {
|
| + LoadExtensionWithTest("management/themes", "undo.js");
|
| +
|
| + InstallThemeAndWait("theme.crx", false, "step1");
|
| +
|
| + ExtensionTestMessageListener step2("step2", false);
|
| + VerifyThemeInfoBarAndUndoInstall();
|
| + ASSERT_TRUE(step2.WaitUntilSatisfied());
|
| +}
|
| +
|
| +// Install theme1, then install theme2, then undo.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, ThemeUndo2) {
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme.crx"),
|
| + 1));
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme2.crx"),
|
| + 0));
|
| +
|
| + LoadExtensionWithTest("management/themes", "undo2.js");
|
| +
|
| + ExtensionTestMessageListener step1("step1", false);
|
| + VerifyThemeInfoBarAndUndoInstall();
|
| + ASSERT_TRUE(step1.WaitUntilSatisfied());
|
| +}
|
| +
|
| +
|
| +// Test "clear theme" functionality.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, ClearTheme) {
|
| + LoadExtensionWithTest("management/themes", "clear_theme.js");
|
| +
|
| + InstallThemeAndWait("theme.crx", false, "step1");
|
| +
|
| + ExtensionTestMessageListener step2("step2", false);
|
| + browser()->profile()->ClearTheme();
|
| + ASSERT_TRUE(step2.WaitUntilSatisfied());
|
| +}
|
| +
|
| +// Install theme1, then uninstall theme1.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, UninstallTheme) {
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme.crx"),
|
| + 1));
|
| + ExtensionService* service = browser()->profile()->GetExtensionService();
|
| + std::string id("iamefpfkojoapidjnbafmgkgncegbkad");
|
| +
|
| + ASSERT_TRUE(service->GetExtensionById(id, false) != NULL);
|
| + const Extension* theme = browser()->profile()->GetTheme();
|
| + ASSERT_TRUE(theme != NULL);
|
| + ASSERT_EQ(id, theme->id());
|
| +
|
| + LoadExtensionWithTest("management/themes", "uninstall.js");
|
| +
|
| + theme = browser()->profile()->GetTheme();
|
| + ASSERT_EQ(NULL, theme);
|
| +}
|
| +
|
| +// Install theme1, then install theme2, then enable theme1.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, EnableDisabledTheme) {
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme.crx"),
|
| + 1));
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme2.crx"),
|
| + 0));
|
| + ExtensionTestMessageListener step1("step1", false);
|
| + LoadExtensionWithTest("management/themes", "enable_disabled.js");
|
| + ASSERT_TRUE(step1.WaitUntilSatisfied());
|
| +
|
| + std::string id("iamefpfkojoapidjnbafmgkgncegbkad");
|
| + const Extension* theme = browser()->profile()->GetTheme();
|
| + ASSERT_TRUE(theme != NULL);
|
| + ASSERT_EQ(id, theme->id());
|
| +}
|
| +
|
| +// Install theme1, install theme2, disable theme2, enable theme1.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest, ThemeEnabling) {
|
| + InstallTwoThemes();
|
| + ExtensionTestMessageListener step1("step1", true);
|
| + ExtensionTestMessageListener step2("step2", false);
|
| +
|
| + LoadExtensionWithTest("management/themes", "enabling.js");
|
| + ASSERT_TRUE(step1.WaitUntilSatisfied());
|
| +
|
| + const Extension* theme = browser()->profile()->GetTheme();
|
| + ASSERT_EQ(NULL, theme);
|
| +
|
| + step1.Reply("step1_ack");
|
| + ASSERT_TRUE(step2.WaitUntilSatisfied());
|
| +
|
| + std::string id("iamefpfkojoapidjnbafmgkgncegbkad");
|
| + theme = browser()->profile()->GetTheme();
|
| + ASSERT_TRUE(theme != NULL);
|
| + ASSERT_EQ(id, theme->id());
|
| +}
|
| +
|
| +// Install theme1, install theme2, uninstall theme2.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest,
|
| + UninstallEnabledTheme) {
|
| + InstallTwoThemes();
|
| + ExtensionTestMessageListener step1("step1", true);
|
| + ExtensionTestMessageListener step2("step2", false);
|
| + LoadExtensionWithTest("management/themes", "uninstall_enabled.js");
|
| + ASSERT_TRUE(step1.WaitUntilSatisfied());
|
| +
|
| + const Extension* theme = browser()->profile()->GetTheme();
|
| + ASSERT_EQ(NULL, theme);
|
| +}
|
| +
|
| +// Install theme1, disable, enable.
|
| +IN_PROC_BROWSER_TEST_F(ExtensionManagementApiBrowserTest,
|
| + DisableThenEnableTheme) {
|
| + ASSERT_TRUE(InstallExtensionWithUI(test_data_dir_.AppendASCII("theme.crx"),
|
| + 1));
|
| +
|
| + ExtensionTestMessageListener step1("step1", false);
|
| + LoadExtensionWithTest("management/themes", "disable_then_enable.js");
|
| + ASSERT_TRUE(step1.WaitUntilSatisfied());
|
| +
|
| + std::string id("iamefpfkojoapidjnbafmgkgncegbkad");
|
| + const Extension* theme = browser()->profile()->GetTheme();
|
| + ASSERT_TRUE(theme != NULL);
|
| + ASSERT_EQ(id, theme->id());
|
| +}
|
|
|