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

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

Issue 1018383002: Make NavigationParams clearer (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + addressed comment Created 5 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') | content/renderer/render_view_browsertest.cc » ('j') | 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 9
10 #include "base/auto_reset.h" 10 #include "base/auto_reset.h"
(...skipping 1024 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard) 1035 IPC_MESSAGE_HANDLER(InputMsg_CopyToFindPboard, OnCopyToFindPboard)
1036 #endif 1036 #endif
1037 IPC_END_MESSAGE_MAP() 1037 IPC_END_MESSAGE_MAP()
1038 1038
1039 return handled; 1039 return handled;
1040 } 1040 }
1041 1041
1042 void RenderFrameImpl::OnNavigate( 1042 void RenderFrameImpl::OnNavigate(
1043 const CommonNavigationParams& common_params, 1043 const CommonNavigationParams& common_params,
1044 const StartNavigationParams& start_params, 1044 const StartNavigationParams& start_params,
1045 const CommitNavigationParams& commit_params, 1045 const RequestNavigationParams& request_params) {
1046 const HistoryNavigationParams& history_params) {
1047 TRACE_EVENT2("navigation", "RenderFrameImpl::OnNavigate", "id", routing_id_, 1046 TRACE_EVENT2("navigation", "RenderFrameImpl::OnNavigate", "id", routing_id_,
1048 "url", common_params.url.possibly_invalid_spec()); 1047 "url", common_params.url.possibly_invalid_spec());
1049 1048
1050 bool is_reload = RenderViewImpl::IsReload(common_params.navigation_type); 1049 bool is_reload = RenderViewImpl::IsReload(common_params.navigation_type);
1051 bool is_history_navigation = history_params.page_state.IsValid(); 1050 bool is_history_navigation = request_params.page_state.IsValid();
1052 WebURLRequest::CachePolicy cache_policy = 1051 WebURLRequest::CachePolicy cache_policy =
1053 WebURLRequest::UseProtocolCachePolicy; 1052 WebURLRequest::UseProtocolCachePolicy;
1054 if (!RenderFrameImpl::PrepareRenderViewForNavigation( 1053 if (!RenderFrameImpl::PrepareRenderViewForNavigation(
1055 common_params.url, is_history_navigation, history_params, &is_reload, 1054 common_params.url, is_history_navigation, request_params, &is_reload,
1056 &cache_policy)) { 1055 &cache_policy)) {
1057 Send(new FrameHostMsg_DidDropNavigation(routing_id_)); 1056 Send(new FrameHostMsg_DidDropNavigation(routing_id_));
1058 return; 1057 return;
1059 } 1058 }
1060 1059
1061 GetContentClient()->SetActiveURL(common_params.url); 1060 GetContentClient()->SetActiveURL(common_params.url);
1062 1061
1063 WebFrame* frame = frame_; 1062 WebFrame* frame = frame_;
1064 if (!commit_params.frame_to_navigate.empty()) { 1063 if (!request_params.frame_to_navigate.empty()) {
1065 // TODO(nasko): Move this lookup to the browser process. 1064 // TODO(nasko): Move this lookup to the browser process.
1066 frame = render_view_->webview()->findFrameByName( 1065 frame = render_view_->webview()->findFrameByName(
1067 WebString::fromUTF8(commit_params.frame_to_navigate)); 1066 WebString::fromUTF8(request_params.frame_to_navigate));
1068 CHECK(frame) << "Invalid frame name passed: " 1067 CHECK(frame) << "Invalid frame name passed: "
1069 << commit_params.frame_to_navigate; 1068 << request_params.frame_to_navigate;
1070 } 1069 }
1071 1070
1072 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { 1071 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) {
1073 // We cannot reload if we do not have any history state. This happens, for 1072 // We cannot reload if we do not have any history state. This happens, for
1074 // example, when recovering from a crash. 1073 // example, when recovering from a crash.
1075 is_reload = false; 1074 is_reload = false;
1076 cache_policy = WebURLRequest::ReloadIgnoringCacheData; 1075 cache_policy = WebURLRequest::ReloadIgnoringCacheData;
1077 } 1076 }
1078 1077
1079 render_view_->pending_navigation_params_.reset(new NavigationParams( 1078 render_view_->pending_navigation_params_.reset(
1080 common_params, start_params, commit_params, history_params)); 1079 new NavigationParams(common_params, start_params, request_params));
1081 1080
1082 // If we are reloading, then WebKit will use the history state of the current 1081 // If we are reloading, then WebKit will use the history state of the current
1083 // page, so we should just ignore any given history state. Otherwise, if we 1082 // page, so we should just ignore any given history state. Otherwise, if we
1084 // have history state, then we need to navigate to it, which corresponds to a 1083 // have history state, then we need to navigate to it, which corresponds to a
1085 // back/forward navigation event. 1084 // back/forward navigation event.
1086 if (is_reload) { 1085 if (is_reload) {
1087 bool reload_original_url = 1086 bool reload_original_url =
1088 (common_params.navigation_type == 1087 (common_params.navigation_type ==
1089 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL); 1088 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL);
1090 bool ignore_cache = (common_params.navigation_type == 1089 bool ignore_cache = (common_params.navigation_type ==
1091 FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE); 1090 FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE);
1092 1091
1093 if (reload_original_url) 1092 if (reload_original_url)
1094 frame->reloadWithOverrideURL(common_params.url, true); 1093 frame->reloadWithOverrideURL(common_params.url, true);
1095 else 1094 else
1096 frame->reload(ignore_cache); 1095 frame->reload(ignore_cache);
1097 } else if (is_history_navigation) { 1096 } else if (is_history_navigation) {
1098 // We must know the page ID of the page we are navigating back to. 1097 // We must know the page ID of the page we are navigating back to.
1099 DCHECK_NE(history_params.page_id, -1); 1098 DCHECK_NE(request_params.page_id, -1);
1100 scoped_ptr<HistoryEntry> entry = 1099 scoped_ptr<HistoryEntry> entry =
1101 PageStateToHistoryEntry(history_params.page_state); 1100 PageStateToHistoryEntry(request_params.page_state);
1102 if (entry) { 1101 if (entry) {
1103 // Ensure we didn't save the swapped out URL in UpdateState, since the 1102 // Ensure we didn't save the swapped out URL in UpdateState, since the
1104 // browser should never be telling us to navigate to swappedout://. 1103 // browser should never be telling us to navigate to swappedout://.
1105 CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); 1104 CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL));
1106 render_view_->history_controller()->GoToEntry(entry.Pass(), cache_policy); 1105 render_view_->history_controller()->GoToEntry(entry.Pass(), cache_policy);
1107 } 1106 }
1108 } else if (!common_params.base_url_for_data_url.is_empty()) { 1107 } else if (!common_params.base_url_for_data_url.is_empty()) {
1109 LoadDataURL(common_params, frame); 1108 LoadDataURL(common_params, frame);
1110 } else { 1109 } else {
1111 // Navigate to the given URL. 1110 // Navigate to the given URL.
(...skipping 21 matching lines...) Expand all
1133 if (start_params.browser_initiated_post_data.size()) { 1132 if (start_params.browser_initiated_post_data.size()) {
1134 data = reinterpret_cast<const char*>( 1133 data = reinterpret_cast<const char*>(
1135 &start_params.browser_initiated_post_data.front()); 1134 &start_params.browser_initiated_post_data.front());
1136 } 1135 }
1137 http_body.appendData( 1136 http_body.appendData(
1138 WebData(data, start_params.browser_initiated_post_data.size())); 1137 WebData(data, start_params.browser_initiated_post_data.size()));
1139 request.setHTTPBody(http_body); 1138 request.setHTTPBody(http_body);
1140 } 1139 }
1141 1140
1142 // A session history navigation should have been accompanied by state. 1141 // A session history navigation should have been accompanied by state.
1143 CHECK_EQ(history_params.page_id, -1); 1142 CHECK_EQ(request_params.page_id, -1);
1144 1143
1145 // Record this before starting the load, we need a lower bound of this time 1144 // Record this before starting the load, we need a lower bound of this time
1146 // to sanitize the navigationStart override set below. 1145 // to sanitize the navigationStart override set below.
1147 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); 1146 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now();
1148 frame->loadRequest(request); 1147 frame->loadRequest(request);
1149 1148
1150 UpdateFrameNavigationTiming(frame, commit_params.browser_navigation_start, 1149 UpdateFrameNavigationTiming(frame, request_params.browser_navigation_start,
1151 renderer_navigation_start); 1150 renderer_navigation_start);
1152 } 1151 }
1153 1152
1154 // In case LoadRequest failed before DidCreateDataSource was called. 1153 // In case LoadRequest failed before DidCreateDataSource was called.
1155 render_view_->pending_navigation_params_.reset(); 1154 render_view_->pending_navigation_params_.reset();
1156 } 1155 }
1157 1156
1158 void RenderFrameImpl::NavigateToSwappedOutURL() { 1157 void RenderFrameImpl::NavigateToSwappedOutURL() {
1159 // We use loadRequest instead of loadHTMLString because the former commits 1158 // We use loadRequest instead of loadHTMLString because the former commits
1160 // synchronously. Otherwise a new navigation can interrupt the navigation 1159 // synchronously. Otherwise a new navigation can interrupt the navigation
(...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after
2440 // 'replace' load. This is necessary to avoid messing up session history. 2439 // 'replace' load. This is necessary to avoid messing up session history.
2441 // Otherwise, we do a normal load, which simulates a 'go' navigation as far 2440 // Otherwise, we do a normal load, which simulates a 'go' navigation as far
2442 // as session history is concerned. 2441 // as session history is concerned.
2443 // 2442 //
2444 // AUTO_SUBFRAME loads should always be treated as loads that do not advance 2443 // AUTO_SUBFRAME loads should always be treated as loads that do not advance
2445 // the page id. 2444 // the page id.
2446 // 2445 //
2447 // TODO(davidben): This should also take the failed navigation's replacement 2446 // TODO(davidben): This should also take the failed navigation's replacement
2448 // state into account, if a location.replace() failed. 2447 // state into account, if a location.replace() failed.
2449 bool replace = 2448 bool replace =
2450 navigation_state->history_params().page_id != -1 || 2449 navigation_state->request_params().page_id != -1 ||
2451 ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(), 2450 ui::PageTransitionCoreTypeIs(navigation_state->GetTransitionType(),
2452 ui::PAGE_TRANSITION_AUTO_SUBFRAME); 2451 ui::PAGE_TRANSITION_AUTO_SUBFRAME);
2453 2452
2454 // If we failed on a browser initiated request, then make sure that our error 2453 // If we failed on a browser initiated request, then make sure that our error
2455 // page load is regarded as the same browser initiated request. 2454 // page load is regarded as the same browser initiated request.
2456 if (!navigation_state->IsContentInitiated()) { 2455 if (!navigation_state->IsContentInitiated()) {
2457 render_view_->pending_navigation_params_.reset(new NavigationParams( 2456 render_view_->pending_navigation_params_.reset(new NavigationParams(
2458 navigation_state->common_params(), navigation_state->start_params(), 2457 navigation_state->common_params(), navigation_state->start_params(),
2459 CommitNavigationParams(false, base::TimeTicks(), std::vector<GURL>(), 2458 navigation_state->request_params()));
2460 false, std::string(), 2459 render_view_->pending_navigation_params_->request_params.request_time =
2461 document_state->request_time()), 2460 document_state->request_time();
2462 navigation_state->history_params()));
2463 } 2461 }
2464 2462
2465 // Load an error page. 2463 // Load an error page.
2466 LoadNavigationErrorPage(failed_request, error, replace); 2464 LoadNavigationErrorPage(failed_request, error, replace);
2467 } 2465 }
2468 2466
2469 void RenderFrameImpl::didCommitProvisionalLoad( 2467 void RenderFrameImpl::didCommitProvisionalLoad(
2470 blink::WebLocalFrame* frame, 2468 blink::WebLocalFrame* frame,
2471 const blink::WebHistoryItem& item, 2469 const blink::WebHistoryItem& item,
2472 blink::WebHistoryCommitType commit_type) { 2470 blink::WebHistoryCommitType commit_type) {
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
2535 // Inspect the navigation_state on this frame to see if the navigation 2533 // Inspect the navigation_state on this frame to see if the navigation
2536 // corresponds to a session history navigation... Note: |frame| may or 2534 // corresponds to a session history navigation... Note: |frame| may or
2537 // may not be the toplevel frame, but for the case of capturing session 2535 // may not be the toplevel frame, but for the case of capturing session
2538 // history, the first committed frame suffices. We keep track of whether 2536 // history, the first committed frame suffices. We keep track of whether
2539 // we've seen this commit before so that only capture session history once 2537 // we've seen this commit before so that only capture session history once
2540 // per navigation. 2538 // per navigation.
2541 // 2539 //
2542 // Note that we need to check if the page ID changed. In the case of a 2540 // Note that we need to check if the page ID changed. In the case of a
2543 // reload, the page ID doesn't change, and UpdateSessionHistory gets the 2541 // reload, the page ID doesn't change, and UpdateSessionHistory gets the
2544 // previous URL and the current page ID, which would be wrong. 2542 // previous URL and the current page ID, which would be wrong.
2545 if (navigation_state->history_params().page_id != -1 && 2543 if (navigation_state->request_params().page_id != -1 &&
2546 navigation_state->history_params().page_id != render_view_->page_id_ && 2544 navigation_state->request_params().page_id != render_view_->page_id_ &&
2547 !navigation_state->request_committed()) { 2545 !navigation_state->request_committed()) {
2548 // This is a successful session history navigation! 2546 // This is a successful session history navigation!
2549 render_view_->page_id_ = navigation_state->history_params().page_id; 2547 render_view_->page_id_ = navigation_state->request_params().page_id;
2550 2548
2551 render_view_->history_list_offset_ = 2549 render_view_->history_list_offset_ =
2552 navigation_state->history_params().pending_history_list_offset; 2550 navigation_state->request_params().pending_history_list_offset;
2553 } 2551 }
2554 } 2552 }
2555 2553
2556 bool sent = Send( 2554 bool sent = Send(
2557 new FrameHostMsg_DidAssignPageId(routing_id_, render_view_->page_id_)); 2555 new FrameHostMsg_DidAssignPageId(routing_id_, render_view_->page_id_));
2558 CHECK(sent); // http://crbug.com/407376 2556 CHECK(sent); // http://crbug.com/407376
2559 2557
2560 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers_, 2558 FOR_EACH_OBSERVER(RenderViewObserver, render_view_->observers_,
2561 DidCommitProvisionalLoad(frame, is_new_navigation)); 2559 DidCommitProvisionalLoad(frame, is_new_navigation));
2562 FOR_EACH_OBSERVER( 2560 FOR_EACH_OBSERVER(
(...skipping 1279 matching lines...) Expand 10 before | Expand all | Expand 10 after
3842 3840
3843 // Send the user agent override back. 3841 // Send the user agent override back.
3844 params.is_overriding_user_agent = internal_data->is_overriding_user_agent(); 3842 params.is_overriding_user_agent = internal_data->is_overriding_user_agent();
3845 3843
3846 // Track the URL of the original request. We use the first entry of the 3844 // Track the URL of the original request. We use the first entry of the
3847 // redirect chain if it exists because the chain may have started in another 3845 // redirect chain if it exists because the chain may have started in another
3848 // process. 3846 // process.
3849 params.original_request_url = GetOriginalRequestURL(ds); 3847 params.original_request_url = GetOriginalRequestURL(ds);
3850 3848
3851 params.history_list_was_cleared = 3849 params.history_list_was_cleared =
3852 navigation_state->history_params().should_clear_history_list; 3850 navigation_state->request_params().should_clear_history_list;
3853 3851
3854 params.report_type = static_cast<FrameMsg_UILoadMetricsReportType::Value>( 3852 params.report_type = static_cast<FrameMsg_UILoadMetricsReportType::Value>(
3855 frame->dataSource()->request().inputPerfMetricReportPolicy()); 3853 frame->dataSource()->request().inputPerfMetricReportPolicy());
3856 params.ui_timestamp = base::TimeTicks() + base::TimeDelta::FromSecondsD( 3854 params.ui_timestamp = base::TimeTicks() + base::TimeDelta::FromSecondsD(
3857 frame->dataSource()->request().uiStartTime()); 3855 frame->dataSource()->request().uiStartTime());
3858 3856
3859 // Save some histogram data so we can compute the average memory used per 3857 // Save some histogram data so we can compute the average memory used per
3860 // page load of the glyphs. 3858 // page load of the glyphs.
3861 UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad", 3859 UMA_HISTOGRAM_COUNTS_10000("Memory.GlyphPagesPerLoad",
3862 blink::WebGlyphCache::pageCount()); 3860 blink::WebGlyphCache::pageCount());
3863 3861
3864 // This message needs to be sent before any of allowScripts(), 3862 // This message needs to be sent before any of allowScripts(),
3865 // allowImages(), allowPlugins() is called for the new page, so that when 3863 // allowImages(), allowPlugins() is called for the new page, so that when
3866 // these functions send a ViewHostMsg_ContentBlocked message, it arrives 3864 // these functions send a ViewHostMsg_ContentBlocked message, it arrives
3867 // after the FrameHostMsg_DidCommitProvisionalLoad message. 3865 // after the FrameHostMsg_DidCommitProvisionalLoad message.
3868 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); 3866 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params));
3869 } else { 3867 } else {
3870 // Subframe navigation: the type depends on whether this navigation 3868 // Subframe navigation: the type depends on whether this navigation
3871 // generated a new session history entry. When they do generate a session 3869 // generated a new session history entry. When they do generate a session
3872 // history entry, it means the user initiated the navigation and we should 3870 // history entry, it means the user initiated the navigation and we should
3873 // mark it as such. 3871 // mark it as such.
3874 if (commit_type == blink::WebStandardCommit) 3872 if (commit_type == blink::WebStandardCommit)
3875 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME; 3873 params.transition = ui::PAGE_TRANSITION_MANUAL_SUBFRAME;
3876 else 3874 else
3877 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME; 3875 params.transition = ui::PAGE_TRANSITION_AUTO_SUBFRAME;
3878 3876
3879 DCHECK(!navigation_state->history_params().should_clear_history_list); 3877 DCHECK(!navigation_state->request_params().should_clear_history_list);
3880 params.history_list_was_cleared = false; 3878 params.history_list_was_cleared = false;
3881 params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT; 3879 params.report_type = FrameMsg_UILoadMetricsReportType::NO_REPORT;
3882 3880
3883 // Don't send this message while the subframe is swapped out. 3881 // Don't send this message while the subframe is swapped out.
3884 if (!is_swapped_out()) 3882 if (!is_swapped_out())
3885 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params)); 3883 Send(new FrameHostMsg_DidCommitProvisionalLoad(routing_id_, params));
3886 } 3884 }
3887 3885
3888 // If we end up reusing this WebRequest (for example, due to a #ref click), 3886 // If we end up reusing this WebRequest (for example, due to a #ref click),
3889 // we don't want the transition type to persist. Just clear it. 3887 // we don't want the transition type to persist. Just clear it.
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
3921 void RenderFrameImpl::FocusedNodeChangedForAccessibility(const WebNode& node) { 3919 void RenderFrameImpl::FocusedNodeChangedForAccessibility(const WebNode& node) {
3922 if (renderer_accessibility()) 3920 if (renderer_accessibility())
3923 renderer_accessibility()->AccessibilityFocusedNodeChanged(node); 3921 renderer_accessibility()->AccessibilityFocusedNodeChanged(node);
3924 } 3922 }
3925 3923
3926 // PlzNavigate 3924 // PlzNavigate
3927 void RenderFrameImpl::OnCommitNavigation( 3925 void RenderFrameImpl::OnCommitNavigation(
3928 const ResourceResponseHead& response, 3926 const ResourceResponseHead& response,
3929 const GURL& stream_url, 3927 const GURL& stream_url,
3930 const CommonNavigationParams& common_params, 3928 const CommonNavigationParams& common_params,
3931 const CommitNavigationParams& commit_params, 3929 const RequestNavigationParams& request_params) {
3932 const HistoryNavigationParams& history_params) {
3933 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch( 3930 CHECK(base::CommandLine::ForCurrentProcess()->HasSwitch(
3934 switches::kEnableBrowserSideNavigation)); 3931 switches::kEnableBrowserSideNavigation));
3935 bool is_reload = false; 3932 bool is_reload = false;
3936 bool is_history_navigation = history_params.page_state.IsValid(); 3933 bool is_history_navigation = request_params.page_state.IsValid();
3937 WebURLRequest::CachePolicy cache_policy = 3934 WebURLRequest::CachePolicy cache_policy =
3938 WebURLRequest::UseProtocolCachePolicy; 3935 WebURLRequest::UseProtocolCachePolicy;
3939 if (!RenderFrameImpl::PrepareRenderViewForNavigation( 3936 if (!RenderFrameImpl::PrepareRenderViewForNavigation(
3940 common_params.url, is_history_navigation, history_params, &is_reload, 3937 common_params.url, is_history_navigation, request_params, &is_reload,
3941 &cache_policy)) { 3938 &cache_policy)) {
3942 return; 3939 return;
3943 } 3940 }
3944 3941
3945 GetContentClient()->SetActiveURL(common_params.url); 3942 GetContentClient()->SetActiveURL(common_params.url);
3946 3943
3947 render_view_->pending_navigation_params_.reset(new NavigationParams( 3944 render_view_->pending_navigation_params_.reset(new NavigationParams(
3948 common_params, StartNavigationParams(), commit_params, history_params)); 3945 common_params, StartNavigationParams(), request_params));
3949 3946
3950 if (!common_params.base_url_for_data_url.is_empty() || 3947 if (!common_params.base_url_for_data_url.is_empty() ||
3951 common_params.url.SchemeIs(url::kDataScheme)) { 3948 common_params.url.SchemeIs(url::kDataScheme)) {
3952 LoadDataURL(common_params, frame_); 3949 LoadDataURL(common_params, frame_);
3953 return; 3950 return;
3954 } 3951 }
3955 3952
3956 // Create a WebURLRequest that blink can use to get access to the body of the 3953 // Create a WebURLRequest that blink can use to get access to the body of the
3957 // response through a stream in the browser. Blink will then commit the 3954 // response through a stream in the browser. Blink will then commit the
3958 // navigation. 3955 // navigation.
3959 // TODO(clamy): Have the navigation commit directly, without going through 3956 // TODO(clamy): Have the navigation commit directly, without going through
3960 // loading a WebURLRequest. 3957 // loading a WebURLRequest.
3961 scoped_ptr<StreamOverrideParameters> stream_override( 3958 scoped_ptr<StreamOverrideParameters> stream_override(
3962 new StreamOverrideParameters()); 3959 new StreamOverrideParameters());
3963 stream_override->stream_url = stream_url; 3960 stream_override->stream_url = stream_url;
3964 stream_override->response = response; 3961 stream_override->response = response;
3965 WebURLRequest request = 3962 WebURLRequest request =
3966 CreateURLRequestForNavigation(common_params, 3963 CreateURLRequestForNavigation(common_params,
3967 stream_override.Pass(), 3964 stream_override.Pass(),
3968 frame_->isViewSourceModeEnabled()); 3965 frame_->isViewSourceModeEnabled());
3969 3966
3970 // Make sure that blink loader will not try to use browser side navigation for 3967 // Make sure that blink loader will not try to use browser side navigation for
3971 // this request (since it already went to the browser). 3968 // this request (since it already went to the browser).
3972 request.setCheckForBrowserSideNavigation(false); 3969 request.setCheckForBrowserSideNavigation(false);
3973 3970
3974 // Record this before starting the load. A lower bound of this time is needed 3971 // Record this before starting the load. A lower bound of this time is needed
3975 // to sanitize the navigationStart override set below. 3972 // to sanitize the navigationStart override set below.
3976 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); 3973 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now();
3977 frame_->loadRequest(request); 3974 frame_->loadRequest(request);
3978 UpdateFrameNavigationTiming( 3975 UpdateFrameNavigationTiming(frame_, request_params.browser_navigation_start,
3979 frame_, commit_params.browser_navigation_start, 3976 renderer_navigation_start);
3980 renderer_navigation_start);
3981 } 3977 }
3982 3978
3983 WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation( 3979 WebNavigationPolicy RenderFrameImpl::DecidePolicyForNavigation(
3984 RenderFrame* render_frame, 3980 RenderFrame* render_frame,
3985 const NavigationPolicyInfo& info) { 3981 const NavigationPolicyInfo& info) {
3986 #ifdef OS_ANDROID 3982 #ifdef OS_ANDROID
3987 // The handlenavigation API is deprecated and will be removed once 3983 // The handlenavigation API is deprecated and will be removed once
3988 // crbug.com/325351 is resolved. 3984 // crbug.com/325351 is resolved.
3989 if (info.urlRequest.url() != GURL(kSwappedOutURL) && 3985 if (info.urlRequest.url() != GURL(kSwappedOutURL) &&
3990 GetContentClient()->renderer()->HandleNavigation( 3986 GetContentClient()->renderer()->HandleNavigation(
(...skipping 374 matching lines...) Expand 10 before | Expand all | Expand 10 after
4365 new MediaStreamRendererFactory()); 4361 new MediaStreamRendererFactory());
4366 #else 4362 #else
4367 return scoped_ptr<MediaStreamRendererFactory>( 4363 return scoped_ptr<MediaStreamRendererFactory>(
4368 static_cast<MediaStreamRendererFactory*>(NULL)); 4364 static_cast<MediaStreamRendererFactory*>(NULL));
4369 #endif 4365 #endif
4370 } 4366 }
4371 4367
4372 bool RenderFrameImpl::PrepareRenderViewForNavigation( 4368 bool RenderFrameImpl::PrepareRenderViewForNavigation(
4373 const GURL& url, 4369 const GURL& url,
4374 bool is_history_navigation, 4370 bool is_history_navigation,
4375 const HistoryNavigationParams& history_params, 4371 const RequestNavigationParams& request_params,
4376 bool* is_reload, 4372 bool* is_reload,
4377 WebURLRequest::CachePolicy* cache_policy) { 4373 WebURLRequest::CachePolicy* cache_policy) {
4378 MaybeHandleDebugURL(url); 4374 MaybeHandleDebugURL(url);
4379 if (!render_view_->webview()) 4375 if (!render_view_->webview())
4380 return false; 4376 return false;
4381 4377
4382 FOR_EACH_OBSERVER( 4378 FOR_EACH_OBSERVER(
4383 RenderViewObserver, render_view_->observers_, Navigate(url)); 4379 RenderViewObserver, render_view_->observers_, Navigate(url));
4384 4380
4385 // If this is a stale back/forward (due to a recent navigation the browser 4381 // If this is a stale back/forward (due to a recent navigation the browser
4386 // didn't know about), ignore it. Only check if swapped in because if the 4382 // didn't know about), ignore it. Only check if swapped in because if the
4387 // frame is swapped out, it won't commit before asking the browser. 4383 // frame is swapped out, it won't commit before asking the browser.
4388 if (!render_view_->is_swapped_out() && is_history_navigation && 4384 if (!render_view_->is_swapped_out() && is_history_navigation &&
4389 render_view_->history_list_offset_ != 4385 render_view_->history_list_offset_ !=
4390 history_params.current_history_list_offset) { 4386 request_params.current_history_list_offset) {
4391 return false; 4387 return false;
4392 } 4388 }
4393 4389
4394 render_view_->history_list_offset_ = 4390 render_view_->history_list_offset_ =
4395 history_params.current_history_list_offset; 4391 request_params.current_history_list_offset;
4396 render_view_->history_list_length_ = 4392 render_view_->history_list_length_ =
4397 history_params.current_history_list_length; 4393 request_params.current_history_list_length;
4398 if (history_params.should_clear_history_list) { 4394 if (request_params.should_clear_history_list) {
4399 CHECK_EQ(-1, render_view_->history_list_offset_); 4395 CHECK_EQ(-1, render_view_->history_list_offset_);
4400 CHECK_EQ(0, render_view_->history_list_length_); 4396 CHECK_EQ(0, render_view_->history_list_length_);
4401 } 4397 }
4402 4398
4403 if (!is_swapped_out_ || frame_->parent()) 4399 if (!is_swapped_out_ || frame_->parent())
4404 return true; 4400 return true;
4405 4401
4406 // This is a swapped out main frame, so swap the renderer back in. 4402 // This is a swapped out main frame, so swap the renderer back in.
4407 // We marked the view as hidden when swapping the view out, so be sure to 4403 // We marked the view as hidden when swapping the view out, so be sure to
4408 // reset the visibility state before navigating to the new URL. 4404 // reset the visibility state before navigating to the new URL.
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
4541 4537
4542 #if defined(ENABLE_BROWSER_CDMS) 4538 #if defined(ENABLE_BROWSER_CDMS)
4543 RendererCdmManager* RenderFrameImpl::GetCdmManager() { 4539 RendererCdmManager* RenderFrameImpl::GetCdmManager() {
4544 if (!cdm_manager_) 4540 if (!cdm_manager_)
4545 cdm_manager_ = new RendererCdmManager(this); 4541 cdm_manager_ = new RendererCdmManager(this);
4546 return cdm_manager_; 4542 return cdm_manager_;
4547 } 4543 }
4548 #endif // defined(ENABLE_BROWSER_CDMS) 4544 #endif // defined(ENABLE_BROWSER_CDMS)
4549 4545
4550 } // namespace content 4546 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/render_frame_impl.h ('k') | content/renderer/render_view_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698