| 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/ScriptPromiseResolver.h" | 9 #include "bindings/core/v8/ScriptPromiseResolver.h" |
| 9 #include "bindings/core/v8/ScriptState.h" | 10 #include "bindings/core/v8/ScriptState.h" |
| 10 #include "bindings/core/v8/V8ThrowException.h" | 11 #include "bindings/core/v8/V8ThrowException.h" |
| 11 #include "core/dom/DOMException.h" | 12 #include "core/dom/DOMException.h" |
| 12 #include "modules/serviceworkers/Request.h" | 13 #include "modules/serviceworkers/Request.h" |
| 13 #include "modules/serviceworkers/Response.h" | 14 #include "modules/serviceworkers/Response.h" |
| 14 #include "public/platform/WebServiceWorkerCache.h" | 15 #include "public/platform/WebServiceWorkerCache.h" |
| 15 | 16 |
| 16 namespace blink { | 17 namespace blink { |
| 17 | 18 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 141 virtual void onError(WebServiceWorkerCacheError* reason) override | 142 virtual void onError(WebServiceWorkerCacheError* reason) override |
| 142 { | 143 { |
| 143 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); | 144 m_resolver->reject(Cache::domExceptionForCacheError(*reason)); |
| 144 m_resolver.clear(); | 145 m_resolver.clear(); |
| 145 } | 146 } |
| 146 | 147 |
| 147 private: | 148 private: |
| 148 RefPtr<ScriptPromiseResolver> m_resolver; | 149 RefPtr<ScriptPromiseResolver> m_resolver; |
| 149 }; | 150 }; |
| 150 | 151 |
| 151 ScriptPromise rejectForCacheError(ScriptState* scriptState, WebServiceWorkerCach
eError error) | |
| 152 { | |
| 153 return ScriptPromise::rejectWithDOMException(scriptState, Cache::domExceptio
nForCacheError(error)); | |
| 154 } | |
| 155 | |
| 156 ScriptPromise rejectAsNotImplemented(ScriptState* scriptState) | 152 ScriptPromise rejectAsNotImplemented(ScriptState* scriptState) |
| 157 { | 153 { |
| 158 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::crea
te(NotSupportedError, "Cache is not implemented")); | 154 return ScriptPromise::rejectWithDOMException(scriptState, DOMException::crea
te(NotSupportedError, "Cache is not implemented")); |
| 159 } | 155 } |
| 160 | 156 |
| 161 } // namespace | 157 } // namespace |
| 162 | 158 |
| 163 Cache* Cache::create(WebServiceWorkerCache* webCache) | 159 Cache* Cache::create(WebServiceWorkerCache* webCache) |
| 164 { | 160 { |
| 165 return new Cache(webCache); | 161 return new Cache(webCache); |
| 166 } | 162 } |
| 167 | 163 |
| 168 ScriptPromise Cache::match(ScriptState* scriptState, Request* request, const Cac
heQueryOptions& options) | 164 ScriptPromise Cache::match(ScriptState* scriptState, Request* request, const Cac
heQueryOptions& options) |
| 169 { | 165 { |
| 170 return matchImpl(scriptState, request, options); | 166 return matchImpl(scriptState, request, options); |
| 171 } | 167 } |
| 172 | 168 |
| 173 ScriptPromise Cache::match(ScriptState* scriptState, const String& requestString
, const CacheQueryOptions& options) | 169 ScriptPromise Cache::match(ScriptState* scriptState, const String& requestString
, const CacheQueryOptions& options, ExceptionState& exceptionState) |
| 174 { | 170 { |
| 175 TrackExceptionState exceptionState; | |
| 176 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); | 171 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); |
| 177 if (exceptionState.hadException()) { | 172 if (exceptionState.hadException()) |
| 178 // FIXME: We should throw the caught error. | 173 return ScriptPromise(); |
| 179 return rejectForCacheError(scriptState, WebServiceWorkerCacheErrorNotFou
nd); | |
| 180 } | |
| 181 return matchImpl(scriptState, request, options); | 174 return matchImpl(scriptState, request, options); |
| 182 } | 175 } |
| 183 | 176 |
| 184 ScriptPromise Cache::matchAll(ScriptState* scriptState, Request* request, const
CacheQueryOptions& options) | 177 ScriptPromise Cache::matchAll(ScriptState* scriptState, Request* request, const
CacheQueryOptions& options) |
| 185 { | 178 { |
| 186 return matchAllImpl(scriptState, request, options); | 179 return matchAllImpl(scriptState, request, options); |
| 187 } | 180 } |
| 188 | 181 |
| 189 ScriptPromise Cache::matchAll(ScriptState* scriptState, const String& requestStr
ing, const CacheQueryOptions& options) | 182 ScriptPromise Cache::matchAll(ScriptState* scriptState, const String& requestStr
ing, const CacheQueryOptions& options, ExceptionState& exceptionState) |
| 190 { | 183 { |
| 191 TrackExceptionState exceptionState; | |
| 192 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); | 184 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); |
| 193 if (exceptionState.hadException()) { | 185 if (exceptionState.hadException()) |
| 194 // FIXME: We should throw the caught error. | 186 return ScriptPromise(); |
| 195 return rejectForCacheError(scriptState, WebServiceWorkerCacheErrorNotFou
nd); | |
| 196 } | |
| 197 return matchAllImpl(scriptState, request, options); | 187 return matchAllImpl(scriptState, request, options); |
| 198 } | 188 } |
| 199 | 189 |
| 200 ScriptPromise Cache::add(ScriptState* scriptState, Request* request) | 190 ScriptPromise Cache::add(ScriptState* scriptState, Request* request) |
| 201 { | 191 { |
| 202 return addImpl(scriptState, request); | 192 return addImpl(scriptState, request); |
| 203 } | 193 } |
| 204 | 194 |
| 205 ScriptPromise Cache::add(ScriptState* scriptState, const String& requestString) | 195 ScriptPromise Cache::add(ScriptState* scriptState, const String& requestString,
ExceptionState& exceptionState) |
| 206 { | 196 { |
| 207 TrackExceptionState exceptionState; | |
| 208 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); | 197 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); |
| 209 if (exceptionState.hadException()) { | 198 if (exceptionState.hadException()) |
| 210 // FIXME: We should throw the caught error. | 199 return ScriptPromise(); |
| 211 return rejectForCacheError(scriptState, WebServiceWorkerCacheErrorNotFou
nd); | |
| 212 } | |
| 213 return addImpl(scriptState, request); | 200 return addImpl(scriptState, request); |
| 214 } | 201 } |
| 215 | 202 |
| 216 ScriptPromise Cache::addAll(ScriptState* scriptState, const Vector<ScriptValue>&
rawRequests) | 203 ScriptPromise Cache::addAll(ScriptState* scriptState, const Vector<ScriptValue>&
rawRequests) |
| 217 { | 204 { |
| 218 // FIXME: Implement this. | 205 // FIXME: Implement this. |
| 219 return rejectAsNotImplemented(scriptState); | 206 return rejectAsNotImplemented(scriptState); |
| 220 } | 207 } |
| 221 | 208 |
| 222 ScriptPromise Cache::deleteFunction(ScriptState* scriptState, Request* request,
const CacheQueryOptions& options) | 209 ScriptPromise Cache::deleteFunction(ScriptState* scriptState, Request* request,
const CacheQueryOptions& options) |
| 223 { | 210 { |
| 224 return deleteImpl(scriptState, request, options); | 211 return deleteImpl(scriptState, request, options); |
| 225 } | 212 } |
| 226 | 213 |
| 227 ScriptPromise Cache::deleteFunction(ScriptState* scriptState, const String& requ
estString, const CacheQueryOptions& options) | 214 ScriptPromise Cache::deleteFunction(ScriptState* scriptState, const String& requ
estString, const CacheQueryOptions& options, ExceptionState& exceptionState) |
| 228 { | 215 { |
| 229 TrackExceptionState exceptionState; | |
| 230 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); | 216 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); |
| 231 if (exceptionState.hadException()) { | 217 if (exceptionState.hadException()) |
| 232 // FIXME: We should throw the caught error. | 218 return ScriptPromise(); |
| 233 return rejectForCacheError(scriptState, WebServiceWorkerCacheErrorNotFou
nd); | |
| 234 } | |
| 235 return deleteImpl(scriptState, request, options); | 219 return deleteImpl(scriptState, request, options); |
| 236 } | 220 } |
| 237 | 221 |
| 238 ScriptPromise Cache::put(ScriptState* scriptState, Request* request, Response* r
esponse) | 222 ScriptPromise Cache::put(ScriptState* scriptState, Request* request, Response* r
esponse) |
| 239 { | 223 { |
| 240 return putImpl(scriptState, request, response); | 224 return putImpl(scriptState, request, response); |
| 241 } | 225 } |
| 242 | 226 |
| 243 ScriptPromise Cache::put(ScriptState* scriptState, const String& requestString,
Response* response) | 227 ScriptPromise Cache::put(ScriptState* scriptState, const String& requestString,
Response* response, ExceptionState& exceptionState) |
| 244 { | 228 { |
| 245 TrackExceptionState exceptionState; | |
| 246 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); | 229 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); |
| 247 if (exceptionState.hadException()) { | 230 if (exceptionState.hadException()) |
| 248 // FIXME: We should throw the caught error. | 231 return ScriptPromise(); |
| 249 return rejectForCacheError(scriptState, WebServiceWorkerCacheErrorNotFou
nd); | |
| 250 } | |
| 251 return putImpl(scriptState, request, response); | 232 return putImpl(scriptState, request, response); |
| 252 } | 233 } |
| 253 | 234 |
| 254 ScriptPromise Cache::keys(ScriptState* scriptState) | 235 ScriptPromise Cache::keys(ScriptState* scriptState) |
| 255 { | 236 { |
| 256 return keysImpl(scriptState); | 237 return keysImpl(scriptState); |
| 257 } | 238 } |
| 258 | 239 |
| 259 ScriptPromise Cache::keys(ScriptState* scriptState, Request* request, const Cach
eQueryOptions& options) | 240 ScriptPromise Cache::keys(ScriptState* scriptState, Request* request, const Cach
eQueryOptions& options) |
| 260 { | 241 { |
| 261 return keysImpl(scriptState, request, options); | 242 return keysImpl(scriptState, request, options); |
| 262 } | 243 } |
| 263 | 244 |
| 264 ScriptPromise Cache::keys(ScriptState* scriptState, const String& requestString,
const CacheQueryOptions& options) | 245 ScriptPromise Cache::keys(ScriptState* scriptState, const String& requestString,
const CacheQueryOptions& options, ExceptionState& exceptionState) |
| 265 { | 246 { |
| 266 TrackExceptionState exceptionState; | |
| 267 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); | 247 Request* request = Request::create(scriptState->executionContext(), requestS
tring, exceptionState); |
| 268 if (exceptionState.hadException()) { | 248 if (exceptionState.hadException()) |
| 269 // FIXME: We should throw the caught error. | 249 return ScriptPromise(); |
| 270 return rejectForCacheError(scriptState, WebServiceWorkerCacheErrorNotFou
nd); | |
| 271 } | |
| 272 return keysImpl(scriptState, request, options); | 250 return keysImpl(scriptState, request, options); |
| 273 } | 251 } |
| 274 | 252 |
| 275 Cache::Cache(WebServiceWorkerCache* webCache) | 253 Cache::Cache(WebServiceWorkerCache* webCache) |
| 276 : m_webCache(adoptPtr(webCache)) { } | 254 : m_webCache(adoptPtr(webCache)) { } |
| 277 | 255 |
| 278 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) | 256 ScriptPromise Cache::matchImpl(ScriptState* scriptState, const Request* request,
const CacheQueryOptions& options) |
| 279 { | 257 { |
| 280 WebServiceWorkerRequest webRequest; | 258 WebServiceWorkerRequest webRequest; |
| 281 request->populateWebServiceWorkerRequest(webRequest); | 259 request->populateWebServiceWorkerRequest(webRequest); |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 369 WebServiceWorkerRequest webRequest; | 347 WebServiceWorkerRequest webRequest; |
| 370 request->populateWebServiceWorkerRequest(webRequest); | 348 request->populateWebServiceWorkerRequest(webRequest); |
| 371 | 349 |
| 372 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); | 350 RefPtr<ScriptPromiseResolver> resolver = ScriptPromiseResolver::create(scrip
tState); |
| 373 const ScriptPromise promise = resolver->promise(); | 351 const ScriptPromise promise = resolver->promise(); |
| 374 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ
ueryParams(options)); | 352 m_webCache->dispatchKeys(new CacheWithRequestsCallbacks(resolver), 0, toWebQ
ueryParams(options)); |
| 375 return promise; | 353 return promise; |
| 376 } | 354 } |
| 377 | 355 |
| 378 } // namespace blink | 356 } // namespace blink |
| OLD | NEW |