[Cache API] Add Cache and CacheStorage IDL definitions
authorcommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Aug 2017 05:06:13 +0000 (05:06 +0000)
committercommit-queue@webkit.org <commit-queue@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sat, 5 Aug 2017 05:06:13 +0000 (05:06 +0000)
https://bugs.webkit.org/show_bug.cgi?id=175201

Patch by Youenn Fablet <youenn@apple.com> on 2017-08-04
Reviewed by Brady Eidson.

LayoutTests/imported/w3c:

* web-platform-tests/service-workers/cache-storage/common.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/serviceworker/credentials.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-add.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-delete.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-keys.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-match.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-matchAll.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-put.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-storage-keys.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-storage-match.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/cache-storage.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/window/sandboxed-iframes.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-add.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-delete.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-keys.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-match.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-matchAll.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-put.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-storage-keys.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-storage-match.https-expected.txt: Added.
* web-platform-tests/service-workers/cache-storage/worker/cache-storage.https-expected.txt: Added.
* web-platform-tests/service-workers/stub-4.6.2-cache-expected.txt: Added.
* web-platform-tests/service-workers/stub-4.6.3-cache-storage-expected.txt: Added.

Source/JavaScriptCore:

* runtime/CommonIdentifiers.h:

Source/WebCore:

Covered by activated tests.
Adding IDLs as per https://www.w3.org/TR/service-workers-1/#idl-index.
Implementation is guarded by a runtime flag which is off by default.
It is off for DRT but on for WTR.

* CMakeLists.txt:
* DerivedSources.make:
* Modules/cache/Cache.cpp: Added.
(WebCore::Cache::match):
(WebCore::Cache::matchAll):
(WebCore::Cache::add):
(WebCore::Cache::addAll):
(WebCore::Cache::put):
(WebCore::Cache::remove):
(WebCore::Cache::keys):
* Modules/cache/Cache.h: Added.
(WebCore::Cache::create):
(WebCore::Cache::Cache):
* Modules/cache/Cache.idl: Added.
* Modules/cache/CacheQueryOptions.h: Added.
* Modules/cache/CacheQueryOptions.idl: Added.
* Modules/cache/CacheStorage.cpp: Added.
(WebCore::CacheStorage::match):
(WebCore::CacheStorage::has):
(WebCore::CacheStorage::open):
(WebCore::CacheStorage::remove):
(WebCore::CacheStorage::keys):
* Modules/cache/CacheStorage.h: Added.
(WebCore::CacheStorage::create):
* Modules/cache/CacheStorage.idl: Added.
* Modules/cache/DOMWindowCaches.cpp: Added.
(WebCore::DOMWindowCaches::DOMWindowCaches):
(WebCore::DOMWindowCaches::supplementName):
(WebCore::DOMWindowCaches::from):
(WebCore::DOMWindowCaches::caches):
(WebCore::DOMWindowCaches::caches const):
* Modules/cache/DOMWindowCaches.h: Added.
* Modules/cache/DOMWindowCaches.idl: Added.
* Modules/cache/WorkerGlobalScopeCaches.cpp: Added.
(WebCore::WorkerGlobalScopeCaches::supplementName):
(WebCore::WorkerGlobalScopeCaches::from):
(WebCore::WorkerGlobalScopeCaches::caches):
(WebCore::WorkerGlobalScopeCaches::caches const):
* Modules/cache/WorkerGlobalScopeCaches.h: Added.
* Modules/cache/WorkerGlobalScopeCaches.idl: Added.
* WebCore.xcodeproj/project.pbxproj:
* page/RuntimeEnabledFeatures.h:
(WebCore::RuntimeEnabledFeatures::setCacheAPIEnabled):
(WebCore::RuntimeEnabledFeatures::cacheAPIEnabled const):

Source/WebKit:

* Shared/WebPreferencesDefinitions.h:
* WebProcess/InjectedBundle/InjectedBundle.cpp:
(WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::updatePreferences):

Source/WebKitLegacy/mac:

* WebView/WebPreferenceKeysPrivate.h:
* WebView/WebPreferences.mm:
(+[WebPreferences initialize]):
(-[WebPreferences cacheAPIEnabled]):
(-[WebPreferences setCacheAPIEnabled:]):
* WebView/WebPreferencesPrivate.h:
* WebView/WebView.mm:
(-[WebView _preferencesChanged:]):

Tools:

* DumpRenderTree/mac/DumpRenderTree.mm:
(enableExperimentalFeatures):
(resetWebPreferencesToConsistentValues):
* WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
(WTR::InjectedBundle::beginTesting):
* WebKitTestRunner/InjectedBundle/TestRunner.cpp:
(WTR::TestRunner::setCacheAPIEnabled):
* WebKitTestRunner/InjectedBundle/TestRunner.h:

LayoutTests:

* TestExpectations:
* platform/ios-wk1/TestExpectations:
* platform/mac-wk1/TestExpectations:
* js/dom/global-constructors-attributes-dedicated-worker-expected.txt:
* platform/mac-highsierra/js/dom/global-constructors-attributes-expected.txt:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@220311 268f45cc-cd09-0410-ab3c-d52691b4dbfc

76 files changed:
LayoutTests/ChangeLog
LayoutTests/TestExpectations
LayoutTests/imported/w3c/ChangeLog
LayoutTests/imported/w3c/web-platform-tests/fetch/api/request/request-init-001.sub.html
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/common.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-add.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-delete.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-keys.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-match.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-matchAll.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-put.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage-keys.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage-match.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/sandboxed-iframes.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-add.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-delete.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-keys.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-match.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-matchAll.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-put.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage-keys.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage-match.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage.https-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/stub-4.6.2-cache-expected.txt [new file with mode: 0644]
LayoutTests/imported/w3c/web-platform-tests/service-workers/stub-4.6.3-cache-storage-expected.txt [new file with mode: 0644]
LayoutTests/js/dom/global-constructors-attributes-dedicated-worker-expected.txt
LayoutTests/platform/ios-wk1/TestExpectations
LayoutTests/platform/mac-highsierra/js/dom/global-constructors-attributes-expected.txt
LayoutTests/platform/mac-wk1/TestExpectations
LayoutTests/platform/mac-wk1/js/dom/global-constructors-attributes-dedicated-worker-expected.txt [new file with mode: 0644]
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/runtime/CommonIdentifiers.h
Source/WebCore/CMakeLists.txt
Source/WebCore/ChangeLog
Source/WebCore/DerivedSources.make
Source/WebCore/Modules/cache/Cache.cpp [new file with mode: 0644]
Source/WebCore/Modules/cache/Cache.h [new file with mode: 0644]
Source/WebCore/Modules/cache/Cache.idl [new file with mode: 0644]
Source/WebCore/Modules/cache/CacheQueryOptions.h [new file with mode: 0644]
Source/WebCore/Modules/cache/CacheQueryOptions.idl [new file with mode: 0644]
Source/WebCore/Modules/cache/CacheStorage.cpp [new file with mode: 0644]
Source/WebCore/Modules/cache/CacheStorage.h [new file with mode: 0644]
Source/WebCore/Modules/cache/CacheStorage.idl [new file with mode: 0644]
Source/WebCore/Modules/cache/DOMWindowCaches.cpp [new file with mode: 0644]
Source/WebCore/Modules/cache/DOMWindowCaches.h [new file with mode: 0644]
Source/WebCore/Modules/cache/DOMWindowCaches.idl [new file with mode: 0644]
Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.cpp [new file with mode: 0644]
Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.h [new file with mode: 0644]
Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.idl [new file with mode: 0644]
Source/WebCore/WebCore.xcodeproj/project.pbxproj
Source/WebCore/page/RuntimeEnabledFeatures.h
Source/WebKit/ChangeLog
Source/WebKit/Shared/WebPreferencesDefinitions.h
Source/WebKit/WebProcess/InjectedBundle/InjectedBundle.cpp
Source/WebKit/WebProcess/WebPage/WebPage.cpp
Source/WebKitLegacy/mac/ChangeLog
Source/WebKitLegacy/mac/WebView/WebPreferenceKeysPrivate.h
Source/WebKitLegacy/mac/WebView/WebPreferences.mm
Source/WebKitLegacy/mac/WebView/WebPreferencesPrivate.h
Source/WebKitLegacy/mac/WebView/WebView.mm
Tools/ChangeLog
Tools/DumpRenderTree/mac/DumpRenderTree.mm
Tools/WebKitTestRunner/InjectedBundle/InjectedBundle.cpp
Tools/WebKitTestRunner/InjectedBundle/TestRunner.cpp
Tools/WebKitTestRunner/InjectedBundle/TestRunner.h

index 9a11a0b..612a56b 100644 (file)
@@ -1,3 +1,16 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        * TestExpectations:
+        * platform/ios-wk1/TestExpectations:
+        * platform/mac-wk1/TestExpectations:
+        * js/dom/global-constructors-attributes-dedicated-worker-expected.txt:
+        * platform/mac-highsierra/js/dom/global-constructors-attributes-expected.txt:
+
 2017-08-04  Brady Eidson  <beidson@apple.com>
 
         Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
