Chromium Code Reviews| Index: content/renderer/render_frame_impl.cc |
| diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
| index 7963113eff783539feb75cee840399301affc63e..caed0dd59212fd6745135ef96738b6d50b9f1d0c 100644 |
| --- a/content/renderer/render_frame_impl.cc |
| +++ b/content/renderer/render_frame_impl.cc |
| @@ -20,8 +20,10 @@ |
| #include "content/child/plugin_messages.h" |
| #include "content/child/quota_dispatcher.h" |
| #include "content/child/request_extra_data.h" |
| +#include "content/child/service_worker/service_worker_network_provider.h" |
| #include "content/child/service_worker/web_service_worker_provider_impl.h" |
| #include "content/common/frame_messages.h" |
| +#include "content/common/service_worker/service_worker_types.h" |
| #include "content/common/socket_stream_handle_data.h" |
| #include "content/common/swapped_out_messages.h" |
| #include "content/common/view_messages.h" |
| @@ -1178,6 +1180,13 @@ void RenderFrameImpl::didCreateDataSource(blink::WebFrame* frame, |
| // * PopulateDocumentStateFromPending |
| // * CreateNavigationStateFromPending |
| render_view_->didCreateDataSource(frame, datasource); |
| + |
| + // Create the serviceworker's per-document network observing object. |
| + scoped_ptr<ServiceWorkerNetworkProvider> |
| + network_provider(new ServiceWorkerNetworkProvider()); |
| + ServiceWorkerNetworkProvider::AttachToDocumentState( |
| + DocumentState::FromDataSource(datasource), |
| + network_provider.Pass()); |
| } |
| void RenderFrameImpl::didStartProvisionalLoad(blink::WebFrame* frame) { |
| @@ -1734,6 +1743,25 @@ void RenderFrameImpl::willSendRequest( |
| should_replace_current_entry = |
| navigation_state->should_replace_current_entry(); |
| } |
| + |
| + // TODO(michaeln): Add WebDataSource* as a param to willSendRequest so |
| + // this ambiguity about which datasource can be removed. |
| + int provider_id = kInvalidServiceWorkerProviderId; |
| + if (request.targetType() == blink::WebURLRequest::TargetIsMainFrame || |
| + request.targetType() == blink::WebURLRequest::TargetIsSubframe) { |
| + if (frame->provisionalDataSource()) { // May be null is some tests. |
|
michaeln
2014/03/04 00:13:55
The ResourceFetcher tests all do this,
fetcher->
|
| + ServiceWorkerNetworkProvider* provider = |
| + ServiceWorkerNetworkProvider::FromDocumentState( |
| + DocumentState::FromDataSource(frame->provisionalDataSource())); |
| + provider_id = provider->provider_id(); |
| + } |
| + } else if (frame->dataSource()) { |
| + ServiceWorkerNetworkProvider* provider = |
| + ServiceWorkerNetworkProvider::FromDocumentState( |
| + DocumentState::FromDataSource(frame->dataSource())); |
| + provider_id = provider->provider_id(); |
| + } |
| + |
| // TODO(creis): Remove the second routing ID from the request, now that we |
| // use routing IDs instead of frame IDs. (This is a viral change, so I'm |
| // splitting it into multiple CLs.) |
| @@ -1753,7 +1781,8 @@ void RenderFrameImpl::willSendRequest( |
| transition_type, |
| should_replace_current_entry, |
| navigation_state->transferred_request_child_id(), |
| - navigation_state->transferred_request_request_id())); |
| + navigation_state->transferred_request_request_id(), |
| + provider_id)); |
| DocumentState* top_document_state = |
| DocumentState::FromDataSource(top_data_source); |