Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index bba1d3ad621dc3c5535327eec0758ee86e8bec2b..704dd084e5533949ca53152d313e1100a34f9d5e 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -100,6 +100,7 @@ using content::RenderWidgetHost; |
using content::TestNavigationObserver; |
using content::WebContents; |
using content::WebContentsObserver; |
+using task_manager::browsertest_util::WaitForTaskManagerRows; |
// Prerender tests work as follows: |
// |
@@ -1458,6 +1459,18 @@ class PrerenderBrowserTest : virtual public InProcessBrowserTest { |
base::string16(), base::ASCIIToUTF16(javascript)); |
} |
+ // Returns a string for pattern-matching TaskManager tab entries. |
+ base::string16 MatchTaskManagerTab(const char* page_title) { |
+ return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_TAB_PREFIX, |
+ base::ASCIIToUTF16(page_title)); |
+ } |
+ |
+ // Returns a string for pattern-matching TaskManager prerender entries. |
+ base::string16 MatchTaskManagerPrerender(const char* page_title) { |
+ return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PRERENDER_PREFIX, |
+ base::ASCIIToUTF16(page_title)); |
+ } |
+ |
protected: |
bool autostart_test_server_; |
@@ -2400,68 +2413,93 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderAbortPendingOnCancel) { |
EXPECT_TRUE(IsEmptyPrerenderLinkManager()); |
} |
-IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, PrerenderTaskManager) { |
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, OpenTaskManagerBeforePrerender) { |
+ const base::string16 any_prerender = MatchTaskManagerPrerender("*"); |
+ const base::string16 any_tab = MatchTaskManagerTab("*"); |
+ const base::string16 original = MatchTaskManagerTab("Preloader"); |
+ const base::string16 prerender = MatchTaskManagerPrerender("Prerender Page"); |
+ const base::string16 final = MatchTaskManagerTab("Prerender Page"); |
+ |
// Show the task manager. This populates the model. |
chrome::OpenTaskManager(current_browser()); |
- // Wait for the model of task manager to start. |
- TaskManagerBrowserTestUtil::WaitForWebResourceChange(1); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); |
+ |
+ // Prerender a page in addition to the original tab. |
+ PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
+ |
+ // A TaskManager entry should appear like "Prerender: Prerender Page" |
+ // alongside the original tab entry. There should be just these two entries. |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, prerender)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, original)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, final)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_prerender)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
+ |
+ // Swap in the prerendered content. |
+ NavigateToDestURL(); |
+ |
+ // The "Prerender: " TaskManager entry should disappear, being replaced by a |
+ // "Tab: Prerender Page" entry, and nothing else. |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, prerender)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, original)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, final)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, OpenTaskManagerAfterPrerender) { |
+ const base::string16 any_prerender = MatchTaskManagerPrerender("*"); |
+ const base::string16 any_tab = MatchTaskManagerTab("*"); |
+ const base::string16 original = MatchTaskManagerTab("Preloader"); |
+ const base::string16 prerender = MatchTaskManagerPrerender("Prerender Page"); |
+ const base::string16 final = MatchTaskManagerTab("Prerender Page"); |
// Start with two resources. |
PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
- // One of the resources that has a WebContents associated with it should have |
- // the Prerender prefix. |
- const base::string16 prefix = |
- l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PRERENDER_PREFIX, |
- base::string16()); |
- base::string16 prerender_title; |
- int num_prerender_tabs = 0; |
- |
- TaskManagerModel* model = GetModel(); |
- // The task manager caches values. Force the titles to be fresh. |
- model->Refresh(); |
- for (int i = 0; i < model->ResourceCount(); ++i) { |
- if (model->GetResourceWebContents(i)) { |
- prerender_title = model->GetResourceTitle(i); |
- if (StartsWith(prerender_title, prefix, true)) |
- ++num_prerender_tabs; |
- } |
- } |
- EXPECT_EQ(1, num_prerender_tabs); |
- const base::string16 prerender_page_title = |
- prerender_title.substr(prefix.length()); |
+ // Show the task manager. This populates the model. Importantly, we're doing |
+ // this after the prerender WebContents already exists - the task manager |
+ // needs to find it, it can't just listen for creation. |
+ chrome::OpenTaskManager(current_browser()); |
+ // A TaskManager entry should appear like "Prerender: Prerender Page" |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, prerender)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, original)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, final)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_prerender)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
+ |
+ // Swap in the tab. |
NavigateToDestURL(); |
- // There should be no tabs with the Prerender prefix. |
- const base::string16 tab_prefix = |
- l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_TAB_PREFIX, base::string16()); |
- num_prerender_tabs = 0; |
- int num_tabs_with_prerender_page_title = 0; |
- model->Refresh(); |
- for (int i = 0; i < model->ResourceCount(); ++i) { |
- if (model->GetResourceWebContents(i)) { |
- base::string16 tab_title = model->GetResourceTitle(i); |
- if (StartsWith(tab_title, prefix, true)) { |
- ++num_prerender_tabs; |
- } else { |
- EXPECT_TRUE(StartsWith(tab_title, tab_prefix, true)); |
- |
- // The prerender tab should now be a normal tab but the title should be |
- // the same. Depending on timing, there may be more than one of these. |
- const base::string16 tab_page_title = |
- tab_title.substr(tab_prefix.length()); |
- if (prerender_page_title.compare(tab_page_title) == 0) |
- ++num_tabs_with_prerender_page_title; |
- } |
- } |
- } |
- EXPECT_EQ(0, num_prerender_tabs); |
+ // The "Prerender: Prerender Page" TaskManager row should disappear, being |
+ // replaced by "Tab: Prerender Page" |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, prerender)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, original)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, final)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PrerenderBrowserTest, OpenTaskManagerAfterSwapIn) { |
+ const base::string16 any_prerender = MatchTaskManagerPrerender("*"); |
+ const base::string16 any_tab = MatchTaskManagerTab("*"); |
+ const base::string16 final = MatchTaskManagerTab("Prerender Page"); |
+ |
+ // Prerender, and swap it in. |
+ PrerenderTestURL("files/prerender/prerender_page.html", FINAL_STATUS_USED, 1); |
+ NavigateToDestURL(); |
+ |
+ // Show the task manager. This populates the model. Importantly, we're doing |
+ // this after the prerender has been swapped in. |
+ chrome::OpenTaskManager(current_browser()); |
- // We may have deleted the prerender tab, but the swapped in tab should be |
- // active. |
- EXPECT_GE(num_tabs_with_prerender_page_title, 1); |
- EXPECT_LE(num_tabs_with_prerender_page_title, 2); |
+ // We should not see a prerender resource in the task manager, just a normal |
+ // page. |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, final)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(1, any_tab)); |
+ ASSERT_NO_FATAL_FAILURE(WaitForTaskManagerRows(0, any_prerender)); |
} |
// Checks that audio loads are deferred on prerendering. |