index fb16e18..a3d9b68 100644 (file)
@@ -115,8 +115,12 @@ imported/w3c/web-platform-tests/secure-contexts/basic-shared-worker.https.html [
 imported/w3c/web-platform-tests/secure-contexts/shared-worker-insecure-first.https.html [ Skip ]
 imported/w3c/web-platform-tests/secure-contexts/shared-worker-secure-first.https.html [ Skip ]
 
-# Service Workers are unsupported        
+# Skip service worker tests until the implementation is more actionnable
 imported/w3c/web-platform-tests/service-workers [ Skip ]
+imported/w3c/web-platform-tests/service-workers/stub-4.6.2-cache.html [ Pass ]
+imported/w3c/web-platform-tests/service-workers/stub-4.6.3-cache-storage.html [ Pass ]
+imported/w3c/web-platform-tests/service-workers/cache-storage [ Pass ]
+imported/w3c/web-platform-tests/service-workers/cache-storage/window [ Pass Failure ]
 
 #//////////////////////////////////////////////////////////////////////////////////////////
 # End platform-specific tests.
index a64a7f0..f1fcf65 100644 (file)
@@ -1,3 +1,43 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        * web-platform-tests/service-workers/cache-storage/common.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/serviceworker/credentials.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-add.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-delete.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-keys.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-match.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-matchAll.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-put.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-storage-keys.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-storage-match.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/cache-storage.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/window/sandboxed-iframes.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-add.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-delete.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-keys.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-match.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-matchAll.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-put.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-storage-keys.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-storage-match.https-expected.txt: Added.
+        * web-platform-tests/service-workers/cache-storage/worker/cache-storage.https-expected.txt: Added.
+        * web-platform-tests/service-workers/stub-4.6.2-cache-expected.txt: Added.
+        * web-platform-tests/service-workers/stub-4.6.3-cache-storage-expected.txt: Added.
+
 2017-08-04  Brady Eidson  <beidson@apple.com>
 
         Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
index ea302d6..323108e 100644 (file)
@@ -55,7 +55,7 @@
       var credentials = {"givenValues" : ["omit", "same-origin", "include"],
                           "expectedValues" : ["omit", "same-origin", "include"]
       };
-      var caches = {"givenValues" : [ "default", "no-store", "reload", "no-cache", "force-cache"],
+      var cacheModes = {"givenValues" : [ "default", "no-store", "reload", "no-cache", "force-cache"],
                     "expectedValues" : [ "default", "no-store", "reload", "no-cache", "force-cache"]
       };
       var redirects = {"givenValues" : ["follow", "error", "manual"],
@@ -75,7 +75,7 @@
                              "referrerPolicy" : referrerPolicies,
                              "mode" : modes,
                              "credentials" : credentials,
-                             "cache" : caches,
+                             "cache" : cacheModes,
                              "redirect" : redirects,
                              "integrity" : integrities,
                              "window" : windows
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/common.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/common.https-expected.txt
new file mode 100644 (file)
index 0000000..4e819d2
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Window sees cache puts by Worker promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-add.https-expected.txt
new file mode 100644 (file)
index 0000000..4334f27
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache.add and Cache.addAll null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-delete.https-expected.txt
new file mode 100644 (file)
index 0000000..221685e
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache.delete null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-keys.https-expected.txt
new file mode 100644 (file)
index 0000000..ef8f912
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache.keys null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-match.https-expected.txt
new file mode 100644 (file)
index 0000000..deb25bd
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache.match null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-matchAll.https-expected.txt
new file mode 100644 (file)
index 0000000..cbe27a6
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache.matchAll null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-put.https-expected.txt
new file mode 100644 (file)
index 0000000..11b3d81
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache.put null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-keys.https-expected.txt
new file mode 100644 (file)
index 0000000..b9ae49d
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL CacheStorage.keys null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage-match.https-expected.txt
new file mode 100644 (file)
index 0000000..a0c8a6d
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL CacheStorage.match null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/cache-storage.https-expected.txt
new file mode 100644 (file)
index 0000000..22e8980
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL CacheStorage null is not an object (evaluating 'navigator.serviceWorker.getRegistration')
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/serviceworker/credentials.https-expected.txt
new file mode 100644 (file)
index 0000000..0761650
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL Cache API matching includes credentials promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-add.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-add.https-expected.txt
new file mode 100644 (file)
index 0000000..49a4678
--- /dev/null
@@ -0,0 +1,20 @@
+
+FAIL Cache.add called with no arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with relative URL specified as a string promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with non-HTTP/HTTPS URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with Request object promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with POST request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called twice with the same Request object promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with request with null body (not consumed) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with request that results in a status of 404 promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with request that results in a status of 500 promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with no arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with a mix of valid and undefined arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with an empty array promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with string URL arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with Request arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with a mix of succeeding and failing requests promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll called with the same Request object specified twice promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-delete.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-delete.https-expected.txt
new file mode 100644 (file)
index 0000000..2dfae5c
--- /dev/null
@@ -0,0 +1,10 @@
+
+FAIL Cache.delete with no arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete called with a string URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete called with a Request object promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete called with a HEAD request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete with a non-existent entry promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete with ignoreSearch option (request with search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete with ignoreSearch option (when it is specified as false) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-keys.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-keys.https-expected.txt
new file mode 100644 (file)
index 0000000..7e1a373
--- /dev/null
@@ -0,0 +1,15 @@
+
+FAIL Cache.keys() called on an empty cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with no matching entries promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with new Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with ignoreSearch option (request with no search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with ignoreSearch option (request with search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with URL containing fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with string fragment "http" as query promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys without parameters promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with a HEAD Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-match.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-match.https-expected.txt
new file mode 100644 (file)
index 0000000..57a51cf
--- /dev/null
@@ -0,0 +1,22 @@
+
+FAIL Cache.match with no matching entries promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with multiple cache hits promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with new Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with HEAD promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with ignoreSearch option (request with no search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with ignoreSearch option (request with search parameter) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with URL containing fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with string fragment "http" as query promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with responses containing "Vary" header promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with Request and Response objects with different URLs promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match invoked multiple times for the same Request/Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match blob should be sliceable promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with POST Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with a non-2xx Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with a network error Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache produces large Responses that can be cloned and read correctly. promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-matchAll.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-matchAll.https-expected.txt
new file mode 100644 (file)
index 0000000..62bf363
--- /dev/null
@@ -0,0 +1,16 @@
+
+FAIL Cache.matchAll with no matching entries promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with new Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with HEAD promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with ignoreSearch option (request with no search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with ignoreSearch option (request with search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with URL containing fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with string fragment "http" as query promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll without parameters promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with responses containing "Vary" header promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with multiple vary pairs promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-put.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-put.https-expected.txt
new file mode 100644 (file)
index 0000000..8988d85
--- /dev/null
@@ -0,0 +1,25 @@
+
+FAIL Cache.put called with simple Request and Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put called with Request and Response from fetch() promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with Request without a body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with Response without a body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a Response containing an empty URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with an empty response body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with synthetic 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with HTTP 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with HTTP 500 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put called twice with matching Requests and different Responses promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put called twice with request URLs that differ only by a fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a string request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with an invalid response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a non-HTTP/HTTPS request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a relative URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a non-GET request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a null response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a POST request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a used response body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL getReader() after Cache.put promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a VARY:* Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with an embedded VARY:* Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put should store Response.redirect() correctly promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage-keys.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage-keys.https-expected.txt
new file mode 100644 (file)
index 0000000..1d81ed3
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL CacheStorage keys promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage-match.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage-match.https-expected.txt
new file mode 100644 (file)
index 0000000..fdeafe9
--- /dev/null
@@ -0,0 +1,13 @@
+
+FAIL CacheStorageMatch with no cache name provided promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch from one of many caches promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch from one of many caches by name promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch a string request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch a HEAD request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch with no cached entry promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch with no caches available but name provided promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch with empty cache name provided promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch supports ignoreSearch promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/cache-storage.https-expected.txt
new file mode 100644 (file)
index 0000000..001e6e3
--- /dev/null
@@ -0,0 +1,12 @@
+
+FAIL CacheStorage.open promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.delete dooms, but does not delete immediately promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.open with an empty name promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+PASS CacheStorage.open with no arguments 
+FAIL CacheStorage.has with existing cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.has with nonexistent cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.open with existing cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.delete with existing cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.delete with nonexistent cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage names are DOMStrings not USVStrings promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/sandboxed-iframes.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/window/sandboxed-iframes.https-expected.txt
new file mode 100644 (file)
index 0000000..31fbb8d
--- /dev/null
@@ -0,0 +1,5 @@
+
+
+FAIL Sandboxed iframe with allow-same-origin is allowed access assert_equals: Access should be allowed if sandbox has allow-same-origin expected "allowed" but got "denied"
+FAIL Sandboxed iframe without allow-same-origin is denied access assert_equals: Failure should be a SecurityError expected "SecurityError" but got "TypeError"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-add.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-add.https-expected.txt
new file mode 100644 (file)
index 0000000..49a4678
--- /dev/null
@@ -0,0 +1,20 @@
+
+FAIL Cache.add called with no arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with relative URL specified as a string promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with non-HTTP/HTTPS URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with Request object promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called with POST request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add called twice with the same Request object promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with request with null body (not consumed) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with request that results in a status of 404 promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.add with request that results in a status of 500 promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with no arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with a mix of valid and undefined arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with an empty array promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with string URL arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with Request arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll with a mix of succeeding and failing requests promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.addAll called with the same Request object specified twice promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-delete.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-delete.https-expected.txt
new file mode 100644 (file)
index 0000000..2dfae5c
--- /dev/null
@@ -0,0 +1,10 @@
+
+FAIL Cache.delete with no arguments promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete called with a string URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete called with a Request object promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete called with a HEAD request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete with a non-existent entry promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete with ignoreSearch option (request with search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.delete with ignoreSearch option (when it is specified as false) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-keys.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-keys.https-expected.txt
new file mode 100644 (file)
index 0000000..7e1a373
--- /dev/null
@@ -0,0 +1,15 @@
+
+FAIL Cache.keys() called on an empty cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with no matching entries promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with new Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with ignoreSearch option (request with no search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with ignoreSearch option (request with search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with URL containing fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with string fragment "http" as query promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys without parameters promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.keys with a HEAD Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-match.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-match.https-expected.txt
new file mode 100644 (file)
index 0000000..57a51cf
--- /dev/null
@@ -0,0 +1,22 @@
+
+FAIL Cache.match with no matching entries promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with multiple cache hits promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with new Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with HEAD promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with ignoreSearch option (request with no search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with ignoreSearch option (request with search parameter) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with URL containing fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with string fragment "http" as query promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with responses containing "Vary" header promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with Request and Response objects with different URLs promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match invoked multiple times for the same Request/Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match blob should be sliceable promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with POST Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with a non-2xx Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match with a network error Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache produces large Responses that can be cloned and read correctly. promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-matchAll.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-matchAll.https-expected.txt
new file mode 100644 (file)
index 0000000..62bf363
--- /dev/null
@@ -0,0 +1,16 @@
+
+FAIL Cache.matchAll with no matching entries promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with new Request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with HEAD promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with ignoreSearch option (request with no search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with ignoreSearch option (request with search parameters) promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with URL containing fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with string fragment "http" as query promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll without parameters promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with responses containing "Vary" header promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.matchAll with multiple vary pairs promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-put.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-put.https-expected.txt
new file mode 100644 (file)
index 0000000..8988d85
--- /dev/null
@@ -0,0 +1,25 @@
+
+FAIL Cache.put called with simple Request and Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put called with Request and Response from fetch() promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with Request without a body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with Response without a body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a Response containing an empty URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with an empty response body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with synthetic 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with HTTP 206 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with HTTP 500 response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put called twice with matching Requests and different Responses promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put called twice with request URLs that differ only by a fragment promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a string request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with an invalid response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a non-HTTP/HTTPS request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a relative URL promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a non-GET request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a null response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a POST request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a used response body promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL getReader() after Cache.put promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with a VARY:* Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put with an embedded VARY:* Response promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.put should store Response.redirect() correctly promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage-keys.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage-keys.https-expected.txt
new file mode 100644 (file)
index 0000000..1d81ed3
--- /dev/null
@@ -0,0 +1,3 @@
+
+FAIL CacheStorage keys promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage-match.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage-match.https-expected.txt
new file mode 100644 (file)
index 0000000..fdeafe9
--- /dev/null
@@ -0,0 +1,13 @@
+
+FAIL CacheStorageMatch with no cache name provided promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch from one of many caches promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch from one of many caches by name promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch a string request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch a HEAD request promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch with no cached entry promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch with no caches available but name provided promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch with empty cache name provided promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch supports ignoreSearch promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL Cache.match supports ignoreMethod promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorageMatch supports ignoreVary promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage.https-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/cache-storage/worker/cache-storage.https-expected.txt
new file mode 100644 (file)
index 0000000..001e6e3
--- /dev/null
@@ -0,0 +1,12 @@
+
+FAIL CacheStorage.open promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.delete dooms, but does not delete immediately promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.open with an empty name promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+PASS CacheStorage.open with no arguments 
+FAIL CacheStorage.has with existing cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.has with nonexistent cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.open with existing cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.delete with existing cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage.delete with nonexistent cache promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+FAIL CacheStorage names are DOMStrings not USVStrings promise_test: Unhandled rejection with value: object "TypeError: Not implemented"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/stub-4.6.2-cache-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/stub-4.6.2-cache-expected.txt
new file mode 100644 (file)
index 0000000..dfc818f
--- /dev/null
@@ -0,0 +1,28 @@
+
+PASS Cache interface: existence and properties of interface object 
+PASS Cache interface object length 
+PASS Cache interface object name 
+PASS Cache interface: existence and properties of interface prototype object 
+PASS Cache interface: existence and properties of interface prototype object's "constructor" property 
+PASS Cache interface: operation match(RequestInfo,CacheQueryOptions) 
+PASS Cache interface: operation matchAll(RequestInfo,CacheQueryOptions) 
+PASS Cache interface: operation add(RequestInfo) 
+PASS Cache interface: operation addAll([object Object]) 
+PASS Cache interface: operation put(RequestInfo,Response) 
+PASS Cache interface: operation delete(RequestInfo,CacheQueryOptions) 
+PASS Cache interface: operation keys(RequestInfo,CacheQueryOptions) 
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "match" with the proper type (0) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling match(RequestInfo,CacheQueryOptions) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "matchAll" with the proper type (1) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling matchAll(RequestInfo,CacheQueryOptions) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "add" with the proper type (2) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling add(RequestInfo) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "addAll" with the proper type (3) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling addAll([object Object]) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "put" with the proper type (4) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling put(RequestInfo,Response) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "delete" with the proper type (5) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling delete(RequestInfo,CacheQueryOptions) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: throw new Error ('No object defined for the Cache interface') must inherit property "keys" with the proper type (6) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+FAIL Cache interface: calling keys(RequestInfo,CacheQueryOptions) on throw new Error ('No object defined for the Cache interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the Cache interface"
+
diff --git a/LayoutTests/imported/w3c/web-platform-tests/service-workers/stub-4.6.3-cache-storage-expected.txt b/LayoutTests/imported/w3c/web-platform-tests/service-workers/stub-4.6.3-cache-storage-expected.txt
new file mode 100644 (file)
index 0000000..e4776e3
--- /dev/null
@@ -0,0 +1,36 @@
+CONSOLE MESSAGE: line 251: callback not yet supported
+
+PASS CacheStorage interface: existence and properties of interface object 
+FAIL CacheStorage interface object length assert_equals: wrong value for CacheStorage.length expected 1 but got 0
+PASS CacheStorage interface object name 
+PASS CacheStorage interface: existence and properties of interface prototype object 
+PASS CacheStorage interface: existence and properties of interface prototype object's "constructor" property 
+PASS CacheStorage interface: operation match(ScalarValueString,DOMString) 
+FAIL CacheStorage interface: operation get(DOMString) assert_own_property: interface prototype object missing non-static operation expected property "get" missing
+PASS CacheStorage interface: operation has(DOMString) 
+FAIL CacheStorage interface: operation set(DOMString,Cache) assert_own_property: interface prototype object missing non-static operation expected property "set" missing
+FAIL CacheStorage interface: operation clear() assert_own_property: interface prototype object missing non-static operation expected property "clear" missing
+PASS CacheStorage interface: operation delete(DOMString) 
+FAIL CacheStorage interface: operation forEach(CacheStorageIterationCallback,object) assert_own_property: interface prototype object missing non-static operation expected property "forEach" missing
+FAIL CacheStorage interface: operation entries() assert_own_property: interface prototype object missing non-static operation expected property "entries" missing
+PASS CacheStorage interface: operation keys() 
+FAIL CacheStorage interface: operation values() assert_own_property: interface prototype object missing non-static operation expected property "values" missing
+FAIL CacheStorage interface: operation size() assert_own_property: interface prototype object missing non-static operation expected property "size" missing
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "match" with the proper type (0) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: calling match(ScalarValueString,DOMString) on throw new Error ('No object defined for the CacheStorage interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "get" with the proper type (1) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: calling get(DOMString) on throw new Error ('No object defined for the CacheStorage interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "has" with the proper type (2) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: calling has(DOMString) on throw new Error ('No object defined for the CacheStorage interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "set" with the proper type (3) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: calling set(DOMString,Cache) on throw new Error ('No object defined for the CacheStorage interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "clear" with the proper type (4) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "delete" with the proper type (5) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: calling delete(DOMString) on throw new Error ('No object defined for the CacheStorage interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "forEach" with the proper type (6) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: calling forEach(CacheStorageIterationCallback,object) on throw new Error ('No object defined for the CacheStorage interface') with too few arguments must throw TypeError assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "entries" with the proper type (7) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "keys" with the proper type (8) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "values" with the proper type (9) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+FAIL CacheStorage interface: throw new Error ('No object defined for the CacheStorage interface') must inherit property "size" with the proper type (10) assert_equals: Unexpected exception when evaluating object expected null but got object "Error: No object defined for the CacheStorage interface"
+
index 3a6ac07..a0bfc22 100644 (file)
@@ -29,6 +29,16 @@ PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').hasOwnProperty('set') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').enumerable is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Cache').value is Cache
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Cache').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Cache').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Cache').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Cache').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CacheStorage').value is CacheStorage
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CacheStorage').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CacheStorage').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CacheStorage').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CacheStorage').configurable is true
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').value is CountQueuingStrategy
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').hasOwnProperty('get') is false
 PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').hasOwnProperty('set') is false
index 2e9d881..356a0c3 100644 (file)
@@ -7,6 +7,9 @@ fast/viewport/ios/ipad/width-is-device-width.html [ Pass ]
 
 editing/input/focus-change-with-marked-text.html [ Pass ]
 
+# No service worker implementation for WK1
+imported/w3c/web-platform-tests/service-workers [ Skip ]
+
 # Skip WebRTC for now in WK1
 imported/w3c/web-platform-tests/webrtc [ Skip ]
 webrtc [ Skip ]
index 61da71c..1335e98 100644 (file)
@@ -233,6 +233,16 @@ PASS Object.getOwnPropertyDescriptor(global, 'CSSValueList').hasOwnProperty('get
 PASS Object.getOwnPropertyDescriptor(global, 'CSSValueList').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'CSSValueList').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'CSSValueList').configurable is true
+PASS Object.getOwnPropertyDescriptor(global, 'Cache').value is Cache
+PASS Object.getOwnPropertyDescriptor(global, 'Cache').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'Cache').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'Cache').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'Cache').configurable is true
+PASS Object.getOwnPropertyDescriptor(global, 'CacheStorage').value is CacheStorage
+PASS Object.getOwnPropertyDescriptor(global, 'CacheStorage').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'CacheStorage').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'CacheStorage').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'CacheStorage').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'CanvasCaptureMediaStreamTrack').value is CanvasCaptureMediaStreamTrack
 PASS Object.getOwnPropertyDescriptor(global, 'CanvasCaptureMediaStreamTrack').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'CanvasCaptureMediaStreamTrack').hasOwnProperty('set') is false
@@ -2113,6 +2123,21 @@ PASS Object.getOwnPropertyDescriptor(global, 'Selection').hasOwnProperty('get')
 PASS Object.getOwnPropertyDescriptor(global, 'Selection').hasOwnProperty('set') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Selection').enumerable is false
 PASS Object.getOwnPropertyDescriptor(global, 'Selection').configurable is true
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorker').value is ServiceWorker
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorker').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorker').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorker').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorker').configurable is true
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerContainer').value is ServiceWorkerContainer
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerContainer').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerContainer').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerContainer').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerContainer').configurable is true
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerRegistration').value is ServiceWorkerRegistration
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerRegistration').hasOwnProperty('get') is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerRegistration').hasOwnProperty('set') is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerRegistration').enumerable is false
+PASS Object.getOwnPropertyDescriptor(global, 'ServiceWorkerRegistration').configurable is true
 PASS Object.getOwnPropertyDescriptor(global, 'Set').value is Set
 PASS Object.getOwnPropertyDescriptor(global, 'Set').hasOwnProperty('get') is false
 PASS Object.getOwnPropertyDescriptor(global, 'Set').hasOwnProperty('set') is false
