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

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

Issue 1802383004: Fix in-page navigation after LoadDataWithBaseURL (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix test for LoadDataAsStringWithBaseURL on android Created 4 years, 9 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
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 2873 matching lines...) Expand 10 before | Expand all | Expand 10 after
2884 InternalDocumentStateData::FromDocumentState(document_state); 2884 InternalDocumentStateData::FromDocumentState(document_state);
2885 InternalDocumentStateData* old_internal_data = 2885 InternalDocumentStateData* old_internal_data =
2886 InternalDocumentStateData::FromDocumentState(old_document_state); 2886 InternalDocumentStateData::FromDocumentState(old_document_state);
2887 internal_data->set_is_overriding_user_agent( 2887 internal_data->set_is_overriding_user_agent(
2888 old_internal_data->is_overriding_user_agent()); 2888 old_internal_data->is_overriding_user_agent());
2889 } 2889 }
2890 } 2890 }
2891 2891
2892 // The rest of RenderView assumes that a WebDataSource will always have a 2892 // The rest of RenderView assumes that a WebDataSource will always have a
2893 // non-null NavigationState. 2893 // non-null NavigationState.
2894 UpdateNavigationState(document_state); 2894 UpdateNavigationState(document_state, false /* was_within_same_page */);
2895 2895
2896 // DocumentState::referred_by_prefetcher_ is true if we are 2896 // DocumentState::referred_by_prefetcher_ is true if we are
2897 // navigating from a page that used prefetching using a link on that 2897 // navigating from a page that used prefetching using a link on that
2898 // page. We are early enough in the request process here that we 2898 // page. We are early enough in the request process here that we
2899 // can still see the DocumentState of the previous page and set 2899 // can still see the DocumentState of the previous page and set
2900 // this value appropriately. 2900 // this value appropriately.
2901 // TODO(gavinp): catch the important case of navigation in a new 2901 // TODO(gavinp): catch the important case of navigation in a new
2902 // renderer process. 2902 // renderer process.
2903 if (webview) { 2903 if (webview) {
2904 if (WebFrame* old_frame = webview->mainFrame()) { 2904 if (WebFrame* old_frame = webview->mainFrame()) {
(...skipping 564 matching lines...) Expand 10 before | Expand all | Expand 10 after
3469 DCHECK_EQ(frame_, frame); 3469 DCHECK_EQ(frame_, frame);
3470 // If this was a reference fragment navigation that we initiated, then we 3470 // If this was a reference fragment navigation that we initiated, then we
3471 // could end up having a non-null pending navigation params. We just need to 3471 // could end up having a non-null pending navigation params. We just need to
3472 // update the ExtraData on the datasource so that others who read the 3472 // update the ExtraData on the datasource so that others who read the
3473 // ExtraData will get the new NavigationState. Similarly, if we did not 3473 // ExtraData will get the new NavigationState. Similarly, if we did not
3474 // initiate this navigation, then we need to take care to reset any pre- 3474 // initiate this navigation, then we need to take care to reset any pre-
3475 // existing navigation state to a content-initiated navigation state. 3475 // existing navigation state to a content-initiated navigation state.
3476 // UpdateNavigationState conveniently takes care of this for us. 3476 // UpdateNavigationState conveniently takes care of this for us.
3477 DocumentState* document_state = 3477 DocumentState* document_state =
3478 DocumentState::FromDataSource(frame->dataSource()); 3478 DocumentState::FromDataSource(frame->dataSource());
3479 UpdateNavigationState(document_state); 3479 UpdateNavigationState(document_state, true /* was_within_same_page */);
3480 static_cast<NavigationStateImpl*>(document_state->navigation_state()) 3480 static_cast<NavigationStateImpl*>(document_state->navigation_state())
3481 ->set_was_within_same_page(true); 3481 ->set_was_within_same_page(true);
3482 3482
3483 didCommitProvisionalLoad(frame, item, commit_type); 3483 didCommitProvisionalLoad(frame, item, commit_type);
3484 } 3484 }
3485 3485
3486 void RenderFrameImpl::didUpdateCurrentHistoryItem() { 3486 void RenderFrameImpl::didUpdateCurrentHistoryItem() {
3487 render_view_->StartNavStateSyncTimerIfNecessary(this); 3487 render_view_->StartNavStateSyncTimerIfNecessary(this);
3488 } 3488 }
3489 3489
(...skipping 2382 matching lines...) Expand 10 before | Expand all | Expand 10 after
5872 NavigationState* RenderFrameImpl::CreateNavigationStateFromPending() { 5872 NavigationState* RenderFrameImpl::CreateNavigationStateFromPending() {
5873 if (IsBrowserInitiated(pending_navigation_params_.get())) { 5873 if (IsBrowserInitiated(pending_navigation_params_.get())) {
5874 return NavigationStateImpl::CreateBrowserInitiated( 5874 return NavigationStateImpl::CreateBrowserInitiated(
5875 pending_navigation_params_->common_params, 5875 pending_navigation_params_->common_params,
5876 pending_navigation_params_->start_params, 5876 pending_navigation_params_->start_params,
5877 pending_navigation_params_->request_params); 5877 pending_navigation_params_->request_params);
5878 } 5878 }
5879 return NavigationStateImpl::CreateContentInitiated(); 5879 return NavigationStateImpl::CreateContentInitiated();
5880 } 5880 }
5881 5881
5882 void RenderFrameImpl::UpdateNavigationState(DocumentState* document_state) { 5882 void RenderFrameImpl::UpdateNavigationState(DocumentState* document_state,
5883 bool was_within_same_page) {
5883 if (pending_navigation_params_) { 5884 if (pending_navigation_params_) {
5884 // If this is a browser-initiated load that doesn't override 5885 // If this is a browser-initiated load that doesn't override
5885 // navigation_start, set it here. 5886 // navigation_start, set it here.
5886 if (pending_navigation_params_->common_params.navigation_start.is_null()) { 5887 if (pending_navigation_params_->common_params.navigation_start.is_null()) {
5887 pending_navigation_params_->common_params.navigation_start = 5888 pending_navigation_params_->common_params.navigation_start =
5888 base::TimeTicks::Now(); 5889 base::TimeTicks::Now();
5889 } 5890 }
5890 document_state->set_navigation_state(CreateNavigationStateFromPending()); 5891 document_state->set_navigation_state(CreateNavigationStateFromPending());
5891 5892
5892 const CommonNavigationParams& common_params = 5893 const CommonNavigationParams& common_params =
5893 pending_navigation_params_->common_params; 5894 pending_navigation_params_->common_params;
5894 bool load_data = !common_params.base_url_for_data_url.is_empty() && 5895 // The |set_was_load_data_with_base_url_request| state should not change for
5895 !common_params.history_url_for_data_url.is_empty() && 5896 // an in-page navigation, so skip updating it from the in-page navigation
5896 common_params.url.SchemeIs(url::kDataScheme); 5897 // params in this case.
5897 document_state->set_was_load_data_with_base_url_request(load_data); 5898 if (!was_within_same_page) {
5898 if (load_data) 5899 bool load_data = !common_params.base_url_for_data_url.is_empty() &&
5899 document_state->set_data_url(common_params.url); 5900 !common_params.history_url_for_data_url.is_empty() &&
5901 common_params.url.SchemeIs(url::kDataScheme);
5902 document_state->set_was_load_data_with_base_url_request(load_data);
5903 if (load_data)
5904 document_state->set_data_url(common_params.url);
5905 }
5900 5906
5901 pending_navigation_params_.reset(); 5907 pending_navigation_params_.reset();
5902 } else { 5908 } else {
5903 document_state->set_navigation_state( 5909 document_state->set_navigation_state(
5904 NavigationStateImpl::CreateContentInitiated()); 5910 NavigationStateImpl::CreateContentInitiated());
5905 } 5911 }
5906 } 5912 }
5907 5913
5908 #if defined(OS_ANDROID) 5914 #if defined(OS_ANDROID)
5909 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer( 5915 WebMediaPlayer* RenderFrameImpl::CreateAndroidWebMediaPlayer(
(...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after
6068 int match_count, 6074 int match_count,
6069 int ordinal, 6075 int ordinal,
6070 const WebRect& selection_rect, 6076 const WebRect& selection_rect,
6071 bool final_status_update) { 6077 bool final_status_update) {
6072 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, 6078 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count,
6073 selection_rect, ordinal, 6079 selection_rect, ordinal,
6074 final_status_update)); 6080 final_status_update));
6075 } 6081 }
6076 6082
6077 } // namespace content 6083 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698