| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/navigation_resource_throttle.h" | 5 #include "content/browser/loader/navigation_resource_throttle.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/callback.h" | 10 #include "base/callback.h" |
| (...skipping 11 matching lines...) Expand all Loading... |
| 22 #include "content/public/browser/navigation_data.h" | 22 #include "content/public/browser/navigation_data.h" |
| 23 #include "content/public/browser/resource_context.h" | 23 #include "content/public/browser/resource_context.h" |
| 24 #include "content/public/browser/resource_dispatcher_host_delegate.h" | 24 #include "content/public/browser/resource_dispatcher_host_delegate.h" |
| 25 #include "content/public/browser/resource_request_info.h" | 25 #include "content/public/browser/resource_request_info.h" |
| 26 #include "content/public/browser/ssl_status.h" | 26 #include "content/public/browser/ssl_status.h" |
| 27 #include "content/public/common/referrer.h" | 27 #include "content/public/common/referrer.h" |
| 28 #include "net/url_request/redirect_info.h" | 28 #include "net/url_request/redirect_info.h" |
| 29 #include "net/url_request/url_request.h" | 29 #include "net/url_request/url_request.h" |
| 30 #include "net/url_request/url_request_context.h" | 30 #include "net/url_request/url_request_context.h" |
| 31 #include "net/url_request/url_request_job_factory.h" | 31 #include "net/url_request/url_request_job_factory.h" |
| 32 #include "third_party/WebKit/public/platform/WebMixedContentContextType.h" |
| 32 #include "ui/base/page_transition_types.h" | 33 #include "ui/base/page_transition_types.h" |
| 33 | 34 |
| 34 namespace content { | 35 namespace content { |
| 35 | 36 |
| 36 namespace { | 37 namespace { |
| 37 | 38 |
| 38 // Used in unit tests to make UI thread checks succeed even if there is no | 39 // Used in unit tests to make UI thread checks succeed even if there is no |
| 39 // NavigationHandle. | 40 // NavigationHandle. |
| 40 bool g_ui_checks_always_succeed = false; | 41 bool g_ui_checks_always_succeed = false; |
| 41 | 42 |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 92 UIChecksPerformedCallback callback, | 93 UIChecksPerformedCallback callback, |
| 93 int render_process_id, | 94 int render_process_id, |
| 94 int render_frame_host_id, | 95 int render_frame_host_id, |
| 95 const std::string& method, | 96 const std::string& method, |
| 96 const scoped_refptr<content::ResourceRequestBodyImpl>& | 97 const scoped_refptr<content::ResourceRequestBodyImpl>& |
| 97 resource_request_body, | 98 resource_request_body, |
| 98 const Referrer& sanitized_referrer, | 99 const Referrer& sanitized_referrer, |
| 99 bool has_user_gesture, | 100 bool has_user_gesture, |
| 100 ui::PageTransition transition, | 101 ui::PageTransition transition, |
| 101 bool is_external_protocol, | 102 bool is_external_protocol, |
| 102 RequestContextType request_context_type) { | 103 RequestContextType request_context_type, |
| 104 blink::WebMixedContentContextType mixed_content_context_type) { |
| 103 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 105 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 104 NavigationHandleImpl* navigation_handle = | 106 NavigationHandleImpl* navigation_handle = |
| 105 FindNavigationHandle(render_process_id, render_frame_host_id, callback); | 107 FindNavigationHandle(render_process_id, render_frame_host_id, callback); |
| 106 if (!navigation_handle) | 108 if (!navigation_handle) |
| 107 return; | 109 return; |
| 108 | 110 |
| 109 navigation_handle->WillStartRequest( | 111 navigation_handle->WillStartRequest( |
| 110 method, resource_request_body, sanitized_referrer, has_user_gesture, | 112 method, resource_request_body, sanitized_referrer, has_user_gesture, |
| 111 transition, is_external_protocol, request_context_type, | 113 transition, is_external_protocol, request_context_type, |
| 114 mixed_content_context_type, |
| 112 base::Bind(&SendCheckResultToIOThread, callback)); | 115 base::Bind(&SendCheckResultToIOThread, callback)); |
| 113 } | 116 } |
| 114 | 117 |
| 115 void CheckWillRedirectRequestOnUIThread( | 118 void CheckWillRedirectRequestOnUIThread( |
| 116 UIChecksPerformedCallback callback, | 119 UIChecksPerformedCallback callback, |
| 117 int render_process_id, | 120 int render_process_id, |
| 118 int render_frame_host_id, | 121 int render_frame_host_id, |
| 119 const GURL& new_url, | 122 const GURL& new_url, |
| 120 const std::string& new_method, | 123 const std::string& new_method, |
| 121 const GURL& new_referrer_url, | 124 const GURL& new_referrer_url, |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 171 render_frame_host, headers, connection_info, ssl_status, request_id, | 174 render_frame_host, headers, connection_info, ssl_status, request_id, |
| 172 should_replace_current_entry, is_download, is_stream, transfer_callback, | 175 should_replace_current_entry, is_download, is_stream, transfer_callback, |
| 173 base::Bind(&SendCheckResultToIOThread, callback)); | 176 base::Bind(&SendCheckResultToIOThread, callback)); |
| 174 } | 177 } |
| 175 | 178 |
| 176 } // namespace | 179 } // namespace |
| 177 | 180 |
| 178 NavigationResourceThrottle::NavigationResourceThrottle( | 181 NavigationResourceThrottle::NavigationResourceThrottle( |
| 179 net::URLRequest* request, | 182 net::URLRequest* request, |
| 180 ResourceDispatcherHostDelegate* resource_dispatcher_host_delegate, | 183 ResourceDispatcherHostDelegate* resource_dispatcher_host_delegate, |
| 181 RequestContextType request_context_type) | 184 RequestContextType request_context_type, |
| 185 blink::WebMixedContentContextType mixed_content_context_type) |
| 182 : request_(request), | 186 : request_(request), |
| 183 resource_dispatcher_host_delegate_(resource_dispatcher_host_delegate), | 187 resource_dispatcher_host_delegate_(resource_dispatcher_host_delegate), |
| 184 request_context_type_(request_context_type), | 188 request_context_type_(request_context_type), |
| 189 mixed_content_context_type_(mixed_content_context_type), |
| 185 in_cross_site_transition_(false), | 190 in_cross_site_transition_(false), |
| 186 on_transfer_done_result_(NavigationThrottle::DEFER), | 191 on_transfer_done_result_(NavigationThrottle::DEFER), |
| 187 weak_ptr_factory_(this) {} | 192 weak_ptr_factory_(this) {} |
| 188 | 193 |
| 189 NavigationResourceThrottle::~NavigationResourceThrottle() {} | 194 NavigationResourceThrottle::~NavigationResourceThrottle() {} |
| 190 | 195 |
| 191 void NavigationResourceThrottle::WillStartRequest(bool* defer) { | 196 void NavigationResourceThrottle::WillStartRequest(bool* defer) { |
| 192 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 197 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 193 const ResourceRequestInfoImpl* info = | 198 const ResourceRequestInfoImpl* info = |
| 194 ResourceRequestInfoImpl::ForRequest(request_); | 199 ResourceRequestInfoImpl::ForRequest(request_); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 207 weak_ptr_factory_.GetWeakPtr()); | 212 weak_ptr_factory_.GetWeakPtr()); |
| 208 DCHECK(request_->method() == "POST" || request_->method() == "GET"); | 213 DCHECK(request_->method() == "POST" || request_->method() == "GET"); |
| 209 BrowserThread::PostTask( | 214 BrowserThread::PostTask( |
| 210 BrowserThread::UI, FROM_HERE, | 215 BrowserThread::UI, FROM_HERE, |
| 211 base::Bind(&CheckWillStartRequestOnUIThread, callback, render_process_id, | 216 base::Bind(&CheckWillStartRequestOnUIThread, callback, render_process_id, |
| 212 render_frame_id, request_->method(), info->body(), | 217 render_frame_id, request_->method(), info->body(), |
| 213 Referrer::SanitizeForRequest( | 218 Referrer::SanitizeForRequest( |
| 214 request_->url(), Referrer(GURL(request_->referrer()), | 219 request_->url(), Referrer(GURL(request_->referrer()), |
| 215 info->GetReferrerPolicy())), | 220 info->GetReferrerPolicy())), |
| 216 info->HasUserGesture(), info->GetPageTransition(), | 221 info->HasUserGesture(), info->GetPageTransition(), |
| 217 is_external_protocol, request_context_type_)); | 222 is_external_protocol, request_context_type_, |
| 223 mixed_content_context_type_)); |
| 218 *defer = true; | 224 *defer = true; |
| 219 } | 225 } |
| 220 | 226 |
| 221 void NavigationResourceThrottle::WillRedirectRequest( | 227 void NavigationResourceThrottle::WillRedirectRequest( |
| 222 const net::RedirectInfo& redirect_info, | 228 const net::RedirectInfo& redirect_info, |
| 223 bool* defer) { | 229 bool* defer) { |
| 224 DCHECK_CURRENTLY_ON(BrowserThread::IO); | 230 DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| 225 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request_); | 231 ResourceRequestInfoImpl* info = ResourceRequestInfoImpl::ForRequest(request_); |
| 226 if (!info) | 232 if (!info) |
| 227 return; | 233 return; |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 378 | 384 |
| 379 // If the results of the checks on the UI thread are known, unblock the | 385 // If the results of the checks on the UI thread are known, unblock the |
| 380 // navigation. Otherwise, wait until the callback has executed. | 386 // navigation. Otherwise, wait until the callback has executed. |
| 381 if (on_transfer_done_result_ != NavigationThrottle::DEFER) { | 387 if (on_transfer_done_result_ != NavigationThrottle::DEFER) { |
| 382 OnUIChecksPerformed(on_transfer_done_result_); | 388 OnUIChecksPerformed(on_transfer_done_result_); |
| 383 on_transfer_done_result_ = NavigationThrottle::DEFER; | 389 on_transfer_done_result_ = NavigationThrottle::DEFER; |
| 384 } | 390 } |
| 385 } | 391 } |
| 386 | 392 |
| 387 } // namespace content | 393 } // namespace content |
| OLD | NEW |