Chromium Code Reviews| Index: content/browser/frame_host/render_frame_message_filter.cc |
| diff --git a/content/browser/frame_host/render_frame_message_filter.cc b/content/browser/frame_host/render_frame_message_filter.cc |
| index a4a91b09e4869065e1ba2ea995e6442ea2a7d189..9776983665a13957b204f53c19fa4a090e58cacc 100644 |
| --- a/content/browser/frame_host/render_frame_message_filter.cc |
| +++ b/content/browser/frame_host/render_frame_message_filter.cc |
| @@ -233,7 +233,6 @@ bool RenderFrameMessageFilter::OnMessageReceived(const IPC::Message& message) { |
| bool handled = true; |
| IPC_BEGIN_MESSAGE_MAP(RenderFrameMessageFilter, message) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_CreateChildFrame, OnCreateChildFrame) |
| - IPC_MESSAGE_HANDLER_DELAY_REPLY(FrameHostMsg_GetCookies, OnGetCookies) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_CookiesEnabled, OnCookiesEnabled) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_DownloadUrl, OnDownloadUrl) |
| IPC_MESSAGE_HANDLER(FrameHostMsg_SaveImageFromDataURL, |
| @@ -308,46 +307,6 @@ void RenderFrameMessageFilter::OnCreateChildFrame( |
| params.frame_owner_properties, *new_routing_id)); |
| } |
| -void RenderFrameMessageFilter::OnGetCookies(int render_frame_id, |
| - const GURL& url, |
| - const GURL& first_party_for_cookies, |
| - IPC::Message* reply_msg) { |
| - ChildProcessSecurityPolicyImpl* policy = |
| - ChildProcessSecurityPolicyImpl::GetInstance(); |
| - if (!policy->CanAccessDataForOrigin(render_process_id_, url)) { |
| - bad_message::ReceivedBadMessage(this, |
| - bad_message::RFMF_GET_COOKIES_BAD_ORIGIN); |
| - delete reply_msg; |
| - return; |
| - } |
| - |
| - // If we crash here, figure out what URL the renderer was requesting. |
| - // http://crbug.com/99242 |
|
Ken Rockot(use gerrit already)
2016/08/02 20:42:37
Note: I removed this chunk of code because the bug
|
| - char url_buf[128]; |
| - base::strlcpy(url_buf, url.spec().c_str(), arraysize(url_buf)); |
| - base::debug::Alias(url_buf); |
| - |
| - net::URLRequestContext* context = GetRequestContextForURL(url); |
| - |
| - net::CookieOptions options; |
| - if (net::registry_controlled_domains::SameDomainOrHost( |
| - url, first_party_for_cookies, |
| - net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) { |
| - // TODO(mkwst): This check ought to further distinguish between frames |
| - // initiated in a strict or lax same-site context. |
| - options.set_same_site_cookie_mode( |
| - net::CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX); |
| - } else { |
| - options.set_same_site_cookie_mode( |
| - net::CookieOptions::SameSiteCookieMode::DO_NOT_INCLUDE); |
| - } |
| - |
| - context->cookie_store()->GetCookieListWithOptionsAsync( |
| - url, options, |
| - base::Bind(&RenderFrameMessageFilter::CheckPolicyForCookies, this, |
| - render_frame_id, url, first_party_for_cookies, reply_msg)); |
| -} |
| - |
| void RenderFrameMessageFilter::OnCookiesEnabled( |
| int render_frame_id, |
| const GURL& url, |
| @@ -365,7 +324,7 @@ void RenderFrameMessageFilter::CheckPolicyForCookies( |
| int render_frame_id, |
| const GURL& url, |
| const GURL& first_party_for_cookies, |
| - IPC::Message* reply_msg, |
| + const GetCookiesCallback& callback, |
| const net::CookieList& cookie_list) { |
| net::URLRequestContext* context = GetRequestContextForURL(url); |
| // Check the policy for get cookies, and pass cookie_list to the |
| @@ -374,20 +333,12 @@ void RenderFrameMessageFilter::CheckPolicyForCookies( |
| GetContentClient()->browser()->AllowGetCookie( |
| url, first_party_for_cookies, cookie_list, resource_context_, |
| render_process_id_, render_frame_id)) { |
| - SendGetCookiesResponse(reply_msg, |
| - net::CookieStore::BuildCookieLine(cookie_list)); |
| + callback.Run(net::CookieStore::BuildCookieLine(cookie_list)); |
| } else { |
| - SendGetCookiesResponse(reply_msg, std::string()); |
| + callback.Run(std::string()); |
| } |
| } |
| -void RenderFrameMessageFilter::SendGetCookiesResponse( |
| - IPC::Message* reply_msg, |
| - const std::string& cookies) { |
| - FrameHostMsg_GetCookies::WriteReplyParams(reply_msg, cookies); |
| - Send(reply_msg); |
| -} |
| - |
| void RenderFrameMessageFilter::OnDownloadUrl( |
| int render_view_id, |
| int render_frame_id, |
| @@ -464,6 +415,39 @@ void RenderFrameMessageFilter::SetCookie(int32_t render_frame_id, |
| } |
| } |
| +void RenderFrameMessageFilter::GetCookies(int render_frame_id, |
| + const GURL& url, |
| + const GURL& first_party_for_cookies, |
| + const GetCookiesCallback& callback) { |
| + ChildProcessSecurityPolicyImpl* policy = |
| + ChildProcessSecurityPolicyImpl::GetInstance(); |
| + if (!policy->CanAccessDataForOrigin(render_process_id_, url)) { |
| + bad_message::ReceivedBadMessage(this, |
| + bad_message::RFMF_GET_COOKIES_BAD_ORIGIN); |
| + callback.Run(std::string()); |
| + return; |
| + } |
| + |
| + net::CookieOptions options; |
| + if (net::registry_controlled_domains::SameDomainOrHost( |
| + url, first_party_for_cookies, |
| + net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES)) { |
| + // TODO(mkwst): This check ought to further distinguish between frames |
| + // initiated in a strict or lax same-site context. |
| + options.set_same_site_cookie_mode( |
| + net::CookieOptions::SameSiteCookieMode::INCLUDE_STRICT_AND_LAX); |
| + } else { |
| + options.set_same_site_cookie_mode( |
| + net::CookieOptions::SameSiteCookieMode::DO_NOT_INCLUDE); |
| + } |
| + |
| + net::URLRequestContext* context = GetRequestContextForURL(url); |
| + context->cookie_store()->GetCookieListWithOptionsAsync( |
| + url, options, |
| + base::Bind(&RenderFrameMessageFilter::CheckPolicyForCookies, this, |
| + render_frame_id, url, first_party_for_cookies, callback)); |
| +} |
| + |
| #if defined(ENABLE_PLUGINS) |
| void RenderFrameMessageFilter::OnGetPlugins( |