Index: chrome/browser/chrome_content_browser_client.cc |
=================================================================== |
--- chrome/browser/chrome_content_browser_client.cc (revision 269781) |
+++ chrome/browser/chrome_content_browser_client.cc (working copy) |
@@ -630,7 +630,8 @@ |
namespace chrome { |
-ChromeContentBrowserClient::ChromeContentBrowserClient() { |
+ChromeContentBrowserClient::ChromeContentBrowserClient() |
+ : prerender_tracker_(NULL) { |
#if defined(ENABLE_PLUGINS) |
for (size_t i = 0; i < arraysize(kPredefinedAllowedFileHandleOrigins); ++i) |
allowed_file_handle_origins_.insert(kPredefinedAllowedFileHandleOrigins[i]); |
@@ -1214,6 +1215,24 @@ |
privilege_required; |
} |
+bool ChromeContentBrowserClient::MayReuseHost( |
+ content::RenderProcessHost* process_host) { |
+ // If there is currently a prerender in progress for the host provided, |
+ // it may not be shared. We require prerenders to be by themselves in a |
+ // separate process, so that we can monitor their resource usage, and so that |
+ // we can track the cookies that they change. |
+ Profile* profile = Profile::FromBrowserContext( |
+ process_host->GetBrowserContext()); |
+ prerender::PrerenderManager* prerender_manager = |
+ prerender::PrerenderManagerFactory::GetForProfile(profile); |
+ if (prerender_manager && |
+ prerender_manager->IsProcessPrerendering(process_host)) { |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
// This function is trying to limit the amount of processes used by extensions |
// with background pages. It uses a globally set percentage of processes to |
// run such extensions and if the limit is exceeded, it returns true, to |
@@ -1765,6 +1784,13 @@ |
CookieSettings* cookie_settings = io_data->GetCookieSettings(); |
bool allow = cookie_settings->IsSettingCookieAllowed(url, first_party); |
+ if (prerender_tracker_) { |
+ prerender_tracker_->OnCookieChangedForURL( |
+ render_process_id, |
+ context->GetRequestContext()->cookie_store()->GetCookieMonster(), |
+ url); |
+ } |
+ |
BrowserThread::PostTask( |
BrowserThread::UI, FROM_HERE, |
base::Bind(&TabSpecificContentSettings::CookieChanged, render_process_id, |
@@ -2211,6 +2237,8 @@ |
} |
void ChromeContentBrowserClient::ResourceDispatcherHostCreated() { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
+ prerender_tracker_ = g_browser_process->prerender_tracker(); |
return g_browser_process->ResourceDispatcherHostCreated(); |
} |
@@ -2698,6 +2726,16 @@ |
#endif |
} |
+net::CookieStore* |
+ChromeContentBrowserClient::OverrideCookieStoreForRenderProcess( |
+ int render_process_id) { |
+ DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
+ if (!prerender_tracker_) |
+ return NULL; |
+ return prerender_tracker_-> |
+ GetPrerenderCookieStoreForRenderProcess(render_process_id); |
+} |
+ |
#if defined(ENABLE_WEBRTC) |
void ChromeContentBrowserClient::MaybeCopyDisableWebRtcEncryptionSwitch( |
CommandLine* to_command_line, |