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 "modules/cachestorage/Cache.h" | 5 #include "modules/cachestorage/Cache.h" |
6 | 6 |
7 #include "bindings/core/v8/CallbackPromiseAdapter.h" | 7 #include "bindings/core/v8/CallbackPromiseAdapter.h" |
8 #include "bindings/core/v8/ExceptionState.h" | 8 #include "bindings/core/v8/ExceptionState.h" |
9 #include "bindings/core/v8/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
10 #include "bindings/core/v8/ScriptState.h" | 10 #include "bindings/core/v8/ScriptState.h" |
11 #include "bindings/core/v8/V8Binding.h" | 11 #include "bindings/core/v8/V8Binding.h" |
12 #include "bindings/core/v8/V8ThrowException.h" | 12 #include "bindings/core/v8/V8ThrowException.h" |
13 #include "bindings/modules/v8/V8Response.h" | 13 #include "bindings/modules/v8/V8Response.h" |
14 #include "core/dom/DOMException.h" | 14 #include "core/dom/DOMException.h" |
15 #include "core/inspector/ConsoleMessage.h" | 15 #include "core/inspector/ConsoleMessage.h" |
16 #include "modules/cachestorage/CacheStorageError.h" | 16 #include "modules/cachestorage/CacheStorageError.h" |
17 #include "modules/fetch/BodyStreamBuffer.h" | 17 #include "modules/fetch/BodyStreamBuffer.h" |
18 #include "modules/fetch/FetchDataLoader.h" | 18 #include "modules/fetch/FetchDataLoader.h" |
19 #include "modules/fetch/GlobalFetch.h" | 19 #include "modules/fetch/GlobalFetch.h" |
20 #include "modules/fetch/Request.h" | 20 #include "modules/fetch/Request.h" |
21 #include "modules/fetch/Response.h" | 21 #include "modules/fetch/Response.h" |
22 #include "platform/HTTPNames.h" | 22 #include "platform/HTTPNames.h" |
23 #include "platform/Histogram.h" | 23 #include "platform/Histogram.h" |
24 #include "public/platform/modules/serviceworker/WebServiceWorkerCache.h" | 24 #include "public/platform/modules/serviceworker/WebServiceWorkerCache.h" |
25 #include <memory> | 25 #include <memory> |
| 26 #include <utility> |
26 | 27 |
27 namespace blink { | 28 namespace blink { |
28 | 29 |
29 namespace { | 30 namespace { |
30 | 31 |
31 // FIXME: Consider using CallbackPromiseAdapter. | 32 // FIXME: Consider using CallbackPromiseAdapter. |
32 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { | 33 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { |
33 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); | 34 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); |
34 | 35 |
35 public: | 36 public: |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
298 ASSERT(index < m_batchOperations.size()); | 299 ASSERT(index < m_batchOperations.size()); |
299 if (m_completed) | 300 if (m_completed) |
300 return; | 301 return; |
301 if (!m_resolver->getExecutionContext() || | 302 if (!m_resolver->getExecutionContext() || |
302 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 303 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) |
303 return; | 304 return; |
304 m_batchOperations[index] = batchOperation; | 305 m_batchOperations[index] = batchOperation; |
305 if (--m_numberOfRemainingOperations != 0) | 306 if (--m_numberOfRemainingOperations != 0) |
306 return; | 307 return; |
307 m_cache->webCache()->dispatchBatch( | 308 m_cache->webCache()->dispatchBatch( |
308 new CallbackPromiseAdapter<void, CacheStorageError>(m_resolver), | 309 WTF::makeUnique<CallbackPromiseAdapter<void, CacheStorageError>>( |
| 310 m_resolver), |
309 m_batchOperations); | 311 m_batchOperations); |
310 } | 312 } |
311 | 313 |
312 void onError(const String& errorMessage) { | 314 void onError(const String& errorMessage) { |
313 if (m_completed) | 315 if (m_completed) |
314 return; | 316 return; |
315 m_completed = true; | 317 m_completed = true; |
316 if (!m_resolver->getExecutionContext() || | 318 if (!m_resolver->getExecutionContext() || |
317 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) | 319 m_resolver->getExecutionContext()->activeDOMObjectsAreStopped()) |
318 return; | 320 return; |
(...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
524 const CacheQueryOptions& options) { | 526 const CacheQueryOptions& options) { |
525 WebServiceWorkerRequest webRequest; | 527 WebServiceWorkerRequest webRequest; |
526 request->populateWebServiceWorkerRequest(webRequest); | 528 request->populateWebServiceWorkerRequest(webRequest); |
527 | 529 |
528 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 530 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
529 const ScriptPromise promise = resolver->promise(); | 531 const ScriptPromise promise = resolver->promise(); |
530 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { | 532 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { |
531 resolver->resolve(); | 533 resolver->resolve(); |
532 return promise; | 534 return promise; |
533 } | 535 } |
534 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, | 536 m_webCache->dispatchMatch(WTF::makeUnique<CacheMatchCallbacks>(resolver), |
535 toWebQueryParams(options)); | 537 webRequest, toWebQueryParams(options)); |
536 return promise; | 538 return promise; |
537 } | 539 } |
538 | 540 |
539 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState) { | 541 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState) { |
540 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 542 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
541 const ScriptPromise promise = resolver->promise(); | 543 const ScriptPromise promise = resolver->promise(); |
542 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), | 544 m_webCache->dispatchMatchAll( |
543 WebServiceWorkerRequest(), | 545 WTF::makeUnique<CacheWithResponsesCallbacks>(resolver), |
544 WebServiceWorkerCache::QueryParams()); | 546 WebServiceWorkerRequest(), WebServiceWorkerCache::QueryParams()); |
545 return promise; | 547 return promise; |
546 } | 548 } |
547 | 549 |
548 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, | 550 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, |
549 const Request* request, | 551 const Request* request, |
550 const CacheQueryOptions& options) { | 552 const CacheQueryOptions& options) { |
551 WebServiceWorkerRequest webRequest; | 553 WebServiceWorkerRequest webRequest; |
552 request->populateWebServiceWorkerRequest(webRequest); | 554 request->populateWebServiceWorkerRequest(webRequest); |
553 | 555 |
554 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 556 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
555 const ScriptPromise promise = resolver->promise(); | 557 const ScriptPromise promise = resolver->promise(); |
556 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { | 558 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { |
557 resolver->resolve(HeapVector<Member<Response>>()); | 559 resolver->resolve(HeapVector<Member<Response>>()); |
558 return promise; | 560 return promise; |
559 } | 561 } |
560 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), | 562 m_webCache->dispatchMatchAll( |
561 webRequest, toWebQueryParams(options)); | 563 WTF::makeUnique<CacheWithResponsesCallbacks>(resolver), webRequest, |
| 564 toWebQueryParams(options)); |
562 return promise; | 565 return promise; |
563 } | 566 } |
564 | 567 |
565 ScriptPromise Cache::addAllImpl(ScriptState* scriptState, | 568 ScriptPromise Cache::addAllImpl(ScriptState* scriptState, |
566 const HeapVector<Member<Request>>& requests, | 569 const HeapVector<Member<Request>>& requests, |
567 ExceptionState& exceptionState) { | 570 ExceptionState& exceptionState) { |
568 if (requests.isEmpty()) | 571 if (requests.isEmpty()) |
569 return ScriptPromise::castUndefined(scriptState); | 572 return ScriptPromise::castUndefined(scriptState); |
570 | 573 |
571 HeapVector<RequestInfo> requestInfos; | 574 HeapVector<RequestInfo> requestInfos; |
(...skipping 29 matching lines...) Expand all Loading... |
601 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelete; | 604 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelete; |
602 request->populateWebServiceWorkerRequest(batchOperations[0].request); | 605 request->populateWebServiceWorkerRequest(batchOperations[0].request); |
603 batchOperations[0].matchParams = toWebQueryParams(options); | 606 batchOperations[0].matchParams = toWebQueryParams(options); |
604 | 607 |
605 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 608 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
606 const ScriptPromise promise = resolver->promise(); | 609 const ScriptPromise promise = resolver->promise(); |
607 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { | 610 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { |
608 resolver->resolve(false); | 611 resolver->resolve(false); |
609 return promise; | 612 return promise; |
610 } | 613 } |
611 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations); | 614 m_webCache->dispatchBatch(WTF::makeUnique<CacheDeleteCallback>(resolver), |
| 615 batchOperations); |
612 return promise; | 616 return promise; |
613 } | 617 } |
614 | 618 |
615 ScriptPromise Cache::putImpl(ScriptState* scriptState, | 619 ScriptPromise Cache::putImpl(ScriptState* scriptState, |
616 const HeapVector<Member<Request>>& requests, | 620 const HeapVector<Member<Request>>& requests, |
617 const HeapVector<Member<Response>>& responses) { | 621 const HeapVector<Member<Response>>& responses) { |
618 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 622 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
619 const ScriptPromise promise = resolver->promise(); | 623 const ScriptPromise promise = resolver->promise(); |
620 BarrierCallbackForPut* barrierCallback = | 624 BarrierCallbackForPut* barrierCallback = |
621 new BarrierCallbackForPut(requests.size(), this, resolver); | 625 new BarrierCallbackForPut(requests.size(), this, resolver); |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
666 responses[i]->populateWebServiceWorkerResponse(batchOperation.response); | 670 responses[i]->populateWebServiceWorkerResponse(batchOperation.response); |
667 barrierCallback->onSuccess(i, batchOperation); | 671 barrierCallback->onSuccess(i, batchOperation); |
668 } | 672 } |
669 | 673 |
670 return promise; | 674 return promise; |
671 } | 675 } |
672 | 676 |
673 ScriptPromise Cache::keysImpl(ScriptState* scriptState) { | 677 ScriptPromise Cache::keysImpl(ScriptState* scriptState) { |
674 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 678 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
675 const ScriptPromise promise = resolver->promise(); | 679 const ScriptPromise promise = resolver->promise(); |
676 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), | 680 m_webCache->dispatchKeys( |
677 WebServiceWorkerRequest(), | 681 WTF::makeUnique<CacheWithRequestsCallbacks>(resolver), |
678 WebServiceWorkerCache::QueryParams()); | 682 WebServiceWorkerRequest(), WebServiceWorkerCache::QueryParams()); |
679 return promise; | 683 return promise; |
680 } | 684 } |
681 | 685 |
682 ScriptPromise Cache::keysImpl(ScriptState* scriptState, | 686 ScriptPromise Cache::keysImpl(ScriptState* scriptState, |
683 const Request* request, | 687 const Request* request, |
684 const CacheQueryOptions& options) { | 688 const CacheQueryOptions& options) { |
685 WebServiceWorkerRequest webRequest; | 689 WebServiceWorkerRequest webRequest; |
686 request->populateWebServiceWorkerRequest(webRequest); | 690 request->populateWebServiceWorkerRequest(webRequest); |
687 | 691 |
688 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); | 692 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState); |
689 const ScriptPromise promise = resolver->promise(); | 693 const ScriptPromise promise = resolver->promise(); |
690 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { | 694 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { |
691 resolver->resolve(HeapVector<Member<Request>>()); | 695 resolver->resolve(HeapVector<Member<Request>>()); |
692 return promise; | 696 return promise; |
693 } | 697 } |
694 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), webRequest, | 698 m_webCache->dispatchKeys( |
695 toWebQueryParams(options)); | 699 WTF::makeUnique<CacheWithRequestsCallbacks>(resolver), webRequest, |
| 700 toWebQueryParams(options)); |
696 return promise; | 701 return promise; |
697 } | 702 } |
698 | 703 |
699 WebServiceWorkerCache* Cache::webCache() const { | 704 WebServiceWorkerCache* Cache::webCache() const { |
700 return m_webCache.get(); | 705 return m_webCache.get(); |
701 } | 706 } |
702 | 707 |
703 } // namespace blink | 708 } // namespace blink |
OLD | NEW |