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

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

Issue 2897063002: Network service: Implement URLLoader chaining for interceptors (Closed)
Patch Set: documentation Created 3 years, 7 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_url_job_wrapper.cc
diff --git a/content/browser/service_worker/service_worker_url_job_wrapper.cc b/content/browser/service_worker/service_worker_url_job_wrapper.cc
index 7761fc753b79c9cc14588588c03b6b1e77ffb51d..41dbc205fec6c1ccdef88da63eac7de9b9a4ba08 100644
--- a/content/browser/service_worker/service_worker_url_job_wrapper.cc
+++ b/content/browser/service_worker/service_worker_url_job_wrapper.cc
@@ -5,6 +5,7 @@
#include "content/browser/service_worker/service_worker_url_job_wrapper.h"
#include "base/command_line.h"
+#include "content/browser/service_worker/service_worker_response_type.h"
#include "content/public/browser/resource_request_info.h"
#include "content/public/common/browser_side_navigation_policy.h"
#include "content/public/common/content_switches.h"
@@ -13,11 +14,15 @@ namespace content {
ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
base::WeakPtr<ServiceWorkerURLRequestJob> url_request_job)
- : url_request_job_(std::move(url_request_job)), url_loader_(nullptr) {}
+ : job_type_(JobType::kURLRequest),
+ url_request_job_(std::move(url_request_job)),
+ weak_factory_(this) {}
ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
- ServiceWorkerControlleeURLLoader* url_loader)
- : url_loader_(url_loader) {
+ LoaderFactoryCallback callback)
+ : job_type_(JobType::kURLLoader),
+ loader_factory_callback_(std::move(callback)),
+ weak_factory_(this) {
DCHECK(IsBrowserSideNavigationEnabled() &&
base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kEnableNetworkService));
@@ -26,40 +31,48 @@ ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {}
void ServiceWorkerURLJobWrapper::FallbackToNetwork() {
- if (url_loader_) {
- NOTIMPLEMENTED();
+ if (job_type_ == JobType::kURLLoader) {
+ response_type_ = FALLBACK_TO_NETWORK;
+ // This could be called multiple times in some cases because we simply
+ // call this synchronously here and don't wait for a separate async
+ // StartRequest cue like what URLRequestJob case does.
+ // TODO(kinuko): Make sure this is ok or we need to make this async.
+ if (!loader_factory_callback_.is_null()) {
+ std::move(loader_factory_callback_).Run(nullptr);
+ }
} else {
url_request_job_->FallbackToNetwork();
}
}
void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() {
- if (url_loader_) {
- NOTIMPLEMENTED();
+ if (job_type_ == JobType::kURLLoader) {
+ // TODO(kinuko): Implement this. Now we always fallback to network.
+ FallbackToNetwork();
} else {
url_request_job_->FallbackToNetworkOrRenderer();
}
}
void ServiceWorkerURLJobWrapper::ForwardToServiceWorker() {
- if (url_loader_) {
- NOTIMPLEMENTED();
+ if (job_type_ == JobType::kURLLoader) {
+ response_type_ = FORWARD_TO_SERVICE_WORKER;
+ StartRequest();
} else {
url_request_job_->ForwardToServiceWorker();
}
}
bool ServiceWorkerURLJobWrapper::ShouldFallbackToNetwork() {
- if (url_loader_) {
- NOTIMPLEMENTED();
- return false;
+ if (job_type_ == JobType::kURLLoader) {
+ return response_type_ == FALLBACK_TO_NETWORK;
} else {
return url_request_job_->ShouldFallbackToNetwork();
}
}
ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() {
- if (url_loader_) {
+ if (job_type_ == JobType::kURLLoader) {
NOTIMPLEMENTED();
return ui::PAGE_TRANSITION_LINK;
} else {
@@ -73,7 +86,7 @@ ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() {
}
size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const {
- if (url_loader_) {
+ if (job_type_ == JobType::kURLLoader) {
NOTIMPLEMENTED();
return 0;
} else {
@@ -82,7 +95,7 @@ size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const {
}
void ServiceWorkerURLJobWrapper::FailDueToLostController() {
- if (url_loader_) {
+ if (job_type_ == JobType::kURLLoader) {
NOTIMPLEMENTED();
} else {
url_request_job_->FailDueToLostController();
@@ -90,12 +103,20 @@ void ServiceWorkerURLJobWrapper::FailDueToLostController() {
}
bool ServiceWorkerURLJobWrapper::WasCanceled() const {
- if (url_loader_) {
- NOTIMPLEMENTED();
- return true;
+ if (job_type_ == JobType::kURLLoader) {
+ return loader_factory_callback_.is_null();
} else {
return !url_request_job_;
}
}
+void ServiceWorkerURLJobWrapper::StartRequest() {
+ DCHECK_EQ(FORWARD_TO_SERVICE_WORKER, response_type_);
+ // TODO(kinuko): Implement. For now we just exercise async fall back path
+ // to the network.
+ base::ThreadTaskRunnerHandle::Get()->PostTask(
+ FROM_HERE, base::Bind(&ServiceWorkerURLJobWrapper::FallbackToNetwork,
+ weak_factory_.GetWeakPtr()));
+}
+
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698