OLD | NEW |
---|---|
(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 | |
OLD | NEW |