| Index: chrome/browser/prerender/prerender_contents.cc
 | 
| diff --git a/chrome/browser/prerender/prerender_contents.cc b/chrome/browser/prerender/prerender_contents.cc
 | 
| index 54ae9d016d323cdea5852991d649319fc19d92bc..7562414f8f54c32b44410f2889810addf290931a 100644
 | 
| --- a/chrome/browser/prerender/prerender_contents.cc
 | 
| +++ b/chrome/browser/prerender/prerender_contents.cc
 | 
| @@ -36,6 +36,7 @@
 | 
|  
 | 
|  using content::DownloadItem;
 | 
|  using content::OpenURLParams;
 | 
| +using content::RenderProcessHost;
 | 
|  using content::RenderViewHost;
 | 
|  using content::ResourceRedirectDetails;
 | 
|  using content::SessionStorageNamespace;
 | 
| @@ -43,33 +44,6 @@ using content::WebContents;
 | 
|  
 | 
|  namespace prerender {
 | 
|  
 | 
| -namespace {
 | 
| -
 | 
| -// Tells the render process at |child_id| whether |url| is a new prerendered
 | 
| -// page, or whether |url| is being removed as a prerendered page. Currently
 | 
| -// this will only inform the render process that created the prerendered page
 | 
| -// with <link rel="prerender"> tags about it. This means that if the user
 | 
| -// clicks on a link for a prerendered URL in a different page, the prerender
 | 
| -// will not be swapped in.
 | 
| -void InformRenderProcessAboutPrerender(const GURL& url,
 | 
| -                                       bool is_add,
 | 
| -                                       int child_id) {
 | 
| -  if (child_id < 0)
 | 
| -    return;
 | 
| -  content::RenderProcessHost* render_process_host =
 | 
| -      content::RenderProcessHost::FromID(child_id);
 | 
| -  if (!render_process_host)
 | 
| -    return;
 | 
| -  IPC::Message* message = NULL;
 | 
| -  if (is_add)
 | 
| -    message = new PrerenderMsg_AddPrerenderURL(url);
 | 
| -  else
 | 
| -    message = new PrerenderMsg_RemovePrerenderURL(url);
 | 
| -  render_process_host->Send(message);
 | 
| -}
 | 
| -
 | 
| -}  // namespace
 | 
| -
 | 
|  class PrerenderContentsFactoryImpl : public PrerenderContents::Factory {
 | 
|   public:
 | 
|    virtual PrerenderContents* CreatePrerenderContents(
 | 
| @@ -294,6 +268,7 @@ PrerenderContents::Factory* PrerenderContents::CreateFactory() {
 | 
|  
 | 
|  void PrerenderContents::StartPrerendering(
 | 
|      int creator_child_id,
 | 
| +    int prerender_id,
 | 
|      const gfx::Size& size,
 | 
|      SessionStorageNamespace* session_storage_namespace,
 | 
|      bool is_control_group) {
 | 
| @@ -306,11 +281,12 @@ void PrerenderContents::StartPrerendering(
 | 
|    DCHECK_EQ(1U, alias_urls_.size());
 | 
|  
 | 
|    creator_child_id_ = creator_child_id;
 | 
| +  prerender_id_ = prerender_id;
 | 
|    session_storage_namespace_id_ = session_storage_namespace->id();
 | 
|    size_ = size;
 | 
|  
 | 
| -  InformRenderProcessAboutPrerender(prerender_url_, true,
 | 
| -                                    creator_child_id_);
 | 
| +  if (RenderProcessHost* host = RenderProcessHost::FromID(creator_child_id_))
 | 
| +    host->Send(new PrerenderMsg_StartedPrerender(prerender_id_));
 | 
|  
 | 
|    DCHECK(load_start_time_.is_null());
 | 
|    load_start_time_ = base::TimeTicks::Now();
 | 
| @@ -409,24 +385,18 @@ void PrerenderContents::set_final_status(FinalStatus final_status) {
 | 
|  }
 | 
|  
 | 
|  PrerenderContents::~PrerenderContents() {
 | 
| -  DCHECK(final_status_ != FINAL_STATUS_MAX);
 | 
| -  DCHECK(prerendering_has_been_cancelled_ ||
 | 
| -         final_status_ == FINAL_STATUS_USED);
 | 
| -  DCHECK(origin_ != ORIGIN_MAX);
 | 
| +  DCHECK_NE(FINAL_STATUS_MAX, final_status_);
 | 
| +  DCHECK(
 | 
| +      prerendering_has_been_cancelled_ || final_status_ == FINAL_STATUS_USED);
 | 
| +  DCHECK_NE(ORIGIN_MAX, origin_);
 | 
|  
 | 
|    prerender_manager_->RecordFinalStatusWithMatchCompleteStatus(
 | 
| -      origin_,
 | 
| -      experiment_id_,
 | 
| -      match_complete_status_,
 | 
| -      final_status_);
 | 
| +      origin_, experiment_id_, match_complete_status_, final_status_);
 | 
|  
 | 
|    if (child_id_ != -1 && route_id_ != -1) {
 | 
|      prerender_tracker_->OnPrerenderingFinished(child_id_, route_id_);
 | 
| -    for (std::vector<GURL>::const_iterator it = alias_urls_.begin();
 | 
| -         it != alias_urls_.end();
 | 
| -         ++it) {
 | 
| -      InformRenderProcessAboutPrerender(*it, false, creator_child_id_);
 | 
| -    }
 | 
| +    if (RenderProcessHost* host = RenderProcessHost::FromID(creator_child_id_))
 | 
| +      host->Send(new PrerenderMsg_StoppedPrerender(prerender_id_));
 | 
|    }
 | 
|  
 | 
|    // If we still have a WebContents, clean up anything we need to and then
 | 
| @@ -549,7 +519,8 @@ bool PrerenderContents::AddAliasURL(const GURL& url) {
 | 
|    }
 | 
|  
 | 
|    alias_urls_.push_back(url);
 | 
| -  InformRenderProcessAboutPrerender(url, true, creator_child_id_);
 | 
| +  if (RenderProcessHost* host = RenderProcessHost::FromID(creator_child_id_))
 | 
| +    host->Send(new PrerenderMsg_AddAliasToPrerender(prerender_id_, url));
 | 
|    return true;
 | 
|  }
 | 
|  
 | 
| 
 |