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

Side by Side Diff: content/browser/tab_contents/render_view_host_manager.cc

Issue 7464009: Removal of Profile from content part 1. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: browser_context Created 9 years, 5 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 #include "content/browser/tab_contents/render_view_host_manager.h" 5 #include "content/browser/tab_contents/render_view_host_manager.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/browser/content_browser_client.h" 9 #include "content/browser/content_browser_client.h"
10 #include "content/browser/renderer_host/render_view_host.h" 10 #include "content/browser/renderer_host/render_view_host.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
49 render_view_host->Shutdown(); 49 render_view_host->Shutdown();
50 50
51 // Shut down any swapped out RenderViewHosts. 51 // Shut down any swapped out RenderViewHosts.
52 for (RenderViewHostMap::iterator iter = swapped_out_hosts_.begin(); 52 for (RenderViewHostMap::iterator iter = swapped_out_hosts_.begin();
53 iter != swapped_out_hosts_.end(); 53 iter != swapped_out_hosts_.end();
54 ++iter) { 54 ++iter) {
55 iter->second->Shutdown(); 55 iter->second->Shutdown();
56 } 56 }
57 } 57 }
58 58
59 void RenderViewHostManager::Init(Profile* profile, 59 void RenderViewHostManager::Init(content::BrowserContext* context,
60 SiteInstance* site_instance, 60 SiteInstance* site_instance,
61 int routing_id) { 61 int routing_id) {
62 // Create a RenderViewHost, once we have an instance. It is important to 62 // Create a RenderViewHost, once we have an instance. It is important to
63 // immediately give this SiteInstance to a RenderViewHost so that it is 63 // immediately give this SiteInstance to a RenderViewHost so that it is
64 // ref counted. 64 // ref counted.
65 if (!site_instance) 65 if (!site_instance)
66 site_instance = SiteInstance::CreateSiteInstance(profile); 66 site_instance = SiteInstance::CreateSiteInstance(context);
67 render_view_host_ = RenderViewHostFactory::Create( 67 render_view_host_ = RenderViewHostFactory::Create(
68 site_instance, render_view_delegate_, routing_id, delegate_-> 68 site_instance, render_view_delegate_, routing_id, delegate_->
69 GetControllerForRenderManager().session_storage_namespace()); 69 GetControllerForRenderManager().session_storage_namespace());
70 70
71 // Keep track of renderer processes as they start to shut down. 71 // Keep track of renderer processes as they start to shut down.
72 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSING, 72 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSING,
73 NotificationService::AllSources()); 73 NotificationService::AllSources());
74 } 74 }
75 75
76 RenderWidgetHostView* RenderViewHostManager::GetRenderWidgetHostView() const { 76 RenderWidgetHostView* RenderViewHostManager::GetRenderWidgetHostView() const {
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 DCHECK(new_entry); 339 DCHECK(new_entry);
340 340
341 // Check for reasons to swap processes even if we are in a process model that 341 // Check for reasons to swap processes even if we are in a process model that
342 // doesn't usually swap (e.g., process-per-tab). 342 // doesn't usually swap (e.g., process-per-tab).
343 343
344 // For security, we should transition between processes when one is a Web UI 344 // For security, we should transition between processes when one is a Web UI
345 // page and one isn't. If there's no cur_entry, check the current RVH's 345 // page and one isn't. If there's no cur_entry, check the current RVH's
346 // site, which might already be committed to a Web UI URL (such as the NTP). 346 // site, which might already be committed to a Web UI URL (such as the NTP).
347 const GURL& current_url = (cur_entry) ? cur_entry->url() : 347 const GURL& current_url = (cur_entry) ? cur_entry->url() :
348 render_view_host_->site_instance()->site(); 348 render_view_host_->site_instance()->site();
349 Profile* profile = delegate_->GetControllerForRenderManager().profile(); 349 content::BrowserContext* browser_context =
350 delegate_->GetControllerForRenderManager().browser_context();
350 const content::WebUIFactory* web_ui_factory = content::WebUIFactory::Get(); 351 const content::WebUIFactory* web_ui_factory = content::WebUIFactory::Get();
351 if (web_ui_factory->UseWebUIForURL(profile, current_url)) { 352 if (web_ui_factory->UseWebUIForURL(browser_context, current_url)) {
352 // Force swap if it's not an acceptable URL for Web UI. 353 // Force swap if it's not an acceptable URL for Web UI.
353 if (!web_ui_factory->IsURLAcceptableForWebUI(profile, new_entry->url())) 354 if (!web_ui_factory->IsURLAcceptableForWebUI(browser_context,
355 new_entry->url()))
354 return true; 356 return true;
355 } else { 357 } else {
356 // Force swap if it's a Web UI URL. 358 // Force swap if it's a Web UI URL.
357 if (web_ui_factory->UseWebUIForURL(profile, new_entry->url())) 359 if (web_ui_factory->UseWebUIForURL(browser_context, new_entry->url()))
358 return true; 360 return true;
359 } 361 }
360 362
361 if (!cur_entry) { 363 if (!cur_entry) {
362 // Always choose a new process when navigating to extension URLs. The 364 // Always choose a new process when navigating to extension URLs. The
363 // process grouping logic will combine all of a given extension's pages 365 // process grouping logic will combine all of a given extension's pages
364 // into the same process. 366 // into the same process.
365 if (new_entry->url().SchemeIs(chrome::kExtensionScheme)) 367 if (new_entry->url().SchemeIs(chrome::kExtensionScheme))
366 return true; 368 return true;
367 369
(...skipping 18 matching lines...) Expand all
386 return false; 388 return false;
387 } 389 }
388 390
389 SiteInstance* RenderViewHostManager::GetSiteInstanceForEntry( 391 SiteInstance* RenderViewHostManager::GetSiteInstanceForEntry(
390 const NavigationEntry& entry, 392 const NavigationEntry& entry,
391 SiteInstance* curr_instance) { 393 SiteInstance* curr_instance) {
392 // NOTE: This is only called when ShouldTransitionCrossSite is true. 394 // NOTE: This is only called when ShouldTransitionCrossSite is true.
393 395
394 const GURL& dest_url = entry.url(); 396 const GURL& dest_url = entry.url();
395 NavigationController& controller = delegate_->GetControllerForRenderManager(); 397 NavigationController& controller = delegate_->GetControllerForRenderManager();
396 Profile* profile = controller.profile(); 398 content::BrowserContext* browser_context = controller.browser_context();
397 399
398 // If the entry has an instance already we should use it, unless the URL 400 // If the entry has an instance already we should use it, unless the URL
399 // is part of an app that has been installed or uninstalled since the last 401 // is part of an app that has been installed or uninstalled since the last
400 // visit. 402 // visit.
401 if (entry.site_instance()) { 403 if (entry.site_instance()) {
402 if (entry.site_instance()->HasWrongProcessForURL(dest_url)) 404 if (entry.site_instance()->HasWrongProcessForURL(dest_url))
403 return curr_instance->GetRelatedSiteInstance(dest_url); 405 return curr_instance->GetRelatedSiteInstance(dest_url);
404 else 406 else
405 return entry.site_instance(); 407 return entry.site_instance();
406 } 408 }
(...skipping 23 matching lines...) Expand all
430 // to compare against the current URL and not the SiteInstance's site. In 432 // to compare against the current URL and not the SiteInstance's site. In
431 // this case, there is no current URL, so comparing against the site is ok. 433 // this case, there is no current URL, so comparing against the site is ok.
432 // See additional comments below.) 434 // See additional comments below.)
433 if (curr_instance->HasRelatedSiteInstance(dest_url)) 435 if (curr_instance->HasRelatedSiteInstance(dest_url))
434 return curr_instance->GetRelatedSiteInstance(dest_url); 436 return curr_instance->GetRelatedSiteInstance(dest_url);
435 437
436 // For extensions and Web UI URLs (such as the new tab page), we do not 438 // For extensions and Web UI URLs (such as the new tab page), we do not
437 // want to use the curr_instance if it has no site, since it will have a 439 // want to use the curr_instance if it has no site, since it will have a
438 // RenderProcessHost of TYPE_NORMAL. Create a new SiteInstance for this 440 // RenderProcessHost of TYPE_NORMAL. Create a new SiteInstance for this
439 // URL instead (with the correct process type). 441 // URL instead (with the correct process type).
440 if (content::WebUIFactory::Get()->UseWebUIForURL(profile, dest_url)) { 442 if (content::WebUIFactory::Get()->UseWebUIForURL(browser_context,
441 return SiteInstance::CreateSiteInstanceForURL(profile, dest_url); 443 dest_url)) {
444 return SiteInstance::CreateSiteInstanceForURL(browser_context, dest_url);
442 } 445 }
443 446
444 // Normally the "site" on the SiteInstance is set lazily when the load 447 // Normally the "site" on the SiteInstance is set lazily when the load
445 // actually commits. This is to support better process sharing in case 448 // actually commits. This is to support better process sharing in case
446 // the site redirects to some other site: we want to use the destination 449 // the site redirects to some other site: we want to use the destination
447 // site in the site instance. 450 // site in the site instance.
448 // 451 //
449 // In the case of session restore, as it loads all the pages immediately 452 // In the case of session restore, as it loads all the pages immediately
450 // we need to set the site first, otherwise after a restore none of the 453 // we need to set the site first, otherwise after a restore none of the
451 // pages would share renderers in process-per-site. 454 // pages would share renderers in process-per-site.
(...skipping 28 matching lines...) Expand all
480 // new process unnecessarily. We should only hit this case if a page tries 483 // new process unnecessarily. We should only hit this case if a page tries
481 // to open a new tab to an interstitial-inducing URL, and then navigates 484 // to open a new tab to an interstitial-inducing URL, and then navigates
482 // the page to a different same-site URL. (This seems very unlikely in 485 // the page to a different same-site URL. (This seems very unlikely in
483 // practice.) 486 // practice.)
484 const GURL& current_url = (curr_entry) ? curr_entry->url() : 487 const GURL& current_url = (curr_entry) ? curr_entry->url() :
485 curr_instance->site(); 488 curr_instance->site();
486 489
487 // Use the current SiteInstance for same site navigations, as long as the 490 // Use the current SiteInstance for same site navigations, as long as the
488 // process type is correct. (The URL may have been installed as an app since 491 // process type is correct. (The URL may have been installed as an app since
489 // the last time we visited it.) 492 // the last time we visited it.)
490 if (SiteInstance::IsSameWebSite(profile, current_url, dest_url) && 493 if (SiteInstance::IsSameWebSite(browser_context, current_url, dest_url) &&
491 !curr_instance->HasWrongProcessForURL(dest_url)) { 494 !curr_instance->HasWrongProcessForURL(dest_url)) {
492 return curr_instance; 495 return curr_instance;
493 } else if (ShouldSwapProcessesForNavigation(curr_entry, &entry)) { 496 } else if (ShouldSwapProcessesForNavigation(curr_entry, &entry)) {
494 // When we're swapping, we need to force the site instance AND browsing 497 // When we're swapping, we need to force the site instance AND browsing
495 // instance to be different ones. This addresses special cases where we use 498 // instance to be different ones. This addresses special cases where we use
496 // a single BrowsingInstance for all pages of a certain type (e.g., New Tab 499 // a single BrowsingInstance for all pages of a certain type (e.g., New Tab
497 // Pages), keeping them in the same process. When you navigate away from 500 // Pages), keeping them in the same process. When you navigate away from
498 // that page, we want to explicity ignore that BrowsingInstance and group 501 // that page, we want to explicity ignore that BrowsingInstance and group
499 // this page into the appropriate SiteInstance for its URL. 502 // this page into the appropriate SiteInstance for its URL.
500 return SiteInstance::CreateSiteInstanceForURL(profile, dest_url); 503 return SiteInstance::CreateSiteInstanceForURL(browser_context, dest_url);
501 } else { 504 } else {
502 // Start the new renderer in a new SiteInstance, but in the current 505 // Start the new renderer in a new SiteInstance, but in the current
503 // BrowsingInstance. It is important to immediately give this new 506 // BrowsingInstance. It is important to immediately give this new
504 // SiteInstance to a RenderViewHost (if it is different than our current 507 // SiteInstance to a RenderViewHost (if it is different than our current
505 // SiteInstance), so that it is ref counted. This will happen in 508 // SiteInstance), so that it is ref counted. This will happen in
506 // CreatePendingRenderView. 509 // CreatePendingRenderView.
507 return curr_instance->GetRelatedSiteInstance(dest_url); 510 return curr_instance->GetRelatedSiteInstance(dest_url);
508 } 511 }
509 } 512 }
510 513
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after
863 delegate_->NotifySwappedFromRenderManager(); 866 delegate_->NotifySwappedFromRenderManager();
864 } 867 }
865 868
866 bool RenderViewHostManager::IsSwappedOut(RenderViewHost* rvh) { 869 bool RenderViewHostManager::IsSwappedOut(RenderViewHost* rvh) {
867 if (!rvh->site_instance()) 870 if (!rvh->site_instance())
868 return false; 871 return false;
869 872
870 return swapped_out_hosts_.find(rvh->site_instance()->id()) != 873 return swapped_out_hosts_.find(rvh->site_instance()->id()) !=
871 swapped_out_hosts_.end(); 874 swapped_out_hosts_.end();
872 } 875 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698