Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Side by Side Diff: content/browser/renderer_host/render_process_host_impl.cc

Issue 2573213002: Consolidate all TDI SiteInstances into one render process. (Closed)
Patch Set: comment Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // Represents the browser side of the browser <--> renderer communication 5 // Represents the browser side of the browser <--> renderer communication
6 // channel. There will be one RenderProcessHost per renderer process. 6 // channel. There will be one RenderProcessHost per renderer process.
7 7
8 #include "content/browser/renderer_host/render_process_host_impl.h" 8 #include "content/browser/renderer_host/render_process_host_impl.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 1436 matching lines...) Expand 10 before | Expand all | Expand 10 after
1447 } 1447 }
1448 1448
1449 void RenderProcessHostImpl::Resume() { 1449 void RenderProcessHostImpl::Resume() {
1450 Send(new ChildProcessMsg_Resume()); 1450 Send(new ChildProcessMsg_Resume());
1451 } 1451 }
1452 1452
1453 mojom::Renderer* RenderProcessHostImpl::GetRendererInterface() { 1453 mojom::Renderer* RenderProcessHostImpl::GetRendererInterface() {
1454 return renderer_interface_.get(); 1454 return renderer_interface_.get();
1455 } 1455 }
1456 1456
1457 void RenderProcessHostImpl::SetIsNeverSuitableForReuse() {
1458 is_never_suitable_for_reuse_ = true;
1459 }
1460
1461 bool RenderProcessHostImpl::MayReuseHost() {
1462 if (is_never_suitable_for_reuse_)
1463 return false;
1464
1465 return GetContentClient()->browser()->MayReuseHost(this);
1466 }
1467
1457 mojom::RouteProvider* RenderProcessHostImpl::GetRemoteRouteProvider() { 1468 mojom::RouteProvider* RenderProcessHostImpl::GetRemoteRouteProvider() {
1458 return remote_route_provider_.get(); 1469 return remote_route_provider_.get();
1459 } 1470 }
1460 1471
1461 void RenderProcessHostImpl::AddRoute(int32_t routing_id, 1472 void RenderProcessHostImpl::AddRoute(int32_t routing_id,
1462 IPC::Listener* listener) { 1473 IPC::Listener* listener) {
1463 CHECK(!listeners_.Lookup(routing_id)) << "Found Routing ID Conflict: " 1474 CHECK(!listeners_.Lookup(routing_id)) << "Found Routing ID Conflict: "
1464 << routing_id; 1475 << routing_id;
1465 listeners_.AddWithID(listener, routing_id); 1476 listeners_.AddWithID(listener, routing_id);
1466 } 1477 }
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after
2509 // static 2520 // static
2510 RenderProcessHost* RenderProcessHost::GetExistingProcessHost( 2521 RenderProcessHost* RenderProcessHost::GetExistingProcessHost(
2511 BrowserContext* browser_context, 2522 BrowserContext* browser_context,
2512 const GURL& site_url) { 2523 const GURL& site_url) {
2513 // First figure out which existing renderers we can use. 2524 // First figure out which existing renderers we can use.
2514 std::vector<RenderProcessHost*> suitable_renderers; 2525 std::vector<RenderProcessHost*> suitable_renderers;
2515 suitable_renderers.reserve(g_all_hosts.Get().size()); 2526 suitable_renderers.reserve(g_all_hosts.Get().size());
2516 2527
2517 iterator iter(AllHostsIterator()); 2528 iterator iter(AllHostsIterator());
2518 while (!iter.IsAtEnd()) { 2529 while (!iter.IsAtEnd()) {
2519 if (GetContentClient()->browser()->MayReuseHost(iter.GetCurrentValue()) && 2530 if (iter.GetCurrentValue()->MayReuseHost() &&
2520 RenderProcessHostImpl::IsSuitableHost(iter.GetCurrentValue(), 2531 RenderProcessHostImpl::IsSuitableHost(iter.GetCurrentValue(),
2521 browser_context, site_url)) { 2532 browser_context, site_url)) {
2522 suitable_renderers.push_back(iter.GetCurrentValue()); 2533 suitable_renderers.push_back(iter.GetCurrentValue());
2523 } 2534 }
2524 iter.Advance(); 2535 iter.Advance();
2525 } 2536 }
2526 2537
2527 // Now pick a random suitable renderer, if we have any. 2538 // Now pick a random suitable renderer, if we have any.
2528 if (!suitable_renderers.empty()) { 2539 if (!suitable_renderers.empty()) {
2529 int suitable_count = static_cast<int>(suitable_renderers.size()); 2540 int suitable_count = static_cast<int>(suitable_renderers.size());
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2565 BrowserContext* browser_context, 2576 BrowserContext* browser_context,
2566 const GURL& url) { 2577 const GURL& url) {
2567 // Look up the map of site to process for the given browser_context. 2578 // Look up the map of site to process for the given browser_context.
2568 SiteProcessMap* map = GetSiteProcessMapForBrowserContext(browser_context); 2579 SiteProcessMap* map = GetSiteProcessMapForBrowserContext(browser_context);
2569 2580
2570 // See if we have an existing process with appropriate bindings for this site. 2581 // See if we have an existing process with appropriate bindings for this site.
2571 // If not, the caller should create a new process and register it. 2582 // If not, the caller should create a new process and register it.
2572 std::string site = 2583 std::string site =
2573 SiteInstance::GetSiteForURL(browser_context, url).possibly_invalid_spec(); 2584 SiteInstance::GetSiteForURL(browser_context, url).possibly_invalid_spec();
2574 RenderProcessHost* host = map->FindProcess(site); 2585 RenderProcessHost* host = map->FindProcess(site);
2575 if (host && (!GetContentClient()->browser()->MayReuseHost(host) || 2586 if (host && (!host->MayReuseHost() ||
2576 !IsSuitableHost(host, browser_context, url))) { 2587 !IsSuitableHost(host, browser_context, url))) {
2577 // The registered process does not have an appropriate set of bindings for 2588 // The registered process does not have an appropriate set of bindings for
2578 // the url. Remove it from the map so we can register a better one. 2589 // the url. Remove it from the map so we can register a better one.
2579 RecordAction( 2590 RecordAction(
2580 base::UserMetricsAction("BindingsMismatch_GetProcessHostPerSite")); 2591 base::UserMetricsAction("BindingsMismatch_GetProcessHostPerSite"));
2581 map->RemoveProcess(host); 2592 map->RemoveProcess(host);
2582 host = NULL; 2593 host = NULL;
2583 } 2594 }
2584 2595
2585 return host; 2596 return host;
(...skipping 433 matching lines...) Expand 10 before | Expand all | Expand 10 after
3019 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; 3030 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error;
3020 3031
3021 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. 3032 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing.
3022 // Capture the error message in a crash key value. 3033 // Capture the error message in a crash key value.
3023 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error); 3034 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error);
3024 bad_message::ReceivedBadMessage(render_process_id, 3035 bad_message::ReceivedBadMessage(render_process_id,
3025 bad_message::RPH_MOJO_PROCESS_ERROR); 3036 bad_message::RPH_MOJO_PROCESS_ERROR);
3026 } 3037 }
3027 3038
3028 } // namespace content 3039 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698