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/common/url_loader_type_converters.h" | |
6 | |
7 #include "base/strings/string_util.h" | |
8 #include "base/time/time.h" | |
9 #include "content/common/resource_messages.h" | |
10 #include "content/public/common/resource_response.h" | |
11 #include "net/http/http_response_headers.h" | |
12 #include "third_party/WebKit/public/platform/WebReferrerPolicy.h" | |
13 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor kerResponseType.h" | |
14 #include "url/gurl.h" | |
15 #include "url/origin.h" | |
16 | |
17 namespace mojo { | |
18 | |
19 using content::mojom::URLLoaderStatus; | |
20 using content::mojom::URLLoaderStatusPtr; | |
21 using content::mojom::URLRequest; | |
22 using content::mojom::URLRequestPtr; | |
23 using content::mojom::URLResponse; | |
24 using content::mojom::URLResponsePtr; | |
25 | |
26 #define CHECK_ENUM(blink_prefix, mojom_enum, name) \ | |
27 static_assert(static_cast<int>(blink::blink_prefix##name) == \ | |
28 static_cast<int>(content::mojom::mojom_enum::name), \ | |
29 "Mismatched enum: " #blink_prefix #name " != " #mojom_enum \ | |
30 "::" #name) | |
31 | |
32 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, Always); | |
33 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, Default); | |
34 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, NoReferrerWhenDowngrade); | |
35 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, Never); | |
36 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, Origin); | |
37 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, OriginWhenCrossOrigin); | |
38 CHECK_ENUM(WebReferrerPolicy, | |
39 ReferrerPolicy, | |
40 NoReferrerWhenDowngradeOriginWhenCrossOrigin); | |
41 CHECK_ENUM(WebReferrerPolicy, ReferrerPolicy, Last); | |
42 | |
43 CHECK_ENUM(WebServiceWorkerResponseType, ServiceWorkerResponseType, Basic); | |
44 CHECK_ENUM(WebServiceWorkerResponseType, ServiceWorkerResponseType, CORS); | |
45 CHECK_ENUM(WebServiceWorkerResponseType, ServiceWorkerResponseType, Default); | |
46 CHECK_ENUM(WebServiceWorkerResponseType, ServiceWorkerResponseType, Error); | |
47 CHECK_ENUM(WebServiceWorkerResponseType, ServiceWorkerResponseType, Opaque); | |
48 CHECK_ENUM(WebServiceWorkerResponseType, | |
49 ServiceWorkerResponseType, | |
50 OpaqueRedirect); | |
51 CHECK_ENUM(WebServiceWorkerResponseType, ServiceWorkerResponseType, Last); | |
52 | |
53 URLRequestPtr TypeConverter<URLRequestPtr, ResourceHostMsg_Request>::Convert( | |
dcheng
2016/05/11 17:05:18
Let's avoid adding new type converters and use Str
yhirano
2016/05/16 14:40:06
Done (using ipc paramtraits)
| |
54 const ResourceHostMsg_Request& request) { | |
55 URLRequestPtr url_request(URLRequest::New()); | |
56 | |
57 url_request->method = request.method; | |
58 url_request->url = request.url.spec(); | |
59 url_request->first_party_for_cookies = request.first_party_for_cookies.spec(); | |
60 url_request->request_initiator = request.request_initiator.Serialize(); | |
61 url_request->referrer = request.referrer.spec(); | |
62 url_request->referrer_policy = | |
63 static_cast<content::mojom::ReferrerPolicy>(request.referrer_policy); | |
64 | |
65 return url_request; | |
66 } | |
67 | |
68 ResourceHostMsg_Request | |
69 TypeConverter<ResourceHostMsg_Request, URLRequest>::Convert( | |
70 const URLRequest& request) { | |
71 ResourceHostMsg_Request ipc_request; | |
72 ipc_request.method = request.method; | |
73 ipc_request.url = GURL(request.url.get()); | |
74 ipc_request.first_party_for_cookies = | |
75 GURL(std::string(request.first_party_for_cookies)); | |
76 ipc_request.request_initiator = | |
77 url::Origin(GURL(std::string(request.request_initiator))); | |
78 ipc_request.referrer = GURL(std::string(request.referrer)); | |
79 ipc_request.referrer_policy = | |
80 static_cast<blink::WebReferrerPolicy>(request.referrer_policy); | |
81 | |
82 return ipc_request; | |
83 } | |
84 | |
85 URLResponsePtr | |
86 TypeConverter<URLResponsePtr, content::ResourceResponseHead>::Convert( | |
87 const content::ResourceResponseHead& head) { | |
88 URLResponsePtr response(URLResponse::New()); | |
89 response->request_start = head.request_start.ToInternalValue(); | |
90 response->response_start = head.response_start.ToInternalValue(); | |
91 response->request_time = head.request_time.ToInternalValue(); | |
92 response->response_time = head.response_time.ToInternalValue(); | |
93 | |
94 if (head.headers) { | |
95 std::string headers; | |
96 // See ParamTraits<scoped_refptr<net::HttpResponseHeaders>>::Write. | |
97 head.headers->PersistTo(net::HttpResponseHeaders::PERSIST_SANS_COOKIES, | |
98 &headers); | |
99 response->headers = headers; | |
100 } | |
101 response->mime_type = head.mime_type; | |
102 response->charset = head.charset; | |
103 response->security_info = head.security_info; | |
104 response->has_major_certificate_errors = head.has_major_certificate_errors; | |
105 response->content_length = head.content_length; | |
106 response->encoded_data_length = head.encoded_data_length; | |
107 response->appcache_id = head.appcache_id; | |
108 response->appcache_manifest_url = head.appcache_manifest_url.spec(); | |
109 response->was_fetched_via_spdy = head.was_fetched_via_spdy; | |
110 response->was_npn_negotiated = head.was_npn_negotiated; | |
111 response->was_alternate_protocol_available = | |
112 head.was_alternate_protocol_available; | |
113 response->was_fetched_via_proxy = head.was_fetched_via_proxy; | |
114 response->npn_negotiated_protocol = head.npn_negotiated_protocol; | |
115 response->was_fetched_via_service_worker = | |
116 head.was_fetched_via_service_worker; | |
117 response->was_fallback_required_by_service_worker = | |
118 head.was_fallback_required_by_service_worker; | |
119 response->original_url_via_service_worker = | |
120 head.original_url_via_service_worker.spec(); | |
121 response->response_type_via_service_worker = | |
122 static_cast<content::mojom::ServiceWorkerResponseType>( | |
123 head.response_type_via_service_worker); | |
124 response->service_worker_start_time = | |
125 head.service_worker_start_time.ToInternalValue(); | |
126 response->service_worker_ready_time = | |
127 head.service_worker_ready_time.ToInternalValue(); | |
128 response->is_in_cache_storage = head.is_in_cache_storage; | |
129 response->cache_storage_cache_name = head.cache_storage_cache_name; | |
130 response->is_using_lofi = head.is_using_lofi; | |
131 | |
132 return response; | |
133 } | |
134 | |
135 content::ResourceResponseHead | |
136 TypeConverter<content::ResourceResponseHead, URLResponse>::Convert( | |
137 const URLResponse& response) { | |
138 content::ResourceResponseHead head; | |
139 head.request_start = | |
140 base::TimeTicks::FromInternalValue(response.request_start); | |
141 head.response_start = | |
142 base::TimeTicks::FromInternalValue(response.response_start); | |
143 head.request_time = base::Time::FromInternalValue(response.request_time); | |
144 head.response_time = base::Time::FromInternalValue(response.response_time); | |
145 if (response.headers.size() > 0) | |
146 head.headers = new net::HttpResponseHeaders(response.headers); | |
147 head.mime_type = response.mime_type; | |
148 head.charset = response.charset; | |
149 head.security_info = response.security_info; | |
150 head.has_major_certificate_errors = response.has_major_certificate_errors; | |
151 head.content_length = response.content_length; | |
152 head.encoded_data_length = response.encoded_data_length; | |
153 head.appcache_id = response.appcache_id; | |
154 head.appcache_manifest_url = | |
155 GURL(std::string(response.appcache_manifest_url)); | |
156 head.was_fetched_via_spdy = response.was_fetched_via_spdy; | |
157 head.was_npn_negotiated = response.was_npn_negotiated; | |
158 head.was_alternate_protocol_available = | |
159 response.was_alternate_protocol_available; | |
160 head.was_fetched_via_proxy = response.was_fetched_via_proxy; | |
161 head.npn_negotiated_protocol = response.npn_negotiated_protocol; | |
162 head.was_fetched_via_service_worker = response.was_fetched_via_service_worker; | |
163 head.was_fallback_required_by_service_worker = | |
164 response.was_fallback_required_by_service_worker; | |
165 head.original_url_via_service_worker = | |
166 GURL(std::string(response.original_url_via_service_worker)); | |
167 head.response_type_via_service_worker = | |
168 static_cast<blink::WebServiceWorkerResponseType>( | |
169 response.response_type_via_service_worker); | |
170 head.service_worker_start_time = | |
171 base::TimeTicks::FromInternalValue(response.service_worker_start_time); | |
172 head.service_worker_ready_time = | |
173 base::TimeTicks::FromInternalValue(response.service_worker_ready_time); | |
174 head.is_in_cache_storage = response.is_in_cache_storage; | |
175 head.cache_storage_cache_name = response.cache_storage_cache_name; | |
176 head.is_using_lofi = response.is_using_lofi; | |
177 | |
178 return head; | |
179 } | |
180 | |
181 URLLoaderStatusPtr | |
182 TypeConverter<URLLoaderStatusPtr, ResourceMsg_RequestCompleteData>::Convert( | |
183 const ResourceMsg_RequestCompleteData& data) { | |
184 URLLoaderStatusPtr status(URLLoaderStatus::New()); | |
185 status->network_error = data.error_code; | |
186 status->was_ignored_by_handler = data.was_ignored_by_handler; | |
187 status->exists_in_cache = data.exists_in_cache; | |
188 status->security_info = data.security_info; | |
189 status->completion_time = data.completion_time.ToInternalValue(); | |
190 status->encoded_data_length = data.encoded_data_length; | |
191 return status; | |
192 } | |
193 | |
194 ResourceMsg_RequestCompleteData | |
195 TypeConverter<ResourceMsg_RequestCompleteData, URLLoaderStatus>::Convert( | |
196 const URLLoaderStatus& status) { | |
197 ResourceMsg_RequestCompleteData data; | |
198 data.error_code = status.network_error; | |
199 data.was_ignored_by_handler = status.was_ignored_by_handler; | |
200 data.exists_in_cache = status.exists_in_cache; | |
201 data.security_info = status.security_info; | |
202 data.completion_time = | |
203 base::TimeTicks::FromInternalValue(status.completion_time); | |
204 data.encoded_data_length = status.encoded_data_length; | |
205 return data; | |
206 } | |
207 | |
208 } // namespace mojo | |
OLD | NEW |