summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/lazy_background_page_apitest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/extensions/lazy_background_page_apitest.cc')
-rw-r--r--chrome/browser/extensions/lazy_background_page_apitest.cc128
1 files changed, 128 insertions, 0 deletions
diff --git a/chrome/browser/extensions/lazy_background_page_apitest.cc b/chrome/browser/extensions/lazy_background_page_apitest.cc
new file mode 100644
index 0000000..db3e7c5
--- /dev/null
+++ b/chrome/browser/extensions/lazy_background_page_apitest.cc
@@ -0,0 +1,128 @@
+// 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 "base/command_line.h"
+#include "base/file_path.h"
+#include "chrome/browser/extensions/browser_action_test_util.h"
+#include "chrome/browser/extensions/extension_apitest.h"
+#include "chrome/browser/extensions/extension_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/ui/browser.h"
+#include "chrome/browser/ui/browser_window.h"
+#include "chrome/browser/ui/omnibox/location_bar.h"
+#include "chrome/common/chrome_switches.h"
+#include "chrome/common/extensions/extension.h"
+#include "chrome/test/base/ui_test_utils.h"
+#include "content/browser/tab_contents/tab_contents.h"
+#include "content/public/browser/notification_service.h"
+
+#include "googleurl/src/gurl.h"
+
+class LazyBackgroundPageApiTest : public ExtensionApiTest {
+public:
+ void SetUpCommandLine(CommandLine* command_line) {
+ ExtensionApiTest::SetUpCommandLine(command_line);
+ command_line->AppendSwitch(switches::kEnableLazyBackgroundPages);
+ }
+};
+
+IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, BrowserActionCreateTab) {
+ ASSERT_TRUE(CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableLazyBackgroundPages));
+
+ FilePath extdir = test_data_dir_.AppendASCII("lazy_background_page").
+ AppendASCII("browser_action_create_tab");
+ ASSERT_TRUE(LoadExtension(extdir));
+
+ // Lazy Background Page doesn't exist yet.
+ ExtensionProcessManager* pm =
+ browser()->profile()->GetExtensionProcessManager();
+ EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_));
+ int num_tabs_before = browser()->tab_count();
+
+ // Observe background page being created and closed after
+ // the browser action is clicked.
+ ui_test_utils::WindowedNotificationObserver bg_pg_created(
+ chrome::NOTIFICATION_EXTENSION_BACKGROUND_PAGE_READY,
+ content::NotificationService::AllSources());
+ ui_test_utils::WindowedNotificationObserver bg_pg_closed(
+ chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
+ content::NotificationService::AllSources());
+ BrowserActionTestUtil(browser()).Press(0);
+ bg_pg_created.Wait();
+ bg_pg_closed.Wait();
+
+ // Background page created a new tab before it closed.
+ EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_));
+ EXPECT_EQ(num_tabs_before + 1, browser()->tab_count());
+ EXPECT_EQ("chrome://extensions/",
+ browser()->GetSelectedTabContents()->GetURL().spec());
+}
+
+IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest,
+ BrowserActionCreateTabAfterCallback) {
+ ASSERT_TRUE(CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableLazyBackgroundPages));
+
+ FilePath extdir = test_data_dir_.AppendASCII("lazy_background_page").
+ AppendASCII("browser_action_with_callback");
+ ASSERT_TRUE(LoadExtension(extdir));
+
+ // Lazy Background Page doesn't exist yet.
+ ExtensionProcessManager* pm =
+ browser()->profile()->GetExtensionProcessManager();
+ EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_));
+ int num_tabs_before = browser()->tab_count();
+
+ // Observe background page being created and closed after
+ // the browser action is clicked.
+ ui_test_utils::WindowedNotificationObserver bg_pg_created(
+ chrome::NOTIFICATION_EXTENSION_BACKGROUND_PAGE_READY,
+ content::NotificationService::AllSources());
+ ui_test_utils::WindowedNotificationObserver bg_pg_closed(
+ chrome::NOTIFICATION_EXTENSION_HOST_DESTROYED,
+ content::NotificationService::AllSources());
+ BrowserActionTestUtil(browser()).Press(0);
+ bg_pg_created.Wait();
+ bg_pg_closed.Wait();
+
+ // Background page is closed before it created a new tab.
+ // TODO(tessamac): Implement! Close background page after callback.
+ EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_));
+ EXPECT_EQ(num_tabs_before, browser()->tab_count());
+}
+
+IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest,
+ BroadcastEvent) {
+ ASSERT_TRUE(CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kEnableLazyBackgroundPages));
+
+ FilePath extdir = test_data_dir_.AppendASCII("lazy_background_page").
+ AppendASCII("broadcast_event");
+ ASSERT_TRUE(LoadExtension(extdir));
+
+ // Lazy Background Page doesn't exist yet.
+ ExtensionProcessManager* pm =
+ browser()->profile()->GetExtensionProcessManager();
+ EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_));
+ int num_page_actions = browser()->window()->GetLocationBar()->
+ GetLocationBarForTesting()->PageActionVisibleCount();
+
+ // Open a tab to a URL that will trigger the page action to show.
+ // stegosaurus.html doesn't actually exist but that doesn't seem to matter.
+ GURL stego_url = GURL("stegosaurus.html");
+ ui_test_utils::NavigateToURL(browser(), stego_url);
+
+ // New page action is never shown because background page is never created.
+ // TODO(tessamac): Implement! Broadcast events (like tab updates) should
+ // cause lazy background pages to be created.
+ EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_));
+ EXPECT_EQ(num_page_actions, // should be + 1
+ browser()->window()->GetLocationBar()->
+ GetLocationBarForTesting()->PageActionVisibleCount());
+}
+
+// TODO: background page with timer.
+// TODO: background page that interacts with popup.
+// TODO: background page with menu.