New Task Manager - Phase 1.3.2: Implement Tab Contents Task Providing

Part 2: Implementing a task-manager representation of WebContents owned
by the prerender manager.

[email protected]
BUG=470990
TEST=browser_tests --gtest_filter=PrerenderBrowserTest.TaskManagement*

Review URL: https://codereview.chromium.org/1185183008

Cr-Commit-Position: refs/heads/master@{#335788}
diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
index fb7daa9..d9da339 100644
--- a/chrome/browser/prerender/prerender_contents.cc
+++ b/chrome/browser/prerender/prerender_contents.cc
@@ -19,6 +19,7 @@
 #include "chrome/browser/prerender/prerender_manager_factory.h"
 #include "chrome/browser/prerender/prerender_resource_throttle.h"
 #include "chrome/browser/profiles/profile.h"
+#include "chrome/browser/task_management/web_contents_tags.h"
 #include "chrome/browser/ui/browser.h"
 #include "chrome/browser/ui/tab_helpers.h"
 #include "chrome/browser/ui/web_contents_sizer.h"
@@ -279,6 +280,11 @@
   TabHelpers::AttachTabHelpers(prerender_contents_.get());
   content::WebContentsObserver::Observe(prerender_contents_.get());
 
+  // Tag the prerender contents with the task manager specific prerender tag, so
+  // that it shows up in the task manager.
+  task_management::WebContentsTags::CreateForPrerenderContents(
+      prerender_contents_.get());
+
   web_contents_delegate_.reset(new WebContentsDelegateImpl(this));
   prerender_contents_.get()->SetDelegate(web_contents_delegate_.get());
   // Set the size of the prerender WebContents.
@@ -671,6 +677,11 @@
 WebContents* PrerenderContents::ReleasePrerenderContents() {
   prerender_contents_->SetDelegate(NULL);
   content::WebContentsObserver::Observe(NULL);
+
+  // Clear the task manager tag we added earlier to our
+  // WebContents since it's no longer a prerender contents.
+  task_management::WebContentsTags::ClearTag(prerender_contents_.get());
+
   return prerender_contents_.release();
 }