OLD | NEW |
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 1073 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1084 WebURLRequest::UseProtocolCachePolicy; | 1084 WebURLRequest::UseProtocolCachePolicy; |
1085 if (!RenderFrameImpl::PrepareRenderViewForNavigation( | 1085 if (!RenderFrameImpl::PrepareRenderViewForNavigation( |
1086 common_params.url, is_history_navigation, request_params, &is_reload, | 1086 common_params.url, is_history_navigation, request_params, &is_reload, |
1087 &cache_policy)) { | 1087 &cache_policy)) { |
1088 Send(new FrameHostMsg_DidDropNavigation(routing_id_)); | 1088 Send(new FrameHostMsg_DidDropNavigation(routing_id_)); |
1089 return; | 1089 return; |
1090 } | 1090 } |
1091 | 1091 |
1092 GetContentClient()->SetActiveURL(common_params.url); | 1092 GetContentClient()->SetActiveURL(common_params.url); |
1093 | 1093 |
1094 WebFrame* frame = frame_; | |
1095 if (!request_params.frame_to_navigate.empty()) { | |
1096 // TODO(nasko): Move this lookup to the browser process. | |
1097 frame = render_view_->webview()->findFrameByName( | |
1098 WebString::fromUTF8(request_params.frame_to_navigate)); | |
1099 CHECK(frame) << "Invalid frame name passed: " | |
1100 << request_params.frame_to_navigate; | |
1101 } | |
1102 | |
1103 // If this frame isn't in the same process as its parent, it will naively | 1094 // If this frame isn't in the same process as its parent, it will naively |
1104 // assume that this is the first navigation in the iframe, but this may not | 1095 // assume that this is the first navigation in the iframe, but this may not |
1105 // actually be the case. The PageTransition differentiates between the first | 1096 // actually be the case. The PageTransition differentiates between the first |
1106 // navigation in a subframe and subsequent navigations, so if this is a | 1097 // navigation in a subframe and subsequent navigations, so if this is a |
1107 // subsequent navigation, force the frame's state machine forward. | 1098 // subsequent navigation, force the frame's state machine forward. |
1108 if (ui::PageTransitionCoreTypeIs(common_params.transition, | 1099 if (ui::PageTransitionCoreTypeIs(common_params.transition, |
1109 ui::PAGE_TRANSITION_MANUAL_SUBFRAME)) { | 1100 ui::PAGE_TRANSITION_MANUAL_SUBFRAME)) { |
1110 CHECK(frame_->parent()); | 1101 CHECK(frame_->parent()); |
1111 if (frame_->parent()->isWebRemoteFrame()) { | 1102 if (frame_->parent()->isWebRemoteFrame()) { |
1112 CHECK_EQ(frame, frame_); | |
1113 frame_->setCommittedFirstRealLoad(); | 1103 frame_->setCommittedFirstRealLoad(); |
1114 } | 1104 } |
1115 } | 1105 } |
1116 | 1106 |
1117 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { | 1107 if (is_reload && !render_view_->history_controller()->GetCurrentEntry()) { |
1118 // We cannot reload if we do not have any history state. This happens, for | 1108 // We cannot reload if we do not have any history state. This happens, for |
1119 // example, when recovering from a crash. | 1109 // example, when recovering from a crash. |
1120 is_reload = false; | 1110 is_reload = false; |
1121 cache_policy = WebURLRequest::ReloadIgnoringCacheData; | 1111 cache_policy = WebURLRequest::ReloadIgnoringCacheData; |
1122 } | 1112 } |
1123 | 1113 |
1124 pending_navigation_params_.reset( | 1114 pending_navigation_params_.reset( |
1125 new NavigationParams(common_params, start_params, request_params)); | 1115 new NavigationParams(common_params, start_params, request_params)); |
1126 | 1116 |
1127 // If we are reloading, then WebKit will use the history state of the current | 1117 // If we are reloading, then WebKit will use the history state of the current |
1128 // page, so we should just ignore any given history state. Otherwise, if we | 1118 // page, so we should just ignore any given history state. Otherwise, if we |
1129 // have history state, then we need to navigate to it, which corresponds to a | 1119 // have history state, then we need to navigate to it, which corresponds to a |
1130 // back/forward navigation event. | 1120 // back/forward navigation event. |
1131 if (is_reload) { | 1121 if (is_reload) { |
1132 bool reload_original_url = | 1122 bool reload_original_url = |
1133 (common_params.navigation_type == | 1123 (common_params.navigation_type == |
1134 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL); | 1124 FrameMsg_Navigate_Type::RELOAD_ORIGINAL_REQUEST_URL); |
1135 bool ignore_cache = (common_params.navigation_type == | 1125 bool ignore_cache = (common_params.navigation_type == |
1136 FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE); | 1126 FrameMsg_Navigate_Type::RELOAD_IGNORING_CACHE); |
1137 | 1127 |
1138 if (reload_original_url) | 1128 if (reload_original_url) |
1139 frame->reloadWithOverrideURL(common_params.url, true); | 1129 frame_->reloadWithOverrideURL(common_params.url, true); |
1140 else | 1130 else |
1141 frame->reload(ignore_cache); | 1131 frame_->reload(ignore_cache); |
1142 } else if (is_history_navigation) { | 1132 } else if (is_history_navigation) { |
1143 // We must know the page ID of the page we are navigating back to. | 1133 // We must know the page ID of the page we are navigating back to. |
1144 DCHECK_NE(request_params.page_id, -1); | 1134 DCHECK_NE(request_params.page_id, -1); |
1145 scoped_ptr<HistoryEntry> entry = | 1135 scoped_ptr<HistoryEntry> entry = |
1146 PageStateToHistoryEntry(request_params.page_state); | 1136 PageStateToHistoryEntry(request_params.page_state); |
1147 if (entry) { | 1137 if (entry) { |
1148 // Ensure we didn't save the swapped out URL in UpdateState, since the | 1138 // Ensure we didn't save the swapped out URL in UpdateState, since the |
1149 // browser should never be telling us to navigate to swappedout://. | 1139 // browser should never be telling us to navigate to swappedout://. |
1150 CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); | 1140 CHECK(entry->root().urlString() != WebString::fromUTF8(kSwappedOutURL)); |
1151 scoped_ptr<NavigationParams> navigation_params( | 1141 scoped_ptr<NavigationParams> navigation_params( |
1152 new NavigationParams(*pending_navigation_params_.get())); | 1142 new NavigationParams(*pending_navigation_params_.get())); |
1153 render_view_->history_controller()->GoToEntry( | 1143 render_view_->history_controller()->GoToEntry( |
1154 entry.Pass(), navigation_params.Pass(), cache_policy); | 1144 entry.Pass(), navigation_params.Pass(), cache_policy); |
1155 } | 1145 } |
1156 } else if (!common_params.base_url_for_data_url.is_empty()) { | 1146 } else if (!common_params.base_url_for_data_url.is_empty()) { |
1157 LoadDataURL(common_params, frame); | 1147 LoadDataURL(common_params, frame_); |
1158 } else { | 1148 } else { |
1159 // Navigate to the given URL. | 1149 // Navigate to the given URL. |
1160 WebURLRequest request = CreateURLRequestForNavigation( | 1150 WebURLRequest request = CreateURLRequestForNavigation( |
1161 common_params, scoped_ptr<StreamOverrideParameters>(), | 1151 common_params, scoped_ptr<StreamOverrideParameters>(), |
1162 frame->isViewSourceModeEnabled()); | 1152 frame_->isViewSourceModeEnabled()); |
1163 | 1153 |
1164 if (!start_params.extra_headers.empty()) { | 1154 if (!start_params.extra_headers.empty()) { |
1165 for (net::HttpUtil::HeadersIterator i(start_params.extra_headers.begin(), | 1155 for (net::HttpUtil::HeadersIterator i(start_params.extra_headers.begin(), |
1166 start_params.extra_headers.end(), | 1156 start_params.extra_headers.end(), |
1167 "\n"); | 1157 "\n"); |
1168 i.GetNext();) { | 1158 i.GetNext();) { |
1169 request.addHTTPHeaderField(WebString::fromUTF8(i.name()), | 1159 request.addHTTPHeaderField(WebString::fromUTF8(i.name()), |
1170 WebString::fromUTF8(i.values())); | 1160 WebString::fromUTF8(i.values())); |
1171 } | 1161 } |
1172 } | 1162 } |
(...skipping 13 matching lines...) Expand all Loading... |
1186 WebData(data, start_params.browser_initiated_post_data.size())); | 1176 WebData(data, start_params.browser_initiated_post_data.size())); |
1187 request.setHTTPBody(http_body); | 1177 request.setHTTPBody(http_body); |
1188 } | 1178 } |
1189 | 1179 |
1190 // A session history navigation should have been accompanied by state. | 1180 // A session history navigation should have been accompanied by state. |
1191 CHECK_EQ(request_params.page_id, -1); | 1181 CHECK_EQ(request_params.page_id, -1); |
1192 | 1182 |
1193 // Record this before starting the load, we need a lower bound of this time | 1183 // Record this before starting the load, we need a lower bound of this time |
1194 // to sanitize the navigationStart override set below. | 1184 // to sanitize the navigationStart override set below. |
1195 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); | 1185 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); |
1196 frame->loadRequest(request); | 1186 frame_->loadRequest(request); |
1197 | 1187 |
1198 UpdateFrameNavigationTiming(frame, request_params.browser_navigation_start, | 1188 UpdateFrameNavigationTiming(frame_, request_params.browser_navigation_start, |
1199 renderer_navigation_start); | 1189 renderer_navigation_start); |
1200 } | 1190 } |
1201 | 1191 |
1202 // In case LoadRequest failed before didCreateDataSource was called. | 1192 // In case LoadRequest failed before didCreateDataSource was called. |
1203 pending_navigation_params_.reset(); | 1193 pending_navigation_params_.reset(); |
1204 } | 1194 } |
1205 | 1195 |
1206 void RenderFrameImpl::NavigateToSwappedOutURL() { | 1196 void RenderFrameImpl::NavigateToSwappedOutURL() { |
1207 // We use loadRequest instead of loadHTMLString because the former commits | 1197 // We use loadRequest instead of loadHTMLString because the former commits |
1208 // synchronously. Otherwise a new navigation can interrupt the navigation | 1198 // synchronously. Otherwise a new navigation can interrupt the navigation |
(...skipping 3672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4881 #elif defined(ENABLE_BROWSER_CDMS) | 4871 #elif defined(ENABLE_BROWSER_CDMS) |
4882 cdm_manager_, | 4872 cdm_manager_, |
4883 #endif | 4873 #endif |
4884 this); | 4874 this); |
4885 } | 4875 } |
4886 | 4876 |
4887 return cdm_factory_; | 4877 return cdm_factory_; |
4888 } | 4878 } |
4889 | 4879 |
4890 } // namespace content | 4880 } // namespace content |
OLD | NEW |