Index: content/renderer/render_frame_impl.cc |
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc |
index 142ca2bdbaf94e3715e6d3f59749bd05c19e7f8d..90fa5422360f229f4e95ea5841e9d4b7e0257842 100644 |
--- a/content/renderer/render_frame_impl.cc |
+++ b/content/renderer/render_frame_impl.cc |
@@ -18,6 +18,7 @@ |
#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/socket_stream_handle_data.h" |
@@ -929,6 +930,14 @@ 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( |
+ ChildThread::current()->thread_safe_sender())); |
+ ServiceWorkerNetworkProvider::AttachToDocumentState( |
+ DocumentState::FromDataSource(datasource), |
+ network_provider.Pass()); |
} |
void RenderFrameImpl::didStartProvisionalLoad(blink::WebFrame* frame) { |
@@ -1431,6 +1440,21 @@ 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. |
+ ServiceWorkerNetworkProvider* service_worker_network_provider = NULL; |
+ if (request.targetType() == blink::WebURLRequest::TargetIsMainFrame || |
+ request.targetType() == blink::WebURLRequest::TargetIsSubframe) { |
+ service_worker_network_provider = |
+ ServiceWorkerNetworkProvider::FromDocumentState( |
+ DocumentState::FromDataSource(frame->provisionalDataSource())); |
+ } else { |
+ service_worker_network_provider = |
+ ServiceWorkerNetworkProvider::FromDocumentState( |
+ DocumentState::FromDataSource(frame->dataSource())); |
+ } |
kinuko
2014/02/28 04:31:00
Couldn't we just use document_state retrieved at l
michaeln
2014/02/28 20:48:27
Nope, that's from the wrong document. That corresp
kinuko
2014/03/03 03:26:33
I see, thanks. Some of the tests look failing prob
|
+ |
// 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.) |
@@ -1450,7 +1474,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(), |
+ service_worker_network_provider->provider_id())); |
DocumentState* top_document_state = |
DocumentState::FromDataSource(top_data_source); |