index 2b41564..6819eee 100644 (file)
@@ -94,6 +94,9 @@ fast/mediastream
 http/tests/media/media-stream
 http/tests/ssl/media-stream
 
+# No service worker implementation for WK1
+imported/w3c/web-platform-tests/service-workers [ Skip ]
+
 # Skip WebRTC for now in WK1
 imported/w3c/web-platform-tests/webrtc [ Skip ]
 webrtc [ Skip ]
diff --git a/LayoutTests/platform/mac-wk1/js/dom/global-constructors-attributes-dedicated-worker-expected.txt b/LayoutTests/platform/mac-wk1/js/dom/global-constructors-attributes-dedicated-worker-expected.txt
new file mode 100644 (file)
index 0000000..3a6ac07
--- /dev/null
@@ -0,0 +1,400 @@
+Test to ensure that global constructors have the right attributes in the dedicated worker context
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Starting worker: script-tests/global-constructors-attributes.js
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Array').value is Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').value is ArrayBuffer
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ArrayBuffer').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').value is Blob
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Blob').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Boolean').value is Boolean
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Boolean').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Boolean').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Boolean').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Boolean').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').value is ByteLengthQueuingStrategy
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ByteLengthQueuingStrategy').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').value is CountQueuingStrategy
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CountQueuingStrategy').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Crypto').value is Crypto
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Crypto').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Crypto').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Crypto').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CryptoKey').value is CryptoKey
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CryptoKey').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CryptoKey').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CryptoKey').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'CryptoKey').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMException').value is DOMException
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMException').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMException').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMException').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMException').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPoint').value is DOMPoint
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPoint').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPoint').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPoint').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPoint').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPointReadOnly').value is DOMPointReadOnly
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPointReadOnly').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPointReadOnly').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPointReadOnly').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMPointReadOnly').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMQuad').value is DOMQuad
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMQuad').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMQuad').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMQuad').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMQuad').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRect').value is DOMRect
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRect').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRect').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRect').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRect').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRectReadOnly').value is DOMRectReadOnly
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRectReadOnly').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRectReadOnly').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRectReadOnly').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DOMRectReadOnly').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').value is DataView
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DataView').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Date').value is Date
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Date').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Date').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Date').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Date').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').value is DedicatedWorkerGlobalScope
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'DedicatedWorkerGlobalScope').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Error').value is Error
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Error').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Error').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Error').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Error').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ErrorEvent').value is ErrorEvent
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ErrorEvent').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ErrorEvent').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ErrorEvent').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ErrorEvent').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EvalError').value is EvalError
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EvalError').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EvalError').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EvalError').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EvalError').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Event').value is Event
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Event').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Event').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Event').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Event').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').value is EventSource
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventSource').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventTarget').value is EventTarget
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventTarget').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventTarget').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventTarget').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'EventTarget').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReader').value is FileReader
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReader').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReader').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReader').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReader').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').value is FileReaderSync
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'FileReaderSync').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').value is Float32Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float32Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').value is Float64Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Float64Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Function').value is Function
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Function').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Function').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Function').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Function').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Headers').value is Headers
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Headers').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Headers').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Headers').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Headers').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').value is ImageData
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ImageData').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').value is Int16Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int16Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').value is Int32Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int32Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').value is Int8Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Int8Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Map').value is Map
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Map').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Map').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Map').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Map').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').value is MessageChannel
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageChannel').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageEvent').value is MessageEvent
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageEvent').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageEvent').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageEvent').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessageEvent').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessagePort').value is MessagePort
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessagePort').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessagePort').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessagePort').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'MessagePort').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Number').value is Number
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Number').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Number').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Number').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Number').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Object').value is Object
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Object').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Object').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Object').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Object').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Performance').value is Performance
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Performance').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Performance').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Performance').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Performance').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').value is PerformanceEntry
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceEntry').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMark').value is PerformanceMark
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMark').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMark').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMark').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMark').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMeasure').value is PerformanceMeasure
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMeasure').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMeasure').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMeasure').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceMeasure').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserver').value is PerformanceObserver
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserver').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserver').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserver').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserver').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserverEntryList').value is PerformanceObserverEntryList
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserverEntryList').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserverEntryList').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserverEntryList').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceObserverEntryList').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').value is PerformanceResourceTiming
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'PerformanceResourceTiming').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ProgressEvent').value is ProgressEvent
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ProgressEvent').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ProgressEvent').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ProgressEvent').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ProgressEvent').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Promise').value is Promise
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Promise').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Promise').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Promise').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Promise').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RangeError').value is RangeError
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RangeError').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RangeError').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RangeError').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RangeError').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReadableStream').value is ReadableStream
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReadableStream').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReadableStream').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReadableStream').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReadableStream').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReferenceError').value is ReferenceError
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReferenceError').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReferenceError').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReferenceError').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'ReferenceError').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RegExp').value is RegExp
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RegExp').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RegExp').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RegExp').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'RegExp').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Request').value is Request
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Request').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Request').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Request').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Request').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Response').value is Response
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Response').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Response').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Response').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Response').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Set').value is Set
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Set').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Set').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Set').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Set').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').value is SharedArrayBuffer
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SharedArrayBuffer').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'String').value is String
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'String').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'String').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'String').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'String').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SubtleCrypto').value is SubtleCrypto
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SubtleCrypto').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SubtleCrypto').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SubtleCrypto').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SubtleCrypto').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Symbol').value is Symbol
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Symbol').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Symbol').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Symbol').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Symbol').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SyntaxError').value is SyntaxError
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SyntaxError').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SyntaxError').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SyntaxError').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'SyntaxError').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextDecoder').value is TextDecoder
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextDecoder').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextDecoder').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextDecoder').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextDecoder').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextEncoder').value is TextEncoder
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextEncoder').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextEncoder').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextEncoder').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TextEncoder').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TypeError').value is TypeError
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TypeError').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TypeError').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TypeError').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'TypeError').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URIError').value is URIError
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URIError').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URIError').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URIError').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URIError').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').value is URL
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URL').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URLSearchParams').value is URLSearchParams
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URLSearchParams').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URLSearchParams').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URLSearchParams').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'URLSearchParams').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').value is Uint16Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint16Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').value is Uint32Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint32Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').value is Uint8Array
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8Array').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').value is Uint8ClampedArray
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'Uint8ClampedArray').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakMap').value is WeakMap
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakMap').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakMap').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakMap').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakMap').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakSet').value is WeakSet
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakSet').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakSet').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakSet').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WeakSet').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').value is WebSocket
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WebSocket').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerGlobalScope').value is WorkerGlobalScope
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerGlobalScope').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerGlobalScope').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerGlobalScope').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerGlobalScope').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerLocation').value is WorkerLocation
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerLocation').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerLocation').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerLocation').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerLocation').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerNavigator').value is WorkerNavigator
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerNavigator').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerNavigator').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerNavigator').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'WorkerNavigator').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').value is XMLHttpRequest
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequest').configurable is true
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequestEventTarget').value is XMLHttpRequestEventTarget
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequestEventTarget').hasOwnProperty('get') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequestEventTarget').hasOwnProperty('set') is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequestEventTarget').enumerable is false
+PASS [Worker] Object.getOwnPropertyDescriptor(global, 'XMLHttpRequestEventTarget').configurable is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
index 7357ddd..c6b0edd 100644 (file)
@@ -1,3 +1,12 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        * runtime/CommonIdentifiers.h:
+
 2017-08-04  Mark Lam  <mark.lam@apple.com>
 
         Fix typo in testmasm.cpp: ENABLE(JSVALUE64) should be USE(JSVALUE64).
