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

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: . 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 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 : controller_(nullptr),
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 URLLoaderRequestHandler::Controller* controller,
20 : url_loader_(url_loader) { 23 mojom::URLLoaderAssociatedRequest url_loader_request,
24 mojom::URLLoaderClientPtr url_loader_client_ptr)
25 : controller_(controller),
26 url_loader_request_(std::move(url_loader_request)),
27 url_loader_client_ptr_(std::move(url_loader_client_ptr)),
28 weak_factory_(this) {
21 DCHECK(IsBrowserSideNavigationEnabled() && 29 DCHECK(IsBrowserSideNavigationEnabled() &&
22 base::CommandLine::ForCurrentProcess()->HasSwitch( 30 base::CommandLine::ForCurrentProcess()->HasSwitch(
23 switches::kEnableNetworkService)); 31 switches::kEnableNetworkService));
24 } 32 }
25 33
26 ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {} 34 ServiceWorkerURLJobWrapper::~ServiceWorkerURLJobWrapper() {}
27 35
28 void ServiceWorkerURLJobWrapper::FallbackToNetwork() { 36 void ServiceWorkerURLJobWrapper::FallbackToNetwork() {
29 if (url_loader_) { 37 if (controller_) {
30 NOTIMPLEMENTED(); 38 response_type_ = FALLBACK_TO_NETWORK;
39 // This could be called multiple times in some cases because we simply
40 // call this synchronously here and don't wait for a separate async
41 // StartRequest cue like what URLRequestJob case does.
42 // TODO(kinuko): Make sure this is ok or we need to make this async.
43 if (url_loader_client_ptr_.is_bound()) {
44 controller_->Forward(std::move(url_loader_request_),
45 std::move(url_loader_client_ptr_));
46 }
31 } else { 47 } else {
32 url_request_job_->FallbackToNetwork(); 48 url_request_job_->FallbackToNetwork();
33 } 49 }
34 } 50 }
35 51
36 void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() { 52 void ServiceWorkerURLJobWrapper::FallbackToNetworkOrRenderer() {
37 if (url_loader_) { 53 if (controller_) {
38 NOTIMPLEMENTED(); 54 // TODO(kinuko): Implement this. Now we always fallback to network.
55 FallbackToNetwork();
39 } else { 56 } else {
40 url_request_job_->FallbackToNetworkOrRenderer(); 57 url_request_job_->FallbackToNetworkOrRenderer();
41 } 58 }
42 } 59 }
43 60
44 void ServiceWorkerURLJobWrapper::ForwardToServiceWorker() { 61 void ServiceWorkerURLJobWrapper::ForwardToServiceWorker() {
45 if (url_loader_) { 62 if (controller_) {
46 NOTIMPLEMENTED(); 63 response_type_ = FORWARD_TO_SERVICE_WORKER;
64 StartRequest();
47 } else { 65 } else {
48 url_request_job_->ForwardToServiceWorker(); 66 url_request_job_->ForwardToServiceWorker();
49 } 67 }
50 } 68 }
51 69
52 bool ServiceWorkerURLJobWrapper::ShouldFallbackToNetwork() { 70 bool ServiceWorkerURLJobWrapper::ShouldFallbackToNetwork() {
53 if (url_loader_) { 71 if (controller_) {
54 NOTIMPLEMENTED(); 72 return response_type_ == FALLBACK_TO_NETWORK;
55 return false;
56 } else { 73 } else {
57 return url_request_job_->ShouldFallbackToNetwork(); 74 return url_request_job_->ShouldFallbackToNetwork();
58 } 75 }
59 } 76 }
60 77
61 ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() { 78 ui::PageTransition ServiceWorkerURLJobWrapper::GetPageTransition() {
62 if (url_loader_) { 79 if (controller_) {
63 NOTIMPLEMENTED(); 80 NOTIMPLEMENTED();
64 return ui::PAGE_TRANSITION_LINK; 81 return ui::PAGE_TRANSITION_LINK;
65 } else { 82 } else {
66 const ResourceRequestInfo* info = 83 const ResourceRequestInfo* info =
67 ResourceRequestInfo::ForRequest(url_request_job_->request()); 84 ResourceRequestInfo::ForRequest(url_request_job_->request());
68 // ResourceRequestInfo may not be set in some tests. 85 // ResourceRequestInfo may not be set in some tests.
69 if (!info) 86 if (!info)
70 return ui::PAGE_TRANSITION_LINK; 87 return ui::PAGE_TRANSITION_LINK;
71 return info->GetPageTransition(); 88 return info->GetPageTransition();
72 } 89 }
73 } 90 }
74 91
75 size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const { 92 size_t ServiceWorkerURLJobWrapper::GetURLChainSize() const {
76 if (url_loader_) { 93 if (controller_) {
77 NOTIMPLEMENTED(); 94 NOTIMPLEMENTED();
78 return 0; 95 return 0;
79 } else { 96 } else {
80 return url_request_job_->request()->url_chain().size(); 97 return url_request_job_->request()->url_chain().size();
81 } 98 }
82 } 99 }
83 100
84 void ServiceWorkerURLJobWrapper::FailDueToLostController() { 101 void ServiceWorkerURLJobWrapper::FailDueToLostController() {
85 if (url_loader_) { 102 if (controller_) {
86 NOTIMPLEMENTED(); 103 NOTIMPLEMENTED();
87 } else { 104 } else {
88 url_request_job_->FailDueToLostController(); 105 url_request_job_->FailDueToLostController();
89 } 106 }
90 } 107 }
91 108
92 bool ServiceWorkerURLJobWrapper::WasCanceled() const { 109 bool ServiceWorkerURLJobWrapper::WasCanceled() const {
93 if (url_loader_) { 110 if (controller_) {
94 NOTIMPLEMENTED(); 111 return !url_loader_client_ptr_.is_bound();
95 return true;
96 } else { 112 } else {
97 return !url_request_job_; 113 return !url_request_job_;
98 } 114 }
99 } 115 }
100 116
117 void ServiceWorkerURLJobWrapper::StartRequest() {
118 DCHECK_EQ(FORWARD_TO_SERVICE_WORKER, response_type_);
119 // TODO(kinuko): Implement. For now we just exercise async fall back path
120 // to the network.
121 base::ThreadTaskRunnerHandle::Get()->PostTask(
122 FROM_HERE, base::Bind(&ServiceWorkerURLJobWrapper::FallbackToNetwork,
123 weak_factory_.GetWeakPtr()));
124 }
125
101 } // namespace content 126 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698