Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: third_party/WebKit/Source/modules/cachestorage/Cache.cpp

Issue 2242883002: [CacheStorage] Use QueryCache everywhere (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from PS9 Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "platform/RuntimeEnabledFeatures.h"
25 #include "public/platform/modules/serviceworker/WebServiceWorkerCache.h" 24 #include "public/platform/modules/serviceworker/WebServiceWorkerCache.h"
26 #include <memory> 25 #include <memory>
27 26
28 namespace blink { 27 namespace blink {
29 28
30 namespace { 29 namespace {
31 30
32 void checkCacheQueryOptions(const CacheQueryOptions& options, ExecutionContext* context)
33 {
34 if (!RuntimeEnabledFeatures::cacheIgnoreSearchOptionEnabled() && options.ign oreSearch())
35 context->addConsoleMessage(ConsoleMessage::create(JSMessageSource, Warni ngMessageLevel, "Cache.match() does not support 'ignoreSearch' option yet. See h ttp://crbug.com/520784"));
36 if (options.ignoreMethod())
37 context->addConsoleMessage(ConsoleMessage::create(JSMessageSource, Warni ngMessageLevel, "Cache.match() does not support 'ignoreMethod' option yet. See h ttp://crbug.com/482256"));
38 if (options.ignoreVary())
39 context->addConsoleMessage(ConsoleMessage::create(JSMessageSource, Warni ngMessageLevel, "Cache.match() does not support 'ignoreVary' option yet. See htt p://crbug.com/499216"));
40 }
41
42 // FIXME: Consider using CallbackPromiseAdapter. 31 // FIXME: Consider using CallbackPromiseAdapter.
43 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { 32 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks {
44 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); 33 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks);
45 public: 34 public:
46 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver) 35 explicit CacheMatchCallbacks(ScriptPromiseResolver* resolver)
47 : m_resolver(resolver) { } 36 : m_resolver(resolver) { }
48 37
49 void onSuccess(const WebServiceWorkerResponse& webResponse) override 38 void onSuccess(const WebServiceWorkerResponse& webResponse) override
50 { 39 {
51 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex t()->activeDOMObjectsAreStopped()) 40 if (!m_resolver->getExecutionContext() || m_resolver->getExecutionContex t()->activeDOMObjectsAreStopped())
(...skipping 408 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 Request* newRequest = Request::create(scriptState, request.getAsUSVString(), exceptionState); 449 Request* newRequest = Request::create(scriptState, request.getAsUSVString(), exceptionState);
461 if (exceptionState.hadException()) 450 if (exceptionState.hadException())
462 return ScriptPromise(); 451 return ScriptPromise();
463 return keysImpl(scriptState, newRequest, options); 452 return keysImpl(scriptState, newRequest, options);
464 } 453 }
465 454
466 // static 455 // static
467 WebServiceWorkerCache::QueryParams Cache::toWebQueryParams(const CacheQueryOptio ns& options) 456 WebServiceWorkerCache::QueryParams Cache::toWebQueryParams(const CacheQueryOptio ns& options)
468 { 457 {
469 WebServiceWorkerCache::QueryParams webQueryParams; 458 WebServiceWorkerCache::QueryParams webQueryParams;
470 webQueryParams.ignoreSearch = options.ignoreSearch() && RuntimeEnabledFeatur es::cacheIgnoreSearchOptionEnabled(); 459 webQueryParams.ignoreSearch = options.ignoreSearch();
471 webQueryParams.ignoreMethod = options.ignoreMethod(); 460 webQueryParams.ignoreMethod = options.ignoreMethod();
472 webQueryParams.ignoreVary = options.ignoreVary(); 461 webQueryParams.ignoreVary = options.ignoreVary();
473 webQueryParams.cacheName = options.cacheName(); 462 webQueryParams.cacheName = options.cacheName();
474 return webQueryParams; 463 return webQueryParams;
475 } 464 }
476 465
477 Cache::Cache(GlobalFetch::ScopedFetcher* fetcher, std::unique_ptr<WebServiceWork erCache> webCache) 466 Cache::Cache(GlobalFetch::ScopedFetcher* fetcher, std::unique_ptr<WebServiceWork erCache> webCache)
478 : m_scopedFetcher(fetcher) 467 : m_scopedFetcher(fetcher)
479 , m_webCache(std::move(webCache)) 468 , m_webCache(std::move(webCache))
480 { 469 {
481 } 470 }
482 471
483 DEFINE_TRACE(Cache) 472 DEFINE_TRACE(Cache)
484 { 473 {
485 visitor->trace(m_scopedFetcher); 474 visitor->trace(m_scopedFetcher);
486 } 475 }
487 476
488 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options) 477 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options)
489 { 478 {
490 WebServiceWorkerRequest webRequest; 479 WebServiceWorkerRequest webRequest;
491 request->populateWebServiceWorkerRequest(webRequest); 480 request->populateWebServiceWorkerRequest(webRequest);
492 checkCacheQueryOptions(options, scriptState->getExecutionContext());
493 481
494 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 482 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
495 const ScriptPromise promise = resolver->promise(); 483 const ScriptPromise promise = resolver->promise();
496 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { 484 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) {
497 resolver->resolve(); 485 resolver->resolve();
498 return promise; 486 return promise;
499 } 487 }
500 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW ebQueryParams(options)); 488 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW ebQueryParams(options));
501 return promise; 489 return promise;
502 } 490 }
503 491
504 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState) 492 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState)
505 { 493 {
506 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 494 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
507 const ScriptPromise promise = resolver->promise(); 495 const ScriptPromise promise = resolver->promise();
508 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), WebS erviceWorkerRequest(), WebServiceWorkerCache::QueryParams()); 496 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), WebS erviceWorkerRequest(), WebServiceWorkerCache::QueryParams());
509 return promise; 497 return promise;
510 } 498 }
511 499
512 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque st, const CacheQueryOptions& options) 500 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque st, const CacheQueryOptions& options)
513 { 501 {
514 WebServiceWorkerRequest webRequest; 502 WebServiceWorkerRequest webRequest;
515 request->populateWebServiceWorkerRequest(webRequest); 503 request->populateWebServiceWorkerRequest(webRequest);
516 checkCacheQueryOptions(options, scriptState->getExecutionContext());
517 504
518 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 505 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
519 const ScriptPromise promise = resolver->promise(); 506 const ScriptPromise promise = resolver->promise();
520 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { 507 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) {
521 resolver->resolve(HeapVector<Member<Response>>()); 508 resolver->resolve(HeapVector<Member<Response>>());
522 return promise; 509 return promise;
523 } 510 }
524 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR equest, toWebQueryParams(options)); 511 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR equest, toWebQueryParams(options));
525 return promise; 512 return promise;
526 } 513 }
(...skipping 18 matching lines...) Expand all
545 } 532 }
546 533
547 return ScriptPromise::all(scriptState, promises).then(FetchResolvedForAdd::c reate(scriptState, this, requests)); 534 return ScriptPromise::all(scriptState, promises).then(FetchResolvedForAdd::c reate(scriptState, this, requests));
548 } 535 }
549 536
550 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request , const CacheQueryOptions& options) 537 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request , const CacheQueryOptions& options)
551 { 538 {
552 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); 539 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1));
553 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet e; 540 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet e;
554 request->populateWebServiceWorkerRequest(batchOperations[0].request); 541 request->populateWebServiceWorkerRequest(batchOperations[0].request);
555 checkCacheQueryOptions(options, scriptState->getExecutionContext());
556 batchOperations[0].matchParams = toWebQueryParams(options); 542 batchOperations[0].matchParams = toWebQueryParams(options);
557 543
558 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 544 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
559 const ScriptPromise promise = resolver->promise(); 545 const ScriptPromise promise = resolver->promise();
560 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { 546 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) {
561 resolver->resolve(false); 547 resolver->resolve(false);
562 return promise; 548 return promise;
563 } 549 }
564 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations ); 550 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations );
565 return promise; 551 return promise;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
620 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 606 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
621 const ScriptPromise promise = resolver->promise(); 607 const ScriptPromise promise = resolver->promise();
622 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), WebServic eWorkerRequest(), WebServiceWorkerCache::QueryParams()); 608 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), WebServic eWorkerRequest(), WebServiceWorkerCache::QueryParams());
623 return promise; 609 return promise;
624 } 610 }
625 611
626 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options) 612 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request, const CacheQueryOptions& options)
627 { 613 {
628 WebServiceWorkerRequest webRequest; 614 WebServiceWorkerRequest webRequest;
629 request->populateWebServiceWorkerRequest(webRequest); 615 request->populateWebServiceWorkerRequest(webRequest);
630 checkCacheQueryOptions(options, scriptState->getExecutionContext());
631 616
632 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ; 617 ScriptPromiseResolver* resolver = ScriptPromiseResolver::create(scriptState) ;
633 const ScriptPromise promise = resolver->promise(); 618 const ScriptPromise promise = resolver->promise();
634 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) { 619 if (request->method() != HTTPNames::GET && !options.ignoreMethod()) {
635 resolver->resolve(HeapVector<Member<Request>>()); 620 resolver->resolve(HeapVector<Member<Request>>());
636 return promise; 621 return promise;
637 } 622 }
638 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), webReques t, toWebQueryParams(options)); 623 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), webReques t, toWebQueryParams(options));
639 return promise; 624 return promise;
640 } 625 }
641 626
642 WebServiceWorkerCache* Cache::webCache() const 627 WebServiceWorkerCache* Cache::webCache() const
643 { 628 {
644 return m_webCache.get(); 629 return m_webCache.get();
645 } 630 }
646 631
647 } // namespace blink 632 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698