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

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

Issue 2830353003: Tracing for NavigationHandle lifetime and state. (Closed)
Patch Set: Created 3 years, 8 months 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 <iterator> 7 #include <iterator>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "content/browser/appcache/appcache_navigation_handle.h" 10 #include "content/browser/appcache/appcache_navigation_handle.h"
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
112 redirect_chain_(redirect_chain), 112 redirect_chain_(redirect_chain),
113 is_download_(false), 113 is_download_(false),
114 is_stream_(false), 114 is_stream_(false),
115 started_from_context_menu_(started_from_context_menu), 115 started_from_context_menu_(started_from_context_menu),
116 reload_type_(ReloadType::NONE), 116 reload_type_(ReloadType::NONE),
117 restore_type_(RestoreType::NONE), 117 restore_type_(RestoreType::NONE),
118 navigation_type_(NAVIGATION_TYPE_UNKNOWN), 118 navigation_type_(NAVIGATION_TYPE_UNKNOWN),
119 should_check_main_world_csp_(should_check_main_world_csp), 119 should_check_main_world_csp_(should_check_main_world_csp),
120 is_form_submission_(is_form_submission), 120 is_form_submission_(is_form_submission),
121 weak_factory_(this) { 121 weak_factory_(this) {
122 TRACE_EVENT_ASYNC_BEGIN2("navigation", "NavigationHandle", this,
123 "frame_tree_node",
124 frame_tree_node_->frame_tree_node_id(), "url",
125 url_.possibly_invalid_spec());
122 DCHECK(!navigation_start.is_null()); 126 DCHECK(!navigation_start.is_null());
123 if (redirect_chain_.empty()) 127 if (redirect_chain_.empty())
124 redirect_chain_.push_back(url); 128 redirect_chain_.push_back(url);
125 129
126 starting_site_instance_ = 130 starting_site_instance_ =
127 frame_tree_node_->current_frame_host()->GetSiteInstance(); 131 frame_tree_node_->current_frame_host()->GetSiteInstance();
128 132
129 if (pending_nav_entry_id_) { 133 if (pending_nav_entry_id_) {
130 NavigationControllerImpl* nav_controller = 134 NavigationControllerImpl* nav_controller =
131 static_cast<NavigationControllerImpl*>( 135 static_cast<NavigationControllerImpl*>(
(...skipping 14 matching lines...) Expand all
146 } 150 }
147 151
148 if (!IsRendererDebugURL(url_)) 152 if (!IsRendererDebugURL(url_))
149 GetDelegate()->DidStartNavigation(this); 153 GetDelegate()->DidStartNavigation(this);
150 154
151 if (IsInMainFrame()) { 155 if (IsInMainFrame()) {
152 TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP1( 156 TRACE_EVENT_ASYNC_BEGIN_WITH_TIMESTAMP1(
153 "navigation", "Navigation StartToCommit", this, 157 "navigation", "Navigation StartToCommit", this,
154 navigation_start, "Initial URL", url_.spec()); 158 navigation_start, "Initial URL", url_.spec());
155 } 159 }
160
161 if (is_same_page_) {
162 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
163 "Same document");
164 }
156 } 165 }
157 166
158 NavigationHandleImpl::~NavigationHandleImpl() { 167 NavigationHandleImpl::~NavigationHandleImpl() {
159 // Transfer requests that have not matched up with another navigation request 168 // Transfer requests that have not matched up with another navigation request
160 // from the renderer need to be cleaned up. These are marked as protected in 169 // from the renderer need to be cleaned up. These are marked as protected in
161 // the RDHI, so they do not get cancelled when frames are destroyed. 170 // the RDHI, so they do not get cancelled when frames are destroyed.
162 if (is_transferring()) { 171 if (is_transferring()) {
163 BrowserThread::PostTask( 172 BrowserThread::PostTask(
164 BrowserThread::IO, FROM_HERE, 173 BrowserThread::IO, FROM_HERE,
165 base::Bind(&NotifyAbandonedTransferNavigation, GetGlobalRequestID())); 174 base::Bind(&NotifyAbandonedTransferNavigation, GetGlobalRequestID()));
166 } 175 }
167 176
168 if (!IsRendererDebugURL(url_)) 177 if (!IsRendererDebugURL(url_))
169 GetDelegate()->DidFinishNavigation(this); 178 GetDelegate()->DidFinishNavigation(this);
170 179
171 // Cancel the navigation on the IO thread if the NavigationHandle is being 180 // Cancel the navigation on the IO thread if the NavigationHandle is being
172 // destroyed in the middle of the NavigationThrottles checks. 181 // destroyed in the middle of the NavigationThrottles checks.
173 if (!IsBrowserSideNavigationEnabled() && !complete_callback_.is_null()) 182 if (!IsBrowserSideNavigationEnabled() && !complete_callback_.is_null())
174 RunCompleteCallback(NavigationThrottle::CANCEL_AND_IGNORE); 183 RunCompleteCallback(NavigationThrottle::CANCEL_AND_IGNORE);
175 184
176 if (IsInMainFrame()) { 185 if (IsInMainFrame()) {
177 TRACE_EVENT_ASYNC_END2("navigation", "Navigation StartToCommit", this, 186 TRACE_EVENT_ASYNC_END2("navigation", "Navigation StartToCommit", this,
178 "URL", url_.spec(), "Net Error Code", 187 "URL", url_.spec(), "Net Error Code",
179 net_error_code_); 188 net_error_code_);
180 } 189 }
190 TRACE_EVENT_ASYNC_END0("navigation", "NavigationHandle", this);
181 } 191 }
182 192
183 NavigatorDelegate* NavigationHandleImpl::GetDelegate() const { 193 NavigatorDelegate* NavigationHandleImpl::GetDelegate() const {
184 return frame_tree_node_->navigator()->GetDelegate(); 194 return frame_tree_node_->navigator()->GetDelegate();
185 } 195 }
186 196
187 const GURL& NavigationHandleImpl::GetURL() { 197 const GURL& NavigationHandleImpl::GetURL() {
188 return url_; 198 return url_;
189 } 199 }
190 200
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 net::HostPortPair NavigationHandleImpl::GetSocketAddress() { 329 net::HostPortPair NavigationHandleImpl::GetSocketAddress() {
320 DCHECK(state_ == DID_COMMIT || state_ == DID_COMMIT_ERROR_PAGE); 330 DCHECK(state_ == DID_COMMIT || state_ == DID_COMMIT_ERROR_PAGE);
321 return socket_address_; 331 return socket_address_;
322 } 332 }
323 333
324 void NavigationHandleImpl::Resume() { 334 void NavigationHandleImpl::Resume() {
325 if (state_ != DEFERRING_START && state_ != DEFERRING_REDIRECT && 335 if (state_ != DEFERRING_START && state_ != DEFERRING_REDIRECT &&
326 state_ != DEFERRING_RESPONSE) { 336 state_ != DEFERRING_RESPONSE) {
327 return; 337 return;
328 } 338 }
339 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
340 "Resume");
329 341
330 NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER; 342 NavigationThrottle::ThrottleCheckResult result = NavigationThrottle::DEFER;
331 if (state_ == DEFERRING_START) { 343 if (state_ == DEFERRING_START) {
332 result = CheckWillStartRequest(); 344 result = CheckWillStartRequest();
333 } else if (state_ == DEFERRING_REDIRECT) { 345 } else if (state_ == DEFERRING_REDIRECT) {
334 result = CheckWillRedirectRequest(); 346 result = CheckWillRedirectRequest();
335 } else { 347 } else {
336 result = CheckWillProcessResponse(); 348 result = CheckWillProcessResponse();
337 349
338 // If the navigation is about to proceed after having been deferred while 350 // If the navigation is about to proceed after having been deferred while
339 // processing the response, then it's ready to commit. Determine which 351 // processing the response, then it's ready to commit. Determine which
340 // RenderFrameHost should render the response, based on its site (after any 352 // RenderFrameHost should render the response, based on its site (after any
341 // redirects). 353 // redirects).
342 // Note: if MaybeTransferAndProceed returns false, this means that this 354 // Note: if MaybeTransferAndProceed returns false, this means that this
343 // NavigationHandle was deleted, so return immediately. 355 // NavigationHandle was deleted, so return immediately.
344 if (result == NavigationThrottle::PROCEED && !MaybeTransferAndProceed()) 356 if (result == NavigationThrottle::PROCEED && !MaybeTransferAndProceed())
345 return; 357 return;
346 } 358 }
347 359
348 if (result != NavigationThrottle::DEFER) 360 if (result != NavigationThrottle::DEFER) {
361 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
362 "Resuming");
349 RunCompleteCallback(result); 363 RunCompleteCallback(result);
364 }
350 } 365 }
351 366
352 void NavigationHandleImpl::CancelDeferredNavigation( 367 void NavigationHandleImpl::CancelDeferredNavigation(
353 NavigationThrottle::ThrottleCheckResult result) { 368 NavigationThrottle::ThrottleCheckResult result) {
354 DCHECK(state_ == DEFERRING_START || 369 DCHECK(state_ == DEFERRING_START ||
355 state_ == DEFERRING_REDIRECT || 370 state_ == DEFERRING_REDIRECT ||
356 state_ == DEFERRING_RESPONSE); 371 state_ == DEFERRING_RESPONSE);
357 DCHECK(result == NavigationThrottle::CANCEL_AND_IGNORE || 372 DCHECK(result == NavigationThrottle::CANCEL_AND_IGNORE ||
358 result == NavigationThrottle::CANCEL); 373 result == NavigationThrottle::CANCEL);
374 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
375 "CancelDeferredNavigation");
359 state_ = CANCELING; 376 state_ = CANCELING;
360 RunCompleteCallback(result); 377 RunCompleteCallback(result);
361 } 378 }
362 379
363 void NavigationHandleImpl::RegisterThrottleForTesting( 380 void NavigationHandleImpl::RegisterThrottleForTesting(
364 std::unique_ptr<NavigationThrottle> navigation_throttle) { 381 std::unique_ptr<NavigationThrottle> navigation_throttle) {
365 throttles_.push_back(std::move(navigation_throttle)); 382 throttles_.push_back(std::move(navigation_throttle));
366 } 383 }
367 384
368 NavigationThrottle::ThrottleCheckResult 385 NavigationThrottle::ThrottleCheckResult
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 void NavigationHandleImpl::WillStartRequest( 520 void NavigationHandleImpl::WillStartRequest(
504 const std::string& method, 521 const std::string& method,
505 scoped_refptr<content::ResourceRequestBodyImpl> resource_request_body, 522 scoped_refptr<content::ResourceRequestBodyImpl> resource_request_body,
506 const Referrer& sanitized_referrer, 523 const Referrer& sanitized_referrer,
507 bool has_user_gesture, 524 bool has_user_gesture,
508 ui::PageTransition transition, 525 ui::PageTransition transition,
509 bool is_external_protocol, 526 bool is_external_protocol,
510 RequestContextType request_context_type, 527 RequestContextType request_context_type,
511 blink::WebMixedContentContextType mixed_content_context_type, 528 blink::WebMixedContentContextType mixed_content_context_type,
512 const ThrottleChecksFinishedCallback& callback) { 529 const ThrottleChecksFinishedCallback& callback) {
530 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
531 "WillStartRequest");
513 if (method != "POST") 532 if (method != "POST")
514 DCHECK(!resource_request_body); 533 DCHECK(!resource_request_body);
515 534
516 // Update the navigation parameters. 535 // Update the navigation parameters.
517 method_ = method; 536 method_ = method;
518 if (method_ == "POST") 537 if (method_ == "POST")
519 resource_request_body_ = resource_request_body; 538 resource_request_body_ = resource_request_body;
520 has_user_gesture_ = has_user_gesture; 539 has_user_gesture_ = has_user_gesture;
521 transition_ = transition; 540 transition_ = transition;
522 // Mirrors the logic in RenderFrameImpl::SendDidCommitProvisionalLoad. 541 // Mirrors the logic in RenderFrameImpl::SendDidCommitProvisionalLoad.
(...skipping 19 matching lines...) Expand all
542 561
543 RegisterNavigationThrottles(); 562 RegisterNavigationThrottles();
544 563
545 if (IsBrowserSideNavigationEnabled()) 564 if (IsBrowserSideNavigationEnabled())
546 navigation_ui_data_ = GetDelegate()->GetNavigationUIData(this); 565 navigation_ui_data_ = GetDelegate()->GetNavigationUIData(this);
547 566
548 // Notify each throttle of the request. 567 // Notify each throttle of the request.
549 NavigationThrottle::ThrottleCheckResult result = CheckWillStartRequest(); 568 NavigationThrottle::ThrottleCheckResult result = CheckWillStartRequest();
550 569
551 // If the navigation is not deferred, run the callback. 570 // If the navigation is not deferred, run the callback.
552 if (result != NavigationThrottle::DEFER) 571 if (result != NavigationThrottle::DEFER) {
572 TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this,
573 "StartRequest", "result", result);
553 RunCompleteCallback(result); 574 RunCompleteCallback(result);
575 }
554 } 576 }
555 577
556 void NavigationHandleImpl::WillRedirectRequest( 578 void NavigationHandleImpl::WillRedirectRequest(
557 const GURL& new_url, 579 const GURL& new_url,
558 const std::string& new_method, 580 const std::string& new_method,
559 const GURL& new_referrer_url, 581 const GURL& new_referrer_url,
560 bool new_is_external_protocol, 582 bool new_is_external_protocol,
561 scoped_refptr<net::HttpResponseHeaders> response_headers, 583 scoped_refptr<net::HttpResponseHeaders> response_headers,
562 net::HttpResponseInfo::ConnectionInfo connection_info, 584 net::HttpResponseInfo::ConnectionInfo connection_info,
563 const ThrottleChecksFinishedCallback& callback) { 585 const ThrottleChecksFinishedCallback& callback) {
586 TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this,
587 "WillRedirectRequest", "url",
588 new_url.possibly_invalid_spec());
589
564 // Update the navigation parameters. 590 // Update the navigation parameters.
565 url_ = new_url; 591 url_ = new_url;
566 method_ = new_method; 592 method_ = new_method;
567 593
568 if (!(transition_ & ui::PAGE_TRANSITION_CLIENT_REDIRECT)) { 594 if (!(transition_ & ui::PAGE_TRANSITION_CLIENT_REDIRECT)) {
569 sanitized_referrer_.url = new_referrer_url; 595 sanitized_referrer_.url = new_referrer_url;
570 sanitized_referrer_ = 596 sanitized_referrer_ =
571 Referrer::SanitizeForRequest(url_, sanitized_referrer_); 597 Referrer::SanitizeForRequest(url_, sanitized_referrer_);
572 } 598 }
573 599
(...skipping 11 matching lines...) Expand all
585 if (IsSelfReferentialURL()) { 611 if (IsSelfReferentialURL()) {
586 state_ = CANCELING; 612 state_ = CANCELING;
587 RunCompleteCallback(NavigationThrottle::CANCEL); 613 RunCompleteCallback(NavigationThrottle::CANCEL);
588 return; 614 return;
589 } 615 }
590 616
591 // Notify each throttle of the request. 617 // Notify each throttle of the request.
592 NavigationThrottle::ThrottleCheckResult result = CheckWillRedirectRequest(); 618 NavigationThrottle::ThrottleCheckResult result = CheckWillRedirectRequest();
593 619
594 // If the navigation is not deferred, run the callback. 620 // If the navigation is not deferred, run the callback.
595 if (result != NavigationThrottle::DEFER) 621 if (result != NavigationThrottle::DEFER) {
622 TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this,
623 "RedirectRequest", "result", result);
596 RunCompleteCallback(result); 624 RunCompleteCallback(result);
625 }
597 } 626 }
598 627
599 void NavigationHandleImpl::WillProcessResponse( 628 void NavigationHandleImpl::WillProcessResponse(
600 RenderFrameHostImpl* render_frame_host, 629 RenderFrameHostImpl* render_frame_host,
601 scoped_refptr<net::HttpResponseHeaders> response_headers, 630 scoped_refptr<net::HttpResponseHeaders> response_headers,
602 net::HttpResponseInfo::ConnectionInfo connection_info, 631 net::HttpResponseInfo::ConnectionInfo connection_info,
603 const SSLStatus& ssl_status, 632 const SSLStatus& ssl_status,
604 const GlobalRequestID& request_id, 633 const GlobalRequestID& request_id,
605 bool should_replace_current_entry, 634 bool should_replace_current_entry,
606 bool is_download, 635 bool is_download,
607 bool is_stream, 636 bool is_stream,
608 const base::Closure& transfer_callback, 637 const base::Closure& transfer_callback,
609 const ThrottleChecksFinishedCallback& callback) { 638 const ThrottleChecksFinishedCallback& callback) {
639 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
640 "WillProcessResponse");
641
610 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host); 642 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host);
611 render_frame_host_ = render_frame_host; 643 render_frame_host_ = render_frame_host;
612 response_headers_ = response_headers; 644 response_headers_ = response_headers;
613 connection_info_ = connection_info; 645 connection_info_ = connection_info;
614 request_id_ = request_id; 646 request_id_ = request_id;
615 should_replace_current_entry_ = should_replace_current_entry; 647 should_replace_current_entry_ = should_replace_current_entry;
616 is_download_ = is_download; 648 is_download_ = is_download;
617 is_stream_ = is_stream; 649 is_stream_ = is_stream;
618 state_ = WILL_PROCESS_RESPONSE; 650 state_ = WILL_PROCESS_RESPONSE;
619 ssl_status_ = ssl_status; 651 ssl_status_ = ssl_status;
620 complete_callback_ = callback; 652 complete_callback_ = callback;
621 transfer_callback_ = transfer_callback; 653 transfer_callback_ = transfer_callback;
622 654
623 // Notify each throttle of the response. 655 // Notify each throttle of the response.
624 NavigationThrottle::ThrottleCheckResult result = CheckWillProcessResponse(); 656 NavigationThrottle::ThrottleCheckResult result = CheckWillProcessResponse();
625 657
626 // If the navigation is done processing the response, then it's ready to 658 // If the navigation is done processing the response, then it's ready to
627 // commit. Determine which RenderFrameHost should render the response, based 659 // commit. Determine which RenderFrameHost should render the response, based
628 // on its site (after any redirects). 660 // on its site (after any redirects).
629 // Note: if MaybeTransferAndProceed returns false, this means that this 661 // Note: if MaybeTransferAndProceed returns false, this means that this
630 // NavigationHandle was deleted, so return immediately. 662 // NavigationHandle was deleted, so return immediately.
631 if (result == NavigationThrottle::PROCEED && !MaybeTransferAndProceed()) 663 if (result == NavigationThrottle::PROCEED && !MaybeTransferAndProceed())
632 return; 664 return;
633 665
634 // If the navigation is not deferred, run the callback. 666 // If the navigation is not deferred, run the callback.
635 if (result != NavigationThrottle::DEFER) 667 if (result != NavigationThrottle::DEFER) {
668 TRACE_EVENT_ASYNC_STEP_INTO1("navigation", "NavigationHandle", this,
669 "ProcessResponse", "result", result);
636 RunCompleteCallback(result); 670 RunCompleteCallback(result);
671 }
637 } 672 }
638 673
639 void NavigationHandleImpl::ReadyToCommitNavigation( 674 void NavigationHandleImpl::ReadyToCommitNavigation(
640 RenderFrameHostImpl* render_frame_host) { 675 RenderFrameHostImpl* render_frame_host) {
676 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
677 "ReadyToCommitNavigation");
678
641 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host); 679 DCHECK(!render_frame_host_ || render_frame_host_ == render_frame_host);
642 render_frame_host_ = render_frame_host; 680 render_frame_host_ = render_frame_host;
643 state_ = READY_TO_COMMIT; 681 state_ = READY_TO_COMMIT;
644 682
645 if (!IsRendererDebugURL(url_) && !IsSameDocument()) 683 if (!IsRendererDebugURL(url_) && !IsSameDocument())
646 GetDelegate()->ReadyToCommitNavigation(this); 684 GetDelegate()->ReadyToCommitNavigation(this);
647 } 685 }
648 686
649 void NavigationHandleImpl::DidCommitNavigation( 687 void NavigationHandleImpl::DidCommitNavigation(
650 const FrameHostMsg_DidCommitProvisionalLoad_Params& params, 688 const FrameHostMsg_DidCommitProvisionalLoad_Params& params,
(...skipping 19 matching lines...) Expand all
670 708
671 DCHECK(!IsInMainFrame() || navigation_entry_committed) 709 DCHECK(!IsInMainFrame() || navigation_entry_committed)
672 << "Only subframe navigations can get here without changing the " 710 << "Only subframe navigations can get here without changing the "
673 << "NavigationEntry"; 711 << "NavigationEntry";
674 subframe_entry_committed_ = navigation_entry_committed; 712 subframe_entry_committed_ = navigation_entry_committed;
675 713
676 // If an error page reloads, net_error_code might be 200 but we still want to 714 // If an error page reloads, net_error_code might be 200 but we still want to
677 // count it as an error page. 715 // count it as an error page.
678 if (params.base_url.spec() == kUnreachableWebDataURL || 716 if (params.base_url.spec() == kUnreachableWebDataURL ||
679 net_error_code_ != net::OK) { 717 net_error_code_ != net::OK) {
718 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
719 "DidCommitNavigation: error page");
680 state_ = DID_COMMIT_ERROR_PAGE; 720 state_ = DID_COMMIT_ERROR_PAGE;
681 } else { 721 } else {
722 TRACE_EVENT_ASYNC_STEP_INTO0("navigation", "NavigationHandle", this,
723 "DidCommitNavigation");
682 state_ = DID_COMMIT; 724 state_ = DID_COMMIT;
683 } 725 }
684 726
685 if (url_.SchemeIs(url::kDataScheme) && IsInMainFrame() && 727 if (url_.SchemeIs(url::kDataScheme) && IsInMainFrame() &&
686 IsRendererInitiated()) { 728 IsRendererInitiated()) {
687 GetRenderFrameHost()->AddMessageToConsole( 729 GetRenderFrameHost()->AddMessageToConsole(
688 CONSOLE_MESSAGE_LEVEL_WARNING, 730 CONSOLE_MESSAGE_LEVEL_WARNING,
689 "Upcoming versions will block content-initiated top frame navigations " 731 "Upcoming versions will block content-initiated top frame navigations "
690 "to data: URLs. For more information, see https://goo.gl/BaZAea."); 732 "to data: URLs. For more information, see https://goo.gl/BaZAea.");
691 } 733 }
(...skipping 13 matching lines...) Expand all
705 } 747 }
706 748
707 NavigationThrottle::ThrottleCheckResult 749 NavigationThrottle::ThrottleCheckResult
708 NavigationHandleImpl::CheckWillStartRequest() { 750 NavigationHandleImpl::CheckWillStartRequest() {
709 DCHECK(state_ == WILL_SEND_REQUEST || state_ == DEFERRING_START); 751 DCHECK(state_ == WILL_SEND_REQUEST || state_ == DEFERRING_START);
710 DCHECK(state_ != WILL_SEND_REQUEST || next_index_ == 0); 752 DCHECK(state_ != WILL_SEND_REQUEST || next_index_ == 0);
711 DCHECK(state_ != DEFERRING_START || next_index_ != 0); 753 DCHECK(state_ != DEFERRING_START || next_index_ != 0);
712 for (size_t i = next_index_; i < throttles_.size(); ++i) { 754 for (size_t i = next_index_; i < throttles_.size(); ++i) {
713 NavigationThrottle::ThrottleCheckResult result = 755 NavigationThrottle::ThrottleCheckResult result =
714 throttles_[i]->WillStartRequest(); 756 throttles_[i]->WillStartRequest();
757 TRACE_EVENT_ASYNC_STEP_INTO0(
758 "navigation", "NavigationHandle", this,
759 base::StringPrintf("CheckWillStartRequest: %s: %d",
760 throttles_[i]->GetNameForLogging(), result));
715 switch (result) { 761 switch (result) {
716 case NavigationThrottle::PROCEED: 762 case NavigationThrottle::PROCEED:
717 continue; 763 continue;
718 764
719 case NavigationThrottle::BLOCK_REQUEST: 765 case NavigationThrottle::BLOCK_REQUEST:
720 case NavigationThrottle::CANCEL: 766 case NavigationThrottle::CANCEL:
721 case NavigationThrottle::CANCEL_AND_IGNORE: 767 case NavigationThrottle::CANCEL_AND_IGNORE:
722 state_ = CANCELING; 768 state_ = CANCELING;
723 return result; 769 return result;
724 770
725 case NavigationThrottle::DEFER: 771 case NavigationThrottle::DEFER:
726 state_ = DEFERRING_START; 772 state_ = DEFERRING_START;
727 next_index_ = i + 1; 773 next_index_ = i + 1;
728 return result; 774 return result;
729 775
730 case NavigationThrottle::BLOCK_RESPONSE: 776 case NavigationThrottle::BLOCK_RESPONSE:
731 NOTREACHED(); 777 NOTREACHED();
732 } 778 }
733 } 779 }
734 next_index_ = 0; 780 next_index_ = 0;
735 state_ = WILL_SEND_REQUEST; 781 state_ = WILL_SEND_REQUEST;
782
736 return NavigationThrottle::PROCEED; 783 return NavigationThrottle::PROCEED;
737 } 784 }
738 785
739 NavigationThrottle::ThrottleCheckResult 786 NavigationThrottle::ThrottleCheckResult
740 NavigationHandleImpl::CheckWillRedirectRequest() { 787 NavigationHandleImpl::CheckWillRedirectRequest() {
741 DCHECK(state_ == WILL_REDIRECT_REQUEST || state_ == DEFERRING_REDIRECT); 788 DCHECK(state_ == WILL_REDIRECT_REQUEST || state_ == DEFERRING_REDIRECT);
742 DCHECK(state_ != WILL_REDIRECT_REQUEST || next_index_ == 0); 789 DCHECK(state_ != WILL_REDIRECT_REQUEST || next_index_ == 0);
743 DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0); 790 DCHECK(state_ != DEFERRING_REDIRECT || next_index_ != 0);
791
744 for (size_t i = next_index_; i < throttles_.size(); ++i) { 792 for (size_t i = next_index_; i < throttles_.size(); ++i) {
745 NavigationThrottle::ThrottleCheckResult result = 793 NavigationThrottle::ThrottleCheckResult result =
746 throttles_[i]->WillRedirectRequest(); 794 throttles_[i]->WillRedirectRequest();
795 TRACE_EVENT_ASYNC_STEP_INTO0(
796 "navigation", "NavigationHandle", this,
797 base::StringPrintf("CheckWillRedirectRequest: %s: %d",
798 throttles_[i]->GetNameForLogging(), result));
747 switch (result) { 799 switch (result) {
748 case NavigationThrottle::PROCEED: 800 case NavigationThrottle::PROCEED:
749 continue; 801 continue;
750 802
751 case NavigationThrottle::BLOCK_REQUEST: 803 case NavigationThrottle::BLOCK_REQUEST:
752 CHECK(IsBrowserSideNavigationEnabled()) 804 CHECK(IsBrowserSideNavigationEnabled())
753 << "BLOCK_REQUEST must not be used on redirect without PlzNavigate"; 805 << "BLOCK_REQUEST must not be used on redirect without PlzNavigate";
754 case NavigationThrottle::CANCEL: 806 case NavigationThrottle::CANCEL:
755 case NavigationThrottle::CANCEL_AND_IGNORE: 807 case NavigationThrottle::CANCEL_AND_IGNORE:
756 state_ = CANCELING; 808 state_ = CANCELING;
(...skipping 16 matching lines...) Expand all
773 GetDelegate()->DidRedirectNavigation(this); 825 GetDelegate()->DidRedirectNavigation(this);
774 826
775 return NavigationThrottle::PROCEED; 827 return NavigationThrottle::PROCEED;
776 } 828 }
777 829
778 NavigationThrottle::ThrottleCheckResult 830 NavigationThrottle::ThrottleCheckResult
779 NavigationHandleImpl::CheckWillProcessResponse() { 831 NavigationHandleImpl::CheckWillProcessResponse() {
780 DCHECK(state_ == WILL_PROCESS_RESPONSE || state_ == DEFERRING_RESPONSE); 832 DCHECK(state_ == WILL_PROCESS_RESPONSE || state_ == DEFERRING_RESPONSE);
781 DCHECK(state_ != WILL_PROCESS_RESPONSE || next_index_ == 0); 833 DCHECK(state_ != WILL_PROCESS_RESPONSE || next_index_ == 0);
782 DCHECK(state_ != DEFERRING_RESPONSE || next_index_ != 0); 834 DCHECK(state_ != DEFERRING_RESPONSE || next_index_ != 0);
835
783 for (size_t i = next_index_; i < throttles_.size(); ++i) { 836 for (size_t i = next_index_; i < throttles_.size(); ++i) {
784 NavigationThrottle::ThrottleCheckResult result = 837 NavigationThrottle::ThrottleCheckResult result =
785 throttles_[i]->WillProcessResponse(); 838 throttles_[i]->WillProcessResponse();
839 TRACE_EVENT_ASYNC_STEP_INTO0(
840 "navigation", "NavigationHandle", this,
841 base::StringPrintf("CheckWillProcessResponse: %s: %d",
842 throttles_[i]->GetNameForLogging(), result));
786 switch (result) { 843 switch (result) {
787 case NavigationThrottle::PROCEED: 844 case NavigationThrottle::PROCEED:
788 continue; 845 continue;
789 846
790 case NavigationThrottle::CANCEL: 847 case NavigationThrottle::CANCEL:
791 case NavigationThrottle::CANCEL_AND_IGNORE: 848 case NavigationThrottle::CANCEL_AND_IGNORE:
792 case NavigationThrottle::BLOCK_RESPONSE: 849 case NavigationThrottle::BLOCK_RESPONSE:
793 state_ = CANCELING; 850 state_ = CANCELING;
794 return result; 851 return result;
795 852
796 case NavigationThrottle::DEFER: 853 case NavigationThrottle::DEFER:
797 state_ = DEFERRING_RESPONSE; 854 state_ = DEFERRING_RESPONSE;
798 next_index_ = i + 1; 855 next_index_ = i + 1;
799 return result; 856 return result;
800 857
801 case NavigationThrottle::BLOCK_REQUEST: 858 case NavigationThrottle::BLOCK_REQUEST:
802 NOTREACHED(); 859 NOTREACHED();
803 } 860 }
804 } 861 }
805 next_index_ = 0; 862 next_index_ = 0;
806 state_ = WILL_PROCESS_RESPONSE; 863 state_ = WILL_PROCESS_RESPONSE;
864
807 return NavigationThrottle::PROCEED; 865 return NavigationThrottle::PROCEED;
808 } 866 }
809 867
810 bool NavigationHandleImpl::MaybeTransferAndProceed() { 868 bool NavigationHandleImpl::MaybeTransferAndProceed() {
811 DCHECK_EQ(WILL_PROCESS_RESPONSE, state_); 869 DCHECK_EQ(WILL_PROCESS_RESPONSE, state_);
812 870
813 // Check if the navigation should transfer. This may result in the 871 // Check if the navigation should transfer. This may result in the
814 // destruction of this NavigationHandle, and the cancellation of the request. 872 // destruction of this NavigationHandle, and the cancellation of the request.
815 if (!MaybeTransferAndProceedInternal()) 873 if (!MaybeTransferAndProceedInternal())
816 return false; 874 return false;
(...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after
989 if (node->current_url().EqualsIgnoringRef(url_)) { 1047 if (node->current_url().EqualsIgnoringRef(url_)) {
990 if (found_self_reference) 1048 if (found_self_reference)
991 return true; 1049 return true;
992 found_self_reference = true; 1050 found_self_reference = true;
993 } 1051 }
994 } 1052 }
995 return false; 1053 return false;
996 } 1054 }
997 1055
998 } // namespace content 1056 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698