OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/renderer/cache_storage/cache_storage_dispatcher.h" | 5 #include "content/renderer/cache_storage/cache_storage_dispatcher.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <map> | 9 #include <map> |
10 #include <string> | 10 #include <string> |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "content/renderer/service_worker/service_worker_type_util.h" | 22 #include "content/renderer/service_worker/service_worker_type_util.h" |
23 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerCache.h" | 23 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerCache.h" |
24 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerRequest.h" | 24 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerRequest.h" |
25 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerResponse.h" | 25 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerResponse.h" |
26 #include "url/origin.h" | 26 #include "url/origin.h" |
27 | 27 |
28 using base::TimeTicks; | 28 using base::TimeTicks; |
29 | 29 |
30 namespace content { | 30 namespace content { |
31 | 31 |
| 32 using blink::WebServiceWorkerCacheError; |
32 using blink::WebServiceWorkerCacheStorage; | 33 using blink::WebServiceWorkerCacheStorage; |
33 using blink::WebServiceWorkerCacheError; | |
34 using blink::WebServiceWorkerRequest; | 34 using blink::WebServiceWorkerRequest; |
| 35 using blink::WebString; |
35 | 36 |
36 static base::LazyInstance<base::ThreadLocalPointer<CacheStorageDispatcher>>:: | 37 static base::LazyInstance<base::ThreadLocalPointer<CacheStorageDispatcher>>:: |
37 Leaky g_cache_storage_dispatcher_tls = LAZY_INSTANCE_INITIALIZER; | 38 Leaky g_cache_storage_dispatcher_tls = LAZY_INSTANCE_INITIALIZER; |
38 | 39 |
39 namespace { | 40 namespace { |
40 | 41 |
41 CacheStorageDispatcher* const kHasBeenDeleted = | 42 CacheStorageDispatcher* const kHasBeenDeleted = |
42 reinterpret_cast<CacheStorageDispatcher*>(0x1); | 43 reinterpret_cast<CacheStorageDispatcher*>(0x1); |
43 | 44 |
44 ServiceWorkerFetchRequest FetchRequestFromWebRequest( | 45 ServiceWorkerFetchRequest FetchRequestFromWebRequest( |
45 const blink::WebServiceWorkerRequest& web_request) { | 46 const blink::WebServiceWorkerRequest& web_request) { |
46 ServiceWorkerHeaderMap headers; | 47 ServiceWorkerHeaderMap headers; |
47 GetServiceWorkerHeaderMapFromWebRequest(web_request, &headers); | 48 GetServiceWorkerHeaderMapFromWebRequest(web_request, &headers); |
48 | 49 |
49 return ServiceWorkerFetchRequest( | 50 return ServiceWorkerFetchRequest( |
50 web_request.url(), | 51 web_request.url(), web_request.method().ascii(), headers, |
51 base::UTF16ToASCII(base::StringPiece16(web_request.method())), headers, | |
52 Referrer(web_request.referrerUrl(), web_request.referrerPolicy()), | 52 Referrer(web_request.referrerUrl(), web_request.referrerPolicy()), |
53 web_request.isReload()); | 53 web_request.isReload()); |
54 } | 54 } |
55 | 55 |
56 void PopulateWebRequestFromFetchRequest( | 56 void PopulateWebRequestFromFetchRequest( |
57 const ServiceWorkerFetchRequest& request, | 57 const ServiceWorkerFetchRequest& request, |
58 blink::WebServiceWorkerRequest* web_request) { | 58 blink::WebServiceWorkerRequest* web_request) { |
59 web_request->setURL(request.url); | 59 web_request->setURL(request.url); |
60 web_request->setMethod(base::ASCIIToUTF16(request.method)); | 60 web_request->setMethod(WebString::fromASCII(request.method)); |
61 for (ServiceWorkerHeaderMap::const_iterator i = request.headers.begin(), | 61 for (ServiceWorkerHeaderMap::const_iterator i = request.headers.begin(), |
62 end = request.headers.end(); | 62 end = request.headers.end(); |
63 i != end; ++i) { | 63 i != end; ++i) { |
64 web_request->setHeader(base::ASCIIToUTF16(i->first), | 64 web_request->setHeader(WebString::fromASCII(i->first), |
65 base::ASCIIToUTF16(i->second)); | 65 WebString::fromASCII(i->second)); |
66 } | 66 } |
67 web_request->setReferrer(base::ASCIIToUTF16(request.referrer.url.spec()), | 67 web_request->setReferrer(WebString::fromASCII(request.referrer.url.spec()), |
68 request.referrer.policy); | 68 request.referrer.policy); |
69 web_request->setIsReload(request.is_reload); | 69 web_request->setIsReload(request.is_reload); |
70 } | 70 } |
71 | 71 |
72 blink::WebVector<blink::WebServiceWorkerRequest> WebRequestsFromRequests( | 72 blink::WebVector<blink::WebServiceWorkerRequest> WebRequestsFromRequests( |
73 const std::vector<ServiceWorkerFetchRequest>& requests) { | 73 const std::vector<ServiceWorkerFetchRequest>& requests) { |
74 blink::WebVector<blink::WebServiceWorkerRequest> web_requests( | 74 blink::WebVector<blink::WebServiceWorkerRequest> web_requests( |
75 requests.size()); | 75 requests.size()); |
76 for (size_t i = 0; i < requests.size(); ++i) | 76 for (size_t i = 0; i < requests.size(); ++i) |
77 PopulateWebRequestFromFetchRequest(requests[i], &(web_requests[i])); | 77 PopulateWebRequestFromFetchRequest(requests[i], &(web_requests[i])); |
78 return web_requests; | 78 return web_requests; |
79 } | 79 } |
80 | 80 |
81 ServiceWorkerResponse ResponseFromWebResponse( | 81 ServiceWorkerResponse ResponseFromWebResponse( |
82 const blink::WebServiceWorkerResponse& web_response) { | 82 const blink::WebServiceWorkerResponse& web_response) { |
83 ServiceWorkerHeaderMap headers; | 83 ServiceWorkerHeaderMap headers; |
84 GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers); | 84 GetServiceWorkerHeaderMapFromWebResponse(web_response, &headers); |
85 ServiceWorkerHeaderList cors_exposed_header_names; | 85 ServiceWorkerHeaderList cors_exposed_header_names; |
86 GetCorsExposedHeaderNamesFromWebResponse(web_response, | 86 GetCorsExposedHeaderNamesFromWebResponse(web_response, |
87 &cors_exposed_header_names); | 87 &cors_exposed_header_names); |
88 // We don't support streaming for cache. | 88 // We don't support streaming for cache. |
89 DCHECK(web_response.streamURL().isEmpty()); | 89 DCHECK(web_response.streamURL().isEmpty()); |
90 return ServiceWorkerResponse( | 90 return ServiceWorkerResponse( |
91 web_response.url(), web_response.status(), | 91 web_response.url(), web_response.status(), |
92 base::UTF16ToASCII(base::StringPiece16(web_response.statusText())), | 92 web_response.statusText().ascii(), web_response.responseType(), headers, |
93 web_response.responseType(), headers, | 93 web_response.blobUUID().ascii(), web_response.blobSize(), |
94 base::UTF16ToASCII(base::StringPiece16(web_response.blobUUID())), | 94 web_response.streamURL(), blink::WebServiceWorkerResponseErrorUnknown, |
95 web_response.blobSize(), web_response.streamURL(), | |
96 blink::WebServiceWorkerResponseErrorUnknown, | |
97 base::Time::FromInternalValue(web_response.responseTime()), | 95 base::Time::FromInternalValue(web_response.responseTime()), |
98 !web_response.cacheStorageCacheName().isNull(), | 96 !web_response.cacheStorageCacheName().isNull(), |
99 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); | 97 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); |
100 } | 98 } |
101 | 99 |
102 CacheStorageCacheQueryParams QueryParamsFromWebQueryParams( | 100 CacheStorageCacheQueryParams QueryParamsFromWebQueryParams( |
103 const blink::WebServiceWorkerCache::QueryParams& web_query_params) { | 101 const blink::WebServiceWorkerCache::QueryParams& web_query_params) { |
104 CacheStorageCacheQueryParams query_params; | 102 CacheStorageCacheQueryParams query_params; |
105 query_params.ignore_search = web_query_params.ignoreSearch; | 103 query_params.ignore_search = web_query_params.ignoreSearch; |
106 query_params.ignore_method = web_query_params.ignoreMethod; | 104 query_params.ignore_method = web_query_params.ignoreMethod; |
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 void CacheStorageDispatcher::OnWebCacheDestruction(int cache_id) { | 627 void CacheStorageDispatcher::OnWebCacheDestruction(int cache_id) { |
630 web_caches_.Remove(cache_id); | 628 web_caches_.Remove(cache_id); |
631 Send(new CacheStorageHostMsg_CacheClosed(cache_id)); | 629 Send(new CacheStorageHostMsg_CacheClosed(cache_id)); |
632 } | 630 } |
633 | 631 |
634 void CacheStorageDispatcher::PopulateWebResponseFromResponse( | 632 void CacheStorageDispatcher::PopulateWebResponseFromResponse( |
635 const ServiceWorkerResponse& response, | 633 const ServiceWorkerResponse& response, |
636 blink::WebServiceWorkerResponse* web_response) { | 634 blink::WebServiceWorkerResponse* web_response) { |
637 web_response->setURL(response.url); | 635 web_response->setURL(response.url); |
638 web_response->setStatus(response.status_code); | 636 web_response->setStatus(response.status_code); |
639 web_response->setStatusText(base::ASCIIToUTF16(response.status_text)); | 637 web_response->setStatusText(WebString::fromASCII(response.status_text)); |
640 web_response->setResponseType(response.response_type); | 638 web_response->setResponseType(response.response_type); |
641 web_response->setResponseTime(response.response_time.ToInternalValue()); | 639 web_response->setResponseTime(response.response_time.ToInternalValue()); |
642 web_response->setCacheStorageCacheName( | 640 web_response->setCacheStorageCacheName( |
643 response.is_in_cache_storage | 641 response.is_in_cache_storage |
644 ? blink::WebString::fromUTF8(response.cache_storage_cache_name) | 642 ? blink::WebString::fromUTF8(response.cache_storage_cache_name) |
645 : blink::WebString()); | 643 : blink::WebString()); |
646 blink::WebVector<blink::WebString> headers( | 644 blink::WebVector<blink::WebString> headers( |
647 response.cors_exposed_header_names.size()); | 645 response.cors_exposed_header_names.size()); |
648 std::transform( | 646 std::transform( |
649 response.cors_exposed_header_names.begin(), | 647 response.cors_exposed_header_names.begin(), |
650 response.cors_exposed_header_names.end(), headers.begin(), | 648 response.cors_exposed_header_names.end(), headers.begin(), |
651 [](const std::string& h) { return blink::WebString::fromLatin1(h); }); | 649 [](const std::string& h) { return blink::WebString::fromLatin1(h); }); |
652 web_response->setCorsExposedHeaderNames(headers); | 650 web_response->setCorsExposedHeaderNames(headers); |
653 | 651 |
654 for (const auto& i : response.headers) { | 652 for (const auto& i : response.headers) { |
655 web_response->setHeader(base::ASCIIToUTF16(i.first), | 653 web_response->setHeader(WebString::fromASCII(i.first), |
656 base::ASCIIToUTF16(i.second)); | 654 WebString::fromASCII(i.second)); |
657 } | 655 } |
658 | 656 |
659 if (!response.blob_uuid.empty()) { | 657 if (!response.blob_uuid.empty()) { |
660 web_response->setBlob(blink::WebString::fromUTF8(response.blob_uuid), | 658 web_response->setBlob(blink::WebString::fromUTF8(response.blob_uuid), |
661 response.blob_size); | 659 response.blob_size); |
662 // Let the host know that it can release its reference to the blob. | 660 // Let the host know that it can release its reference to the blob. |
663 Send(new CacheStorageHostMsg_BlobDataHandled(response.blob_uuid)); | 661 Send(new CacheStorageHostMsg_BlobDataHandled(response.blob_uuid)); |
664 } | 662 } |
665 } | 663 } |
666 | 664 |
667 blink::WebVector<blink::WebServiceWorkerResponse> | 665 blink::WebVector<blink::WebServiceWorkerResponse> |
668 CacheStorageDispatcher::WebResponsesFromResponses( | 666 CacheStorageDispatcher::WebResponsesFromResponses( |
669 const std::vector<ServiceWorkerResponse>& responses) { | 667 const std::vector<ServiceWorkerResponse>& responses) { |
670 blink::WebVector<blink::WebServiceWorkerResponse> web_responses( | 668 blink::WebVector<blink::WebServiceWorkerResponse> web_responses( |
671 responses.size()); | 669 responses.size()); |
672 for (size_t i = 0; i < responses.size(); ++i) | 670 for (size_t i = 0; i < responses.size(); ++i) |
673 PopulateWebResponseFromResponse(responses[i], &(web_responses[i])); | 671 PopulateWebResponseFromResponse(responses[i], &(web_responses[i])); |
674 return web_responses; | 672 return web_responses; |
675 } | 673 } |
676 | 674 |
677 } // namespace content | 675 } // namespace content |
OLD | NEW |