| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/files/file_path.h" | 6 #include "base/files/file_path.h" |
| 7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
| 8 #include "chrome/browser/bookmarks/bookmark_model.h" | 8 #include "chrome/browser/bookmarks/bookmark_model.h" |
| 9 #include "chrome/browser/bookmarks/bookmark_model_factory.h" | 9 #include "chrome/browser/bookmarks/bookmark_model_factory.h" |
| 10 #include "chrome/browser/bookmarks/bookmark_utils.h" | 10 #include "chrome/browser/bookmarks/bookmark_utils.h" |
| (...skipping 12 matching lines...) Expand all Loading... |
| 23 #include "chrome/common/chrome_notification_types.h" | 23 #include "chrome/common/chrome_notification_types.h" |
| 24 #include "chrome/common/chrome_switches.h" | 24 #include "chrome/common/chrome_switches.h" |
| 25 #include "chrome/common/extensions/extension.h" | 25 #include "chrome/common/extensions/extension.h" |
| 26 #include "chrome/common/url_constants.h" | 26 #include "chrome/common/url_constants.h" |
| 27 #include "chrome/test/base/ui_test_utils.h" | 27 #include "chrome/test/base/ui_test_utils.h" |
| 28 #include "content/public/browser/notification_service.h" | 28 #include "content/public/browser/notification_service.h" |
| 29 #include "content/public/browser/web_contents.h" | 29 #include "content/public/browser/web_contents.h" |
| 30 #include "content/public/test/browser_test_utils.h" | 30 #include "content/public/test/browser_test_utils.h" |
| 31 #include "googleurl/src/gurl.h" | 31 #include "googleurl/src/gurl.h" |
| 32 #include "net/dns/mock_host_resolver.h" | 32 #include "net/dns/mock_host_resolver.h" |
| 33 #include "net/test/embedded_test_server/embedded_test_server.h" |
| 33 | 34 |
| 34 using extensions::Extension; | 35 using extensions::Extension; |
| 35 | 36 |
| 36 namespace { | 37 namespace { |
| 37 | 38 |
| 38 // This unfortunate bit of silliness is necessary when loading an extension in | 39 // This unfortunate bit of silliness is necessary when loading an extension in |
| 39 // incognito. The goal is to load the extension, enable incognito, then wait | 40 // incognito. The goal is to load the extension, enable incognito, then wait |
| 40 // for both background pages to load and close. The problem is that enabling | 41 // for both background pages to load and close. The problem is that enabling |
| 41 // incognito involves reloading the extension - and the background pages may | 42 // incognito involves reloading the extension - and the background pages may |
| 42 // have already loaded once before then. So we wait until the extension is | 43 // have already loaded once before then. So we wait until the extension is |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 152 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); | 153 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); |
| 153 int num_page_actions = browser()->window()->GetLocationBar()-> | 154 int num_page_actions = browser()->window()->GetLocationBar()-> |
| 154 GetLocationBarForTesting()->PageActionVisibleCount(); | 155 GetLocationBarForTesting()->PageActionVisibleCount(); |
| 155 | 156 |
| 156 // Open a tab to a URL that will trigger the page action to show. | 157 // Open a tab to a URL that will trigger the page action to show. |
| 157 LazyBackgroundObserver page_complete; | 158 LazyBackgroundObserver page_complete; |
| 158 content::WindowedNotificationObserver page_action_changed( | 159 content::WindowedNotificationObserver page_action_changed( |
| 159 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, | 160 chrome::NOTIFICATION_EXTENSION_PAGE_ACTION_VISIBILITY_CHANGED, |
| 160 content::NotificationService::AllSources()); | 161 content::NotificationService::AllSources()); |
| 161 ui_test_utils::NavigateToURL( | 162 ui_test_utils::NavigateToURL( |
| 162 browser(), test_server()->GetURL("files/extensions/test_file.html")); | 163 browser(), embedded_test_server()->GetURL("/extensions/test_file.html")); |
| 163 page_complete.Wait(); | 164 page_complete.Wait(); |
| 164 | 165 |
| 165 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); | 166 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); |
| 166 | 167 |
| 167 // Page action is shown. | 168 // Page action is shown. |
| 168 page_action_changed.Wait(); | 169 page_action_changed.Wait(); |
| 169 EXPECT_EQ(num_page_actions + 1, | 170 EXPECT_EQ(num_page_actions + 1, |
| 170 browser()->window()->GetLocationBar()-> | 171 browser()->window()->GetLocationBar()-> |
| 171 GetLocationBarForTesting()->PageActionVisibleCount()); | 172 GetLocationBarForTesting()->PageActionVisibleCount()); |
| 172 } | 173 } |
| 173 | 174 |
| 174 IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, Filters) { | 175 IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, Filters) { |
| 175 const Extension* extension = LoadExtensionAndWait("filters"); | 176 const Extension* extension = LoadExtensionAndWait("filters"); |
| 176 ASSERT_TRUE(extension); | 177 ASSERT_TRUE(extension); |
| 177 | 178 |
| 178 // Lazy Background Page doesn't exist yet. | 179 // Lazy Background Page doesn't exist yet. |
| 179 ExtensionProcessManager* pm = | 180 ExtensionProcessManager* pm = |
| 180 extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); | 181 extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); |
| 181 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); | 182 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); |
| 182 | 183 |
| 183 // Open a tab to a URL that will fire a webNavigation event. | 184 // Open a tab to a URL that will fire a webNavigation event. |
| 184 LazyBackgroundObserver page_complete; | 185 LazyBackgroundObserver page_complete; |
| 185 ui_test_utils::NavigateToURL( | 186 ui_test_utils::NavigateToURL( |
| 186 browser(), test_server()->GetURL("files/extensions/test_file.html")); | 187 browser(), embedded_test_server()->GetURL("/extensions/test_file.html")); |
| 187 page_complete.Wait(); | 188 page_complete.Wait(); |
| 188 } | 189 } |
| 189 | 190 |
| 190 // Tests that the lazy background page receives the onInstalled event and shuts | 191 // Tests that the lazy background page receives the onInstalled event and shuts |
| 191 // down. | 192 // down. |
| 192 IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, OnInstalled) { | 193 IN_PROC_BROWSER_TEST_F(LazyBackgroundPageApiTest, OnInstalled) { |
| 193 ResultCatcher catcher; | 194 ResultCatcher catcher; |
| 194 ASSERT_TRUE(LoadExtensionAndWait("on_installed")); | 195 ASSERT_TRUE(LoadExtensionAndWait("on_installed")); |
| 195 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 196 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 196 | 197 |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 382 // Lazy Background Page doesn't exist yet. | 383 // Lazy Background Page doesn't exist yet. |
| 383 ExtensionProcessManager* pm = | 384 ExtensionProcessManager* pm = |
| 384 extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); | 385 extensions::ExtensionSystem::Get(browser()->profile())->process_manager(); |
| 385 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); | 386 EXPECT_FALSE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); |
| 386 EXPECT_EQ(1, browser()->tab_strip_model()->count()); | 387 EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
| 387 | 388 |
| 388 // Navigate to a page that opens a message channel to the background page. | 389 // Navigate to a page that opens a message channel to the background page. |
| 389 ResultCatcher catcher; | 390 ResultCatcher catcher; |
| 390 LazyBackgroundObserver lazybg; | 391 LazyBackgroundObserver lazybg; |
| 391 ui_test_utils::NavigateToURL( | 392 ui_test_utils::NavigateToURL( |
| 392 browser(), test_server()->GetURL("files/extensions/test_file.html")); | 393 browser(), embedded_test_server()->GetURL("/extensions/test_file.html")); |
| 393 lazybg.WaitUntilLoaded(); | 394 lazybg.WaitUntilLoaded(); |
| 394 | 395 |
| 395 // Background page got the content script's message and is still loaded | 396 // Background page got the content script's message and is still loaded |
| 396 // until we close the channel. | 397 // until we close the channel. |
| 397 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 398 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 398 EXPECT_TRUE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); | 399 EXPECT_TRUE(pm->GetBackgroundHostForExtension(last_loaded_extension_id_)); |
| 399 | 400 |
| 400 // Navigate away, closing the message channel and therefore the background | 401 // Navigate away, closing the message channel and therefore the background |
| 401 // page. | 402 // page. |
| 402 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); | 403 ui_test_utils::NavigateToURL(browser(), GURL("about:blank")); |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 453 | 454 |
| 454 EXPECT_TRUE(event_page_ready.WaitUntilSatisfied()); | 455 EXPECT_TRUE(event_page_ready.WaitUntilSatisfied()); |
| 455 | 456 |
| 456 page_ready.Reply("go"); | 457 page_ready.Reply("go"); |
| 457 | 458 |
| 458 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); | 459 EXPECT_TRUE(catcher.GetNextResult()) << catcher.message(); |
| 459 } | 460 } |
| 460 | 461 |
| 461 // TODO: background page with timer. | 462 // TODO: background page with timer. |
| 462 // TODO: background page that interacts with popup. | 463 // TODO: background page that interacts with popup. |
| OLD | NEW |