OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/loader/cross_site_resource_handler.h" | 5 #include "content/browser/loader/cross_site_resource_handler.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/command_line.h" | 10 #include "base/command_line.h" |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
80 params.page_transition, params.should_replace_current_entry); | 80 params.page_transition, params.should_replace_current_entry); |
81 } else if (leak_requests_for_testing_ && cross_site_transferring_request) { | 81 } else if (leak_requests_for_testing_ && cross_site_transferring_request) { |
82 // Some unit tests expect requests to be leaked in this case, so they can | 82 // Some unit tests expect requests to be leaked in this case, so they can |
83 // pass them along manually. | 83 // pass them along manually. |
84 cross_site_transferring_request->ReleaseRequest(); | 84 cross_site_transferring_request->ReleaseRequest(); |
85 } | 85 } |
86 } | 86 } |
87 | 87 |
88 void OnDeferredAfterResponseStartedHelper( | 88 void OnDeferredAfterResponseStartedHelper( |
89 const GlobalRequestID& global_request_id, | 89 const GlobalRequestID& global_request_id, |
90 int render_frame_id) { | 90 int render_frame_id, |
| 91 const scoped_refptr<net::HttpResponseHeaders>& headers, |
| 92 const GURL& url) { |
91 RenderFrameHostImpl* rfh = | 93 RenderFrameHostImpl* rfh = |
92 RenderFrameHostImpl::FromID(global_request_id.child_id, render_frame_id); | 94 RenderFrameHostImpl::FromID(global_request_id.child_id, render_frame_id); |
93 if (rfh) | 95 if (rfh) |
94 rfh->OnDeferredAfterResponseStarted(global_request_id); | 96 rfh->OnDeferredAfterResponseStarted(global_request_id, headers, url); |
95 } | 97 } |
96 | 98 |
97 bool CheckNavigationPolicyOnUI(GURL url, int process_id, int render_frame_id) { | 99 bool CheckNavigationPolicyOnUI(GURL url, int process_id, int render_frame_id) { |
98 RenderFrameHostImpl* rfh = | 100 RenderFrameHostImpl* rfh = |
99 RenderFrameHostImpl::FromID(process_id, render_frame_id); | 101 RenderFrameHostImpl::FromID(process_id, render_frame_id); |
100 if (!rfh) | 102 if (!rfh) |
101 return false; | 103 return false; |
102 | 104 |
103 // TODO(nasko): This check is very simplistic and is used temporarily only | 105 // TODO(nasko): This check is very simplistic and is used temporarily only |
104 // for --site-per-process. It should be updated to match the check performed | 106 // for --site-per-process. It should be updated to match the check performed |
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 *defer = true; | 227 *defer = true; |
226 OnDidDefer(); | 228 OnDidDefer(); |
227 return true; | 229 return true; |
228 } | 230 } |
229 | 231 |
230 bool CrossSiteResourceHandler::OnNavigationTransitionResponseStarted( | 232 bool CrossSiteResourceHandler::OnNavigationTransitionResponseStarted( |
231 ResourceResponse* response, | 233 ResourceResponse* response, |
232 bool* defer) { | 234 bool* defer) { |
233 ResourceRequestInfoImpl* info = GetRequestInfo(); | 235 ResourceRequestInfoImpl* info = GetRequestInfo(); |
234 | 236 |
| 237 scoped_refptr<net::HttpResponseHeaders> headers; |
| 238 if (response_) |
| 239 headers = response_->head.headers; |
| 240 GURL url = request()->url(); |
| 241 |
235 GlobalRequestID global_id(info->GetChildID(), info->GetRequestID()); | 242 GlobalRequestID global_id(info->GetChildID(), info->GetRequestID()); |
236 int render_frame_id = info->GetRenderFrameID(); | 243 int render_frame_id = info->GetRenderFrameID(); |
237 BrowserThread::PostTask( | 244 BrowserThread::PostTask( |
238 BrowserThread::UI, | 245 BrowserThread::UI, |
239 FROM_HERE, | 246 FROM_HERE, |
240 base::Bind( | 247 base::Bind( |
241 &OnDeferredAfterResponseStartedHelper, global_id, render_frame_id)); | 248 &OnDeferredAfterResponseStartedHelper, |
| 249 global_id, |
| 250 render_frame_id, |
| 251 headers, |
| 252 url)); |
242 | 253 |
243 *defer = true; | 254 *defer = true; |
244 OnDidDefer(); | 255 OnDidDefer(); |
245 return true; | 256 return true; |
246 } | 257 } |
247 | 258 |
248 void CrossSiteResourceHandler::ResumeResponseDeferredAtStart(int request_id) { | 259 void CrossSiteResourceHandler::ResumeResponseDeferredAtStart(int request_id) { |
249 bool defer = false; | 260 bool defer = false; |
250 if (!OnNormalResponseStarted(response_, &defer)) { | 261 if (!OnNormalResponseStarted(response_, &defer)) { |
251 controller()->Cancel(); | 262 controller()->Cancel(); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 controller()->Resume(); | 439 controller()->Resume(); |
429 } | 440 } |
430 } | 441 } |
431 | 442 |
432 void CrossSiteResourceHandler::OnDidDefer() { | 443 void CrossSiteResourceHandler::OnDidDefer() { |
433 did_defer_ = true; | 444 did_defer_ = true; |
434 request()->LogBlockedBy("CrossSiteResourceHandler"); | 445 request()->LogBlockedBy("CrossSiteResourceHandler"); |
435 } | 446 } |
436 | 447 |
437 } // namespace content | 448 } // namespace content |
OLD | NEW |