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

Unified Diff: content/browser/service_worker/service_worker_fetch_dispatcher.cc

Issue 2118243002: [proof-of-concept] SW thread independent of the main thread Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 4 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/browser/service_worker/service_worker_fetch_dispatcher.cc
diff --git a/content/browser/service_worker/service_worker_fetch_dispatcher.cc b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
index 4e5329846dab76906d6c26df860526206309182b..7e8da3ab82d1c5ea0df7d5be3bfdb44c9d5c2976 100644
--- a/content/browser/service_worker/service_worker_fetch_dispatcher.cc
+++ b/content/browser/service_worker/service_worker_fetch_dispatcher.cc
@@ -117,6 +117,8 @@ ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher(
resource_type_(resource_type),
did_complete_(false),
weak_factory_(this) {
+ LOG(ERROR) << "ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher "
+ << this;
net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT,
net::NetLog::StringCallback(
"event_type", ServiceWorkerMetrics::EventTypeToString(
@@ -124,6 +126,8 @@ ServiceWorkerFetchDispatcher::ServiceWorkerFetchDispatcher(
}
ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher() {
+ LOG(ERROR) << "ServiceWorkerFetchDispatcher::~ServiceWorkerFetchDispatcher "
+ << this;
if (!did_complete_)
net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_DISPATCH_FETCH_EVENT);
}
@@ -183,6 +187,7 @@ void ServiceWorkerFetchDispatcher::DidFailToStartWorker(
}
void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
+ LOG(ERROR) << "ServiceWorkerFetchDispatcher::DispatchFetchEvent";
DCHECK_EQ(EmbeddedWorkerStatus::RUNNING, version_->running_status())
<< "Worker stopped too soon after it was started.";
@@ -191,6 +196,23 @@ void ServiceWorkerFetchDispatcher::DispatchFetchEvent() {
prepare_callback.Run();
net_log_.BeginEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT);
+
+ if (version_->IsIsolatedWorker()) {
+ int response_id = version_->StartRequest(
+ GetEventType(),
+ base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch,
+ weak_factory_.GetWeakPtr()));
+ int event_finish_id = version_->StartRequest(
+ FetchTypeToWaitUntilEventType(request_->fetch_type),
+ base::Bind(&ServiceWorkerUtils::NoOpStatusCallback));
+ version_->isolated_worker_ptr()->OnFetchEvent(
+ response_id, event_finish_id, request_->url.spec(),
+ request_->mode == FETCH_REQUEST_MODE_NAVIGATE,
+ base::Bind(&ServiceWorkerFetchDispatcher::OnFetchEventCallback,
+ weak_factory_.GetWeakPtr()));
+ return;
+ }
+
int response_id = version_->StartRequest(
GetEventType(),
base::Bind(&ServiceWorkerFetchDispatcher::DidFailToDispatch,
@@ -233,6 +255,33 @@ void ServiceWorkerFetchDispatcher::DidFinish(
Complete(SERVICE_WORKER_OK, fetch_result, response);
}
+void ServiceWorkerFetchDispatcher::OnFetchEventCallback(
+ bool handled,
+ mojo::StructPtr<blink::mojom::ServiceWorkerResponse> response) {
+ LOG(ERROR) << "ServiceWorkerFetchDispatcher::OnFetchEventCallback "
+ << handled;
+ net_log_.EndEvent(net::NetLog::TYPE_SERVICE_WORKER_FETCH_EVENT);
+ ServiceWorkerResponse result;
+ if (response) {
+ LOG(ERROR) << " url: " << response->url;
+ LOG(ERROR) << " status_code: " << response->status_code;
+ LOG(ERROR) << " status_text: " << response->status_text;
+ LOG(ERROR) << " blob_uuid: " << response->blob_uuid;
+ LOG(ERROR) << " blob_size: " << response->blob_size;
+ LOG(ERROR) << " stream_url: " << response->stream_url;
+ result.url = GURL(std::string(response->url));
+ result.status_code = response->status_code;
+ result.status_text = response->status_text;
+ result.blob_uuid = response->blob_uuid;
+ result.blob_size = response->blob_size;
+ result.stream_url = GURL(std::string(response->stream_url));
+ }
+ Complete(SERVICE_WORKER_OK,
+ handled ? SERVICE_WORKER_FETCH_EVENT_RESULT_RESPONSE
+ : SERVICE_WORKER_FETCH_EVENT_RESULT_FALLBACK,
+ result);
+}
+
void ServiceWorkerFetchDispatcher::Complete(
ServiceWorkerStatusCode status,
ServiceWorkerFetchEventResult fetch_result,

Powered by Google App Engine
This is Rietveld 408576698