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

Side by Side Diff: content/browser/loader/resource_requester_info.cc

Issue 2481093003: Introduce ResourceRequesterInfo to abstract the requester of resource request (Closed)
Patch Set: incorporated mmemke's comment Created 4 years, 1 month 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
(Empty)
1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "content/browser/loader/resource_requester_info.h"
6
7 #include "base/memory/ptr_util.h"
8 #include "content/browser/loader/resource_message_filter.h"
9 #include "content/browser/service_worker/service_worker_context_wrapper.h"
10 #include "content/public/browser/resource_context.h"
11 #include "content/public/common/process_type.h"
12
13 namespace content {
14
15 namespace {
16
17 class ResourceRequesterInfoForRenderer : public ResourceRequesterInfo {
kinuko 2016/11/14 16:29:41 (Again) I think we could also make it a simple dat
horo 2016/11/17 11:57:06 Done.
18 public:
19 explicit ResourceRequesterInfoForRenderer(
20 base::WeakPtr<ResourceMessageFilter> filter,
21 int child_id)
22 : filter_(filter), child_id_(child_id) {}
23
24 ~ResourceRequesterInfoForRenderer() override {}
25
26 std::unique_ptr<ResourceRequesterInfo> clone() const override {
27 return base::MakeUnique<ResourceRequesterInfoForRenderer>(filter_,
28 child_id_);
29 }
30
31 bool IsRenderer() const override { return true; }
32 bool IsBrowserSideNavigation() const override { return false; }
33 int GetChildID() const override { return child_id_; }
34 BrowserMessageFilter* GetFilter() const override { return filter_.get(); }
35
36 void GetContexts(ResourceType resource_type,
37 ResourceContext** resource_context,
38 net::URLRequestContext** request_context) const override {
39 DCHECK(GetFilter());
40 filter_->GetContexts(resource_type, resource_context, request_context);
41 }
42
43 ChromeAppCacheService* appcache_service() const override {
44 DCHECK(GetFilter());
45 return filter_->appcache_service();
46 }
47
48 ChromeBlobStorageContext* blob_storage_context() const override {
49 DCHECK(GetFilter());
50 return filter_->blob_storage_context();
51 }
52
53 storage::FileSystemContext* file_system_context() const override {
54 DCHECK(GetFilter());
55 return filter_->file_system_context();
56 }
57
58 ServiceWorkerContextWrapper* service_worker_context() const override {
59 DCHECK(GetFilter());
60 return filter_->service_worker_context();
61 }
62
63 private:
64 // The filter might be deleted if the process exited.
65 const base::WeakPtr<ResourceMessageFilter> filter_;
66 const int child_id_;
67
68 DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfoForRenderer);
69 };
70
71 class ResourceRequesterInfoForBrowserSideNavigation
72 : public ResourceRequesterInfo {
73 public:
74 explicit ResourceRequesterInfoForBrowserSideNavigation(
75 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context)
76 : service_worker_context_(std::move(service_worker_context)) {}
77 ~ResourceRequesterInfoForBrowserSideNavigation() override {}
78
79 std::unique_ptr<ResourceRequesterInfo> clone() const override {
80 return base::MakeUnique<ResourceRequesterInfoForBrowserSideNavigation>(
81 service_worker_context_);
82 }
83
84 bool IsRenderer() const override { return false; }
85 bool IsBrowserSideNavigation() const override { return true; }
86 int GetChildID() const override { return -1; }
87
88 BrowserMessageFilter* GetFilter() const override {
89 NOTREACHED();
90 return nullptr;
91 }
92
93 void GetContexts(ResourceType resource_type,
94 ResourceContext** resource_context,
95 net::URLRequestContext** request_context) const override {
96 NOTREACHED();
97 }
98
99 ChromeAppCacheService* appcache_service() const override {
100 NOTREACHED();
101 return nullptr;
102 }
103
104 ChromeBlobStorageContext* blob_storage_context() const override {
105 NOTREACHED();
106 return nullptr;
107 }
108
109 storage::FileSystemContext* file_system_context() const override {
110 NOTREACHED();
111 return nullptr;
112 }
113
114 ServiceWorkerContextWrapper* service_worker_context() const override {
115 return service_worker_context_.get();
116 }
117
118 private:
119 const scoped_refptr<ServiceWorkerContextWrapper> service_worker_context_;
120
121 DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfoForBrowserSideNavigation);
122 };
123
124 class ResourceRequesterInfoForDownloadOrPageSave
125 : public ResourceRequesterInfo {
126 public:
127 explicit ResourceRequesterInfoForDownloadOrPageSave(int child_id)
128 : child_id_(child_id) {}
129 ~ResourceRequesterInfoForDownloadOrPageSave() override {}
130
131 std::unique_ptr<ResourceRequesterInfo> clone() const override {
132 return base::MakeUnique<ResourceRequesterInfoForDownloadOrPageSave>(
133 child_id_);
134 }
135
136 bool IsRenderer() const override { return false; }
137 bool IsBrowserSideNavigation() const override { return false; }
138 int GetChildID() const override { return child_id_; }
139
140 BrowserMessageFilter* GetFilter() const override {
141 NOTREACHED();
142 return nullptr;
143 }
144
145 void GetContexts(ResourceType resource_type,
146 ResourceContext** resource_context,
147 net::URLRequestContext** request_context) const override {
148 NOTREACHED();
149 }
150
151 ChromeAppCacheService* appcache_service() const override {
152 NOTREACHED();
153 return nullptr;
154 }
155
156 ChromeBlobStorageContext* blob_storage_context() const override {
157 NOTREACHED();
158 return nullptr;
159 }
160
161 storage::FileSystemContext* file_system_context() const override {
162 NOTREACHED();
163 return nullptr;
164 }
165
166 ServiceWorkerContextWrapper* service_worker_context() const override {
167 NOTREACHED();
168 return nullptr;
169 }
170
171 private:
172 const int child_id_;
173
174 DISALLOW_COPY_AND_ASSIGN(ResourceRequesterInfoForDownloadOrPageSave);
175 };
176
177 } // namespace
178
179 std::unique_ptr<ResourceRequesterInfo> ResourceRequesterInfo::CreateForRenderer(
180 ResourceMessageFilter* filter) {
181 DCHECK(filter);
182 return base::MakeUnique<ResourceRequesterInfoForRenderer>(
183 filter->GetWeakPtr(), filter->child_id());
184 }
185
186 std::unique_ptr<ResourceRequesterInfo>
187 ResourceRequesterInfo::CreateForRendererTesting(int child_id) {
188 return base::MakeUnique<ResourceRequesterInfoForRenderer>(
189 base::WeakPtr<ResourceMessageFilter>(), child_id);
190 }
191
192 std::unique_ptr<ResourceRequesterInfo>
193 ResourceRequesterInfo::CreateForBrowserSideNavigation(
194 scoped_refptr<ServiceWorkerContextWrapper> service_worker_context) {
195 return base::MakeUnique<ResourceRequesterInfoForBrowserSideNavigation>(
196 std::move(service_worker_context));
197 }
198
199 std::unique_ptr<ResourceRequesterInfo>
200 ResourceRequesterInfo::CreateForDownloadOrPageSave(int child_id) {
201 return base::MakeUnique<ResourceRequesterInfoForDownloadOrPageSave>(child_id);
kinuko 2016/11/14 16:29:41 Will we need to access service worker context for
horo 2016/11/17 11:57:06 I don't fully understand the download behavior yet
202 }
203
204 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698