| Index: chrome/browser/chrome_content_browser_client.cc
|
| ===================================================================
|
| --- chrome/browser/chrome_content_browser_client.cc (revision 269838)
|
| +++ 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,
|
|
|