| 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 "config.h" | 5 #include "config.h" |
| 6 #include "modules/serviceworkers/Cache.h" | 6 #include "modules/serviceworkers/Cache.h" |
| 7 | 7 |
| 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/V8ThrowException.h" | 11 #include "bindings/core/v8/V8ThrowException.h" |
| 12 #include "core/dom/DOMException.h" | 12 #include "core/dom/DOMException.h" |
| 13 #include "modules/fetch/BodyStreamBuffer.h" | 13 #include "modules/fetch/BodyStreamBuffer.h" |
| 14 #include "modules/fetch/Request.h" | 14 #include "modules/fetch/Request.h" |
| 15 #include "modules/fetch/Response.h" | 15 #include "modules/fetch/Response.h" |
| 16 #include "public/platform/WebServiceWorkerCache.h" | 16 #include "public/platform/WebServiceWorkerCache.h" |
| 17 | 17 |
| 18 namespace blink { | 18 namespace blink { |
| 19 | 19 |
| 20 namespace { | 20 namespace { |
| 21 | 21 |
| 22 // FIXME: Consider using CallbackPromiseAdapter. | 22 // FIXME: Consider using CallbackPromiseAdapter. |
| 23 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { | 23 class CacheMatchCallbacks : public WebServiceWorkerCache::CacheMatchCallbacks { |
| 24 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); | 24 WTF_MAKE_NONCOPYABLE(CacheMatchCallbacks); |
| 25 public: | 25 public: |
| 26 CacheMatchCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) | 26 CacheMatchCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) |
| 27 : m_resolver(resolver) { } | 27 : m_resolver(resolver) { } |
| 28 | 28 |
| 29 virtual void onSuccess(WebServiceWorkerResponse* webResponse) override | 29 virtual void onSuccess(WebServiceWorkerResponse* webResponse) override |
| 30 { | 30 { |
| 31 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio
nContext(), *webResponse)); | 31 m_resolver->resolve(Response::create(m_resolver->scriptState()->executio
nContext(), *webResponse)); |
| 32 m_resolver.clear(); | 32 m_resolver.clear(); |
| 33 } | 33 } |
| 34 | 34 |
| 35 virtual void onError(WebServiceWorkerCacheError* reason) override | 35 virtual void onError(WebServiceWorkerCacheError* reason) override |
| 36 { | 36 { |
| 37 if (*reason == WebServiceWorkerCacheErrorNotFound) | 37 if (*reason == WebServiceWorkerCacheErrorNotFound) |
| 38 m_resolver->resolve(); | 38 m_resolver->resolve(); |
| 39 else | 39 else |
| 40 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); | 40 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); |
| 41 m_resolver.clear(); | 41 m_resolver.clear(); |
| 42 } | 42 } |
| 43 | 43 |
| 44 private: | 44 private: |
| 45 RefPtr<ScriptPromiseResolver> m_resolver; | 45 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; |
| 46 }; | 46 }; |
| 47 | 47 |
| 48 // FIXME: Consider using CallbackPromiseAdapter. | 48 // FIXME: Consider using CallbackPromiseAdapter. |
| 49 class CacheWithResponsesCallbacks : public WebServiceWorkerCache::CacheWithRespo
nsesCallbacks { | 49 class CacheWithResponsesCallbacks : public WebServiceWorkerCache::CacheWithRespo
nsesCallbacks { |
| 50 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); | 50 WTF_MAKE_NONCOPYABLE(CacheWithResponsesCallbacks); |
| 51 public: | 51 public: |
| 52 CacheWithResponsesCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) | 52 CacheWithResponsesCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> re
solver) |
| 53 : m_resolver(resolver) { } | 53 : m_resolver(resolver) { } |
| 54 | 54 |
| 55 virtual void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) ov
erride | 55 virtual void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) ov
erride |
| 56 { | 56 { |
| 57 HeapVector<Member<Response> > responses; | 57 HeapVector<Member<Response> > responses; |
| 58 for (size_t i = 0; i < webResponses->size(); ++i) | 58 for (size_t i = 0; i < webResponses->size(); ++i) |
| 59 responses.append(Response::create(m_resolver->scriptState()->executi
onContext(), (*webResponses)[i])); | 59 responses.append(Response::create(m_resolver->scriptState()->executi
onContext(), (*webResponses)[i])); |
| 60 m_resolver->resolve(responses); | 60 m_resolver->resolve(responses); |
| 61 m_resolver.clear(); | 61 m_resolver.clear(); |
| 62 } | 62 } |
| 63 | 63 |
| 64 virtual void onError(WebServiceWorkerCacheError* reason) override | 64 virtual void onError(WebServiceWorkerCacheError* reason) override |
| 65 { | 65 { |
| 66 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); | 66 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); |
| 67 m_resolver.clear(); | 67 m_resolver.clear(); |
| 68 } | 68 } |
| 69 | 69 |
| 70 protected: | 70 protected: |
| 71 RefPtr<ScriptPromiseResolver> m_resolver; | 71 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; |
| 72 }; | 72 }; |
| 73 | 73 |
| 74 // FIXME: Consider using CallbackPromiseAdapter. | 74 // FIXME: Consider using CallbackPromiseAdapter. |
| 75 class CacheAddOrPutCallbacks : public CacheWithResponsesCallbacks { | 75 class CacheAddOrPutCallbacks : public CacheWithResponsesCallbacks { |
| 76 WTF_MAKE_NONCOPYABLE(CacheAddOrPutCallbacks); | 76 WTF_MAKE_NONCOPYABLE(CacheAddOrPutCallbacks); |
| 77 public: | 77 public: |
| 78 CacheAddOrPutCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) | 78 CacheAddOrPutCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolve
r) |
| 79 : CacheWithResponsesCallbacks(resolver) { } | 79 : CacheWithResponsesCallbacks(resolver) { } |
| 80 | 80 |
| 81 virtual void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) ov
erride | 81 virtual void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) ov
erride |
| 82 { | 82 { |
| 83 // FIXME: Since response is ignored, consider simplifying public API. | 83 // FIXME: Since response is ignored, consider simplifying public API. |
| 84 m_resolver->resolve(); | 84 m_resolver->resolve(); |
| 85 m_resolver.clear(); | 85 m_resolver.clear(); |
| 86 } | 86 } |
| 87 }; | 87 }; |
| 88 | 88 |
| 89 // FIXME: Consider using CallbackPromiseAdapter. | 89 // FIXME: Consider using CallbackPromiseAdapter. |
| 90 class CacheDeleteCallback : public WebServiceWorkerCache::CacheWithResponsesCall
backs { | 90 class CacheDeleteCallback : public WebServiceWorkerCache::CacheWithResponsesCall
backs { |
| 91 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); | 91 WTF_MAKE_NONCOPYABLE(CacheDeleteCallback); |
| 92 public: | 92 public: |
| 93 CacheDeleteCallback(PassRefPtr<ScriptPromiseResolver> resolver) | 93 CacheDeleteCallback(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver) |
| 94 : m_resolver(resolver) { } | 94 : m_resolver(resolver) { } |
| 95 | 95 |
| 96 virtual void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) ov
erride | 96 virtual void onSuccess(WebVector<WebServiceWorkerResponse>* webResponses) ov
erride |
| 97 { | 97 { |
| 98 // FIXME: Since response is ignored, consider simplifying public API. | 98 // FIXME: Since response is ignored, consider simplifying public API. |
| 99 m_resolver->resolve(true); | 99 m_resolver->resolve(true); |
| 100 m_resolver.clear(); | 100 m_resolver.clear(); |
| 101 } | 101 } |
| 102 | 102 |
| 103 virtual void onError(WebServiceWorkerCacheError* reason) override | 103 virtual void onError(WebServiceWorkerCacheError* reason) override |
| 104 { | 104 { |
| 105 if (*reason == WebServiceWorkerCacheErrorNotFound) | 105 if (*reason == WebServiceWorkerCacheErrorNotFound) |
| 106 m_resolver->resolve(false); | 106 m_resolver->resolve(false); |
| 107 else | 107 else |
| 108 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); | 108 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); |
| 109 m_resolver.clear(); | 109 m_resolver.clear(); |
| 110 } | 110 } |
| 111 | 111 |
| 112 private: | 112 private: |
| 113 RefPtr<ScriptPromiseResolver> m_resolver; | 113 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; |
| 114 }; | 114 }; |
| 115 | 115 |
| 116 // FIXME: Consider using CallbackPromiseAdapter. | 116 // FIXME: Consider using CallbackPromiseAdapter. |
| 117 class CacheWithRequestsCallbacks : public WebServiceWorkerCache::CacheWithReques
tsCallbacks { | 117 class CacheWithRequestsCallbacks : public WebServiceWorkerCache::CacheWithReques
tsCallbacks { |
| 118 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); | 118 WTF_MAKE_NONCOPYABLE(CacheWithRequestsCallbacks); |
| 119 public: | 119 public: |
| 120 CacheWithRequestsCallbacks(PassRefPtr<ScriptPromiseResolver> resolver) | 120 CacheWithRequestsCallbacks(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> res
olver) |
| 121 : m_resolver(resolver) { } | 121 : m_resolver(resolver) { } |
| 122 | 122 |
| 123 virtual void onSuccess(WebVector<WebServiceWorkerRequest>* webRequests) over
ride | 123 virtual void onSuccess(WebVector<WebServiceWorkerRequest>* webRequests) over
ride |
| 124 { | 124 { |
| 125 HeapVector<Member<Request> > requests; | 125 HeapVector<Member<Request> > requests; |
| 126 for (size_t i = 0; i < webRequests->size(); ++i) | 126 for (size_t i = 0; i < webRequests->size(); ++i) |
| 127 requests.append(Request::create(m_resolver->scriptState()->execution
Context(), (*webRequests)[i])); | 127 requests.append(Request::create(m_resolver->scriptState()->execution
Context(), (*webRequests)[i])); |
| 128 m_resolver->resolve(requests); | 128 m_resolver->resolve(requests); |
| 129 m_resolver.clear(); | 129 m_resolver.clear(); |
| 130 } | 130 } |
| 131 | 131 |
| 132 virtual void onError(WebServiceWorkerCacheError* reason) override | 132 virtual void onError(WebServiceWorkerCacheError* reason) override |
| 133 { | 133 { |
| 134 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); | 134 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); |
| 135 m_resolver.clear(); | 135 m_resolver.clear(); |
| 136 } | 136 } |
| 137 | 137 |
| 138 private: | 138 private: |
| 139 RefPtr<ScriptPromiseResolver> m_resolver; | 139 RefPtrWillBePersistent<ScriptPromiseResolver> m_resolver; |
| 140 }; | 140 }; |
| 141 | 141 |
| 142 ScriptPromise rejectAsNotImplemented(ScriptState* scriptState) | 142 ScriptPromise rejectAsNotImplemented(ScriptState* scriptState) |
| 143 { | 143 { |
| 144 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::crea
te(NotSupportedError, "Cache is not implemented")); | 144 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::crea
te(NotSupportedError, "Cache is not implemented")); |
| 145 } | 145 } |
| 146 | 146 |
| 147 } // namespace | 147 } // namespace |
| 148 | 148 |
| 149 class Cache::AsyncPutBatch final : public BodyStreamBuffer::BlobHandleCreatorCli
ent { | 149 class Cache::AsyncPutBatch final : public BodyStreamBuffer::BlobHandleCreatorCli
ent { |
| 150 public: | 150 public: |
| 151 AsyncPutBatch(PassRefPtr<ScriptPromiseResolver> resolver, Cache* cache, Requ
est* request, Response* response) | 151 AsyncPutBatch(PassRefPtrWillBeRawPtr<ScriptPromiseResolver> resolver, Cache*
cache, Request* request, Response* response) |
| 152 : m_resolver(resolver) | 152 : m_resolver(resolver) |
| 153 , m_cache(cache) | 153 , m_cache(cache) |
| 154 { | 154 { |
| 155 request->populateWebServiceWorkerRequest(m_webRequest); | 155 request->populateWebServiceWorkerRequest(m_webRequest); |
| 156 response->populateWebServiceWorkerResponse(m_webResponse); | 156 response->populateWebServiceWorkerResponse(m_webResponse); |
| 157 } | 157 } |
| 158 ~AsyncPutBatch() override { } | 158 ~AsyncPutBatch() override { } |
| 159 void didCreateBlobHandle(PassRefPtr<BlobDataHandle> handle) override | 159 void didCreateBlobHandle(PassRefPtr<BlobDataHandle> handle) override |
| 160 { | 160 { |
| 161 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(
1)); | 161 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(
1)); |
| 162 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeP
ut; | 162 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeP
ut; |
| 163 batchOperations[0].request = m_webRequest; | 163 batchOperations[0].request = m_webRequest; |
| 164 batchOperations[0].response = m_webResponse; | 164 batchOperations[0].response = m_webResponse; |
| 165 batchOperations[0].response.setBlobDataHandle(handle); | 165 batchOperations[0].response.setBlobDataHandle(handle); |
| 166 m_cache->webCache()->dispatchBatch(new CacheAddOrPutCallbacks(m_resolver
), batchOperations); | 166 m_cache->webCache()->dispatchBatch(new CacheAddOrPutCallbacks(m_resolver
.get()), batchOperations); |
| 167 cleanup(); | 167 cleanup(); |
| 168 } | 168 } |
| 169 void didFail(PassRefPtrWillBeRawPtr<DOMException> exception) override | 169 void didFail(PassRefPtrWillBeRawPtr<DOMException> exception) override |
| 170 { | 170 { |
| 171 ScriptState* state = m_resolver->scriptState(); | 171 ScriptState* state = m_resolver->scriptState(); |
| 172 ScriptState::Scope scope(state); | 172 ScriptState::Scope scope(state); |
| 173 m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), e
xception->toString())); | 173 m_resolver->reject(V8ThrowException::createTypeError(state->isolate(), e
xception->toString())); |
| 174 cleanup(); | 174 cleanup(); |
| 175 } | 175 } |
| 176 |
| 176 void trace(Visitor* visitor) override | 177 void trace(Visitor* visitor) override |
| 177 { | 178 { |
| 178 BlobHandleCreatorClient::trace(visitor); | 179 BlobHandleCreatorClient::trace(visitor); |
| 180 visitor->trace(m_resolver); |
| 179 visitor->trace(m_cache); | 181 visitor->trace(m_cache); |
| 180 } | 182 } |
| 181 | 183 |
| 182 private: | 184 private: |
| 183 void cleanup() | 185 void cleanup() |
| 184 { | 186 { |
| 185 m_resolver = nullptr; | 187 m_resolver = nullptr; |
| 186 m_cache = nullptr; | 188 m_cache = nullptr; |
| 187 } | 189 } |
| 188 RefPtr<ScriptPromiseResolver> m_resolver; | 190 RefPtrWillBeMember<ScriptPromiseResolver> m_resolver; |
| 189 Member<Cache> m_cache; | 191 Member<Cache> m_cache; |
| 190 WebServiceWorkerRequest m_webRequest; | 192 WebServiceWorkerRequest m_webRequest; |
| 191 WebServiceWorkerResponse m_webResponse; | 193 WebServiceWorkerResponse m_webResponse; |
| 192 }; | 194 }; |
| 193 | 195 |
| 194 Cache* Cache::create(WebServiceWorkerCache* webCache) | 196 Cache* Cache::create(WebServiceWorkerCache* webCache) |
| 195 { | 197 { |
| 196 return new Cache(webCache); | 198 return new Cache(webCache); |
| 197 } | 199 } |
| 198 | 200 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 286 } | 288 } |
| 287 | 289 |
| 288 Cache::Cache(WebServiceWorkerCache* webCache) | 290 Cache::Cache(WebServiceWorkerCache* webCache) |
| 289 : m_webCache(adoptPtr(webCache)) { } | 291 : m_webCache(adoptPtr(webCache)) { } |
| 290 | 292 |
| 291 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) | 293 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) |
| 292 { | 294 { |
| 293 WebServiceWorkerRequest webRequest; | 295 WebServiceWorkerRequest webRequest; |
| 294 request->populateWebServiceWorkerRequest(webRequest); | 296 request->populateWebServiceWorkerRequest(webRequest); |
| 295 | 297 |
| 296 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 298 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 297 const ScriptPromise promise = resolver->promise(); | 299 const ScriptPromise promise = resolver->promise(); |
| 298 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW
ebQueryParams(options)); | 300 m_webCache->dispatchMatch(new CacheMatchCallbacks(resolver), webRequest, toW
ebQueryParams(options)); |
| 299 return promise; | 301 return promise; |
| 300 } | 302 } |
| 301 | 303 |
| 302 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque
st, const CacheQueryOptions& options) | 304 ScriptPromise Cache::matchAllImpl(ScriptState* scriptState, const Request* reque
st, const CacheQueryOptions& options) |
| 303 { | 305 { |
| 304 WebServiceWorkerRequest webRequest; | 306 WebServiceWorkerRequest webRequest; |
| 305 request->populateWebServiceWorkerRequest(webRequest); | 307 request->populateWebServiceWorkerRequest(webRequest); |
| 306 | 308 |
| 307 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 309 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 308 const ScriptPromise promise = resolver->promise(); | 310 const ScriptPromise promise = resolver->promise(); |
| 309 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR
equest, toWebQueryParams(options)); | 311 m_webCache->dispatchMatchAll(new CacheWithResponsesCallbacks(resolver), webR
equest, toWebQueryParams(options)); |
| 310 return promise; | 312 return promise; |
| 311 } | 313 } |
| 312 | 314 |
| 313 ScriptPromise Cache::addImpl(ScriptState* scriptState, const Request*) | 315 ScriptPromise Cache::addImpl(ScriptState* scriptState, const Request*) |
| 314 { | 316 { |
| 315 // FIXME: Implement this. | 317 // FIXME: Implement this. |
| 316 return rejectAsNotImplemented(scriptState); | 318 return rejectAsNotImplemented(scriptState); |
| 317 } | 319 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 337 } | 339 } |
| 338 } | 340 } |
| 339 | 341 |
| 340 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request
, const CacheQueryOptions& options) | 342 ScriptPromise Cache::deleteImpl(ScriptState* scriptState, const Request* request
, const CacheQueryOptions& options) |
| 341 { | 343 { |
| 342 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); | 344 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); |
| 343 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet
e; | 345 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypeDelet
e; |
| 344 request->populateWebServiceWorkerRequest(batchOperations[0].request); | 346 request->populateWebServiceWorkerRequest(batchOperations[0].request); |
| 345 batchOperations[0].matchParams = toWebQueryParams(options); | 347 batchOperations[0].matchParams = toWebQueryParams(options); |
| 346 | 348 |
| 347 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 349 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 348 const ScriptPromise promise = resolver->promise(); | 350 const ScriptPromise promise = resolver->promise(); |
| 349 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations
); | 351 m_webCache->dispatchBatch(new CacheDeleteCallback(resolver), batchOperations
); |
| 350 return promise; | 352 return promise; |
| 351 } | 353 } |
| 352 | 354 |
| 353 ScriptPromise Cache::putImpl(ScriptState* scriptState, Request* request, Respons
e* response) | 355 ScriptPromise Cache::putImpl(ScriptState* scriptState, Request* request, Respons
e* response) |
| 354 { | 356 { |
| 355 KURL url(KURL(), request->url()); | 357 KURL url(KURL(), request->url()); |
| 356 if (!url.protocolIsInHTTPFamily()) | 358 if (!url.protocolIsInHTTPFamily()) |
| 357 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Request scheme '" + url.protocol() + "' is unsuppor
ted")); | 359 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Request scheme '" + url.protocol() + "' is unsuppor
ted")); |
| 358 if (request->method() != "GET") | 360 if (request->method() != "GET") |
| 359 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Request method '" + request->method() + "' is unsup
ported")); | 361 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Request method '" + request->method() + "' is unsup
ported")); |
| 360 if (request->hasBody() && request->bodyUsed()) | 362 if (request->hasBody() && request->bodyUsed()) |
| 361 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Request body is already used")); | 363 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Request body is already used")); |
| 362 if (response->hasBody() && response->bodyUsed()) | 364 if (response->hasBody() && response->bodyUsed()) |
| 363 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Response body is already used")); | 365 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Response body is already used")); |
| 364 if (response->internalBuffer() && response->streamAccessed()) | 366 if (response->internalBuffer() && response->streamAccessed()) |
| 365 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Storing the Response which .body is accessed is not
supported.")); | 367 return ScriptPromise::reject(scriptState, V8ThrowException::createTypeEr
ror(scriptState->isolate(), "Storing the Response which .body is accessed is not
supported.")); |
| 366 | 368 |
| 367 if (request->hasBody()) | 369 if (request->hasBody()) |
| 368 request->setBodyUsed(); | 370 request->setBodyUsed(); |
| 369 if (response->hasBody()) | 371 if (response->hasBody()) |
| 370 response->setBodyUsed(); | 372 response->setBodyUsed(); |
| 371 | 373 |
| 372 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 374 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 373 const ScriptPromise promise = resolver->promise(); | 375 const ScriptPromise promise = resolver->promise(); |
| 374 if (response->internalBuffer()) { | 376 if (response->internalBuffer()) { |
| 375 // If the response body type is stream, read the all data and create the | 377 // If the response body type is stream, read the all data and create the |
| 376 // blob handle and dispatch the put batch asynchronously. | 378 // blob handle and dispatch the put batch asynchronously. |
| 377 response->internalBuffer()->readAllAndCreateBlobHandle(response->interna
lContentTypeForBuffer(), new AsyncPutBatch(resolver, this, request, response)); | 379 response->internalBuffer()->readAllAndCreateBlobHandle(response->interna
lContentTypeForBuffer(), new AsyncPutBatch(resolver, this, request, response)); |
| 378 return promise; | 380 return promise; |
| 379 } | 381 } |
| 380 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); | 382 WebVector<WebServiceWorkerCache::BatchOperation> batchOperations(size_t(1)); |
| 381 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypePut; | 383 batchOperations[0].operationType = WebServiceWorkerCache::OperationTypePut; |
| 382 request->populateWebServiceWorkerRequest(batchOperations[0].request); | 384 request->populateWebServiceWorkerRequest(batchOperations[0].request); |
| 383 response->populateWebServiceWorkerResponse(batchOperations[0].response); | 385 response->populateWebServiceWorkerResponse(batchOperations[0].response); |
| 384 | 386 |
| 385 m_webCache->dispatchBatch(new CacheAddOrPutCallbacks(resolver), batchOperati
ons); | 387 m_webCache->dispatchBatch(new CacheAddOrPutCallbacks(resolver), batchOperati
ons); |
| 386 return promise; | 388 return promise; |
| 387 } | 389 } |
| 388 | 390 |
| 389 ScriptPromise Cache::keysImpl(ScriptState* scriptState) | 391 ScriptPromise Cache::keysImpl(ScriptState* scriptState) |
| 390 { | 392 { |
| 391 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 393 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 392 const ScriptPromise promise = resolver->promise(); | 394 const ScriptPromise promise = resolver->promise(); |
| 393 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, WebSer
viceWorkerCache::QueryParams()); | 395 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, WebSer
viceWorkerCache::QueryParams()); |
| 394 return promise; | 396 return promise; |
| 395 } | 397 } |
| 396 | 398 |
| 397 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) | 399 ScriptPromise Cache::keysImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) |
| 398 { | 400 { |
| 399 WebServiceWorkerRequest webRequest; | 401 WebServiceWorkerRequest webRequest; |
| 400 request->populateWebServiceWorkerRequest(webRequest); | 402 request->populateWebServiceWorkerRequest(webRequest); |
| 401 | 403 |
| 402 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 404 RefPtrWillBeRawPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::
create(scriptState); |
| 403 const ScriptPromise promise = resolver->promise(); | 405 const ScriptPromise promise = resolver->promise(); |
| 404 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ
ueryParams(options)); | 406 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ
ueryParams(options)); |
| 405 return promise; | 407 return promise; |
| 406 } | 408 } |
| 407 | 409 |
| 408 WebServiceWorkerCache* Cache::webCache() const | 410 WebServiceWorkerCache* Cache::webCache() const |
| 409 { | 411 { |
| 410 return m_webCache.get(); | 412 return m_webCache.get(); |
| 411 } | 413 } |
| 412 | 414 |
| 413 } // namespace blink | 415 } // namespace blink |
| OLD | NEW |