| 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 |