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

Side by Side Diff: content/renderer/render_frame_impl.cc

Issue 2584513003: PlzNavigate: identify same-page browser-initiated navigation. (Closed)
Patch Set: Fix 2 WebContentsImplTest by assigning a document_sequence_number. Created 3 years, 11 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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/renderer/render_frame_impl.h" 5 #include "content/renderer/render_frame_impl.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 534 matching lines...) Expand 10 before | Expand all | Expand 10 after
545 } 545 }
546 546
547 // Returns false unless this is a top-level navigation. 547 // Returns false unless this is a top-level navigation.
548 bool IsTopLevelNavigation(WebFrame* frame) { 548 bool IsTopLevelNavigation(WebFrame* frame) {
549 return frame->parent() == NULL; 549 return frame->parent() == NULL;
550 } 550 }
551 551
552 WebURLRequest CreateURLRequestForNavigation( 552 WebURLRequest CreateURLRequestForNavigation(
553 const CommonNavigationParams& common_params, 553 const CommonNavigationParams& common_params,
554 std::unique_ptr<StreamOverrideParameters> stream_override, 554 std::unique_ptr<StreamOverrideParameters> stream_override,
555 bool is_view_source_mode_enabled) { 555 bool is_view_source_mode_enabled,
556 bool is_same_document_navigation) {
556 WebURLRequest request(common_params.url); 557 WebURLRequest request(common_params.url);
557 if (is_view_source_mode_enabled) 558 if (is_view_source_mode_enabled)
558 request.setCachePolicy(WebCachePolicy::ReturnCacheDataElseLoad); 559 request.setCachePolicy(WebCachePolicy::ReturnCacheDataElseLoad);
559 560
560 request.setHTTPMethod(WebString::fromUTF8(common_params.method)); 561 request.setHTTPMethod(WebString::fromUTF8(common_params.method));
561 if (common_params.referrer.url.is_valid()) { 562 if (common_params.referrer.url.is_valid()) {
562 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( 563 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader(
563 common_params.referrer.policy, 564 common_params.referrer.policy,
564 common_params.url, 565 common_params.url,
565 WebString::fromUTF8(common_params.referrer.url.spec())); 566 WebString::fromUTF8(common_params.referrer.url.spec()));
566 if (!web_referrer.isEmpty()) { 567 if (!web_referrer.isEmpty()) {
567 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); 568 request.setHTTPReferrer(web_referrer, common_params.referrer.policy);
568 request.addHTTPOriginIfNeeded( 569 request.addHTTPOriginIfNeeded(
569 WebSecurityOrigin(url::Origin(common_params.referrer.url))); 570 WebSecurityOrigin(url::Origin(common_params.referrer.url)));
570 } 571 }
571 } 572 }
572 573
574 request.setIsSameDocumentNavigation(is_same_document_navigation);
575
573 request.setLoFiState( 576 request.setLoFiState(
574 static_cast<WebURLRequest::LoFiState>(common_params.lofi_state)); 577 static_cast<WebURLRequest::LoFiState>(common_params.lofi_state));
575 578
576 RequestExtraData* extra_data = new RequestExtraData(); 579 RequestExtraData* extra_data = new RequestExtraData();
577 extra_data->set_stream_override(std::move(stream_override)); 580 extra_data->set_stream_override(std::move(stream_override));
578 request.setExtraData(extra_data); 581 request.setExtraData(extra_data);
579 582
580 // Set the ui timestamp for this navigation. Currently the timestamp here is 583 // Set the ui timestamp for this navigation. Currently the timestamp here is
581 // only non empty when the navigation was triggered by an Android intent. The 584 // only non empty when the navigation was triggered by an Android intent. The
582 // timestamp is converted to a double version supported by blink. It will be 585 // timestamp is converted to a double version supported by blink. It will be
(...skipping 4543 matching lines...) Expand 10 before | Expand all | Expand 10 after
5126 frame_->setCommittedFirstRealLoad(); 5129 frame_->setCommittedFirstRealLoad();
5127 5130
5128 pending_navigation_params_.reset(new NavigationParams( 5131 pending_navigation_params_.reset(new NavigationParams(
5129 common_params, StartNavigationParams(), request_params)); 5132 common_params, StartNavigationParams(), request_params));
5130 5133
5131 // Send the provisional load failure. 5134 // Send the provisional load failure.
5132 blink::WebURLError error = 5135 blink::WebURLError error =
5133 CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code); 5136 CreateWebURLError(common_params.url, has_stale_copy_in_cache, error_code);
5134 WebURLRequest failed_request = CreateURLRequestForNavigation( 5137 WebURLRequest failed_request = CreateURLRequestForNavigation(
5135 common_params, std::unique_ptr<StreamOverrideParameters>(), 5138 common_params, std::unique_ptr<StreamOverrideParameters>(),
5136 frame_->isViewSourceModeEnabled()); 5139 frame_->isViewSourceModeEnabled(),
5140 false); // is_same_document_navigation
5137 5141
5138 if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) { 5142 if (!ShouldDisplayErrorPageForFailedLoad(error_code, common_params.url)) {
5139 // The browser expects this frame to be loading an error page. Inform it 5143 // The browser expects this frame to be loading an error page. Inform it
5140 // that the load stopped. 5144 // that the load stopped.
5141 Send(new FrameHostMsg_DidStopLoading(routing_id_)); 5145 Send(new FrameHostMsg_DidStopLoading(routing_id_));
5142 browser_side_navigation_pending_ = false; 5146 browser_side_navigation_pending_ = false;
5143 return; 5147 return;
5144 } 5148 }
5145 5149
5146 // On load failure, a frame can ask its owner to render fallback content. 5150 // On load failure, a frame can ask its owner to render fallback content.
(...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after
5812 // Create parameters for a standard navigation, indicating whether it should 5816 // Create parameters for a standard navigation, indicating whether it should
5813 // replace the current NavigationEntry. 5817 // replace the current NavigationEntry.
5814 blink::WebFrameLoadType load_type = 5818 blink::WebFrameLoadType load_type =
5815 common_params.should_replace_current_entry 5819 common_params.should_replace_current_entry
5816 ? blink::WebFrameLoadType::ReplaceCurrentItem 5820 ? blink::WebFrameLoadType::ReplaceCurrentItem
5817 : blink::WebFrameLoadType::Standard; 5821 : blink::WebFrameLoadType::Standard;
5818 blink::WebHistoryLoadType history_load_type = 5822 blink::WebHistoryLoadType history_load_type =
5819 blink::WebHistoryDifferentDocumentLoad; 5823 blink::WebHistoryDifferentDocumentLoad;
5820 bool should_load_request = false; 5824 bool should_load_request = false;
5821 WebHistoryItem item_for_history_navigation; 5825 WebHistoryItem item_for_history_navigation;
5822 WebURLRequest request = 5826
5823 CreateURLRequestForNavigation(common_params, std::move(stream_params), 5827 bool is_same_page = request_params.is_same_document_fragment_change ||
5824 frame_->isViewSourceModeEnabled()); 5828 request_params.is_same_document_history_load;
5829
5830 WebURLRequest request = CreateURLRequestForNavigation(
5831 common_params, std::move(stream_params),
5832 frame_->isViewSourceModeEnabled(),
5833 is_same_page);
5825 request.setFrameType(IsTopLevelNavigation(frame_) 5834 request.setFrameType(IsTopLevelNavigation(frame_)
5826 ? blink::WebURLRequest::FrameTypeTopLevel 5835 ? blink::WebURLRequest::FrameTypeTopLevel
5827 : blink::WebURLRequest::FrameTypeNested); 5836 : blink::WebURLRequest::FrameTypeNested);
5828 5837
5829 if (IsBrowserSideNavigationEnabled() && common_params.post_data) 5838 if (IsBrowserSideNavigationEnabled() && common_params.post_data)
5830 request.setHTTPBody(GetWebHTTPBodyForRequestBody(common_params.post_data)); 5839 request.setHTTPBody(GetWebHTTPBodyForRequestBody(common_params.post_data));
5831 5840
5832 // Used to determine whether this frame is actually loading a request as part 5841 // Used to determine whether this frame is actually loading a request as part
5833 // of a history navigation. 5842 // of a history navigation.
5834 bool has_history_navigation_in_frame = false; 5843 bool has_history_navigation_in_frame = false;
(...skipping 941 matching lines...) Expand 10 before | Expand all | Expand 10 after
6776 // event target. Potentially a Pepper plugin will receive the event. 6785 // event target. Potentially a Pepper plugin will receive the event.
6777 // In order to tell whether a plugin gets the last mouse event and which it 6786 // In order to tell whether a plugin gets the last mouse event and which it
6778 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets 6787 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets
6779 // the event, it will notify us via DidReceiveMouseEvent() and set itself as 6788 // the event, it will notify us via DidReceiveMouseEvent() and set itself as
6780 // |pepper_last_mouse_event_target_|. 6789 // |pepper_last_mouse_event_target_|.
6781 pepper_last_mouse_event_target_ = nullptr; 6790 pepper_last_mouse_event_target_ = nullptr;
6782 #endif 6791 #endif
6783 } 6792 }
6784 6793
6785 } // namespace content 6794 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698