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 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
180 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" | 180 #include "third_party/WebKit/public/platform/WebMediaPlayer.h" |
181 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" | 181 #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" |
182 #include "third_party/WebKit/public/platform/WebPoint.h" | 182 #include "third_party/WebKit/public/platform/WebPoint.h" |
183 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" | 183 #include "third_party/WebKit/public/platform/WebSecurityOrigin.h" |
184 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" | 184 #include "third_party/WebKit/public/platform/WebStorageQuotaCallbacks.h" |
185 #include "third_party/WebKit/public/platform/WebString.h" | 185 #include "third_party/WebKit/public/platform/WebString.h" |
186 #include "third_party/WebKit/public/platform/WebURL.h" | 186 #include "third_party/WebKit/public/platform/WebURL.h" |
187 #include "third_party/WebKit/public/platform/WebURLError.h" | 187 #include "third_party/WebKit/public/platform/WebURLError.h" |
188 #include "third_party/WebKit/public/platform/WebURLResponse.h" | 188 #include "third_party/WebKit/public/platform/WebURLResponse.h" |
189 #include "third_party/WebKit/public/platform/WebVector.h" | 189 #include "third_party/WebKit/public/platform/WebVector.h" |
| 190 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerNetworkProvider.h" |
190 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul
er.h" | 191 #include "third_party/WebKit/public/platform/scheduler/renderer/renderer_schedul
er.h" |
191 #include "third_party/WebKit/public/web/WebColorSuggestion.h" | 192 #include "third_party/WebKit/public/web/WebColorSuggestion.h" |
192 #include "third_party/WebKit/public/web/WebConsoleMessage.h" | 193 #include "third_party/WebKit/public/web/WebConsoleMessage.h" |
193 #include "third_party/WebKit/public/web/WebDocument.h" | 194 #include "third_party/WebKit/public/web/WebDocument.h" |
194 #include "third_party/WebKit/public/web/WebFindOptions.h" | 195 #include "third_party/WebKit/public/web/WebFindOptions.h" |
195 #include "third_party/WebKit/public/web/WebFrameOwnerProperties.h" | 196 #include "third_party/WebKit/public/web/WebFrameOwnerProperties.h" |
196 #include "third_party/WebKit/public/web/WebFrameSerializer.h" | 197 #include "third_party/WebKit/public/web/WebFrameSerializer.h" |
197 #include "third_party/WebKit/public/web/WebFrameSerializerCacheControlPolicy.h" | 198 #include "third_party/WebKit/public/web/WebFrameSerializerCacheControlPolicy.h" |
198 #include "third_party/WebKit/public/web/WebFrameWidget.h" | 199 #include "third_party/WebKit/public/web/WebFrameWidget.h" |
199 #include "third_party/WebKit/public/web/WebInputMethodController.h" | 200 #include "third_party/WebKit/public/web/WebInputMethodController.h" |
(...skipping 2780 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2980 return blame_context_.get(); | 2981 return blame_context_.get(); |
2981 } | 2982 } |
2982 | 2983 |
2983 blink::WebServiceWorkerProvider* | 2984 blink::WebServiceWorkerProvider* |
2984 RenderFrameImpl::createServiceWorkerProvider() { | 2985 RenderFrameImpl::createServiceWorkerProvider() { |
2985 // At this point we should have non-null data source. | 2986 // At this point we should have non-null data source. |
2986 DCHECK(frame_->dataSource()); | 2987 DCHECK(frame_->dataSource()); |
2987 if (!ChildThreadImpl::current()) | 2988 if (!ChildThreadImpl::current()) |
2988 return nullptr; // May be null in some tests. | 2989 return nullptr; // May be null in some tests. |
2989 ServiceWorkerNetworkProvider* provider = | 2990 ServiceWorkerNetworkProvider* provider = |
2990 ServiceWorkerNetworkProvider::FromDocumentState( | 2991 ServiceWorkerNetworkProvider::FromWebServiceWorkerNetworkProvider( |
2991 DocumentState::FromDataSource(frame_->dataSource())); | 2992 frame_->dataSource()->getServiceWorkerNetworkProvider()); |
2992 DCHECK(provider); | |
2993 if (!provider->context()) { | 2993 if (!provider->context()) { |
2994 // The context can be null when the frame is sandboxed. | 2994 // The context can be null when the frame is sandboxed. |
2995 return nullptr; | 2995 return nullptr; |
2996 } | 2996 } |
2997 return new WebServiceWorkerProviderImpl( | 2997 return new WebServiceWorkerProviderImpl( |
2998 ChildThreadImpl::current()->thread_safe_sender(), | 2998 ChildThreadImpl::current()->thread_safe_sender(), provider->context()); |
2999 provider->context()); | |
3000 } | 2999 } |
3001 | 3000 |
3002 void RenderFrameImpl::didAccessInitialDocument() { | 3001 void RenderFrameImpl::didAccessInitialDocument() { |
3003 DCHECK(!frame_->parent()); | 3002 DCHECK(!frame_->parent()); |
3004 // NOTE: Do not call back into JavaScript here, since this call is made from a | 3003 // NOTE: Do not call back into JavaScript here, since this call is made from a |
3005 // V8 security check. | 3004 // V8 security check. |
3006 | 3005 |
3007 // If the request hasn't yet committed, notify the browser process that it is | 3006 // If the request hasn't yet committed, notify the browser process that it is |
3008 // no longer safe to show the pending URL of the main frame, since a URL spoof | 3007 // no longer safe to show the pending URL of the main frame, since a URL spoof |
3009 // is now possible. (If the request has committed, the browser already knows.) | 3008 // is now possible. (If the request has committed, the browser already knows.) |
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3411 redirect_start, redirect_end, fetch_start, | 3410 redirect_start, redirect_end, fetch_start, |
3412 !navigation_state->request_params().redirects.empty()); | 3411 !navigation_state->request_params().redirects.empty()); |
3413 // TODO(clamy) We need to provide additional timing values for the | 3412 // TODO(clamy) We need to provide additional timing values for the |
3414 // Navigation Timing API to work with browser-side navigations. | 3413 // Navigation Timing API to work with browser-side navigations. |
3415 // UnloadEventStart and UnloadEventEnd are still missing. | 3414 // UnloadEventStart and UnloadEventEnd are still missing. |
3416 } | 3415 } |
3417 | 3416 |
3418 // Create the serviceworker's per-document network observing object if it | 3417 // Create the serviceworker's per-document network observing object if it |
3419 // does not exist (When navigation happens within a page, the provider already | 3418 // does not exist (When navigation happens within a page, the provider already |
3420 // exists). | 3419 // exists). |
3421 if (ServiceWorkerNetworkProvider::FromDocumentState( | 3420 if (datasource->getServiceWorkerNetworkProvider()) |
3422 DocumentState::FromDataSource(datasource))) | |
3423 return; | 3421 return; |
3424 | 3422 |
3425 ServiceWorkerNetworkProvider::AttachToDocumentState( | 3423 datasource->setServiceWorkerNetworkProvider( |
3426 DocumentState::FromDataSource(datasource), | |
3427 ServiceWorkerNetworkProvider::CreateForNavigation( | 3424 ServiceWorkerNetworkProvider::CreateForNavigation( |
3428 routing_id_, navigation_state->request_params(), frame, | 3425 routing_id_, navigation_state->request_params(), frame, |
3429 content_initiated)); | 3426 content_initiated)); |
3430 } | 3427 } |
3431 | 3428 |
3432 void RenderFrameImpl::didStartProvisionalLoad( | 3429 void RenderFrameImpl::didStartProvisionalLoad( |
3433 blink::WebDataSource* data_source) { | 3430 blink::WebDataSource* data_source) { |
3434 // In fast/loader/stop-provisional-loads.html, we abort the load before this | 3431 // In fast/loader/stop-provisional-loads.html, we abort the load before this |
3435 // callback is invoked. | 3432 // callback is invoked. |
3436 if (!data_source) | 3433 if (!data_source) |
(...skipping 836 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4273 | 4270 |
4274 // Add an empty HTTP origin header for non GET methods if none is currently | 4271 // Add an empty HTTP origin header for non GET methods if none is currently |
4275 // present. | 4272 // present. |
4276 request.addHTTPOriginIfNeeded(WebSecurityOrigin::createUnique()); | 4273 request.addHTTPOriginIfNeeded(WebSecurityOrigin::createUnique()); |
4277 | 4274 |
4278 // Attach |should_replace_current_entry| state to requests so that, should | 4275 // Attach |should_replace_current_entry| state to requests so that, should |
4279 // this navigation later require a request transfer, all state is preserved | 4276 // this navigation later require a request transfer, all state is preserved |
4280 // when it is re-created in the new process. | 4277 // when it is re-created in the new process. |
4281 bool should_replace_current_entry = data_source->replacesCurrentHistoryItem(); | 4278 bool should_replace_current_entry = data_source->replacesCurrentHistoryItem(); |
4282 | 4279 |
4283 int provider_id = kInvalidServiceWorkerProviderId; | 4280 // Initializes service worker related request info. |
4284 if (request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel || | 4281 if (request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel || |
4285 request.getFrameType() == blink::WebURLRequest::FrameTypeNested) { | 4282 request.getFrameType() == blink::WebURLRequest::FrameTypeNested) { |
4286 // |provisionalDataSource| may be null in some content::ResourceFetcher | 4283 // |provisionalDataSource| may be null in some content::ResourceFetcher |
4287 // use cases, we don't hook those requests. | 4284 // use cases, we don't hook those requests. |
4288 if (frame->provisionalDataSource()) { | 4285 if (frame->provisionalDataSource()) { |
4289 ServiceWorkerNetworkProvider* provider = | 4286 blink::WebServiceWorkerNetworkProvider* provider = |
4290 ServiceWorkerNetworkProvider::FromDocumentState( | 4287 frame->provisionalDataSource()->getServiceWorkerNetworkProvider(); |
4291 DocumentState::FromDataSource(frame->provisionalDataSource())); | |
4292 DCHECK(provider); | 4288 DCHECK(provider); |
4293 provider_id = provider->provider_id(); | 4289 provider->willSendRequest(request); |
4294 } | 4290 } |
4295 } else if (frame->dataSource()) { | 4291 } else if (frame->dataSource()) { |
4296 ServiceWorkerNetworkProvider* provider = | 4292 blink::WebServiceWorkerNetworkProvider* provider = |
4297 ServiceWorkerNetworkProvider::FromDocumentState( | 4293 frame->dataSource()->getServiceWorkerNetworkProvider(); |
4298 DocumentState::FromDataSource(frame->dataSource())); | |
4299 DCHECK(provider); | 4294 DCHECK(provider); |
4300 provider_id = provider->provider_id(); | 4295 provider->willSendRequest(request); |
| 4296 |
4301 // If the provider does not have a controller at this point, the renderer | 4297 // If the provider does not have a controller at this point, the renderer |
4302 // expects the request to never be handled by a controlling service worker, | 4298 // expects the request to never be handled by a controlling service worker, |
4303 // so set the ServiceWorkerMode to skip local workers here. Otherwise, a | 4299 // so set the ServiceWorkerMode to skip local workers here. Otherwise, a |
4304 // service worker that is in the process of becoming the controller (i.e., | 4300 // service worker that is in the process of becoming the controller (i.e., |
4305 // via claim()) on the browser-side could handle the request and break | 4301 // via claim()) on the browser-side could handle the request and break |
4306 // the assumptions of the renderer. | 4302 // the assumptions of the renderer. |
4307 if (!provider->IsControlledByServiceWorker() && | 4303 if (!provider->isControlledByServiceWorker() && |
4308 request.getServiceWorkerMode() != | 4304 request.getServiceWorkerMode() != |
4309 blink::WebURLRequest::ServiceWorkerMode::None) { | 4305 blink::WebURLRequest::ServiceWorkerMode::None) { |
4310 request.setServiceWorkerMode( | 4306 request.setServiceWorkerMode( |
4311 blink::WebURLRequest::ServiceWorkerMode::Foreign); | 4307 blink::WebURLRequest::ServiceWorkerMode::Foreign); |
4312 } | 4308 } |
4313 } | 4309 } |
4314 | 4310 |
4315 WebFrame* parent = frame->parent(); | 4311 WebFrame* parent = frame->parent(); |
4316 int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1; | 4312 int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1; |
4317 | 4313 |
4318 RequestExtraData* extra_data = new RequestExtraData(); | 4314 RequestExtraData* extra_data = |
| 4315 static_cast<RequestExtraData*>(request.getExtraData()); |
| 4316 if (!extra_data) |
| 4317 extra_data = new RequestExtraData(); |
4319 extra_data->set_visibility_state(visibilityState()); | 4318 extra_data->set_visibility_state(visibilityState()); |
4320 extra_data->set_custom_user_agent(custom_user_agent); | 4319 extra_data->set_custom_user_agent(custom_user_agent); |
4321 extra_data->set_requested_with(requested_with); | 4320 extra_data->set_requested_with(requested_with); |
4322 extra_data->set_render_frame_id(routing_id_); | 4321 extra_data->set_render_frame_id(routing_id_); |
4323 extra_data->set_is_main_frame(!parent); | 4322 extra_data->set_is_main_frame(!parent); |
4324 extra_data->set_frame_origin( | 4323 extra_data->set_frame_origin( |
4325 url::Origin(frame_document.getSecurityOrigin())); | 4324 url::Origin(frame_document.getSecurityOrigin())); |
4326 extra_data->set_parent_is_main_frame(parent && !parent->parent()); | 4325 extra_data->set_parent_is_main_frame(parent && !parent->parent()); |
4327 extra_data->set_parent_render_frame_id(parent_routing_id); | 4326 extra_data->set_parent_render_frame_id(parent_routing_id); |
4328 extra_data->set_allow_download( | 4327 extra_data->set_allow_download( |
4329 navigation_state->common_params().allow_download); | 4328 navigation_state->common_params().allow_download); |
4330 extra_data->set_transition_type(transition_type); | 4329 extra_data->set_transition_type(transition_type); |
4331 extra_data->set_should_replace_current_entry(should_replace_current_entry); | 4330 extra_data->set_should_replace_current_entry(should_replace_current_entry); |
4332 extra_data->set_service_worker_provider_id(provider_id); | |
4333 extra_data->set_stream_override(std::move(stream_override)); | 4331 extra_data->set_stream_override(std::move(stream_override)); |
4334 bool is_prefetch = | 4332 bool is_prefetch = |
4335 GetContentClient()->renderer()->IsPrefetchOnly(this, request); | 4333 GetContentClient()->renderer()->IsPrefetchOnly(this, request); |
4336 extra_data->set_is_prefetch(is_prefetch); | 4334 extra_data->set_is_prefetch(is_prefetch); |
4337 extra_data->set_download_to_network_cache_only( | 4335 extra_data->set_download_to_network_cache_only( |
4338 is_prefetch && | 4336 is_prefetch && |
4339 WebURLRequestToResourceType(request) != RESOURCE_TYPE_MAIN_FRAME); | 4337 WebURLRequestToResourceType(request) != RESOURCE_TYPE_MAIN_FRAME); |
4340 extra_data->set_initiated_in_secure_context( | 4338 extra_data->set_initiated_in_secure_context( |
4341 frame_document.isSecureContext()); | 4339 frame_document.isSecureContext()); |
4342 | 4340 |
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4654 return !blocked; | 4652 return !blocked; |
4655 } | 4653 } |
4656 | 4654 |
4657 blink::WebScreenOrientationClient* | 4655 blink::WebScreenOrientationClient* |
4658 RenderFrameImpl::webScreenOrientationClient() { | 4656 RenderFrameImpl::webScreenOrientationClient() { |
4659 if (!screen_orientation_dispatcher_) | 4657 if (!screen_orientation_dispatcher_) |
4660 screen_orientation_dispatcher_ = new ScreenOrientationDispatcher(this); | 4658 screen_orientation_dispatcher_ = new ScreenOrientationDispatcher(this); |
4661 return screen_orientation_dispatcher_; | 4659 return screen_orientation_dispatcher_; |
4662 } | 4660 } |
4663 | 4661 |
4664 bool RenderFrameImpl::isControlledByServiceWorker(WebDataSource& data_source) { | |
4665 ServiceWorkerNetworkProvider* provider = | |
4666 ServiceWorkerNetworkProvider::FromDocumentState( | |
4667 DocumentState::FromDataSource(&data_source)); | |
4668 return provider->IsControlledByServiceWorker(); | |
4669 } | |
4670 | |
4671 int64_t RenderFrameImpl::serviceWorkerID(WebDataSource& data_source) { | |
4672 ServiceWorkerNetworkProvider* provider = | |
4673 ServiceWorkerNetworkProvider::FromDocumentState( | |
4674 DocumentState::FromDataSource(&data_source)); | |
4675 if (provider->context() && provider->context()->controller()) | |
4676 return provider->context()->controller()->version_id(); | |
4677 return kInvalidServiceWorkerVersionId; | |
4678 } | |
4679 | |
4680 void RenderFrameImpl::postAccessibilityEvent(const blink::WebAXObject& obj, | 4662 void RenderFrameImpl::postAccessibilityEvent(const blink::WebAXObject& obj, |
4681 blink::WebAXEvent event) { | 4663 blink::WebAXEvent event) { |
4682 HandleWebAccessibilityEvent(obj, event); | 4664 HandleWebAccessibilityEvent(obj, event); |
4683 } | 4665 } |
4684 | 4666 |
4685 void RenderFrameImpl::handleAccessibilityFindInPageResult( | 4667 void RenderFrameImpl::handleAccessibilityFindInPageResult( |
4686 int identifier, | 4668 int identifier, |
4687 int match_index, | 4669 int match_index, |
4688 const blink::WebAXObject& start_object, | 4670 const blink::WebAXObject& start_object, |
4689 int start_offset, | 4671 int start_offset, |
(...skipping 2180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6870 // event target. Potentially a Pepper plugin will receive the event. | 6852 // event target. Potentially a Pepper plugin will receive the event. |
6871 // In order to tell whether a plugin gets the last mouse event and which it | 6853 // In order to tell whether a plugin gets the last mouse event and which it |
6872 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets | 6854 // is, we set |pepper_last_mouse_event_target_| to null here. If a plugin gets |
6873 // the event, it will notify us via DidReceiveMouseEvent() and set itself as | 6855 // the event, it will notify us via DidReceiveMouseEvent() and set itself as |
6874 // |pepper_last_mouse_event_target_|. | 6856 // |pepper_last_mouse_event_target_|. |
6875 pepper_last_mouse_event_target_ = nullptr; | 6857 pepper_last_mouse_event_target_ = nullptr; |
6876 #endif | 6858 #endif |
6877 } | 6859 } |
6878 | 6860 |
6879 } // namespace content | 6861 } // namespace content |
OLD | NEW |