| // Copyright 2017 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chromecast/browser/renderer_prelauncher.h" |
| |
| #include <utility> |
| |
| #include "base/logging.h" |
| #include "content/public/browser/child_process_host.h" |
| #include "content/public/browser/render_process_host.h" |
| #include "content/public/browser/site_instance.h" |
| #include "ipc/ipc_message.h" |
| |
| namespace chromecast { |
| |
| RendererPrelauncher::RendererPrelauncher( |
| content::BrowserContext* browser_context, |
| const GURL& gurl) |
| : browser_context_(browser_context), |
| gurl_(gurl), |
| rph_routing_id_(MSG_ROUTING_NONE) {} |
| |
| RendererPrelauncher::~RendererPrelauncher() { |
| if (rph_routing_id_ != MSG_ROUTING_NONE) { |
| DCHECK(site_instance_); |
| site_instance_->GetProcess()->RemoveRoute(rph_routing_id_); |
| } |
| } |
| |
| void RendererPrelauncher::Prelaunch() { |
| DLOG(INFO) << "Prelaunching for: " << gurl_; |
| site_instance_ = content::SiteInstance::CreateForURL(browser_context_, gurl_); |
| content::RenderProcessHost* rph = site_instance_->GetProcess(); |
| rph_routing_id_ = rph->GetNextRoutingID(); |
| rph->AddRoute(rph_routing_id_, this); |
| rph->Init(); |
| } |
| |
| bool RendererPrelauncher::IsForURL(const GURL& gurl) const { |
| if (!site_instance()) |
| return gurl_ == gurl; |
| return site_instance() == site_instance()->GetRelatedSiteInstance(gurl); |
| } |
| |
| // We don't process any IPC messages, but we do register as an IPC receiver to |
| // keep the RenderProcessHost alive. |
| bool RendererPrelauncher::OnMessageReceived(const IPC::Message& message) { |
| return false; |
| } |
| |
| } // namespace chromecast |