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

Side by Side 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, 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/service_worker/service_worker_url_job_wrapper.h" 5 #include "content/browser/service_worker/service_worker_url_job_wrapper.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "content/browser/service_worker/service_worker_response_type.h"
8 #include "content/public/browser/resource_request_info.h" 9 #include "content/public/browser/resource_request_info.h"
9 #include "content/public/common/browser_side_navigation_policy.h" 10 #include "content/public/common/browser_side_navigation_policy.h"
10 #include "content/public/common/content_switches.h" 11 #include "content/public/common/content_switches.h"
11 12
12 namespace content { 13 namespace content {
13 14
14 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper( 15 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
15 base::WeakPtr<ServiceWorkerURLRequestJob> url_request_job) 16 base::WeakPtr<ServiceWorkerURLRequestJob> url_request_job)
16 : url_request_job_(std::move(url_request_job)), url_loader_(nullptr) {} 17 : job_type_(JobType::kURLRequest),
18 url_request_job_(std::move(url_request_job)),
19 weak_factory_(this) {}
17 20
18 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper( 21 ServiceWorkerURLJobWrapper::ServiceWorkerURLJobWrapper(
19 ServiceWorkerControlleeURLLoader* url_loader) 22 LoaderFactoryCallback callback)
20 : url_loader_(url_loader) { 23 : job_type_(JobType::kURLLoader),
24 loader_factory_callback_(std::move(callback)),
25 weak_factory_(this) {
21 DCHECK(IsBrowserSideNavigationEnabled() && 26 DCHECK(IsBrowserSideNavigationEnabled() &&
22 base::CommandLine::ForCurrentProcess()->HasSwitch( 27 base::CommandLine::ForCurrentProcess()->HasSwitch(
23 switches::kEnableNetworkService)); 28 switches::kEnableNetworkService));
24 } 29 }
25 30
26 ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {} 31 ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {}
27 32
28 void ServiceWorkerURLJobWrapper::FallbackToNetwork() { 33 void ServiceWorkerURLJobWrapper::FallbackToNetwork() {
29 if (url_loader_) { 34 if (job_type_ == JobType::kURLLoader) {
30 NOTIMPLEMENTED(); 35 response_type_ = FALLBACK_TO_NETWORK;
36 // This could be called multiple times in some cases because we simply
37 // call this synchronously here and don't wait for a separate async
38 // StartRequest cue like what URLRequestJob case does.
39 // TODO(kinuko): Make sure this is ok or we need to make this async.
40 if (!loader_factory_callback_.is_null()) {
41 std::move(loader_factory_callback_).Run(nullptr);
42 }
31 } else { 43 } else {
32 url_request_job_->FallbackToNetwork(); 44 url_request_job_->FallbackToNetwork();
33 } 45 }
34 } 46 }
35 47
36 void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() { 48 void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() {
37 if (url_loader_) { 49 if (job_type_ == JobType::kURLLoader) {
38 NOTIMPLEMENTED(); 50 // TODO(kinuko): Implement this. Now we always fallback to network.
51 FallbackToNetwork();
39 } else { 52 } else {
40 url_request_job_->FallbackToNetworkOrRenderer(); 53 url_request_job_->FallbackToNetworkOrRenderer();
41 } 54 }
42 } 55 }
43 56
44 void ServiceWorkerURLJobWrapper::ForwardToServiceWorker() { 57 void ServiceWorkerURLJobWrapper::ForwardToServiceWorker() {
45 if (url_loader_) { 58 if (job_type_ == JobType::kURLLoader) {
46 NOTIMPLEMENTED(); 59 response_type_ = FORWARD_TO_SERVICE_WORKER;
60 StartRequest();
47 } else { 61 } else {
48 url_request_job_->ForwardToServiceWorker(); 62 url_request_job_->ForwardToServiceWorker();
49 } 63 }
50 } 64 }
51 65
52 bool ServiceWorkerURLJobWrapper::ShouldFallbackToNetwork() { 66 bool ServiceWorkerURLJobWrapper::ShouldFallbackToNetwork() {
53 if (url_loader_) { 67 if (job_type_ == JobType::kURLLoader) {
54 NOTIMPLEMENTED(); 68 return response_type_ == FALLBACK_TO_NETWORK;
55 return false;
56 } else { 69 } else {
57 return url_request_job_->ShouldFallbackToNetwork(); 70 return url_request_job_->ShouldFallbackToNetwork();
58 } 71 }
59 } 72 }
60 73
61 ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() { 74 ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() {
62 if (url_loader_) { 75 if (job_type_ == JobType::kURLLoader) {
63 NOTIMPLEMENTED(); 76 NOTIMPLEMENTED();
64 return ui::PAGE_TRANSITION_LINK; 77 return ui::PAGE_TRANSITION_LINK;
65 } else { 78 } else {
66 const ResourceRequestInfo* info = 79 const ResourceRequestInfo* info =
67 ResourceRequestInfo::ForRequest(url_request_job_->request()); 80 ResourceRequestInfo::ForRequest(url_request_job_->request());
68 // ResourceRequestInfo may not be set in some tests. 81 // ResourceRequestInfo may not be set in some tests.
69 if (!info) 82 if (!info)
70 return ui::PAGE_TRANSITION_LINK; 83 return ui::PAGE_TRANSITION_LINK;
71 return info->GetPageTransition(); 84 return info->GetPageTransition();
72 } 85 }
73 } 86 }
74 87
75 size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const { 88 size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const {
76 if (url_loader_) { 89 if (job_type_ == JobType::kURLLoader) {
77 NOTIMPLEMENTED(); 90 NOTIMPLEMENTED();
78 return 0; 91 return 0;
79 } else { 92 } else {
80 return url_request_job_->request()->url_chain().size(); 93 return url_request_job_->request()->url_chain().size();
81 } 94 }
82 } 95 }
83 96
84 void ServiceWorkerURLJobWrapper::FailDueToLostController() { 97 void ServiceWorkerURLJobWrapper::FailDueToLostController() {
85 if (url_loader_) { 98 if (job_type_ == JobType::kURLLoader) {
86 NOTIMPLEMENTED(); 99 NOTIMPLEMENTED();
87 } else { 100 } else {
88 url_request_job_->FailDueToLostController(); 101 url_request_job_->FailDueToLostController();
89 } 102 }
90 } 103 }
91 104
92 bool ServiceWorkerURLJobWrapper::WasCanceled() const { 105 bool ServiceWorkerURLJobWrapper::WasCanceled() const {
93 if (url_loader_) { 106 if (job_type_ == JobType::kURLLoader) {
94 NOTIMPLEMENTED(); 107 return loader_factory_callback_.is_null();
95 return true;
96 } else { 108 } else {
97 return !url_request_job_; 109 return !url_request_job_;
98 } 110 }
99 } 111 }
100 112
113 void ServiceWorkerURLJobWrapper::StartRequest() {
114 DCHECK_EQ(FORWARD_TO_SERVICE_WORKER, response_type_);
115 // TODO(kinuko): Implement. For now we just exercise async fall back path
116 // to the network.
117 base::ThreadTaskRunnerHandle::Get()->PostTask(
118 FROM_HERE, base::Bind(&ServiceWorkerURLJobWrapper::FallbackToNetwork,
119 weak_factory_.GetWeakPtr()));
120 }
121
101 } // namespace content 122 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698