Index: chrome/browser/prerender/prerender_browsertest.cc |
diff --git a/chrome/browser/prerender/prerender_browsertest.cc b/chrome/browser/prerender/prerender_browsertest.cc |
index 7b742f03bd6e354df0f5faaac73475686f9834d7..7f98eb86f2d38362cf61ba5604f3a3bd70c24829 100644 |
--- a/chrome/browser/prerender/prerender_browsertest.cc |
+++ b/chrome/browser/prerender/prerender_browsertest.cc |
@@ -48,6 +48,9 @@ |
#include "chrome/browser/safe_browsing/safe_browsing_service.h" |
#include "chrome/browser/safe_browsing/safe_browsing_util.h" |
#include "chrome/browser/safe_browsing/test_database_manager.h" |
+#include "chrome/browser/task_management/providers/task_provider_observer.h" |
+#include "chrome/browser/task_management/providers/web_contents/web_contents_tags_manager.h" |
+#include "chrome/browser/task_management/providers/web_contents/web_contents_task_provider.h" |
#include "chrome/browser/task_manager/task_manager.h" |
#include "chrome/browser/task_manager/task_manager_browsertest_util.h" |
#include "chrome/browser/ui/browser.h" |
@@ -4080,4 +4083,101 @@ IN_PROC_BROWSER_TEST_F(PrerenderBrowserTestWithNaCl, |
} |
#endif // !defined(DISABLE_NACL) |
+#if defined(ENABLE_TASK_MANAGER) |
+ |
+// Defines a test class for testing that prerender WebContents are correctly |
+// tagged by their task-manager specific tag. It also tests that a task-manager |
+// PrerenderTask will be correctly recorded. |
+class PrerenderTagTest |
+ : public PrerenderBrowserTest, |
ncarter (slow)
2015/06/19 19:50:51
I would probably structure this class as a helper
afakhry
2015/06/19 21:49:21
Done.
|
+ public task_management::TaskProviderObserver { |
+ public: |
+ PrerenderTagTest() {} |
+ ~PrerenderTagTest() override {} |
+ |
+ // task_management::Task_providerObserver: |
+ void TaskAdded(task_management::Task* task) override { |
+ CHECK(task); |
+ ASSERT_FALSE(provided_tasks_.count(task)); |
+ provided_tasks_.insert(task); |
ncarter (slow)
2015/06/19 19:50:50
FWIW (this is just an idea / food for thought) I'v
|
+ } |
+ |
+ void TaskRemoved(task_management::Task* task) override { |
+ CHECK(task); |
+ ASSERT_TRUE(provided_tasks_.count(task)); |
+ provided_tasks_.erase(task); |
+ } |
+ |
+ base::string16 GetPrerenderTitlePrefix() const { |
+ return l10n_util::GetStringFUTF16(IDS_TASK_MANAGER_PRERENDER_PREFIX, |
+ base::string16()); |
+ } |
+ |
+ task_management::WebContentsTagsManager* tags_manager() const { |
+ return task_management::WebContentsTagsManager::GetInstance(); |
+ } |
+ |
+ const std::set<task_management::Task*>& provided_tasks() const { |
+ return provided_tasks_; |
+ } |
+ |
+ private: |
+ std::set<task_management::Task*> provided_tasks_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(PrerenderTagTest); |
+}; |
+ |
+namespace { |
+const char kPrerenderPage[] = "files/prerender/prerender_page.html"; |
+} // namespace |
+ |
+// Tests the correct recording of tags for the prerender WebContents. |
+IN_PROC_BROWSER_TEST_F(PrerenderTagTest, Basic) { |
+ EXPECT_TRUE(tags_manager()->tracked_tags().empty()); |
+ |
+ // Start prerendering a page and make sure it's correctly tagged. |
+ PrerenderTestURL(kPrerenderPage, FINAL_STATUS_USED, 1); |
+ EXPECT_FALSE(tags_manager()->tracked_tags().empty()); |
+ EXPECT_EQ(1U, tags_manager()->tracked_tags().size()); |
ncarter (slow)
2015/06/19 19:50:51
FYI, this assert may come back to bite you, once y
afakhry
2015/06/19 21:49:22
Yes, thanks. I'm aware of that and hence the below
|
+ |
+ // Swap in the prerendered content and make sure its tag is removed. |
+ // TODO(afakhry): Once we start tagging the tab contents the below test |
+ // must be changed. |
+ NavigateToDestURL(); |
+ EXPECT_TRUE(tags_manager()->tracked_tags().empty()); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PrerenderTagTest, PrerenderTaskIsProvided) { |
+ EXPECT_TRUE(provided_tasks().empty()); |
+ EXPECT_TRUE(tags_manager()->tracked_tags().empty()); |
+ |
+ task_management::WebContentsTaskProvider provider; |
+ provider.SetObserver(this); |
+ |
+ // Still empty, no pre-existing tasks. |
+ EXPECT_TRUE(provided_tasks().empty()); |
+ |
+ // Start prerendering a page. |
+ PrerenderTestURL(kPrerenderPage, FINAL_STATUS_USED, 1); |
+ EXPECT_FALSE(tags_manager()->tracked_tags().empty()); |
+ EXPECT_EQ(1U, tags_manager()->tracked_tags().size()); |
+ ASSERT_FALSE(provided_tasks().empty()); |
+ |
+ // TODO(afakhry): The below may not be true after we support more tags. |
+ ASSERT_EQ(1U, provided_tasks().size()); |
+ |
+ const task_management::Task* task = *provided_tasks().begin(); |
+ EXPECT_EQ(task_management::Task::RENDERER, task->GetType()); |
+ const base::string16 title = task->title(); |
+ const base::string16 expected_prefix = GetPrerenderTitlePrefix(); |
+ EXPECT_TRUE(title.find(expected_prefix) != base::string16::npos); |
+ EXPECT_TRUE(title.find(expected_prefix) == 0); |
ncarter (slow)
2015/06/19 19:50:51
[Option A] EXPECT_TRUE(base::StartsWith(title, exp
afakhry
2015/06/19 21:49:21
Done [Option A].
|
+ |
+ NavigateToDestURL(); |
+ // TODO(afakhry): The below may not be true after we support more tags. |
+ EXPECT_TRUE(provided_tasks().empty()); |
+} |
+ |
+#endif // defined(ENABLE_TASK_MANAGER) |
+ |
} // namespace prerender |