| 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 #include <utility> | 9 #include <utility> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 #include "media/blink/webmediaplayer_impl.h" | 141 #include "media/blink/webmediaplayer_impl.h" |
| 142 #include "media/renderers/gpu_video_accelerator_factories.h" | 142 #include "media/renderers/gpu_video_accelerator_factories.h" |
| 143 #include "mojo/common/url_type_converters.h" | 143 #include "mojo/common/url_type_converters.h" |
| 144 #include "mojo/edk/js/core.h" | 144 #include "mojo/edk/js/core.h" |
| 145 #include "mojo/edk/js/support.h" | 145 #include "mojo/edk/js/support.h" |
| 146 #include "net/base/data_url.h" | 146 #include "net/base/data_url.h" |
| 147 #include "net/base/net_errors.h" | 147 #include "net/base/net_errors.h" |
| 148 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" | 148 #include "net/base/registry_controlled_domains/registry_controlled_domain.h" |
| 149 #include "net/http/http_util.h" | 149 #include "net/http/http_util.h" |
| 150 #include "third_party/WebKit/public/platform/URLConversion.h" | 150 #include "third_party/WebKit/public/platform/URLConversion.h" |
| 151 #include "third_party/WebKit/public/platform/WebCachePolicy.h" |
| 151 #include "third_party/WebKit/public/platform/WebData.h" | 152 #include "third_party/WebKit/public/platform/WebData.h" |
| 152 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" | 153 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" |
| 153 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" | 154 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" |
| 154 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" | 155 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" |
| 155 #include "third_party/WebKit/public/platform/WebString.h" | 156 #include "third_party/WebKit/public/platform/WebString.h" |
| 156 #include "third_party/WebKit/public/platform/WebURL.h" | 157 #include "third_party/WebKit/public/platform/WebURL.h" |
| 157 #include "third_party/WebKit/public/platform/WebURLError.h" | 158 #include "third_party/WebKit/public/platform/WebURLError.h" |
| 158 #include "third_party/WebKit/public/platform/WebURLResponse.h" | 159 #include "third_party/WebKit/public/platform/WebURLResponse.h" |
| 159 #include "third_party/WebKit/public/platform/WebVector.h" | 160 #include "third_party/WebKit/public/platform/WebVector.h" |
| 160 #include "third_party/WebKit/public/platform/modules/webusb/WebUSBClient.h" | 161 #include "third_party/WebKit/public/platform/modules/webusb/WebUSBClient.h" |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 #endif | 236 #endif |
| 236 | 237 |
| 237 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) | 238 #if defined(ENABLE_MOJO_AUDIO_DECODER) || defined(ENABLE_MOJO_VIDEO_DECODER) |
| 238 #include "media/mojo/services/mojo_decoder_factory.h" // nogncheck | 239 #include "media/mojo/services/mojo_decoder_factory.h" // nogncheck |
| 239 #endif | 240 #endif |
| 240 | 241 |
| 241 #if defined(ENABLE_WEBVR) | 242 #if defined(ENABLE_WEBVR) |
| 242 #include "content/renderer/vr/vr_dispatcher.h" | 243 #include "content/renderer/vr/vr_dispatcher.h" |
| 243 #endif | 244 #endif |
| 244 | 245 |
| 246 using blink::WebCachePolicy; |
| 245 using blink::WebContentDecryptionModule; | 247 using blink::WebContentDecryptionModule; |
| 246 using blink::WebContextMenuData; | 248 using blink::WebContextMenuData; |
| 247 using blink::WebCString; | 249 using blink::WebCString; |
| 248 using blink::WebData; | 250 using blink::WebData; |
| 249 using blink::WebDataSource; | 251 using blink::WebDataSource; |
| 250 using blink::WebDocument; | 252 using blink::WebDocument; |
| 251 using blink::WebDOMEvent; | 253 using blink::WebDOMEvent; |
| 252 using blink::WebDOMMessageEvent; | 254 using blink::WebDOMMessageEvent; |
| 253 using blink::WebElement; | 255 using blink::WebElement; |
| 254 using blink::WebExternalPopupMenu; | 256 using blink::WebExternalPopupMenu; |
| (...skipping 245 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 500 bool IsTopLevelNavigation(WebFrame* frame) { | 502 bool IsTopLevelNavigation(WebFrame* frame) { |
| 501 return frame->parent() == NULL; | 503 return frame->parent() == NULL; |
| 502 } | 504 } |
| 503 | 505 |
| 504 WebURLRequest CreateURLRequestForNavigation( | 506 WebURLRequest CreateURLRequestForNavigation( |
| 505 const CommonNavigationParams& common_params, | 507 const CommonNavigationParams& common_params, |
| 506 scoped_ptr<StreamOverrideParameters> stream_override, | 508 scoped_ptr<StreamOverrideParameters> stream_override, |
| 507 bool is_view_source_mode_enabled) { | 509 bool is_view_source_mode_enabled) { |
| 508 WebURLRequest request(common_params.url); | 510 WebURLRequest request(common_params.url); |
| 509 if (is_view_source_mode_enabled) | 511 if (is_view_source_mode_enabled) |
| 510 request.setCachePolicy(WebURLRequest::ReturnCacheDataElseLoad); | 512 request.setCachePolicy(WebCachePolicy::ReturnCacheDataElseLoad); |
| 511 | 513 |
| 512 if (common_params.referrer.url.is_valid()) { | 514 if (common_params.referrer.url.is_valid()) { |
| 513 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( | 515 WebString web_referrer = WebSecurityPolicy::generateReferrerHeader( |
| 514 common_params.referrer.policy, | 516 common_params.referrer.policy, |
| 515 common_params.url, | 517 common_params.url, |
| 516 WebString::fromUTF8(common_params.referrer.url.spec())); | 518 WebString::fromUTF8(common_params.referrer.url.spec())); |
| 517 if (!web_referrer.isEmpty()) | 519 if (!web_referrer.isEmpty()) |
| 518 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); | 520 request.setHTTPReferrer(web_referrer, common_params.referrer.policy); |
| 519 } | 521 } |
| 520 | 522 |
| (...skipping 2406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2927 break; | 2929 break; |
| 2928 } | 2930 } |
| 2929 } | 2931 } |
| 2930 } | 2932 } |
| 2931 } | 2933 } |
| 2932 } | 2934 } |
| 2933 | 2935 |
| 2934 if (content_initiated) { | 2936 if (content_initiated) { |
| 2935 const WebURLRequest& request = datasource->request(); | 2937 const WebURLRequest& request = datasource->request(); |
| 2936 switch (request.getCachePolicy()) { | 2938 switch (request.getCachePolicy()) { |
| 2937 case WebURLRequest::UseProtocolCachePolicy: // normal load. | 2939 case WebCachePolicy::UseProtocolCachePolicy: // normal load. |
| 2938 document_state->set_load_type(DocumentState::LINK_LOAD_NORMAL); | 2940 document_state->set_load_type(DocumentState::LINK_LOAD_NORMAL); |
| 2939 break; | 2941 break; |
| 2940 case WebURLRequest::ValidatingCacheData: // reload. | 2942 case WebCachePolicy::ValidatingCacheData: // reload. |
| 2941 case WebURLRequest::BypassingCache: // end-to-end reload. | 2943 case WebCachePolicy::BypassingCache: // end-to-end reload. |
| 2942 document_state->set_load_type(DocumentState::LINK_LOAD_RELOAD); | 2944 document_state->set_load_type(DocumentState::LINK_LOAD_RELOAD); |
| 2943 break; | 2945 break; |
| 2944 case WebURLRequest::ReturnCacheDataElseLoad: // allow stale data. | 2946 case WebCachePolicy::ReturnCacheDataElseLoad: // allow stale data. |
| 2945 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK); | 2947 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_STALE_OK); |
| 2946 break; | 2948 break; |
| 2947 case WebURLRequest::ReturnCacheDataDontLoad: // Don't re-post. | 2949 case WebCachePolicy::ReturnCacheDataDontLoad: // Don't re-post. |
| 2948 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); | 2950 document_state->set_load_type(DocumentState::LINK_LOAD_CACHE_ONLY); |
| 2949 break; | 2951 break; |
| 2950 default: | 2952 default: |
| 2951 NOTREACHED(); | 2953 NOTREACHED(); |
| 2952 } | 2954 } |
| 2953 } | 2955 } |
| 2954 | 2956 |
| 2955 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>( | 2957 NavigationStateImpl* navigation_state = static_cast<NavigationStateImpl*>( |
| 2956 document_state->navigation_state()); | 2958 document_state->navigation_state()); |
| 2957 | 2959 |
| (...skipping 1668 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4626 } | 4628 } |
| 4627 | 4629 |
| 4628 // PlzNavigate | 4630 // PlzNavigate |
| 4629 void RenderFrameImpl::OnFailedNavigation( | 4631 void RenderFrameImpl::OnFailedNavigation( |
| 4630 const CommonNavigationParams& common_params, | 4632 const CommonNavigationParams& common_params, |
| 4631 const RequestNavigationParams& request_params, | 4633 const RequestNavigationParams& request_params, |
| 4632 bool has_stale_copy_in_cache, | 4634 bool has_stale_copy_in_cache, |
| 4633 int error_code) { | 4635 int error_code) { |
| 4634 DCHECK(IsBrowserSideNavigationEnabled()); | 4636 DCHECK(IsBrowserSideNavigationEnabled()); |
| 4635 bool is_reload = IsReload(common_params.navigation_type); | 4637 bool is_reload = IsReload(common_params.navigation_type); |
| 4636 WebURLRequest::CachePolicy cache_policy = | |
| 4637 WebURLRequest::UseProtocolCachePolicy; | |
| 4638 RenderFrameImpl::PrepareRenderViewForNavigation( | 4638 RenderFrameImpl::PrepareRenderViewForNavigation( |
| 4639 common_params.url, request_params, &is_reload, &cache_policy); | 4639 common_params.url, request_params); |
| 4640 | 4640 |
| 4641 GetContentClient()->SetActiveURL(common_params.url); | 4641 GetContentClient()->SetActiveURL(common_params.url); |
| 4642 | 4642 |
| 4643 // If this frame isn't in the same process as the main frame, it may naively | 4643 // If this frame isn't in the same process as the main frame, it may naively |
| 4644 // assume that this is the first navigation in the iframe, but this may not | 4644 // assume that this is the first navigation in the iframe, but this may not |
| 4645 // actually be the case. Inform the frame's state machine if this frame has | 4645 // actually be the case. Inform the frame's state machine if this frame has |
| 4646 // already committed other loads. | 4646 // already committed other loads. |
| 4647 if (request_params.has_committed_real_load && frame_->parent()) | 4647 if (request_params.has_committed_real_load && frame_->parent()) |
| 4648 frame_->setCommittedFirstRealLoad(); | 4648 frame_->setCommittedFirstRealLoad(); |
| 4649 | 4649 |
| (...skipping 566 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5216 const CommonNavigationParams& common_params, | 5216 const CommonNavigationParams& common_params, |
| 5217 const StartNavigationParams& start_params, | 5217 const StartNavigationParams& start_params, |
| 5218 const RequestNavigationParams& request_params, | 5218 const RequestNavigationParams& request_params, |
| 5219 scoped_ptr<StreamOverrideParameters> stream_params) { | 5219 scoped_ptr<StreamOverrideParameters> stream_params) { |
| 5220 bool browser_side_navigation = IsBrowserSideNavigationEnabled(); | 5220 bool browser_side_navigation = IsBrowserSideNavigationEnabled(); |
| 5221 | 5221 |
| 5222 // Lower bound for browser initiated navigation start time. | 5222 // Lower bound for browser initiated navigation start time. |
| 5223 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); | 5223 base::TimeTicks renderer_navigation_start = base::TimeTicks::Now(); |
| 5224 bool is_reload = IsReload(common_params.navigation_type); | 5224 bool is_reload = IsReload(common_params.navigation_type); |
| 5225 bool is_history_navigation = request_params.page_state.IsValid(); | 5225 bool is_history_navigation = request_params.page_state.IsValid(); |
| 5226 WebURLRequest::CachePolicy cache_policy = | 5226 WebCachePolicy cache_policy = WebCachePolicy::UseProtocolCachePolicy; |
| 5227 WebURLRequest::UseProtocolCachePolicy; | |
| 5228 RenderFrameImpl::PrepareRenderViewForNavigation( | 5227 RenderFrameImpl::PrepareRenderViewForNavigation( |
| 5229 common_params.url, request_params, &is_reload, &cache_policy); | 5228 common_params.url, request_params); |
| 5230 | 5229 |
| 5231 GetContentClient()->SetActiveURL(common_params.url); | 5230 GetContentClient()->SetActiveURL(common_params.url); |
| 5232 | 5231 |
| 5233 // If this frame isn't in the same process as the main frame, it may naively | 5232 // If this frame isn't in the same process as the main frame, it may naively |
| 5234 // assume that this is the first navigation in the iframe, but this may not | 5233 // assume that this is the first navigation in the iframe, but this may not |
| 5235 // actually be the case. Inform the frame's state machine if this frame has | 5234 // actually be the case. Inform the frame's state machine if this frame has |
| 5236 // already committed other loads. | 5235 // already committed other loads. |
| 5237 if (request_params.has_committed_real_load && frame_->parent()) | 5236 if (request_params.has_committed_real_load && frame_->parent()) |
| 5238 frame_->setCommittedFirstRealLoad(); | 5237 frame_->setCommittedFirstRealLoad(); |
| 5239 | 5238 |
| 5240 bool no_current_entry = | 5239 bool no_current_entry = |
| 5241 SiteIsolationPolicy::UseSubframeNavigationEntries() | 5240 SiteIsolationPolicy::UseSubframeNavigationEntries() |
| 5242 ? current_history_item_.isNull() | 5241 ? current_history_item_.isNull() |
| 5243 : !render_view_->history_controller()->GetCurrentEntry(); | 5242 : !render_view_->history_controller()->GetCurrentEntry(); |
| 5244 if (is_reload && no_current_entry) { | 5243 if (is_reload && no_current_entry) { |
| 5245 // We cannot reload if we do not have any history state. This happens, for | 5244 // We cannot reload if we do not have any history state. This happens, for |
| 5246 // example, when recovering from a crash. | 5245 // example, when recovering from a crash. |
| 5247 is_reload = false; | 5246 is_reload = false; |
| 5248 cache_policy = WebURLRequest::ValidatingCacheData; | 5247 cache_policy = WebCachePolicy::ValidatingCacheData; |
| 5249 } | 5248 } |
| 5250 | 5249 |
| 5251 // If the navigation is for "view source", the WebLocalFrame needs to be put | 5250 // If the navigation is for "view source", the WebLocalFrame needs to be put |
| 5252 // in a special mode. | 5251 // in a special mode. |
| 5253 if (request_params.is_view_source) | 5252 if (request_params.is_view_source) |
| 5254 frame_->enableViewSourceMode(true); | 5253 frame_->enableViewSourceMode(true); |
| 5255 | 5254 |
| 5256 pending_navigation_params_.reset( | 5255 pending_navigation_params_.reset( |
| 5257 new NavigationParams(common_params, start_params, request_params)); | 5256 new NavigationParams(common_params, start_params, request_params)); |
| 5258 | 5257 |
| (...skipping 300 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5559 return scoped_ptr<MediaStreamRendererFactory>( | 5558 return scoped_ptr<MediaStreamRendererFactory>( |
| 5560 new MediaStreamRendererFactoryImpl()); | 5559 new MediaStreamRendererFactoryImpl()); |
| 5561 #else | 5560 #else |
| 5562 return scoped_ptr<MediaStreamRendererFactory>( | 5561 return scoped_ptr<MediaStreamRendererFactory>( |
| 5563 static_cast<MediaStreamRendererFactory*>(NULL)); | 5562 static_cast<MediaStreamRendererFactory*>(NULL)); |
| 5564 #endif | 5563 #endif |
| 5565 } | 5564 } |
| 5566 | 5565 |
| 5567 void RenderFrameImpl::PrepareRenderViewForNavigation( | 5566 void RenderFrameImpl::PrepareRenderViewForNavigation( |
| 5568 const GURL& url, | 5567 const GURL& url, |
| 5569 const RequestNavigationParams& request_params, | 5568 const RequestNavigationParams& request_params) { |
| 5570 bool* is_reload, | |
| 5571 WebURLRequest::CachePolicy* cache_policy) { | |
| 5572 DCHECK(render_view_->webview()); | 5569 DCHECK(render_view_->webview()); |
| 5573 | 5570 |
| 5574 MaybeHandleDebugURL(url); | 5571 MaybeHandleDebugURL(url); |
| 5575 | 5572 |
| 5576 FOR_EACH_OBSERVER( | 5573 FOR_EACH_OBSERVER( |
| 5577 RenderViewObserver, render_view_->observers_, Navigate(url)); | 5574 RenderViewObserver, render_view_->observers_, Navigate(url)); |
| 5578 | 5575 |
| 5579 render_view_->history_list_offset_ = | 5576 render_view_->history_list_offset_ = |
| 5580 request_params.current_history_list_offset; | 5577 request_params.current_history_list_offset; |
| 5581 render_view_->history_list_length_ = | 5578 render_view_->history_list_length_ = |
| (...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5792 // default this prefers the cache over loading (LOAD_PREFERRING_CACHE) which | 5789 // default this prefers the cache over loading (LOAD_PREFERRING_CACHE) which |
| 5793 // can result in stale data for pages that are set to expire. We explicitly | 5790 // can result in stale data for pages that are set to expire. We explicitly |
| 5794 // override that by setting the policy here so that as necessary we load | 5791 // override that by setting the policy here so that as necessary we load |
| 5795 // from the network. | 5792 // from the network. |
| 5796 // | 5793 // |
| 5797 // TODO(davidben): Remove this in favor of passing a cache policy to the | 5794 // TODO(davidben): Remove this in favor of passing a cache policy to the |
| 5798 // loadHistoryItem call in OnNavigate. That requires not overloading | 5795 // loadHistoryItem call in OnNavigate. That requires not overloading |
| 5799 // UseProtocolCachePolicy to mean both "normal load" and "determine cache | 5796 // UseProtocolCachePolicy to mean both "normal load" and "determine cache |
| 5800 // policy based on load type, etc". | 5797 // policy based on load type, etc". |
| 5801 internal_data->set_cache_policy_override( | 5798 internal_data->set_cache_policy_override( |
| 5802 WebURLRequest::UseProtocolCachePolicy); | 5799 WebCachePolicy::UseProtocolCachePolicy); |
| 5803 } | 5800 } |
| 5804 | 5801 |
| 5805 if (IsReload(pending_navigation_params_->common_params.navigation_type)) | 5802 if (IsReload(pending_navigation_params_->common_params.navigation_type)) |
| 5806 document_state->set_load_type(DocumentState::RELOAD); | 5803 document_state->set_load_type(DocumentState::RELOAD); |
| 5807 else if (pending_navigation_params_->request_params.page_state.IsValid()) | 5804 else if (pending_navigation_params_->request_params.page_state.IsValid()) |
| 5808 document_state->set_load_type(DocumentState::HISTORY_LOAD); | 5805 document_state->set_load_type(DocumentState::HISTORY_LOAD); |
| 5809 else | 5806 else |
| 5810 document_state->set_load_type(DocumentState::NORMAL_LOAD); | 5807 document_state->set_load_type(DocumentState::NORMAL_LOAD); |
| 5811 | 5808 |
| 5812 internal_data->set_is_overriding_user_agent( | 5809 internal_data->set_is_overriding_user_agent( |
| (...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6027 int match_count, | 6024 int match_count, |
| 6028 int ordinal, | 6025 int ordinal, |
| 6029 const WebRect& selection_rect, | 6026 const WebRect& selection_rect, |
| 6030 bool final_status_update) { | 6027 bool final_status_update) { |
| 6031 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, | 6028 Send(new FrameHostMsg_Find_Reply(routing_id_, request_id, match_count, |
| 6032 selection_rect, ordinal, | 6029 selection_rect, ordinal, |
| 6033 final_status_update)); | 6030 final_status_update)); |
| 6034 } | 6031 } |
| 6035 | 6032 |
| 6036 } // namespace content | 6033 } // namespace content |
| OLD | NEW |