| 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..af9a7c8b8b9b32759fd89311b33337f5a7a5017a 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,18 @@ namespace content {
|
|
|
| ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
|
| base::WeakPtr<ServiceWorkerURLRequestJob> url_request_job)
|
| - : url_request_job_(std::move(url_request_job)), url_loader_(nullptr) {}
|
| + : controller_(nullptr),
|
| + url_request_job_(std::move(url_request_job)),
|
| + weak_factory_(this) {}
|
|
|
| ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
|
| - ServiceWorkerControlleeURLLoader* url_loader)
|
| - : url_loader_(url_loader) {
|
| + URLLoaderRequestHandler::Controller* controller,
|
| + mojom::URLLoaderAssociatedRequest url_loader_request,
|
| + mojom::URLLoaderClientPtr url_loader_client_ptr)
|
| + : controller_(controller),
|
| + url_loader_request_(std::move(url_loader_request)),
|
| + url_loader_client_ptr_(std::move(url_loader_client_ptr)),
|
| + weak_factory_(this) {
|
| DCHECK(IsBrowserSideNavigationEnabled() &&
|
| base::CommandLine::ForCurrentProcess()->HasSwitch(
|
| switches::kEnableNetworkService));
|
| @@ -26,40 +34,49 @@ ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
|
| ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {}
|
|
|
| void ServiceWorkerURLJobWrapper::FallbackToNetwork() {
|
| - if (url_loader_) {
|
| - NOTIMPLEMENTED();
|
| + if (controller_) {
|
| + 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 (url_loader_client_ptr_.is_bound()) {
|
| + controller_->Forward(std::move(url_loader_request_),
|
| + std::move(url_loader_client_ptr_));
|
| + }
|
| } else {
|
| url_request_job_->FallbackToNetwork();
|
| }
|
| }
|
|
|
| void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() {
|
| - if (url_loader_) {
|
| - NOTIMPLEMENTED();
|
| + if (controller_) {
|
| + // TODO(kinuko): Implement this. Now we always fallback to network.
|
| + FallbackToNetwork();
|
| } else {
|
| url_request_job_->FallbackToNetworkOrRenderer();
|
| }
|
| }
|
|
|
| void ServiceWorkerURLJobWrapper::ForwardToServiceWorker() {
|
| - if (url_loader_) {
|
| - NOTIMPLEMENTED();
|
| + if (controller_) {
|
| + response_type_ = FORWARD_TO_SERVICE_WORKER;
|
| + StartRequest();
|
| } else {
|
| url_request_job_->ForwardToServiceWorker();
|
| }
|
| }
|
|
|
| bool ServiceWorkerURLJobWrapper::ShouldFallbackToNetwork() {
|
| - if (url_loader_) {
|
| - NOTIMPLEMENTED();
|
| - return false;
|
| + if (controller_) {
|
| + return response_type_ == FALLBACK_TO_NETWORK;
|
| } else {
|
| return url_request_job_->ShouldFallbackToNetwork();
|
| }
|
| }
|
|
|
| ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() {
|
| - if (url_loader_) {
|
| + if (controller_) {
|
| NOTIMPLEMENTED();
|
| return ui::PAGE_TRANSITION_LINK;
|
| } else {
|
| @@ -73,7 +90,7 @@ ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() {
|
| }
|
|
|
| size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const {
|
| - if (url_loader_) {
|
| + if (controller_) {
|
| NOTIMPLEMENTED();
|
| return 0;
|
| } else {
|
| @@ -82,7 +99,7 @@ size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const {
|
| }
|
|
|
| void ServiceWorkerURLJobWrapper::FailDueToLostController() {
|
| - if (url_loader_) {
|
| + if (controller_) {
|
| NOTIMPLEMENTED();
|
| } else {
|
| url_request_job_->FailDueToLostController();
|
| @@ -90,12 +107,20 @@ void ServiceWorkerURLJobWrapper::FailDueToLostController() {
|
| }
|
|
|
| bool ServiceWorkerURLJobWrapper::WasCanceled() const {
|
| - if (url_loader_) {
|
| - NOTIMPLEMENTED();
|
| - return true;
|
| + if (controller_) {
|
| + return !url_loader_client_ptr_.is_bound();
|
| } 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
|
|
|