index 0c03453..d3ba055 100644 (file)
@@ -35,6 +35,8 @@
     macro(Audio) \
     macro(BYTES_PER_ELEMENT) \
     macro(Boolean) \
+    macro(Cache) \
+    macro(CacheStorage) \
     macro(Collator) \
     macro(Credential) \
     macro(CredentialsContainer) \
     macro(bytecodeIndex) \
     macro(bytecodes) \
     macro(bytecodesID) \
+    macro(caches) \
     macro(calendar) \
     macro(callee) \
     macro(caller) \
index fe5417f..4a9c75d 100644 (file)
@@ -17,6 +17,7 @@ set(WebCore_INCLUDE_DIRECTORIES
     "${WEBCORE_DIR}/Modules/airplay"
     "${WEBCORE_DIR}/Modules/beacon"
     "${WEBCORE_DIR}/Modules/applepay"
+    "${WEBCORE_DIR}/Modules/cache"
     "${WEBCORE_DIR}/Modules/credentials"
     "${WEBCORE_DIR}/Modules/encryptedmedia"
     "${WEBCORE_DIR}/Modules/encryptedmedia/legacy"
@@ -148,6 +149,7 @@ set(WebCore_IDL_INCLUDES
     xml
 
     Modules/airplay
+    Modules/cache
     Modules/credentials
     Modules/encryptedmedia/legacy
     Modules/fetch
@@ -178,6 +180,12 @@ set(WebCore_NON_SVG_IDL_FILES
 
     Modules/beacon/NavigatorBeacon.idl
 
+    Modules/cache/Cache.idl
+    Modules/cache/CacheQueryOptions.idl
+    Modules/cache/CacheStorage.idl
+    Modules/cache/DOMWindowCaches.idl
+    Modules/cache/WorkerGlobalScopeCaches.idl
+
     Modules/credentials/BasicCredential.idl
     Modules/credentials/CredentialCreationOptions.idl
     Modules/credentials/CredentialData.idl
@@ -881,6 +889,11 @@ set(WebCore_SOURCES
 
     Modules/beacon/NavigatorBeacon.cpp
 
+    Modules/cache/Cache.cpp
+    Modules/cache/CacheStorage.cpp
+    Modules/cache/DOMWindowCaches.cpp
+    Modules/cache/WorkerGlobalScopeCaches.cpp
+
     Modules/credentials/BasicCredential.cpp
     Modules/credentials/CredentialsContainer.cpp
     Modules/credentials/FederatedCredential.cpp
index 51b7e3a..e577b9e 100644 (file)
@@ -1,3 +1,60 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        Covered by activated tests.
+        Adding IDLs as per https://www.w3.org/TR/service-workers-1/#idl-index.
+        Implementation is guarded by a runtime flag which is off by default.
+        It is off for DRT but on for WTR.
+
+        * CMakeLists.txt:
+        * DerivedSources.make:
+        * Modules/cache/Cache.cpp: Added.
+        (WebCore::Cache::match):
+        (WebCore::Cache::matchAll):
+        (WebCore::Cache::add):
+        (WebCore::Cache::addAll):
+        (WebCore::Cache::put):
+        (WebCore::Cache::remove):
+        (WebCore::Cache::keys):
+        * Modules/cache/Cache.h: Added.
+        (WebCore::Cache::create):
+        (WebCore::Cache::Cache):
+        * Modules/cache/Cache.idl: Added.
+        * Modules/cache/CacheQueryOptions.h: Added.
+        * Modules/cache/CacheQueryOptions.idl: Added.
+        * Modules/cache/CacheStorage.cpp: Added.
+        (WebCore::CacheStorage::match):
+        (WebCore::CacheStorage::has):
+        (WebCore::CacheStorage::open):
+        (WebCore::CacheStorage::remove):
+        (WebCore::CacheStorage::keys):
+        * Modules/cache/CacheStorage.h: Added.
+        (WebCore::CacheStorage::create):
+        * Modules/cache/CacheStorage.idl: Added.
+        * Modules/cache/DOMWindowCaches.cpp: Added.
+        (WebCore::DOMWindowCaches::DOMWindowCaches):
+        (WebCore::DOMWindowCaches::supplementName):
+        (WebCore::DOMWindowCaches::from):
+        (WebCore::DOMWindowCaches::caches):
+        (WebCore::DOMWindowCaches::caches const):
+        * Modules/cache/DOMWindowCaches.h: Added.
+        * Modules/cache/DOMWindowCaches.idl: Added.
+        * Modules/cache/WorkerGlobalScopeCaches.cpp: Added.
+        (WebCore::WorkerGlobalScopeCaches::supplementName):
+        (WebCore::WorkerGlobalScopeCaches::from):
+        (WebCore::WorkerGlobalScopeCaches::caches):
+        (WebCore::WorkerGlobalScopeCaches::caches const):
+        * Modules/cache/WorkerGlobalScopeCaches.h: Added.
+        * Modules/cache/WorkerGlobalScopeCaches.idl: Added.
+        * WebCore.xcodeproj/project.pbxproj:
+        * page/RuntimeEnabledFeatures.h:
+        (WebCore::RuntimeEnabledFeatures::setCacheAPIEnabled):
+        (WebCore::RuntimeEnabledFeatures::cacheAPIEnabled const):
+
 2017-08-04  Brady Eidson  <beidson@apple.com>
 
         Have navigator.serviceWorker() actually return a ServiceWorkerContainer object.
index eb2aa26..ce5684a 100644 (file)
@@ -31,6 +31,7 @@ VPATH = \
     $(WebCore)/Modules/airplay \
     $(WebCore)/Modules/applepay \
     $(WebCore)/Modules/beacon \
+    $(WebCore)/Modules/cache \
     $(WebCore)/Modules/credentials \
     $(WebCore)/Modules/encryptedmedia \
     $(WebCore)/Modules/encryptedmedia/legacy \
@@ -59,7 +60,6 @@ VPATH = \
     $(WebCore)/css \
     $(WebCore)/dom \
     $(WebCore)/editing \
-    $(WebCore)/fetch \
     $(WebCore)/fileapi \
     $(WebCore)/html \
     $(WebCore)/html/canvas \
@@ -99,6 +99,11 @@ JS_BINDING_IDLS = \
        $(WebCore)/Modules/applepay/ApplePayShippingMethodUpdate.idl \
     $(WebCore)/Modules/applepay/ApplePayValidateMerchantEvent.idl \
     $(WebCore)/Modules/beacon/NavigatorBeacon.idl \
+    $(WebCore)/Modules/cache/DOMWindowCaches.idl \
+    $(WebCore)/Modules/cache/Cache.idl \
+    $(WebCore)/Modules/cache/CacheQueryOptions.idl \
+    $(WebCore)/Modules/cache/CacheStorage.idl \
+    $(WebCore)/Modules/cache/WorkerGlobalScopeCaches.idl \
     $(WebCore)/Modules/credentials/BasicCredential.idl \
     $(WebCore)/Modules/credentials/CredentialCreationOptions.idl \
     $(WebCore)/Modules/credentials/CredentialData.idl \
diff --git a/Source/WebCore/Modules/cache/Cache.cpp b/Source/WebCore/Modules/cache/Cache.cpp
new file mode 100644 (file)
index 0000000..e19af55
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "Cache.h"
+
+namespace WebCore {
+
+void Cache::match(RequestInfo&&, std::optional<CacheQueryOptions>&&, Ref<DeferredPromise>&& promise)
+{
+    promise->reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void Cache::matchAll(std::optional<RequestInfo>&&, std::optional<CacheQueryOptions>&&, MatchAllPromise&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void Cache::add(RequestInfo&&, DOMPromiseDeferred<void>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void Cache::addAll(Vector<RequestInfo>&&, DOMPromiseDeferred<void>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void Cache::put(RequestInfo&&, Ref<FetchResponse>&&, DOMPromiseDeferred<void>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void Cache::remove(RequestInfo&&, std::optional<CacheQueryOptions>&&, DOMPromiseDeferred<IDLBoolean>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void Cache::keys(std::optional<RequestInfo>&&, std::optional<CacheQueryOptions>&&, KeysPromise&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/Cache.h b/Source/WebCore/Modules/cache/Cache.h
new file mode 100644 (file)
index 0000000..0082acd
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "FetchRequest.h"
+
+namespace WebCore {
+
+class FetchResponse;
+
+struct CacheQueryOptions;
+
+class Cache : public RefCounted<Cache> {
+public:
+    static Ref<Cache> create(String&& name) { return adoptRef(*new Cache(WTFMove(name))); }
+
+    using RequestInfo = FetchRequest::Info;
+
+    using MatchAllPromise = DOMPromiseDeferred<IDLSequence<IDLInterface<FetchResponse>>>;
+    using KeysPromise = DOMPromiseDeferred<IDLSequence<IDLInterface<FetchRequest>>>;
+
+    void match(RequestInfo&&, std::optional<CacheQueryOptions>&&, Ref<DeferredPromise>&&);
+    void matchAll(std::optional<RequestInfo>&&, std::optional<CacheQueryOptions>&&, MatchAllPromise&&);
+    void add(RequestInfo&&, DOMPromiseDeferred<void>&&);
+
+    void addAll(Vector<RequestInfo>&&, DOMPromiseDeferred<void>&&);
+    void put(RequestInfo&&, Ref<FetchResponse>&&, DOMPromiseDeferred<void>&&);
+    void remove(RequestInfo&&, std::optional<CacheQueryOptions>&&, DOMPromiseDeferred<IDLBoolean>&&);
+    void keys(std::optional<RequestInfo>&&, std::optional<CacheQueryOptions>&&, KeysPromise&&);
+
+private:
+    explicit Cache(String&& name) : m_name(WTFMove(name)) { }
+
+    String m_name;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/Cache.idl b/Source/WebCore/Modules/cache/Cache.idl
new file mode 100644 (file)
index 0000000..d479691
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+typedef (FetchRequest or USVString) RequestInfo;
+
+[
+    SecureContext,
+    Exposed=(Window,Worker),
+    EnabledAtRuntime=CacheAPI,
+    ImplementationLacksVTable,
+] interface Cache {
+    [NewObject] Promise<any> match(RequestInfo request, optional CacheQueryOptions options);
+    [NewObject] Promise<sequence<FetchResponse>> matchAll(optional RequestInfo request, optional CacheQueryOptions options);
+    [NewObject] Promise<void> add(RequestInfo request);
+    [NewObject] Promise<void> addAll(sequence<RequestInfo> requests);
+    [NewObject] Promise<void> put(RequestInfo request, FetchResponse response);
+    [NewObject, ImplementedAs=remove] Promise<boolean> delete(RequestInfo request, optional CacheQueryOptions options);
+    [NewObject] Promise<sequence<Request>> keys(optional RequestInfo request, optional CacheQueryOptions options);
+};
diff --git a/Source/WebCore/Modules/cache/CacheQueryOptions.h b/Source/WebCore/Modules/cache/CacheQueryOptions.h
new file mode 100644 (file)
index 0000000..68f67fa
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include <wtf/text/WTFString.h>
+
+namespace WebCore {
+
+struct CacheQueryOptions {
+    bool ignoreSearch { false };
+    bool ignoreMethod { false };
+    bool ignoreVary { false };
+    String cacheName;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/CacheQueryOptions.idl b/Source/WebCore/Modules/cache/CacheQueryOptions.idl
new file mode 100644 (file)
index 0000000..3990479
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+dictionary CacheQueryOptions {
+    boolean ignoreSearch = false;
+    boolean ignoreMethod = false;
+    boolean ignoreVary = false;
+    DOMString cacheName;
+};
diff --git a/Source/WebCore/Modules/cache/CacheStorage.cpp b/Source/WebCore/Modules/cache/CacheStorage.cpp
new file mode 100644 (file)
index 0000000..12367be
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "CacheStorage.h"
+
+namespace WebCore {
+
+void CacheStorage::match(RequestInfo&&, std::optional<CacheQueryOptions>&&, Ref<DeferredPromise>&& promise)
+{
+    promise->reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void CacheStorage::has(const String&, DOMPromiseDeferred<IDLBoolean>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void CacheStorage::open(const String&, DOMPromiseDeferred<IDLInterface<Cache>>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void CacheStorage::remove(const String&, DOMPromiseDeferred<IDLBoolean>&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+void CacheStorage::keys(KeysPromise&& promise)
+{
+    promise.reject(Exception { TypeError, ASCIILiteral("Not implemented")});
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/CacheStorage.h b/Source/WebCore/Modules/cache/CacheStorage.h
new file mode 100644 (file)
index 0000000..fa26900
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "FetchRequest.h"
+
+namespace WebCore {
+
+class Cache;
+
+struct CacheQueryOptions;
+
+class CacheStorage : public RefCounted<CacheStorage> {
+public:
+    static Ref<CacheStorage> create() { return adoptRef(*new CacheStorage()); }
+
+    using RequestInfo = FetchRequest::Info;
+    using KeysPromise = DOMPromiseDeferred<IDLSequence<IDLDOMString>>;
+
+    void match(RequestInfo&&, std::optional<CacheQueryOptions>&&, Ref<DeferredPromise>&&);
+    void has(const String&, DOMPromiseDeferred<IDLBoolean>&&);
+    void open(const String&, DOMPromiseDeferred<IDLInterface<Cache>>&&);
+    void remove(const String&, DOMPromiseDeferred<IDLBoolean>&&);
+    void keys(KeysPromise&&);
+
+private:
+    CacheStorage() = default;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/CacheStorage.idl b/Source/WebCore/Modules/cache/CacheStorage.idl
new file mode 100644 (file)
index 0000000..8d71e09
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+typedef (FetchRequest or USVString) RequestInfo;
+
+[
+    SecureContext,
+    Exposed=(Window,Worker),
+    EnabledAtRuntime=CacheAPI,
+    ImplementationLacksVTable,
+] interface CacheStorage {
+    [NewObject] Promise<any> match(RequestInfo request, optional CacheQueryOptions options);
+    [NewObject] Promise<boolean> has(DOMString cacheName);
+    [NewObject] Promise<Cache> open(DOMString cacheName);
+    [NewObject, ImplementedAs=remove] Promise<boolean> delete(DOMString cacheName);
+    [NewObject] Promise<sequence<DOMString>> keys();
+};
diff --git a/Source/WebCore/Modules/cache/DOMWindowCaches.cpp b/Source/WebCore/Modules/cache/DOMWindowCaches.cpp
new file mode 100644 (file)
index 0000000..8665c55
--- /dev/null
@@ -0,0 +1,67 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "DOMWindowCaches.h"
+
+#include "CacheStorage.h"
+#include "DOMWindow.h"
+
+namespace WebCore {
+
+DOMWindowCaches::DOMWindowCaches(DOMWindow* window)
+    : DOMWindowProperty(window->frame())
+{
+}
+
+const char* DOMWindowCaches::supplementName()
+{
+    return "DOMWindowCaches";
+}
+
+DOMWindowCaches* DOMWindowCaches::from(DOMWindow* window)
+{
+    auto* supplement = static_cast<DOMWindowCaches*>(Supplement<DOMWindow>::from(window, supplementName()));
+    if (!supplement) {
+        auto newSupplement = std::make_unique<DOMWindowCaches>(window);
+        supplement = newSupplement.get();
+        provideTo(window, supplementName(), WTFMove(newSupplement));
+    }
+    return supplement;
+}
+
+CacheStorage* DOMWindowCaches::caches(DOMWindow& window)
+{
+    return DOMWindowCaches::from(&window)->caches();
+}
+
+CacheStorage* DOMWindowCaches::caches() const
+{
+    if (!m_caches && frame())
+        m_caches = CacheStorage::create();
+    return m_caches.get();
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/DOMWindowCaches.h b/Source/WebCore/Modules/cache/DOMWindowCaches.h
new file mode 100644 (file)
index 0000000..bbbefab
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "DOMWindowProperty.h"
+#include "Supplementable.h"
+
+namespace WebCore {
+
+class DOMWindow;
+class CacheStorage;
+
+class DOMWindowCaches : public Supplement<DOMWindow>, public DOMWindowProperty {
+public:
+    explicit DOMWindowCaches(DOMWindow*);
+
+    static DOMWindowCaches* from(DOMWindow*);
+    static CacheStorage* caches(DOMWindow&);
+
+private:
+    static const char* supplementName();
+    CacheStorage* caches() const;
+
+    mutable RefPtr<CacheStorage> m_caches;
+};
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/DOMWindowCaches.idl b/Source/WebCore/Modules/cache/DOMWindowCaches.idl
new file mode 100644 (file)
index 0000000..7c74295
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+[
+    EnabledAtRuntime=CacheAPI,
+] partial interface DOMWindow {
+    [SecureContext, SameObject] readonly attribute CacheStorage caches;
+};
diff --git a/Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.cpp b/Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.cpp
new file mode 100644 (file)
index 0000000..051698e
--- /dev/null
@@ -0,0 +1,62 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WorkerGlobalScopeCaches.h"
+
+#include "CacheStorage.h"
+#include "WorkerGlobalScope.h"
+
+namespace WebCore {
+
+const char* WorkerGlobalScopeCaches::supplementName()
+{
+    return "WorkerGlobalScopeCaches";
+}
+
+WorkerGlobalScopeCaches* WorkerGlobalScopeCaches::from(WorkerGlobalScope& scope)
+{
+    auto* supplement = static_cast<WorkerGlobalScopeCaches*>(Supplement<WorkerGlobalScope>::from(&scope, supplementName()));
+    if (!supplement) {
+        auto newSupplement = std::make_unique<WorkerGlobalScopeCaches>();
+        supplement = newSupplement.get();
+        provideTo(&scope, supplementName(), WTFMove(newSupplement));
+    }
+    return supplement;
+}
+
+CacheStorage* WorkerGlobalScopeCaches::caches(WorkerGlobalScope& scope)
+{
+    return WorkerGlobalScopeCaches::from(scope)->caches();
+}
+
+CacheStorage* WorkerGlobalScopeCaches::caches() const
+{
+    if (!m_caches)
+        m_caches = CacheStorage::create();
+    return m_caches.get();
+}
+
+} // namespace WebCore
diff --git a/Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.h b/Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.h
new file mode 100644 (file)
index 0000000..795ebd6
--- /dev/null
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2017 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include "Supplementable.h"
+
+namespace WebCore {
+
+class CacheStorage;
+class WorkerGlobalScope;
+
+class WorkerGlobalScopeCaches : public Supplement<WorkerGlobalScope> {
+public:
+    WorkerGlobalScopeCaches() = default;
+
+    static CacheStorage* caches(WorkerGlobalScope&);
+
+private:
+    static WorkerGlobalScopeCaches* from(WorkerGlobalScope&);
+    static const char* supplementName();
+    CacheStorage* caches() const;
+
+    mutable RefPtr<CacheStorage> m_caches;
+};
+
+} // namespace WebCore
+
diff --git a/Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.idl b/Source/WebCore/Modules/cache/WorkerGlobalScopeCaches.idl
new file mode 100644 (file)
index 0000000..835c25f
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+* Copyright (C) 2017 Apple Inc. All rights reserved.
+*
+* Redistribution and use in source and binary forms, with or without
+* modification, are permitted provided that the following conditions
+* are met:
+* 1. Redistributions of source code must retain the above copyright
+*    notice, this list of conditions and the following disclaimer.
+* 2. Redistributions in binary form must reproduce the above copyright
+*    notice, this list of conditions and the following disclaimer in the
+*    documentation and/or other materials provided with the distribution.
+*
+* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+* THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+[
+    EnabledAtRuntime=CacheAPI,
+] partial interface WorkerGlobalScope {
+    [SecureContext, SameObject] readonly attribute CacheStorage caches;
+};
index e9d63da..77b5456 100644 (file)
                4129DF861BB5B80C00322A16 /* JSReadableStreamPrivateConstructors.h in Headers */ = {isa = PBXBuildFile; fileRef = 4129DF841BB5B7F700322A16 /* JSReadableStreamPrivateConstructors.h */; settings = {ATTRIBUTES = (Private, ); }; };
                413015D91C7B571400091C6E /* FetchResponse.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 413015D51C7B570400091C6E /* FetchResponse.cpp */; };
                413015D91C7B571400091C6F /* FetchResponseSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 413015D51C7B570400091C6F /* FetchResponseSource.cpp */; };
+               41380C261F3436A600155FDA /* Cache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41380C201F34368A00155FDA /* Cache.cpp */; };
+               41380C271F3436AC00155FDA /* Cache.h in Headers */ = {isa = PBXBuildFile; fileRef = 41380C251F34369A00155FDA /* Cache.h */; };
+               41380C281F3436AC00155FDA /* CacheStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41380C211F34368D00155FDA /* CacheStorage.cpp */; };
+               41380C291F3436AC00155FDA /* CacheStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 41380C221F34369000155FDA /* CacheStorage.h */; };
                4138D3351244054800323D33 /* EventContext.h in Headers */ = {isa = PBXBuildFile; fileRef = 4138D3331244054800323D33 /* EventContext.h */; };
                4138D3361244054800323D33 /* EventContext.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4138D3341244054800323D33 /* EventContext.cpp */; };
                4138F8571D253F08001CB61E /* JSDOMIterator.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 4138F8551D253EEE001CB61E /* JSDOMIterator.cpp */; };
                41F54F8E1C50C50C00338488 /* FetchRequest.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41F54F871C50C4F600338488 /* FetchRequest.cpp */; };
                41FA303E1316C29C00C0BFC5 /* RenderMediaControls.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FA303C1316C29C00C0BFC5 /* RenderMediaControls.cpp */; };
                41FA303F1316C29C00C0BFC5 /* RenderMediaControls.h in Headers */ = {isa = PBXBuildFile; fileRef = 41FA303D1316C29C00C0BFC5 /* RenderMediaControls.h */; };
+               41FB279C1F34DB8A00795487 /* DOMWindowCaches.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FB278E1F34C28200795487 /* DOMWindowCaches.cpp */; };
+               41FB279D1F34DB8E00795487 /* WorkerGlobalScopeCaches.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 41FB278F1F34C28200795487 /* WorkerGlobalScopeCaches.cpp */; };
                43107BE218CC19DE00CC18E8 /* SelectorPseudoTypeMap.h in Headers */ = {isa = PBXBuildFile; fileRef = 43107BE118CC19DE00CC18E8 /* SelectorPseudoTypeMap.h */; };
                43142E7A13B1E97700F1C871 /* SVGAnimatedRect.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 43142E7913B1E97700F1C871 /* SVGAnimatedRect.cpp */; };
                431A2F9C13B6F2B0007791E4 /* SVGAnimatedNumberOptionalNumber.h in Headers */ = {isa = PBXBuildFile; fileRef = 431A2F9A13B6F2B0007791E4 /* SVGAnimatedNumberOptionalNumber.h */; };
                7CE191701F2ABE7100272F78 /* JSFetchReferrerPolicy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE191671F2AB70100272F78 /* JSFetchReferrerPolicy.cpp */; };
                7CE191711F2ABE7100272F78 /* JSFetchReferrerPolicy.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE191681F2AB70300272F78 /* JSFetchReferrerPolicy.h */; };
                7CE191721F2ABE7100272F78 /* JSFetchRequestCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE1916E1F2AB70D00272F78 /* JSFetchRequestCache.cpp */; };
+               7CE191721F2ABE7100272F79 /* JSCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE1916E1F2AB70D00272F79 /* JSCache.cpp */; };
+               7CE191721F2ABE7100272F7A /* JSCacheStorage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE1916E1F2AB70D00272F7A /* JSCacheStorage.cpp */; };
+               7CE191721F2ABE7100272F7B /* JSCacheQueryOptions.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE1916E1F2AB70D00272F7B /* JSCacheQueryOptions.cpp */; };
                7CE191731F2ABE7100272F78 /* JSFetchRequestCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE191641F2AB6FB00272F78 /* JSFetchRequestCache.h */; };
+               7CE191731F2ABE7100272F79 /* JSCache.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE191641F2AB6FB00272F79 /* JSCache.h */; };
+               7CE191731F2ABE7100272F7A /* JSCacheStorage.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE191641F2AB6FB00272F7A /* JSCacheStorage.h */; };
                7CE191741F2ABE7100272F78 /* JSFetchRequestCredentials.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE1916B1F2AB70800272F78 /* JSFetchRequestCredentials.cpp */; };
                7CE191751F2ABE7100272F78 /* JSFetchRequestCredentials.h in Headers */ = {isa = PBXBuildFile; fileRef = 7CE191661F2AB6FF00272F78 /* JSFetchRequestCredentials.h */; };
                7CE191761F2ABE7100272F78 /* JSFetchRequestInit.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7CE1916D1F2AB70C00272F78 /* JSFetchRequestInit.cpp */; };
                413015D61C7B570400091C6F /* FetchResponseSource.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FetchResponseSource.h; sourceTree = "<group>"; };
                413015D71C7B570400091C6E /* FetchResponse.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FetchResponse.idl; sourceTree = "<group>"; };
                413015D81C7B570400091C6E /* FetchResponse.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = FetchResponse.js; sourceTree = "<group>"; };
+               41380C201F34368A00155FDA /* Cache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = Cache.cpp; path = Modules/cache/Cache.cpp; sourceTree = SOURCE_ROOT; };
+               41380C211F34368D00155FDA /* CacheStorage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; name = CacheStorage.cpp; path = Modules/cache/CacheStorage.cpp; sourceTree = SOURCE_ROOT; };
+               41380C221F34369000155FDA /* CacheStorage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = CacheStorage.h; path = Modules/cache/CacheStorage.h; sourceTree = SOURCE_ROOT; };
+               41380C231F34369400155FDA /* Cache.idl */ = {isa = PBXFileReference; lastKnownFileType = text; name = Cache.idl; path = Modules/cache/Cache.idl; sourceTree = SOURCE_ROOT; };
+               41380C241F34369700155FDA /* CacheStorage.idl */ = {isa = PBXFileReference; lastKnownFileType = text; name = CacheStorage.idl; path = Modules/cache/CacheStorage.idl; sourceTree = SOURCE_ROOT; };
+               41380C251F34369A00155FDA /* Cache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = Cache.h; path = Modules/cache/Cache.h; sourceTree = SOURCE_ROOT; };
+               41380C2A1F343E2F00155FDA /* WorkerGlobalScopeCaches.idl */ = {isa = PBXFileReference; lastKnownFileType = text; name = WorkerGlobalScopeCaches.idl; path = Modules/cache/WorkerGlobalScopeCaches.idl; sourceTree = SOURCE_ROOT; };
+               41380C2B1F343E2F00155FDA /* DOMWindowCaches.idl */ = {isa = PBXFileReference; lastKnownFileType = text; name = DOMWindowCaches.idl; path = Modules/cache/DOMWindowCaches.idl; sourceTree = SOURCE_ROOT; };
                4138D3331244054800323D33 /* EventContext.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = EventContext.h; sourceTree = "<group>"; };
                4138D3341244054800323D33 /* EventContext.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventContext.cpp; sourceTree = "<group>"; };
                4138F8551D253EEE001CB61E /* JSDOMIterator.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMIterator.cpp; sourceTree = "<group>"; };
                41F54F891C50C4F600338488 /* FetchRequest.idl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = FetchRequest.idl; sourceTree = "<group>"; };
                41FA303C1316C29C00C0BFC5 /* RenderMediaControls.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RenderMediaControls.cpp; sourceTree = "<group>"; };
                41FA303D1316C29C00C0BFC5 /* RenderMediaControls.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RenderMediaControls.h; sourceTree = "<group>"; };
+               41FB278C1F34C28200795487 /* DOMWindowCaches.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DOMWindowCaches.h; sourceTree = "<group>"; };
+               41FB278D1F34C28200795487 /* WorkerGlobalScopeCaches.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = WorkerGlobalScopeCaches.h; sourceTree = "<group>"; };
+               41FB278E1F34C28200795487 /* DOMWindowCaches.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = DOMWindowCaches.cpp; sourceTree = "<group>"; };
+               41FB278F1F34C28200795487 /* WorkerGlobalScopeCaches.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = WorkerGlobalScopeCaches.cpp; sourceTree = "<group>"; };
+               41FB27991F34CE9C00795487 /* CacheQueryOptions.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = CacheQueryOptions.idl; sourceTree = "<group>"; };
+               41FB279B1F34CEF000795487 /* CacheQueryOptions.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = CacheQueryOptions.h; sourceTree = "<group>"; };
                43107BE118CC19DE00CC18E8 /* SelectorPseudoTypeMap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SelectorPseudoTypeMap.h; sourceTree = "<group>"; };
                43142E7913B1E97700F1C871 /* SVGAnimatedRect.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SVGAnimatedRect.cpp; sourceTree = "<group>"; };
                431A2F9A13B6F2B0007791E4 /* SVGAnimatedNumberOptionalNumber.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGAnimatedNumberOptionalNumber.h; sourceTree = "<group>"; };
                7CE1915D1F2A9B4F00272F78 /* FetchRequestRedirect.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = FetchRequestRedirect.h; sourceTree = "<group>"; };
                7CE1915F1F2A9B4F00272F78 /* FetchRequestRedirect.idl */ = {isa = PBXFileReference; lastKnownFileType = text; path = FetchRequestRedirect.idl; sourceTree = "<group>"; };
                7CE191641F2AB6FB00272F78 /* JSFetchRequestCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSFetchRequestCache.h; sourceTree = "<group>"; };
+               7CE191641F2AB6FB00272F79 /* JSCache.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSCache.h; sourceTree = "<group>"; };
+               7CE191641F2AB6FB00272F7A /* JSCacheStorage.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSCacheStorage.h; sourceTree = "<group>"; };
                7CE191651F2AB6FD00272F78 /* JSFetchRequestMode.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSFetchRequestMode.cpp; sourceTree = "<group>"; };
                7CE191661F2AB6FF00272F78 /* JSFetchRequestCredentials.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSFetchRequestCredentials.h; sourceTree = "<group>"; };
                7CE191671F2AB70100272F78 /* JSFetchReferrerPolicy.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSFetchReferrerPolicy.cpp; sourceTree = "<group>"; };
                7CE1916C1F2AB70A00272F78 /* JSFetchRequestMode.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = JSFetchRequestMode.h; sourceTree = "<group>"; };
                7CE1916D1F2AB70C00272F78 /* JSFetchRequestInit.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSFetchRequestInit.cpp; sourceTree = "<group>"; };
                7CE1916E1F2AB70D00272F78 /* JSFetchRequestCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSFetchRequestCache.cpp; sourceTree = "<group>"; };
+               7CE1916E1F2AB70D00272F79 /* JSCache.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSCache.cpp; sourceTree = "<group>"; };
+               7CE1916E1F2AB70D00272F7A /* JSCacheStorage.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSCacheStorage.cpp; sourceTree = "<group>"; };
+               7CE1916E1F2AB70D00272F7B /* JSCacheQueryOptions.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSCacheQueryOptions.cpp; sourceTree = "<group>"; };
                7CE1916F1F2AB70F00272F78 /* JSFetchRequestRedirect.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = JSFetchRequestRedirect.cpp; sourceTree = "<group>"; };
                7CE58D491DD64A5B00128552 /* SVGPoint.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGPoint.h; sourceTree = "<group>"; };
                7CE58D4D1DD694FE00128552 /* SVGRectTraits.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SVGRectTraits.h; sourceTree = "<group>"; };
                        children = (
                                1221E0581C02B409006A1A00 /* Animation */,
                                1AE96A791D1A0A5C00B86768 /* ApplePay */,
+                               41FB27881F34461B00795488 /* CacheAPI */,
                                A83B79100CCB001B000B0825 /* Core */,
                                57C7A68D1E569A8400C67D71 /* Credentials */,
                                E1FF8F61180745C600132674 /* Crypto */,
                        path = opentype;
                        sourceTree = "<group>";
                };
+               41380C1E1F34366000155FDA /* cache */ = {
+                       isa = PBXGroup;
+                       children = (
+                               41380C201F34368A00155FDA /* Cache.cpp */,
+                               41380C251F34369A00155FDA /* Cache.h */,
+                               41380C231F34369400155FDA /* Cache.idl */,
+                               41FB279B1F34CEF000795487 /* CacheQueryOptions.h */,
+                               41FB27991F34CE9C00795487 /* CacheQueryOptions.idl */,
+                               41380C211F34368D00155FDA /* CacheStorage.cpp */,
+                               41380C221F34369000155FDA /* CacheStorage.h */,
+                               41380C241F34369700155FDA /* CacheStorage.idl */,
+                               41FB278E1F34C28200795487 /* DOMWindowCaches.cpp */,
+                               41FB278C1F34C28200795487 /* DOMWindowCaches.h */,
+                               41380C2B1F343E2F00155FDA /* DOMWindowCaches.idl */,
+                               41FB278F1F34C28200795487 /* WorkerGlobalScopeCaches.cpp */,
+                               41FB278D1F34C28200795487 /* WorkerGlobalScopeCaches.h */,
+                               41380C2A1F343E2F00155FDA /* WorkerGlobalScopeCaches.idl */,
+                       );
+                       path = cache;
+                       sourceTree = "<group>";
+               };
                4150F9ED12B6E0990008C860 /* shadow */ = {
                        isa = PBXGroup;
                        children = (
                        path = fetch;
                        sourceTree = "<group>";
                };
+               41FB27881F34461B00795488 /* CacheAPI */ = {
+                       isa = PBXGroup;
+                       children = (
+                               7CE1916E1F2AB70D00272F79 /* JSCache.cpp */,
+                               7CE1916E1F2AB70D00272F7A /* JSCacheStorage.cpp */,
+                               7CE1916E1F2AB70D00272F7B /* JSCacheQueryOptions.cpp */,
+                               7CE191641F2AB6FB00272F79 /* JSCache.h */,
+                               7CE191641F2AB6FB00272F7A /* JSCacheStorage.h */,
+                       );
+                       name = CacheAPI;
+                       sourceTree = "<group>";
+               };
                42A023FA1A39F13A00F722CF /* FetchAPI */ = {
                        isa = PBXGroup;
                        children = (
                                CE26169D187E6554007955F3 /* airplay */,
                                1A58E8611D19D37300C0EA73 /* applepay */,
                                832150791F27E96B0095B136 /* beacon */,
+                               41380C1E1F34366000155FDA /* cache */,
                                57C7A6881E56946D00C67D71 /* credentials */,
                                CDA98DBD16014E0800FEA3B1 /* encryptedmedia */,
                                41F54F7C1C50C4F600338488 /* fetch */,
                                E1BD331A182D8DDD00C05D9F /* CryptoAlgorithmRSASSA_PKCS1_v1_5.h in Headers */,
                                E1BD331C182D8EE900C05D9F /* CryptoAlgorithmRsaSsaParamsDeprecated.h in Headers */,
                                E125F82C1822CFEC00D84CD9 /* CryptoAlgorithmSHA1.h in Headers */,
+                               41380C291F3436AC00155FDA /* CacheStorage.h in Headers */,
                                E19AC3EF1824DC7900349426 /* CryptoAlgorithmSHA224.h in Headers */,
                                E19AC3F11824DC7900349426 /* CryptoAlgorithmSHA256.h in Headers */,
                                E19AC3F31824DC7900349426 /* CryptoAlgorithmSHA384.h in Headers */,
                                0F580B0D0F12A2690051D689 /* GraphicsLayer.h in Headers */,
                                499B3ED7128CD31400E726C2 /* GraphicsLayerCA.h in Headers */,
                                0F580B0E0F12A2690051D689 /* GraphicsLayerClient.h in Headers */,
+                               41380C271F3436AC00155FDA /* Cache.h in Headers */,
                                1AC69593161A1E53003732CB /* GraphicsLayerFactory.h in Headers */,
                                0FA24D7A162DF91900A3F4C0 /* GraphicsLayerUpdater.h in Headers */,
                                CEC337AF1A46086D009B8523 /* GraphicsServicesSPI.h in Headers */,
                                7CE191711F2ABE7100272F78 /* JSFetchReferrerPolicy.h in Headers */,
                                7E4C96DD1AD4483500365A50 /* JSFetchRequest.h in Headers */,
                                7CE191731F2ABE7100272F78 /* JSFetchRequestCache.h in Headers */,
+                               7CE191731F2ABE7100272F79 /* JSCache.h in Headers */,
+                               7CE191731F2ABE7100272F7A /* JSCacheStorage.h in Headers */,
                                7CE191751F2ABE7100272F78 /* JSFetchRequestCredentials.h in Headers */,
                                7CE191771F2ABE7100272F78 /* JSFetchRequestInit.h in Headers */,
                                7CE191791F2ABE7100272F78 /* JSFetchRequestMode.h in Headers */,
                                7CE191781F2ABE7100272F78 /* JSFetchRequestMode.cpp in Sources */,
                                7CE1917A1F2ABE7100272F78 /* JSFetchRequestRedirect.cpp in Sources */,
                                8E4C96DC1AD4483500365A50 /* JSFetchResponse.cpp in Sources */,
+                               7CE191721F2ABE7100272F79 /* JSCache.cpp in Sources */,
+                               7CE191721F2ABE7100272F7A /* JSCacheStorage.cpp in Sources */,
+                               7CE191721F2ABE7100272F7B /* JSCacheQueryOptions.cpp in Sources */,
                                BC00F0140E0A189500FD04E3 /* JSFile.cpp in Sources */,
                                2E3BC0CA117D3E0800B9409A /* JSFileError.cpp in Sources */,
                                BC00F0160E0A189500FD04E3 /* JSFileList.cpp in Sources */,
                                B2FA3DE50AB75A6F000E5AC4 /* JSSVGPolygonElement.cpp in Sources */,
                                B2FA3DE70AB75A6F000E5AC4 /* JSSVGPolylineElement.cpp in Sources */,
                                B2FA3DE90AB75A6F000E5AC4 /* JSSVGPreserveAspectRatio.cpp in Sources */,
+                               41FB279C1F34DB8A00795487 /* DOMWindowCaches.cpp in Sources */,
                                B2FA3DEB0AB75A6F000E5AC4 /* JSSVGRadialGradientElement.cpp in Sources */,
                                8542A7940AE5C94000DF58DF /* JSSVGRect.cpp in Sources */,
                                B2FA3DED0AB75A6F000E5AC4 /* JSSVGRectElement.cpp in Sources */,
                                07846342145B151A00A58DF1 /* JSTrackEvent.cpp in Sources */,
                                E17B492216A9B8FF001C8839 /* JSTransitionEvent.cpp in Sources */,
                                1A750D5C0A90DEE1000FF215 /* JSTreeWalker.cpp in Sources */,
+                               41380C261F3436A600155FDA /* Cache.cpp in Sources */,
                                516BB7940CE91E6800512F79 /* JSTreeWalkerCustom.cpp in Sources */,
                                A86629D009DA2B48009633A5 /* JSUIEvent.cpp in Sources */,
                                465307D11DB6EE4A00E4137C /* JSUIEventInit.cpp in Sources */,
                                93F19AB908245E59001E9ABC /* Range.cpp in Sources */,
                                F55B3DCD1251F12D003EF269 /* RangeInputType.cpp in Sources */,
                                5182C25B1F3143CD0059BA7C /* JSServiceWorkerRegistration.cpp in Sources */,
+                               41FB279D1F34DB8E00795487 /* WorkerGlobalScopeCaches.cpp in Sources */,
                                6E84E9E017668BEE00815B68 /* RasterShape.cpp in Sources */,
                                418C39611C8F0AB10051C8A3 /* ReadableStreamDefaultController.cpp in Sources */,
                                FD31603B12B0267600C1A359 /* RealtimeAnalyser.cpp in Sources */,
                                0F3F0E59157030C3006DA57F /* RenderGeometryMap.cpp in Sources */,
                                BC128B01137C8D4600CAC845 /* RenderGrid.cpp in Sources */,
                                BCEA4869097D93020094C9E4 /* RenderHTMLCanvas.cpp in Sources */,
+                               41380C281F3436AC00155FDA /* CacheStorage.cpp in Sources */,
                                0FD308D5117D168500A791F7 /* RenderIFrame.cpp in Sources */,
                                BCEA4875097D93020094C9E4 /* RenderImage.cpp in Sources */,
                                08F2F0091213E61700DCEC48 /* RenderImageResource.cpp in Sources */,
index b9eed3a..e20ee5c 100644 (file)
@@ -162,6 +162,9 @@ public:
     bool webGPUEnabled() const { return m_isWebGPUEnabled; }
 #endif
 
+    void setCacheAPIEnabled(bool isEnabled) { m_isCacheAPIEnabled = isEnabled; }
+    bool cacheAPIEnabled() const { return m_isCacheAPIEnabled; }
+
     void setFetchAPIEnabled(bool isEnabled) { m_isFetchAPIEnabled = isEnabled; }
     bool fetchAPIEnabled() const { return m_isFetchAPIEnabled; }
     
@@ -293,6 +296,7 @@ private:
     bool m_isWebGPUEnabled { false };
 #endif
 
+    bool m_isCacheAPIEnabled { false };
     bool m_isFetchAPIEnabled { true };
 
 #if ENABLE(DOWNLOAD_ATTRIBUTE)
index 3a39c94..1a93126 100644 (file)
@@ -1,3 +1,16 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        * Shared/WebPreferencesDefinitions.h:
+        * WebProcess/InjectedBundle/InjectedBundle.cpp:
+        (WebKit::InjectedBundle::overrideBoolPreferenceForTestRunner):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::updatePreferences):
+
 2017-08-04  Brian Burg  <bburg@apple.com>
 
         Expose WKPreferences SPI for toggling mock capture devices prompt
index a0dd52e..8d61caa 100644 (file)
     macro(WebRTCLegacyAPIDisabled, webRTCLegacyAPIDisabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, "Remove Legacy WebRTC API", "Remove Legacy WebRTC API") \
     macro(IsSecureContextAttributeEnabled, isSecureContextAttributeEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, "Secure Contexts API", "Enable Secure Contexts API") \
     macro(ServiceWorkersEnabled, serviceWorkersEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, "ServiceWorkers", "Enable ServiceWorkers") \
+    macro(CacheAPIEnabled, cacheAPIEnabled, Bool, bool, false, "Cache API", "Enable Cache API") \
     macro(SubresourceIntegrityEnabled, subresourceIntegrityEnabled, Bool, bool, DEFAULT_EXPERIMENTAL_FEATURES_ENABLED, "SubresourceIntegrity", "Enable SubresourceIntegrity") \
     macro(ViewportFitEnabled, viewportFitEnabled, Bool, bool, true, "Viewport Fit", "Enable viewport-fit viewport parameter") \
     macro(WebAnimationsEnabled, webAnimationsEnabled, Bool, bool, false, "Web Animations", "Web Animations prototype") \
index ae9d94f..9a8a60c 100644 (file)
@@ -185,6 +185,9 @@ void InjectedBundle::overrideBoolPreferenceForTestRunner(WebPageGroupProxy* page
         RuntimeEnabledFeatures::sharedFeatures().setWebAnimationsEnabled(enabled);
 #endif
 
+    if (preference == "WebKitCacheAPIEnabled")
+        RuntimeEnabledFeatures::sharedFeatures().setCacheAPIEnabled(enabled);
+
 #if ENABLE(STREAMS_API)
     if (preference == "WebKitReadableByteStreamAPIEnabled")
         RuntimeEnabledFeatures::sharedFeatures().setReadableByteStreamAPIEnabled(enabled);
index f144319..f0605d2 100644 (file)
@@ -3302,6 +3302,7 @@ void WebPage::updatePreferences(const WebPreferencesStore& store)
     settings.setServiceControlsEnabled(store.getBoolValueForKey(WebPreferencesKey::serviceControlsEnabledKey()));
 #endif
 
+    RuntimeEnabledFeatures::sharedFeatures().setCacheAPIEnabled(store.getBoolValueForKey(WebPreferencesKey::cacheAPIEnabledKey()));
     RuntimeEnabledFeatures::sharedFeatures().setFetchAPIEnabled(store.getBoolValueForKey(WebPreferencesKey::fetchAPIEnabledKey()));
 
 #if ENABLE(DOWNLOAD_ATTRIBUTE)
index fd327f8..1ab2d4e 100644 (file)
@@ -1,3 +1,19 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        * WebView/WebPreferenceKeysPrivate.h:
+        * WebView/WebPreferences.mm:
+        (+[WebPreferences initialize]):
+        (-[WebPreferences cacheAPIEnabled]):
+        (-[WebPreferences setCacheAPIEnabled:]):
+        * WebView/WebPreferencesPrivate.h:
+        * WebView/WebView.mm:
+        (-[WebView _preferencesChanged:]):
+
 2017-08-04  Matt Lewis  <jlewis3@apple.com>
 
         Unreviewed, rolling out r220271.
index 571e2b2..994ad4f 100644 (file)
 #define WebKitMediaKeysStorageDirectoryKey @"WebKitMediaKeysStorageDirectory"
 #define WebKitShadowDOMEnabledPreferenceKey @"WebKitShadowDOMEnabled"
 #define WebKitCustomElementsEnabledPreferenceKey @"WebKitCustomElementsEnabled"
+#define WebKitCacheAPIEnabledPreferenceKey @"WebKitCacheAPIEnabled"
 #define WebKitFetchAPIEnabledPreferenceKey @"WebKitFetchAPIEnabled"
 #define WebKitWritableStreamAPIEnabledPreferenceKey @"WebKitWritableStreamAPIEnabled"
 #define WebKitReadableByteStreamAPIEnabledPreferenceKey @"WebKitReadableByteStreamAPIEnabled"
index 3658ddf..0658dea 100644 (file)
@@ -632,6 +632,7 @@ public:
 #if ENABLE(WEBGPU)
         [NSNumber numberWithBool:NO], WebKitWebGPUEnabledPreferenceKey,
 #endif
+        [NSNumber numberWithBool:NO], WebKitCacheAPIEnabledPreferenceKey,
         [NSNumber numberWithBool:YES], WebKitFetchAPIEnabledPreferenceKey,
 
 #if ENABLE(STREAMS_API)
@@ -2983,6 +2984,16 @@ static NSString *classIBCreatorID = nil;
     [self _setBoolValue:flag forKey:WebKitCustomElementsEnabledPreferenceKey];
 }
 
+- (BOOL)cacheAPIEnabled
+{
+    return [self _boolValueForKey:WebKitCacheAPIEnabledPreferenceKey];
+}
+
+- (void)setCacheAPIEnabled:(BOOL)flag
+{
+    [self _setBoolValue:flag forKey:WebKitCacheAPIEnabledPreferenceKey];
+}
+
 - (BOOL)fetchAPIEnabled
 {
     return [self _boolValueForKey:WebKitFetchAPIEnabledPreferenceKey];
index 5602e5c..265da5d 100644 (file)
@@ -537,6 +537,9 @@ extern NSString *WebPreferencesCacheModelChangedInternalNotification;
 - (void)setCustomElementsEnabled:(BOOL)flag;
 - (BOOL)customElementsEnabled;
 
+- (BOOL)cacheAPIEnabled;
+- (void)setCacheAPIEnabled:(BOOL)enabled;
+
 - (void)setFetchAPIEnabled:(BOOL)flag;
 - (BOOL)fetchAPIEnabled;
 
index ab0889a..d9bf3ce 100644 (file)
@@ -2996,6 +2996,7 @@ static bool needsSelfRetainWhileLoadingQuirk()
 
     RuntimeEnabledFeatures::sharedFeatures().setCustomElementsEnabled([preferences customElementsEnabled]);
 
+    RuntimeEnabledFeatures::sharedFeatures().setCacheAPIEnabled([preferences cacheAPIEnabled]);
     RuntimeEnabledFeatures::sharedFeatures().setFetchAPIEnabled([preferences fetchAPIEnabled]);
 
 #if ENABLE(STREAMS_API)
index 73803de..d1f30d2 100644 (file)
@@ -1,3 +1,19 @@
+2017-08-04  Youenn Fablet  <youenn@apple.com>
+
+        [Cache API] Add Cache and CacheStorage IDL definitions
+        https://bugs.webkit.org/show_bug.cgi?id=175201
+
+        Reviewed by Brady Eidson.
+
+        * DumpRenderTree/mac/DumpRenderTree.mm:
+        (enableExperimentalFeatures):
+        (resetWebPreferencesToConsistentValues):
+        * WebKitTestRunner/InjectedBundle/InjectedBundle.cpp:
+        (WTR::InjectedBundle::beginTesting):
+        * WebKitTestRunner/InjectedBundle/TestRunner.cpp:
+        (WTR::TestRunner::setCacheAPIEnabled):
+        * WebKitTestRunner/InjectedBundle/TestRunner.h:
+
 2017-08-04  John Wilander  <wilander@apple.com>
 
         Resource Load Statistics: Report user interaction immediately, but only when needed
index df2ec08..427e47f 100644 (file)
@@ -853,6 +853,7 @@ static void enableExperimentalFeatures(WebPreferences* preferences)
     // FIXME: AsyncFrameScrollingEnabled
     [preferences setWebRTCLegacyAPIEnabled:YES];
     [preferences setCredentialManagementEnabled:YES];
+    [preferences setCacheAPIEnabled:NO];
     [preferences setReadableByteStreamAPIEnabled:YES];
     [preferences setWritableStreamAPIEnabled:YES];
 }
@@ -967,6 +968,8 @@ static void resetWebPreferencesToConsistentValues()
     [preferences setResourceTimingEnabled:YES];
     [preferences setUserTimingEnabled:YES];
 
+    [preferences setCacheAPIEnabled:NO];
+
     [WebPreferences _clearNetworkLoaderSession];
     [WebPreferences _setCurrentNetworkLoaderSessionCookieAcceptPolicy:NSHTTPCookieAcceptPolicyOnlyFromMainDocumentDomain];
 }
index 96b0113..357ee0e 100644 (file)
@@ -349,6 +349,8 @@ void InjectedBundle::beginTesting(WKDictionaryRef settings)
     m_testRunner->setWebGL2Enabled(true);
     m_testRunner->setWebGPUEnabled(true);
 
+    m_testRunner->setCacheAPIEnabled(true);
+
     m_testRunner->setWritableStreamAPIEnabled(true);
     m_testRunner->setReadableByteStreamAPIEnabled(true);
 
index 0832a0e..de62ddb 100644 (file)
@@ -387,6 +387,13 @@ void TestRunner::setWebGPUEnabled(bool enabled)
     WKBundleOverrideBoolPreferenceForTestRunner(injectedBundle.bundle(), injectedBundle.pageGroup(), key.get(), enabled);
 }
 
+void TestRunner::setCacheAPIEnabled(bool enabled)
+{
+    WKRetainPtr<WKStringRef> key(AdoptWK, WKStringCreateWithUTF8CString("WebKitCacheAPIEnabled"));
+    auto& injectedBundle = InjectedBundle::singleton();
+    WKBundleOverrideBoolPreferenceForTestRunner(injectedBundle.bundle(), injectedBundle.pageGroup(), key.get(), enabled);
+}
+
 void TestRunner::setWritableStreamAPIEnabled(bool enabled)
 {
     WKRetainPtr<WKStringRef> key(AdoptWK, WKStringCreateWithUTF8CString("WebKitWritableStreamAPIEnabled"));
index 3cbea67..cd4d5f2 100644 (file)
@@ -102,6 +102,7 @@ public:
     void setModernMediaControlsEnabled(bool);
     void setWebGL2Enabled(bool);
     void setWebGPUEnabled(bool);
+    void setCacheAPIEnabled(bool);
     void setWritableStreamAPIEnabled(bool);
     void setReadableByteStreamAPIEnabled(bool);