Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index e5ed7854de36737b4689bfff63944028b94716fe..599bbe395d3af3f40b77cffdabf9261252dee20b 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -20,9 +20,11 @@ |
#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/child/web_socket_stream_handle_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" |
@@ -1220,6 +1222,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) { |
@@ -1776,6 +1785,25 @@ void RenderFrameImpl::willSendRequest( |
should_replace_current_entry = |
navigation_state->should_replace_current_entry(); |
} |
+ |
+ int provider_id = kInvalidServiceWorkerProviderId; |
+ if (request.targetType() == blink::WebURLRequest::TargetIsMainFrame || |
+ request.targetType() == blink::WebURLRequest::TargetIsSubframe) { |
+ // |provisionalDataSource| may be null in some content::ResourceFetcher |
+ // use cases, we don't hook those requests. |
+ if (frame->provisionalDataSource()) { |
+ 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(); |
+ } |
+ |
int parent_routing_id = frame->parent() ? |
FromWebFrame(frame->parent())->GetRoutingID() : -1; |
request.setExtraData( |
@@ -1791,7 +1819,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); |