diff options
Diffstat (limited to 'chrome/browser/extensions/lazy_background_page_apitest.cc')
-rw-r--r-- | chrome/browser/extensions/lazy_background_page_apitest.cc | 128 |
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. |