| Index: content/browser/web_contents/render_view_host_manager.cc
 | 
| diff --git a/content/browser/web_contents/render_view_host_manager.cc b/content/browser/web_contents/render_view_host_manager.cc
 | 
| index a440682fe717a3c72186c13fef1a9bacc033150d..0ac69fb8bf756d455bb2c08bbb8084053cd42d74 100644
 | 
| --- a/content/browser/web_contents/render_view_host_manager.cc
 | 
| +++ b/content/browser/web_contents/render_view_host_manager.cc
 | 
| @@ -9,6 +9,7 @@
 | 
|  #include "base/command_line.h"
 | 
|  #include "base/logging.h"
 | 
|  #include "content/browser/debugger/devtools_manager_impl.h"
 | 
| +#include "content/browser/renderer_host/render_process_host_impl.h"
 | 
|  #include "content/browser/renderer_host/render_view_host_factory.h"
 | 
|  #include "content/browser/renderer_host/render_view_host_impl.h"
 | 
|  #include "content/browser/site_instance_impl.h"
 | 
| @@ -29,6 +30,8 @@
 | 
|  using content::NavigationController;
 | 
|  using content::NavigationEntry;
 | 
|  using content::NavigationEntryImpl;
 | 
| +using content::RenderProcessHost;
 | 
| +using content::RenderProcessHostImpl;
 | 
|  using content::RenderViewHost;
 | 
|  using content::RenderViewHostImpl;
 | 
|  using content::RenderWidgetHostView;
 | 
| @@ -255,7 +258,7 @@ void RenderViewHostManager::RendererAbortedProvisionalLoad(
 | 
|  }
 | 
|  
 | 
|  void RenderViewHostManager::RendererProcessClosing(
 | 
| -    content::RenderProcessHost* render_process_host) {
 | 
| +    RenderProcessHost* render_process_host) {
 | 
|    // Remove any swapped out RVHs from this process, so that we don't try to
 | 
|    // swap them back in while the process is exiting.  Start by finding them,
 | 
|    // since there could be more than one.
 | 
| @@ -344,7 +347,7 @@ void RenderViewHostManager::Observe(
 | 
|    switch (type) {
 | 
|      case content::NOTIFICATION_RENDERER_PROCESS_CLOSING:
 | 
|        RendererProcessClosing(
 | 
| -          content::Source<content::RenderProcessHost>(source).ptr());
 | 
| +          content::Source<RenderProcessHost>(source).ptr());
 | 
|        break;
 | 
|  
 | 
|      default:
 | 
| @@ -463,8 +466,19 @@ SiteInstance* RenderViewHostManager::GetSiteInstanceForEntry(
 | 
|      // to compare against the current URL and not the SiteInstance's site.  In
 | 
|      // this case, there is no current URL, so comparing against the site is ok.
 | 
|      // See additional comments below.)
 | 
| -    if (curr_site_instance->HasRelatedSiteInstance(dest_url))
 | 
| +    //
 | 
| +    // Also, if the URL should use process-per-site mode and there is an
 | 
| +    // existing process for the site, we should use it.  We can call
 | 
| +    // GetRelatedSiteInstance() for this, which will eagerly set the site and
 | 
| +    // thus use the correct process.
 | 
| +    bool use_process_per_site =
 | 
| +        RenderProcessHostImpl::ShouldUseProcessPerSite(browser_context,
 | 
| +                                                       dest_url) &&
 | 
| +        RenderProcessHostImpl::GetProcessHostForSite(browser_context, dest_url);
 | 
| +    if (curr_site_instance->HasRelatedSiteInstance(dest_url) ||
 | 
| +        use_process_per_site) {
 | 
|        return curr_site_instance->GetRelatedSiteInstance(dest_url);
 | 
| +    }
 | 
|  
 | 
|      // For extensions, Web UI URLs (such as the new tab page), and apps we do
 | 
|      // not want to use the curr_instance if it has no site, since it will have a
 | 
| 
 |