Update Web Platform Tests for storage APIs in 'data:' contexts

Per https://github.com/w3c/web-platform-tests/pull/4832 remove
WebSQL cases from WPT's workers/data-url*.html since it's not
otherwise tested in WPT, and the test "passes" even if the API is
not present. Also add an addition assertion that indexedDB is
present before blithely checking that using it throws.

WebSQL is not exposed to Workers in Chrome so we don't lose
coverage here - we only "passed" because the API was not present
in these contexts. The webexposed/ tests cover this.

Change-Id: I0aa05ff9e674351a2a49ba0bae8e5a9938b2cf34
Reviewed-on: https://chromium-review.googlesource.com/929602
Reviewed-by: Philip Jägenstedt <foolip@chromium.org>
Commit-Queue: Joshua Bell <jsbell@chromium.org>
Cr-Commit-Position: refs/heads/master@{#538833}
diff --git a/workers/data-url-shared.html b/workers/data-url-shared.html
index edaed99..7b51b4b 100644
--- a/workers/data-url-shared.html
+++ b/workers/data-url-shared.html
@@ -1,5 +1,5 @@
 <!DOCTYPE html>
-<title>data URL shared worker</title>
+<title>data URL shared workers</title>
 <script src="/common/get-host-info.sub.js"></script>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
@@ -15,8 +15,8 @@
   }, test_desc);
 }
 
-function assert_worker_throws(test_desc, worker_code, before_connect_worker_code) {
-  assert_worker_sends_pass(test_desc, '', `try { ${worker_code}; port.postMessage("FAIL"); } catch (e) { port.postMessage("PASS"); }`, before_connect_worker_code);
+function assert_worker_throws(test_desc, worker_code) {
+  assert_worker_sends_pass(test_desc, '', `try { ${worker_code}; port.postMessage("FAIL"); } catch (e) { port.postMessage("PASS"); }`);
 }
 
 // Any MIME type allowed
@@ -28,12 +28,17 @@
 assert_worker_sends_pass('communication goes both ways', 'application/javascript', 'port.onmessage = function(e) { port.postMessage("PASS"); }');
 
 // test access to storage APIs
-// once https://github.com/w3c/IndexedDB/pull/150 lands, this is spec conforming
-assert_worker_throws('indexedDB inaccessible', 'self.indexedDB.open("someDBName")');
-assert_worker_throws('Web SQL Database inaccessible', 'self.openDatabase("someDBName", "1.0", "someDBName", 1);');
+
+// https://w3c.github.io/IndexedDB/#dom-idbfactory-open
+assert_worker_sends_pass('indexedDB is present', '', 'port.postMessage("indexedDB" in self ? "PASS" : "FAIL")');
+assert_worker_throws('indexedDB is inaccessible', 'self.indexedDB.open("someDBName")');
+// Other standardized storage APIs are either not exposed to workers
+// (e.g. window.localStorage, window.sessionStorage), or are [SecureContext]
+// (e.g. self.caches).
 
 // 'data:' workers are cross-origin
 assert_worker_sends_pass('cross-origin worker', '', 'fetch("/").then(() => port.postMessage("FAIL"), () => port.postMessage("PASS"))');
+
 // 'data:' workers have opaque origin
 assert_worker_sends_pass('worker has opaque origin', 'application/javascript', 'if (self.location.origin == "null") port.postMessage("PASS"); else { port.postMessage("FAIL"); }');
 
diff --git a/workers/data-url.html b/workers/data-url.html
index 1308eba..f8fe65e 100644
--- a/workers/data-url.html
+++ b/workers/data-url.html
@@ -1,8 +1,7 @@
 <!DOCTYPE html>
-<title>Test workers can be started with a data URL</title>
+<title>data URL dedicated workers</title>
 <script src="/resources/testharness.js"></script>
 <script src="/resources/testharnessreport.js"></script>
-<div id="log"></div>
 <script>
 // Helper assert functions -START-
 function assert_worker_sends_pass(test_desc, mime_type, worker_code) {
@@ -36,7 +35,7 @@
 
 // Actual tests -START-
 
-// Any MIME type
+// Any MIME type allowed
 assert_worker_sends_pass('application/javascript MIME allowed', 'application/javascript', 'self.postMessage("PASS")');
 assert_worker_sends_pass('text/plain MIME allowed', 'text/plain', 'self.postMessage("PASS")');
 assert_worker_sends_pass('empty MIME allowed', '', 'self.postMessage("PASS")');
@@ -45,9 +44,14 @@
 assert_worker_sends_pass('communication goes both ways', 'application/javascript', 'onmessage = function(e) { self.postMessage("PASS"); }');
 
 // test access to storage APIs
-// once https://github.com/w3c/IndexedDB/pull/150 lands, this is spec conforming
-assert_worker_throws('indexedDB inaccessible', 'self.indexedDB.open("someDBName")');
-assert_worker_throws('Web SQL Database inaccessible', 'self.openDatabase("someDBName", "1.0", "someDBName", 1);');
+
+// https://w3c.github.io/IndexedDB/#dom-idbfactory-open
+assert_worker_sends_pass('indexedDB is present', '', 'self.postMessage("indexedDB" in self ? "PASS" : "FAIL")');
+assert_worker_throws('indexedDB is inaccessible', 'self.indexedDB.open("someDBName")');
+
+// Other standardized storage APIs are either not exposed to workers
+// (e.g. window.localStorage, window.sessionStorage), or are [SecureContext]
+// (e.g. self.caches).
 
 // 'data:' workers are cross-origin
 assert_worker_sends_pass('cross-origin worker', '', 'fetch("/").then(() => self.postMessage("FAIL"), () => self.postMessage("PASS"))');