Revision 89ba9443f1d80b2bea3a33477b1ac53585fbb16d authored by jimevans on 16 March 2018, 14:46:32 UTC, committed by Andreas Tolfsen on 16 March 2018, 14:46:32 UTC
When the context element is `document.documentElement`, and an attempt is
made to find elements from that context element using an XPath of `..`, a
snapshot is returned containing the `document` object. While this is
apparently the correct behavior for XPath, the WebDriver spec says that if
the object in the snapshot is not an element, we should return an error
with error code "invalid selector." The test_parent_htmldocument test in
both find_element_from_element.py and find_elements_from_element.py expect
a success in this case. This commit changes the tests to correctly expect
an error from the driver.
1 parent 1cbb928
Raw File
data-url.html
<!DOCTYPE html>
<title>data URL dedicated workers</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
// Helper assert functions -START-
function assert_worker_sends_pass(test_desc, mime_type, worker_code) {
  async_test(function(t) {
    var w = new Worker(`data:${mime_type},${worker_code}`);
    w.onmessage = t.step_func_done(function(e) {
      assert_equals(e.data, 'PASS');
    });
    w.postMessage('SEND_PASS');
  }, test_desc);
}

function assert_worker_throws(test_desc, worker_code) {
  assert_worker_sends_pass(test_desc, '', `try { ${worker_code}; self.postMessage("FAIL"); } catch (e) { self.postMessage("PASS"); }`);
}

function assert_worker_construction_fails(test_desc, mime_type, worker_code) {
  async_test(function(t) {
    var w = new Worker(`data:${mime_type},${worker_code};postMessage("PASS")`);
    w.onmessage = t.step_func_done(function(e) {
      assert_unreached('Should not receive any message back.');
    });
    w.onerror = t.step_func_done(function(e) {
      assert_true(true, 'Should throw ' + e.message);
      // Stop the error from being propagated to the WPT test harness
      e.preventDefault();
    });
  }, test_desc);
}
// Helper assert functions -END-

// Actual tests -START-

// 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")');

// Communications goes both ways
assert_worker_sends_pass('communication goes both ways', 'application/javascript', 'onmessage = function(e) { self.postMessage("PASS"); }');

// test access to storage APIs

// 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"))');

// 'data:' workers have opaque origin
assert_worker_sends_pass('worker has opaque origin', 'application/javascript', 'if (self.location.origin == "null") {postMessage("PASS");} else {postMessage("FAIL");}');

setup({allow_uncaught_exception:true});
// invalid javascript will trigger an ErrorEvent
assert_worker_construction_fails('invalid javascript produces error', 'application/javascript', '}x=3');

// Actual tests -END-
</script>
back to top