Index: content/browser/renderer_host/render_message_filter.cc |
=================================================================== |
--- content/browser/renderer_host/render_message_filter.cc (revision 256594) |
+++ content/browser/renderer_host/render_message_filter.cc (working copy) |
@@ -583,9 +583,9 @@ |
if (GetContentClient()->browser()->AllowSetCookie( |
url, first_party_for_cookies, cookie, resource_context_, |
render_process_id_, render_frame_id, &options)) { |
- net::URLRequestContext* context = GetRequestContextForURL(url); |
+ net::CookieStore* cookie_store = GetCookieStoreForURL(url); |
// Pass a null callback since we don't care about when the 'set' completes. |
- context->cookie_store()->SetCookieWithOptionsAsync( |
+ cookie_store->SetCookieWithOptionsAsync( |
url, cookie, options, net::CookieMonster::SetCookiesCallback()); |
} |
} |
@@ -607,9 +607,8 @@ |
base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); |
base::debug::Alias(url_buf); |
- net::URLRequestContext* context = GetRequestContextForURL(url); |
- net::CookieMonster* cookie_monster = |
- context->cookie_store()->GetCookieMonster(); |
+ net::CookieStore* cookie_store = GetCookieStoreForURL(url); |
+ net::CookieMonster* cookie_monster = cookie_store->GetCookieMonster(); |
cookie_monster->GetAllCookiesForURLAsync( |
url, base::Bind(&RenderMessageFilter::CheckPolicyForCookies, this, |
render_frame_id, url, first_party_for_cookies, |
@@ -635,9 +634,8 @@ |
// We check policy here to avoid sending back cookies that would not normally |
// be applied to outbound requests for the given URL. Since this cookie info |
// is visible in the developer tools, it is helpful to make it match reality. |
- net::URLRequestContext* context = GetRequestContextForURL(url); |
- net::CookieMonster* cookie_monster = |
- context->cookie_store()->GetCookieMonster(); |
+ net::CookieStore* cookie_store = GetCookieStoreForURL(url); |
+ net::CookieMonster* cookie_monster = cookie_store->GetCookieMonster(); |
cookie_monster->GetAllCookiesForURLAsync( |
url, base::Bind(&RenderMessageFilter::SendGetRawCookiesResponse, |
this, reply_msg)); |
@@ -650,8 +648,8 @@ |
if (!policy->CanAccessCookiesForOrigin(render_process_id_, url)) |
return; |
- net::URLRequestContext* context = GetRequestContextForURL(url); |
- context->cookie_store()->DeleteCookieAsync(url, cookie_name, base::Closure()); |
+ net::CookieStore* cookie_store = GetCookieStoreForURL(url); |
+ cookie_store->DeleteCookieAsync(url, cookie_name, base::Closure()); |
} |
void RenderMessageFilter::OnCookiesEnabled( |
@@ -885,9 +883,17 @@ |
const base::string16& suggested_name) { |
scoped_ptr<DownloadSaveInfo> save_info(new DownloadSaveInfo()); |
save_info->suggested_name = suggested_name; |
+ |
+ // There may be a special cookie store that we could use for this download, |
+ // rather than the default one. Since this feature is generally only used for |
+ // proper render views, and not downloads, we do not need to retrieve the |
+ // special cookie store here, but just initialize the request to use the |
+ // default cookie store. |
+ // TODO(tburkard): retrieve the appropriate special cookie store, if this |
+ // is ever to be used for downloads as well. |
scoped_ptr<net::URLRequest> request( |
resource_context_->GetRequestContext()->CreateRequest( |
- url, net::DEFAULT_PRIORITY, NULL)); |
+ url, net::DEFAULT_PRIORITY, NULL, NULL)); |
RecordDownloadSource(INITIATED_BY_RENDERER); |
resource_dispatcher_host_->BeginDownload( |
request.Pass(), |
@@ -920,17 +926,30 @@ |
buffer_size, PeerHandle(), handle); |
} |
-net::URLRequestContext* RenderMessageFilter::GetRequestContextForURL( |
+net::CookieStore* RenderMessageFilter::GetCookieStoreForURL( |
const GURL& url) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
net::URLRequestContext* context = |
GetContentClient()->browser()->OverrideRequestContextForURL( |
url, resource_context_); |
- if (!context) |
- context = request_context_->GetURLRequestContext(); |
- return context; |
+ // If we should use a special URLRequestContext rather than the default one, |
+ // return the cookie store of that special URLRequestContext. |
+ if (context) |
+ return context->cookie_store(); |
+ |
+ // Otherwise, if there is a special cookie store to be used for this process, |
+ // return that cookie store. |
+ net::CookieStore* cookie_store = |
+ GetContentClient()->browser()->OverrideCookieStoreForRenderProcess( |
+ render_process_id_); |
+ if (cookie_store) |
+ return cookie_store; |
+ |
+ // Otherwise, return the cookie store of the default request context used |
+ // for this renderer. |
+ return request_context_->GetURLRequestContext()->cookie_store(); |
} |
#if defined(OS_POSIX) && !defined(TOOLKIT_GTK) && !defined(OS_ANDROID) |
@@ -1053,14 +1072,14 @@ |
const GURL& first_party_for_cookies, |
IPC::Message* reply_msg, |
const net::CookieList& cookie_list) { |
- net::URLRequestContext* context = GetRequestContextForURL(url); |
+ net::CookieStore* cookie_store = GetCookieStoreForURL(url); |
// Check the policy for get cookies, and pass cookie_list to the |
// TabSpecificContentSetting for logging purpose. |
if (GetContentClient()->browser()->AllowGetCookie( |
url, first_party_for_cookies, cookie_list, resource_context_, |
render_process_id_, render_frame_id)) { |
// Gets the cookies from cookie store if allowed. |
- context->cookie_store()->GetCookiesWithOptionsAsync( |
+ cookie_store->GetCookiesWithOptionsAsync( |
url, net::CookieOptions(), |
base::Bind(&RenderMessageFilter::SendGetCookiesResponse, |
this, reply_msg)); |