Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(572)

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2733283004: Expose WebServiceWorkerNetworkProvider on DataSource (Closed)
Patch Set: . Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index 8e044057fbe78485f1770d1631295832a1c25df8..7d668a4939666ee64186cec687231153350a05b1 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -187,6 +187,7 @@
#include "third_party/WebKit/public/platform/WebURLError.h"
#include "third_party/WebKit/public/platform/WebURLResponse.h"
#include "third_party/WebKit/public/platform/WebVector.h"
+#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerNetworkProvider.h"
#include "third_party/WebKit/public/platform/scheduler/renderer/renderer_scheduler.h"
#include "third_party/WebKit/public/web/WebColorSuggestion.h"
#include "third_party/WebKit/public/web/WebConsoleMessage.h"
@@ -2982,16 +2983,14 @@ RenderFrameImpl::createServiceWorkerProvider() {
if (!ChildThreadImpl::current())
return nullptr; // May be null in some tests.
ServiceWorkerNetworkProvider* provider =
- ServiceWorkerNetworkProvider::FromDocumentState(
- DocumentState::FromDataSource(frame_->dataSource()));
- DCHECK(provider);
+ ServiceWorkerNetworkProvider::GetInwardProviderForNavigation(
+ frame_->dataSource()->getServiceWorkerNetworkProvider());
if (!provider->context()) {
// The context can be null when the frame is sandboxed.
return nullptr;
}
return new WebServiceWorkerProviderImpl(
- ChildThreadImpl::current()->thread_safe_sender(),
- provider->context());
+ ChildThreadImpl::current()->thread_safe_sender(), provider->context());
}
void RenderFrameImpl::didAccessInitialDocument() {
@@ -3413,12 +3412,10 @@ void RenderFrameImpl::didCreateDataSource(blink::WebLocalFrame* frame,
// Create the serviceworker's per-document network observing object if it
// does not exist (When navigation happens within a page, the provider already
// exists).
- if (ServiceWorkerNetworkProvider::FromDocumentState(
- DocumentState::FromDataSource(datasource)))
+ if (datasource->getServiceWorkerNetworkProvider())
return;
- ServiceWorkerNetworkProvider::AttachToDocumentState(
- DocumentState::FromDataSource(datasource),
+ datasource->setServiceWorkerNetworkProvider(
ServiceWorkerNetworkProvider::CreateForNavigation(
routing_id_, navigation_state->request_params(), frame,
content_initiated));
@@ -4275,38 +4272,6 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
// when it is re-created in the new process.
bool should_replace_current_entry = data_source->replacesCurrentHistoryItem();
- int provider_id = kInvalidServiceWorkerProviderId;
- if (request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel ||
- request.getFrameType() == blink::WebURLRequest::FrameTypeNested) {
- // |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()));
- DCHECK(provider);
- provider_id = provider->provider_id();
- }
- } else if (frame->dataSource()) {
- ServiceWorkerNetworkProvider* provider =
- ServiceWorkerNetworkProvider::FromDocumentState(
- DocumentState::FromDataSource(frame->dataSource()));
- DCHECK(provider);
- provider_id = provider->provider_id();
- // If the provider does not have a controller at this point, the renderer
- // expects the request to never be handled by a controlling service worker,
- // so set the ServiceWorkerMode to skip local workers here. Otherwise, a
- // service worker that is in the process of becoming the controller (i.e.,
- // via claim()) on the browser-side could handle the request and break
- // the assumptions of the renderer.
- if (!provider->IsControlledByServiceWorker() &&
- request.getServiceWorkerMode() !=
- blink::WebURLRequest::ServiceWorkerMode::None) {
- request.setServiceWorkerMode(
- blink::WebURLRequest::ServiceWorkerMode::Foreign);
- }
- }
-
WebFrame* parent = frame->parent();
int parent_routing_id = parent ? GetRoutingIdForFrameOrProxy(parent) : -1;
@@ -4324,7 +4289,6 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
navigation_state->common_params().allow_download);
extra_data->set_transition_type(transition_type);
extra_data->set_should_replace_current_entry(should_replace_current_entry);
- extra_data->set_service_worker_provider_id(provider_id);
extra_data->set_stream_override(std::move(stream_override));
bool is_prefetch =
GetContentClient()->renderer()->IsPrefetchOnly(this, request);
@@ -4357,6 +4321,38 @@ void RenderFrameImpl::willSendRequest(blink::WebLocalFrame* frame,
request.setExtraData(extra_data);
+ // Initializes service worker related request info.
+ // This must be done after we set extra data.
falken 2017/03/10 04:26:00 Could you also write (briefly) why the order matte
kinuko 2017/03/10 05:52:28 Revised to make it order-independent.
+ if (request.getFrameType() == blink::WebURLRequest::FrameTypeTopLevel ||
+ request.getFrameType() == blink::WebURLRequest::FrameTypeNested) {
+ // |provisionalDataSource| may be null in some content::ResourceFetcher
+ // use cases, we don't hook those requests.
+ if (frame->provisionalDataSource()) {
+ blink::WebServiceWorkerNetworkProvider* provider =
+ frame->provisionalDataSource()->getServiceWorkerNetworkProvider();
+ DCHECK(provider);
+ provider->willSendRequest(request);
+ }
+ } else if (frame->dataSource()) {
+ blink::WebServiceWorkerNetworkProvider* provider =
+ frame->dataSource()->getServiceWorkerNetworkProvider();
+ DCHECK(provider);
+ provider->willSendRequest(request);
+
+ // If the provider does not have a controller at this point, the renderer
+ // expects the request to never be handled by a controlling service worker,
+ // so set the ServiceWorkerMode to skip local workers here. Otherwise, a
+ // service worker that is in the process of becoming the controller (i.e.,
+ // via claim()) on the browser-side could handle the request and break
+ // the assumptions of the renderer.
+ if (!provider->isControlledByServiceWorker() &&
+ request.getServiceWorkerMode() !=
+ blink::WebURLRequest::ServiceWorkerMode::None) {
+ request.setServiceWorkerMode(
+ blink::WebURLRequest::ServiceWorkerMode::Foreign);
+ }
+ }
+
if (request.getPreviewsState() == WebURLRequest::PreviewsUnspecified) {
if (is_main_frame_ && !navigation_state->request_committed()) {
request.setPreviewsState(static_cast<WebURLRequest::PreviewsState>(
@@ -4656,22 +4652,6 @@ blink::WebScreenOrientationClient*
return screen_orientation_dispatcher_;
}
-bool RenderFrameImpl::isControlledByServiceWorker(WebDataSource& data_source) {
- ServiceWorkerNetworkProvider* provider =
- ServiceWorkerNetworkProvider::FromDocumentState(
- DocumentState::FromDataSource(&data_source));
- return provider->IsControlledByServiceWorker();
-}
-
-int64_t RenderFrameImpl::serviceWorkerID(WebDataSource& data_source) {
- ServiceWorkerNetworkProvider* provider =
- ServiceWorkerNetworkProvider::FromDocumentState(
- DocumentState::FromDataSource(&data_source));
- if (provider->context() && provider->context()->controller())
- return provider->context()->controller()->version_id();
- return kInvalidServiceWorkerVersionId;
-}
-
void RenderFrameImpl::postAccessibilityEvent(const blink::WebAXObject& obj,
blink::WebAXEvent event) {
HandleWebAccessibilityEvent(obj, event);

Powered by Google App Engine
This is Rietveld 408576698