| 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 <memory> | 10 #include <memory> |
| 11 #include <string> | 11 #include <string> |
| 12 #include <utility> | 12 #include <utility> |
| 13 | 13 |
| 14 #include "base/lazy_instance.h" | 14 #include "base/lazy_instance.h" |
| 15 #include "base/logging.h" | 15 #include "base/logging.h" |
| 16 #include "base/metrics/histogram_macros.h" | 16 #include "base/metrics/histogram_macros.h" |
| 17 #include "base/strings/utf_string_conversions.h" | 17 #include "base/strings/utf_string_conversions.h" |
| 18 #include "base/threading/thread_local.h" | 18 #include "base/threading/thread_local.h" |
| 19 #include "content/child/thread_safe_sender.h" | 19 #include "content/child/thread_safe_sender.h" |
| 20 #include "content/common/cache_storage/cache_storage_messages.h" | 20 #include "content/common/cache_storage/cache_storage_messages.h" |
| 21 #include "content/public/common/referrer.h" | 21 #include "content/public/common/referrer.h" |
| 22 #include "content/public/renderer/render_thread.h" | 22 #include "content/public/renderer/render_thread.h" |
| 23 #include "content/renderer/service_worker/service_worker_type_util.h" | 23 #include "content/renderer/service_worker/service_worker_type_util.h" |
| 24 #include "third_party/WebKit/public/platform/StringVectorCopier.h" |
| 24 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerCache.h" | 25 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerCache.h" |
| 25 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerRequest.h" | 26 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerRequest.h" |
| 26 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerResponse.h" | 27 #include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWor
kerResponse.h" |
| 27 #include "url/origin.h" | 28 #include "url/origin.h" |
| 28 | 29 |
| 29 using base::TimeTicks; | 30 using base::TimeTicks; |
| 30 | 31 |
| 31 namespace content { | 32 namespace content { |
| 32 | 33 |
| 33 using blink::WebServiceWorkerCacheError; | 34 using blink::WebServiceWorkerCacheError; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 97 !web_response.cacheStorageCacheName().isNull(), | 98 !web_response.cacheStorageCacheName().isNull(), |
| 98 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); | 99 web_response.cacheStorageCacheName().utf8(), cors_exposed_header_names); |
| 99 } | 100 } |
| 100 | 101 |
| 101 CacheStorageCacheQueryParams QueryParamsFromWebQueryParams( | 102 CacheStorageCacheQueryParams QueryParamsFromWebQueryParams( |
| 102 const blink::WebServiceWorkerCache::QueryParams& web_query_params) { | 103 const blink::WebServiceWorkerCache::QueryParams& web_query_params) { |
| 103 CacheStorageCacheQueryParams query_params; | 104 CacheStorageCacheQueryParams query_params; |
| 104 query_params.ignore_search = web_query_params.ignoreSearch; | 105 query_params.ignore_search = web_query_params.ignoreSearch; |
| 105 query_params.ignore_method = web_query_params.ignoreMethod; | 106 query_params.ignore_method = web_query_params.ignoreMethod; |
| 106 query_params.ignore_vary = web_query_params.ignoreVary; | 107 query_params.ignore_vary = web_query_params.ignoreVary; |
| 107 query_params.cache_name = web_query_params.cacheName; | 108 query_params.cache_name = |
| 109 blink::WebString::toNullableString16(web_query_params.cacheName); |
| 108 return query_params; | 110 return query_params; |
| 109 } | 111 } |
| 110 | 112 |
| 111 CacheStorageCacheOperationType CacheOperationTypeFromWebCacheOperationType( | 113 CacheStorageCacheOperationType CacheOperationTypeFromWebCacheOperationType( |
| 112 blink::WebServiceWorkerCache::OperationType operation_type) { | 114 blink::WebServiceWorkerCache::OperationType operation_type) { |
| 113 switch (operation_type) { | 115 switch (operation_type) { |
| 114 case blink::WebServiceWorkerCache::OperationTypePut: | 116 case blink::WebServiceWorkerCache::OperationTypePut: |
| 115 return CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT; | 117 return CACHE_STORAGE_CACHE_OPERATION_TYPE_PUT; |
| 116 case blink::WebServiceWorkerCache::OperationTypeDelete: | 118 case blink::WebServiceWorkerCache::OperationTypeDelete: |
| 117 return CACHE_STORAGE_CACHE_OPERATION_TYPE_DELETE; | 119 return CACHE_STORAGE_CACHE_OPERATION_TYPE_DELETE; |
| (...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 callbacks->onSuccess(); | 321 callbacks->onSuccess(); |
| 320 delete_callbacks_.Remove(request_id); | 322 delete_callbacks_.Remove(request_id); |
| 321 delete_times_.erase(request_id); | 323 delete_times_.erase(request_id); |
| 322 } | 324 } |
| 323 | 325 |
| 324 void CacheStorageDispatcher::OnCacheStorageKeysSuccess( | 326 void CacheStorageDispatcher::OnCacheStorageKeysSuccess( |
| 325 int thread_id, | 327 int thread_id, |
| 326 int request_id, | 328 int request_id, |
| 327 const std::vector<base::string16>& keys) { | 329 const std::vector<base::string16>& keys) { |
| 328 DCHECK_EQ(thread_id, CurrentWorkerId()); | 330 DCHECK_EQ(thread_id, CurrentWorkerId()); |
| 329 blink::WebVector<blink::WebString> webKeys(keys.size()); | 331 blink::WebVector<blink::WebString> webKeys( |
| 330 for (size_t i = 0; i < keys.size(); ++i) | 332 blink::CopyStringVectorFromUTF16(keys)); |
| 331 webKeys[i] = keys[i]; | |
| 332 | 333 |
| 333 UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Keys", | 334 UMA_HISTOGRAM_TIMES("ServiceWorkerCache.CacheStorage.Keys", |
| 334 TimeTicks::Now() - keys_times_[request_id]); | 335 TimeTicks::Now() - keys_times_[request_id]); |
| 335 WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks* callbacks = | 336 WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks* callbacks = |
| 336 keys_callbacks_.Lookup(request_id); | 337 keys_callbacks_.Lookup(request_id); |
| 337 callbacks->onSuccess(webKeys); | 338 callbacks->onSuccess(webKeys); |
| 338 keys_callbacks_.Remove(request_id); | 339 keys_callbacks_.Remove(request_id); |
| 339 keys_times_.erase(request_id); | 340 keys_times_.erase(request_id); |
| 340 } | 341 } |
| 341 | 342 |
| (...skipping 172 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 514 } | 515 } |
| 515 | 516 |
| 516 void CacheStorageDispatcher::dispatchHas( | 517 void CacheStorageDispatcher::dispatchHas( |
| 517 std::unique_ptr<WebServiceWorkerCacheStorage::CacheStorageCallbacks> | 518 std::unique_ptr<WebServiceWorkerCacheStorage::CacheStorageCallbacks> |
| 518 callbacks, | 519 callbacks, |
| 519 const url::Origin& origin, | 520 const url::Origin& origin, |
| 520 const blink::WebString& cacheName) { | 521 const blink::WebString& cacheName) { |
| 521 int request_id = has_callbacks_.Add(std::move(callbacks)); | 522 int request_id = has_callbacks_.Add(std::move(callbacks)); |
| 522 has_times_[request_id] = base::TimeTicks::Now(); | 523 has_times_[request_id] = base::TimeTicks::Now(); |
| 523 Send(new CacheStorageHostMsg_CacheStorageHas(CurrentWorkerId(), request_id, | 524 Send(new CacheStorageHostMsg_CacheStorageHas(CurrentWorkerId(), request_id, |
| 524 origin, cacheName)); | 525 origin, cacheName.utf16())); |
| 525 } | 526 } |
| 526 | 527 |
| 527 void CacheStorageDispatcher::dispatchOpen( | 528 void CacheStorageDispatcher::dispatchOpen( |
| 528 std::unique_ptr< | 529 std::unique_ptr< |
| 529 WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks> callbacks, | 530 WebServiceWorkerCacheStorage::CacheStorageWithCacheCallbacks> callbacks, |
| 530 const url::Origin& origin, | 531 const url::Origin& origin, |
| 531 const blink::WebString& cacheName) { | 532 const blink::WebString& cacheName) { |
| 532 int request_id = open_callbacks_.Add(std::move(callbacks)); | 533 int request_id = open_callbacks_.Add(std::move(callbacks)); |
| 533 open_times_[request_id] = base::TimeTicks::Now(); | 534 open_times_[request_id] = base::TimeTicks::Now(); |
| 534 Send(new CacheStorageHostMsg_CacheStorageOpen(CurrentWorkerId(), request_id, | 535 Send(new CacheStorageHostMsg_CacheStorageOpen(CurrentWorkerId(), request_id, |
| 535 origin, cacheName)); | 536 origin, cacheName.utf16())); |
| 536 } | 537 } |
| 537 | 538 |
| 538 void CacheStorageDispatcher::dispatchDelete( | 539 void CacheStorageDispatcher::dispatchDelete( |
| 539 std::unique_ptr<WebServiceWorkerCacheStorage::CacheStorageCallbacks> | 540 std::unique_ptr<WebServiceWorkerCacheStorage::CacheStorageCallbacks> |
| 540 callbacks, | 541 callbacks, |
| 541 const url::Origin& origin, | 542 const url::Origin& origin, |
| 542 const blink::WebString& cacheName) { | 543 const blink::WebString& cacheName) { |
| 543 int request_id = delete_callbacks_.Add(std::move(callbacks)); | 544 int request_id = delete_callbacks_.Add(std::move(callbacks)); |
| 544 delete_times_[request_id] = base::TimeTicks::Now(); | 545 delete_times_[request_id] = base::TimeTicks::Now(); |
| 545 Send(new CacheStorageHostMsg_CacheStorageDelete(CurrentWorkerId(), request_id, | 546 Send(new CacheStorageHostMsg_CacheStorageDelete(CurrentWorkerId(), request_id, |
| 546 origin, cacheName)); | 547 origin, cacheName.utf16())); |
| 547 } | 548 } |
| 548 | 549 |
| 549 void CacheStorageDispatcher::dispatchKeys( | 550 void CacheStorageDispatcher::dispatchKeys( |
| 550 std::unique_ptr<WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks> | 551 std::unique_ptr<WebServiceWorkerCacheStorage::CacheStorageKeysCallbacks> |
| 551 callbacks, | 552 callbacks, |
| 552 const url::Origin& origin) { | 553 const url::Origin& origin) { |
| 553 int request_id = keys_callbacks_.Add(std::move(callbacks)); | 554 int request_id = keys_callbacks_.Add(std::move(callbacks)); |
| 554 keys_times_[request_id] = base::TimeTicks::Now(); | 555 keys_times_[request_id] = base::TimeTicks::Now(); |
| 555 Send(new CacheStorageHostMsg_CacheStorageKeys(CurrentWorkerId(), request_id, | 556 Send(new CacheStorageHostMsg_CacheStorageKeys(CurrentWorkerId(), request_id, |
| 556 origin)); | 557 origin)); |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 645 blink::WebServiceWorkerResponse* web_response) { | 646 blink::WebServiceWorkerResponse* web_response) { |
| 646 web_response->setURL(response.url); | 647 web_response->setURL(response.url); |
| 647 web_response->setStatus(response.status_code); | 648 web_response->setStatus(response.status_code); |
| 648 web_response->setStatusText(WebString::fromASCII(response.status_text)); | 649 web_response->setStatusText(WebString::fromASCII(response.status_text)); |
| 649 web_response->setResponseType(response.response_type); | 650 web_response->setResponseType(response.response_type); |
| 650 web_response->setResponseTime(response.response_time.ToInternalValue()); | 651 web_response->setResponseTime(response.response_time.ToInternalValue()); |
| 651 web_response->setCacheStorageCacheName( | 652 web_response->setCacheStorageCacheName( |
| 652 response.is_in_cache_storage | 653 response.is_in_cache_storage |
| 653 ? blink::WebString::fromUTF8(response.cache_storage_cache_name) | 654 ? blink::WebString::fromUTF8(response.cache_storage_cache_name) |
| 654 : blink::WebString()); | 655 : blink::WebString()); |
| 655 blink::WebVector<blink::WebString> headers( | 656 blink::WebVector<blink::WebString> headers = |
| 656 response.cors_exposed_header_names.size()); | 657 blink::CopyStringVectorFromLatin1(response.cors_exposed_header_names); |
| 657 std::transform( | |
| 658 response.cors_exposed_header_names.begin(), | |
| 659 response.cors_exposed_header_names.end(), headers.begin(), | |
| 660 [](const std::string& h) { return blink::WebString::fromLatin1(h); }); | |
| 661 web_response->setCorsExposedHeaderNames(headers); | 658 web_response->setCorsExposedHeaderNames(headers); |
| 662 | 659 |
| 663 for (const auto& i : response.headers) { | 660 for (const auto& i : response.headers) { |
| 664 web_response->setHeader(WebString::fromASCII(i.first), | 661 web_response->setHeader(WebString::fromASCII(i.first), |
| 665 WebString::fromASCII(i.second)); | 662 WebString::fromASCII(i.second)); |
| 666 } | 663 } |
| 667 | 664 |
| 668 if (!response.blob_uuid.empty()) { | 665 if (!response.blob_uuid.empty()) { |
| 669 web_response->setBlob(blink::WebString::fromUTF8(response.blob_uuid), | 666 web_response->setBlob(blink::WebString::fromUTF8(response.blob_uuid), |
| 670 response.blob_size); | 667 response.blob_size); |
| 671 // Let the host know that it can release its reference to the blob. | 668 // Let the host know that it can release its reference to the blob. |
| 672 Send(new CacheStorageHostMsg_BlobDataHandled(response.blob_uuid)); | 669 Send(new CacheStorageHostMsg_BlobDataHandled(response.blob_uuid)); |
| 673 } | 670 } |
| 674 } | 671 } |
| 675 | 672 |
| 676 blink::WebVector<blink::WebServiceWorkerResponse> | 673 blink::WebVector<blink::WebServiceWorkerResponse> |
| 677 CacheStorageDispatcher::WebResponsesFromResponses( | 674 CacheStorageDispatcher::WebResponsesFromResponses( |
| 678 const std::vector<ServiceWorkerResponse>& responses) { | 675 const std::vector<ServiceWorkerResponse>& responses) { |
| 679 blink::WebVector<blink::WebServiceWorkerResponse> web_responses( | 676 blink::WebVector<blink::WebServiceWorkerResponse> web_responses( |
| 680 responses.size()); | 677 responses.size()); |
| 681 for (size_t i = 0; i < responses.size(); ++i) | 678 for (size_t i = 0; i < responses.size(); ++i) |
| 682 PopulateWebResponseFromResponse(responses[i], &(web_responses[i])); | 679 PopulateWebResponseFromResponse(responses[i], &(web_responses[i])); |
| 683 return web_responses; | 680 return web_responses; |
| 684 } | 681 } |
| 685 | 682 |
| 686 } // namespace content | 683 } // namespace content |
| OLD | NEW |