Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(147)

Side by Side Diff: content/browser/frame_host/navigation_handle_impl.cc

Issue 2557233002: Revert of Set user_gesture bit at NavigationHandle creation time. (Closed)
Patch Set: rebase Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/frame_host/navigation_handle_impl.h" 5 #include "content/browser/frame_host/navigation_handle_impl.h"
6 6
7 #include "base/debug/dump_without_crashing.h" 7 #include "base/debug/dump_without_crashing.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "content/browser/appcache/appcache_navigation_handle.h" 9 #include "content/browser/appcache/appcache_navigation_handle.h"
10 #include "content/browser/appcache/appcache_service_impl.h" 10 #include "content/browser/appcache/appcache_service_impl.h"
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
50 } // namespace 50 } // namespace
51 51
52 // static 52 // static
53 std::unique_ptr<NavigationHandleImpl> NavigationHandleImpl::Create( 53 std::unique_ptr<NavigationHandleImpl> NavigationHandleImpl::Create(
54 const GURL& url, 54 const GURL& url,
55 FrameTreeNode* frame_tree_node, 55 FrameTreeNode* frame_tree_node,
56 bool is_renderer_initiated, 56 bool is_renderer_initiated,
57 bool is_same_page, 57 bool is_same_page,
58 const base::TimeTicks& navigation_start, 58 const base::TimeTicks& navigation_start,
59 int pending_nav_entry_id, 59 int pending_nav_entry_id,
60 NavigationGesture gesture,
61 bool started_from_context_menu) { 60 bool started_from_context_menu) {
62 return std::unique_ptr<NavigationHandleImpl>(new NavigationHandleImpl( 61 return std::unique_ptr<NavigationHandleImpl>(new NavigationHandleImpl(
63 url, frame_tree_node, is_renderer_initiated, is_same_page, 62 url, frame_tree_node, is_renderer_initiated, is_same_page,
64 navigation_start, pending_nav_entry_id, gesture, 63 navigation_start, pending_nav_entry_id,
65 started_from_context_menu)); 64 started_from_context_menu));
66 } 65 }
67 66
68 NavigationHandleImpl::NavigationHandleImpl( 67 NavigationHandleImpl::NavigationHandleImpl(
69 const GURL& url, 68 const GURL& url,
70 FrameTreeNode* frame_tree_node, 69 FrameTreeNode* frame_tree_node,
71 bool is_renderer_initiated, 70 bool is_renderer_initiated,
72 bool is_same_page, 71 bool is_same_page,
73 const base::TimeTicks& navigation_start, 72 const base::TimeTicks& navigation_start,
74 int pending_nav_entry_id, 73 int pending_nav_entry_id,
75 NavigationGesture gesture,
76 bool started_from_context_menu) 74 bool started_from_context_menu)
77 : url_(url), 75 : url_(url),
78 gesture_(gesture), 76 has_user_gesture_(false),
79 transition_(ui::PAGE_TRANSITION_LINK), 77 transition_(ui::PAGE_TRANSITION_LINK),
80 is_external_protocol_(false), 78 is_external_protocol_(false),
81 net_error_code_(net::OK), 79 net_error_code_(net::OK),
82 render_frame_host_(nullptr), 80 render_frame_host_(nullptr),
83 is_renderer_initiated_(is_renderer_initiated), 81 is_renderer_initiated_(is_renderer_initiated),
84 is_same_page_(is_same_page), 82 is_same_page_(is_same_page),
85 was_redirected_(false), 83 was_redirected_(false),
86 connection_info_(net::HttpResponseInfo::CONNECTION_INFO_UNKNOWN), 84 connection_info_(net::HttpResponseInfo::CONNECTION_INFO_UNKNOWN),
87 original_url_(url), 85 original_url_(url),
88 state_(INITIAL), 86 state_(INITIAL),
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
195 return method_ == "POST"; 193 return method_ == "POST";
196 } 194 }
197 195
198 const Referrer& NavigationHandleImpl::GetReferrer() { 196 const Referrer& NavigationHandleImpl::GetReferrer() {
199 CHECK_NE(INITIAL, state_) 197 CHECK_NE(INITIAL, state_)
200 << "This accessor should not be called before the request is started."; 198 << "This accessor should not be called before the request is started.";
201 return sanitized_referrer_; 199 return sanitized_referrer_;
202 } 200 }
203 201
204 bool NavigationHandleImpl::HasUserGesture() { 202 bool NavigationHandleImpl::HasUserGesture() {
205 return gesture_ == NavigationGestureUser; 203 CHECK_NE(INITIAL, state_)
204 << "This accessor should not be called before the request is started.";
205 return has_user_gesture_;
206 } 206 }
207 207
208 ui::PageTransition NavigationHandleImpl::GetPageTransition() { 208 ui::PageTransition NavigationHandleImpl::GetPageTransition() {
209 CHECK_NE(INITIAL, state_) 209 CHECK_NE(INITIAL, state_)
210 << "This accessor should not be called before the request is started."; 210 << "This accessor should not be called before the request is started.";
211 return transition_; 211 return transition_;
212 } 212 }
213 213
214 bool NavigationHandleImpl::IsExternalProtocol() { 214 bool NavigationHandleImpl::IsExternalProtocol() {
215 CHECK_NE(INITIAL, state_) 215 CHECK_NE(INITIAL, state_)
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 291
292 void NavigationHandleImpl::RegisterThrottleForTesting( 292 void NavigationHandleImpl::RegisterThrottleForTesting(
293 std::unique_ptr<NavigationThrottle> navigation_throttle) { 293 std::unique_ptr<NavigationThrottle> navigation_throttle) {
294 throttles_.push_back(std::move(navigation_throttle)); 294 throttles_.push_back(std::move(navigation_throttle));
295 } 295 }
296 296
297 NavigationThrottle::ThrottleCheckResult 297 NavigationThrottle::ThrottleCheckResult
298 NavigationHandleImpl::CallWillStartRequestForTesting( 298 NavigationHandleImpl::CallWillStartRequestForTesting(
299 bool is_post, 299 bool is_post,
300 const Referrer& sanitized_referrer, 300 const Referrer& sanitized_referrer,
301 bool has_user_gesture,
301 ui::PageTransition transition, 302 ui::PageTransition transition,
302 bool is_external_protocol) { 303 bool is_external_protocol) {
303 NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER; 304 NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER;
304 305
305 scoped_refptr<ResourceRequestBodyImpl> resource_request_body; 306 scoped_refptr<ResourceRequestBodyImpl> resource_request_body;
306 std::string method = "GET"; 307 std::string method = "GET";
307 if (is_post) { 308 if (is_post) {
308 method = "POST"; 309 method = "POST";
309 310
310 std::string body = "test=body"; 311 std::string body = "test=body";
311 resource_request_body = new ResourceRequestBodyImpl(); 312 resource_request_body = new ResourceRequestBodyImpl();
312 resource_request_body->AppendBytes(body.data(), body.size()); 313 resource_request_body->AppendBytes(body.data(), body.size());
313 } 314 }
314 315
315 WillStartRequest(method, resource_request_body, sanitized_referrer, 316 WillStartRequest(method, resource_request_body, sanitized_referrer,
316 transition, is_external_protocol, 317 has_user_gesture, transition, is_external_protocol,
317 REQUEST_CONTEXT_TYPE_LOCATION, 318 REQUEST_CONTEXT_TYPE_LOCATION,
318 base::Bind(&UpdateThrottleCheckResult, &result)); 319 base::Bind(&UpdateThrottleCheckResult, &result));
319 320
320 // Reset the callback to ensure it will not be called later. 321 // Reset the callback to ensure it will not be called later.
321 complete_callback_.Reset(); 322 complete_callback_.Reset();
322 return result; 323 return result;
323 } 324 }
324 325
325 NavigationThrottle::ThrottleCheckResult 326 NavigationThrottle::ThrottleCheckResult
326 NavigationHandleImpl::CallWillRedirectRequestForTesting( 327 NavigationHandleImpl::CallWillRedirectRequestForTesting(
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
411 void NavigationHandleImpl::InitAppCacheHandle( 412 void NavigationHandleImpl::InitAppCacheHandle(
412 ChromeAppCacheService* appcache_service) { 413 ChromeAppCacheService* appcache_service) {
413 DCHECK(IsBrowserSideNavigationEnabled()); 414 DCHECK(IsBrowserSideNavigationEnabled());
414 appcache_handle_.reset(new AppCacheNavigationHandle(appcache_service)); 415 appcache_handle_.reset(new AppCacheNavigationHandle(appcache_service));
415 } 416 }
416 417
417 void NavigationHandleImpl::WillStartRequest( 418 void NavigationHandleImpl::WillStartRequest(
418 const std::string& method, 419 const std::string& method,
419 scoped_refptr<content::ResourceRequestBodyImpl> resource_request_body, 420 scoped_refptr<content::ResourceRequestBodyImpl> resource_request_body,
420 const Referrer& sanitized_referrer, 421 const Referrer& sanitized_referrer,
422 bool has_user_gesture,
421 ui::PageTransition transition, 423 ui::PageTransition transition,
422 bool is_external_protocol, 424 bool is_external_protocol,
423 RequestContextType request_context_type, 425 RequestContextType request_context_type,
424 const ThrottleChecksFinishedCallback& callback) { 426 const ThrottleChecksFinishedCallback& callback) {
425 if (method != "POST") 427 if (method != "POST")
426 DCHECK(!resource_request_body); 428 DCHECK(!resource_request_body);
427 429
428 // Update the navigation parameters. 430 // Update the navigation parameters.
429 method_ = method; 431 method_ = method;
430 if (method_ == "POST") 432 if (method_ == "POST")
431 resource_request_body_ = resource_request_body; 433 resource_request_body_ = resource_request_body;
432 sanitized_referrer_ = sanitized_referrer; 434 sanitized_referrer_ = sanitized_referrer;
435 has_user_gesture_ = has_user_gesture;
433 transition_ = transition; 436 transition_ = transition;
434 is_external_protocol_ = is_external_protocol; 437 is_external_protocol_ = is_external_protocol;
435 request_context_type_ = request_context_type; 438 request_context_type_ = request_context_type;
436 state_ = WILL_SEND_REQUEST; 439 state_ = WILL_SEND_REQUEST;
437 complete_callback_ = callback; 440 complete_callback_ = callback;
438 441
439 RegisterNavigationThrottles(); 442 RegisterNavigationThrottles();
440 443
441 if (IsBrowserSideNavigationEnabled()) 444 if (IsBrowserSideNavigationEnabled())
442 navigation_ui_data_ = GetDelegate()->GetNavigationUIData(this); 445 navigation_ui_data_ = GetDelegate()->GetNavigationUIData(this);
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
532 } 535 }
533 536
534 void NavigationHandleImpl::DidCommitNavigation( 537 void NavigationHandleImpl::DidCommitNavigation(
535 const FrameHostMsg_DidCommitProvisionalLoad_Params& params, 538 const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
536 bool same_page, 539 bool same_page,
537 RenderFrameHostImpl* render_frame_host) { 540 RenderFrameHostImpl* render_frame_host) {
538 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host); 541 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host);
539 DCHECK_EQ(frame_tree_node_, render_frame_host->frame_tree_node()); 542 DCHECK_EQ(frame_tree_node_, render_frame_host->frame_tree_node());
540 CHECK_EQ(url_, params.url); 543 CHECK_EQ(url_, params.url);
541 544
542 // TODO(clamy): Once crbug.com/667572 is addressed, apply this DCHECK on all
543 // navigations, not just same-page navigations, and make gesture_ a const
544 // member, set only in the constructor.
545 if (same_page)
546 DCHECK_EQ(gesture_, params.gesture);
547 gesture_ = params.gesture;
548
549 method_ = params.method; 545 method_ = params.method;
546 has_user_gesture_ = (params.gesture == NavigationGestureUser);
550 transition_ = params.transition; 547 transition_ = params.transition;
551 render_frame_host_ = render_frame_host; 548 render_frame_host_ = render_frame_host;
552 549
553 // If an error page reloads, net_error_code might be 200 but we still want to 550 // If an error page reloads, net_error_code might be 200 but we still want to
554 // count it as an error page. 551 // count it as an error page.
555 if (params.base_url.spec() == kUnreachableWebDataURL || 552 if (params.base_url.spec() == kUnreachableWebDataURL ||
556 net_error_code_ != net::OK) { 553 net_error_code_ != net::OK) {
557 state_ = DID_COMMIT_ERROR_PAGE; 554 state_ = DID_COMMIT_ERROR_PAGE;
558 } else { 555 } else {
559 state_ = DID_COMMIT; 556 state_ = DID_COMMIT;
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
789 throttles_to_register.push_back(std::move(clear_site_data_throttle)); 786 throttles_to_register.push_back(std::move(clear_site_data_throttle));
790 787
791 if (throttles_to_register.size() > 0) { 788 if (throttles_to_register.size() > 0) {
792 throttles_.insert(throttles_.begin(), throttles_to_register.begin(), 789 throttles_.insert(throttles_.begin(), throttles_to_register.begin(),
793 throttles_to_register.end()); 790 throttles_to_register.end());
794 throttles_to_register.weak_clear(); 791 throttles_to_register.weak_clear();
795 } 792 }
796 } 793 }
797 794
798 } // namespace content 795 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/frame_host/navigation_handle_impl.h ('k') | content/browser/frame_host/navigation_handle_impl_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698