author | James Graham <james@hoppipolla.co.uk> |
Mon, 11 May 2015 14:28:20 +0100 | |
changeset 243408 | c56dffd8e15d54564192deb9a2a23b9bd409860a |
parent 243407 | 5eec0168c91685ed54993c1c923c33cad65965d7 |
child 243409 | ed9733797a3116fff8f62f489c84aaaa2e2ecc8c |
push id | 28738 |
push user | cbook@mozilla.com |
push date | Tue, 12 May 2015 14:11:31 +0000 |
treeherder | mozilla-central@bedce1b405a3 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | testonly |
bugs | 1163709 |
milestone | 40.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/testing/web-platform/meta/MANIFEST.json +++ b/testing/web-platform/meta/MANIFEST.json @@ -16119,16 +16119,20 @@ "path": "quirks-mode/table-cell-width-calculation.html", "url": "/quirks-mode/table-cell-width-calculation.html" }, { "path": "quirks-mode/unitless-length.html", "url": "/quirks-mode/unitless-length.html" }, { + "path": "referrer-policy/no-referrer-policy/no-referrer-policy.html", + "url": "/referrer-policy/no-referrer-policy/no-referrer-policy.html" + }, + { "path": "resource-timing/test_resource_timing.html", "url": "/resource-timing/test_resource_timing.html" }, { "path": "selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html", "url": "/selectors-api/tests/submissions/Opera/ParentNode-query-queryAll.html" }, { @@ -24836,12 +24840,12 @@ "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped-ref.html", "==" ] ], "url": "/webvtt/rendering/cues-with-video/processing-model/too_many_cues_wrapped.html" } ] }, - "rev": "28de405307d9613052ccd1228be7888e109738a6", + "rev": "5aa79b303c81164549041d1bd9f7887390a10f72", "url_base": "/", "version": 2 } \ No newline at end of file
--- a/testing/web-platform/meta/mozilla-sync +++ b/testing/web-platform/meta/mozilla-sync @@ -1,1 +1,1 @@ -6e958cb0c757bc80226f22d98a93f7fec974aa6c \ No newline at end of file +36bf12e75b3d8fc5ac90187f21d50a3eed5a0442 \ No newline at end of file
--- a/testing/web-platform/tests/IndexedDB/idbcursor_advance_index.htm +++ b/testing/web-platform/tests/IndexedDB/idbcursor_advance_index.htm @@ -11,17 +11,17 @@ t = async_test(), records = [ { pKey: "primaryKey_0", iKey: "indexKey_0" }, { pKey: "primaryKey_1", iKey: "indexKey_1" }, { pKey: "primaryKey_2", iKey: "indexKey_2" }, { pKey: "primaryKey_3", iKey: "indexKey_3" }]; var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { - db = event.target.result; + db = e.target.result; var store = db.createObjectStore("test", {keyPath:"pKey"}); store.createIndex("idx", "iKey"); for(var i = 0; i < records.length; i++) { store.add(records[i]); } };
--- a/testing/web-platform/tests/IndexedDB/idbcursor_advance_objectstore.htm +++ b/testing/web-platform/tests/IndexedDB/idbcursor_advance_objectstore.htm @@ -11,17 +11,17 @@ t = async_test(), records = [ { pKey: "primaryKey_0" }, { pKey: "primaryKey_1" }, { pKey: "primaryKey_2" }, { pKey: "primaryKey_3" }]; var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { - db = event.target.result; + db = e.target.result; var store = db.createObjectStore("test", {keyPath:"pKey"}); for(var i = 0; i < records.length; i++) { store.add(records[i]); } }; open_rq.onsuccess = function (e) {
--- a/testing/web-platform/tests/IndexedDB/idbdatabase_close.htm +++ b/testing/web-platform/tests/IndexedDB/idbdatabase_close.htm @@ -24,17 +24,17 @@ open_rq.onsuccess = function(e) { rq.onblocked = t.step_func(function (e) { blocked_fired = counter++; db.close(); }); rq.onupgradeneeded = t.step_func(function (e) { upgradeneeded_fired = counter++; }); rq.onsuccess = t.step_func(function (e) { - assert_equals(versionchange_fired, 0, 'block event fired #') + assert_equals(versionchange_fired, 0, 'versionchange event fired #') assert_equals(blocked_fired, 1, 'block event fired #') assert_equals(upgradeneeded_fired, 2, 'second upgradeneeded event fired #') t.done(); }); rq.onerror = fail(t, 'Unexpected database deletion error'); };
--- a/testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore11.htm +++ b/testing/web-platform/tests/IndexedDB/idbdatabase_createObjectStore11.htm @@ -1,11 +1,11 @@ <!DOCTYPE html> <meta charset="utf-8"> -<title>IDBDatabase.createObjectStore() - Attampt Create Exsists Object Store With Difference keyPath throw ConstraintError </title> +<title>IDBDatabase.createObjectStore() - attempting to create an existing object store with a different keyPath throw ConstraintError </title> <link rel="author" title="Intel" href="http://www.intel.com"> <link rel="help" href="https://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#widl-IDBDatabase-createObjectStore-IDBObjectStore-DOMString-name-IDBObjectStoreParameters-optionalParameters"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <script src="support.js"></script> <div id="log"></div> <script> var t = async_test(),
--- a/testing/web-platform/tests/IndexedDB/idbfactory_open9.htm +++ b/testing/web-platform/tests/IndexedDB/idbfactory_open9.htm @@ -42,17 +42,17 @@ should_throw({ toString: function() { return {}; }, valueOf: function() { return {}; }, }, 'object (third)') /* Valid */ function should_work(val) { var t = async_test("Calling open() with version argument 1.5 should not throw.") - var rq = createdb(t) + var rq = createdb(t, val) rq.onupgradeneeded = function() { t.done() } } should_work(1.5) </script>
--- a/testing/web-platform/tests/IndexedDB/idbobjectstore_openCursor.htm +++ b/testing/web-platform/tests/IndexedDB/idbobjectstore_openCursor.htm @@ -20,20 +20,23 @@ open_rq.onsuccess = function(e) { var count = 0 var txn = db.transaction("store") txn.objectStore("store") .openCursor().onsuccess = this.step_func(function(e) { - if (e.target.result) + if (e.target.result) { + count += 1; e.target.result.continue() + } }) txn.oncomplete = this.step_func(function() { + assert_equals(count, 100); this.done() }) } </script> <div id="log"></div>
--- a/testing/web-platform/tests/IndexedDB/idbtransaction_abort.htm +++ b/testing/web-platform/tests/IndexedDB/idbtransaction_abort.htm @@ -2,17 +2,16 @@ <meta charset=utf-8> <title>IDBTransaction - abort</title> <link rel="author" href="mailto:odinho@opera.com" title="Odin Hørthe Omdal"> <script src=/resources/testharness.js></script> <script src=/resources/testharnessreport.js></script> <script src=support.js></script> <script> - // TODO XXX DO THE IDBTransaction abort test here here var db, aborted, t = async_test(document.title, {timeout: 10000}), record = { indexedProperty: "bar" }; var open_rq = createdb(t); open_rq.onupgradeneeded = function(e) { db = e.target.result; var txn = e.target.transaction,
--- a/testing/web-platform/tests/IndexedDB/idbversionchangeevent.htm +++ b/testing/web-platform/tests/IndexedDB/idbversionchangeevent.htm @@ -31,17 +31,17 @@ assert_equals(e.oldVersion, 3, "old version (versionchange)"); assert_equals(e.newVersion, null, "new version (versionchange)"); assert_true(e instanceof IDBVersionChangeEvent, "versionchange instanceof IDBVersionChangeEvent"); db.close(); }); // Errors db.onerror = fail(t, "db.error"); - db.abort = fail(t, "db.abort"); + db.onabort = fail(t, "db.abort"); setTimeout(t.step_func(deleteDB), 10); }); // Errors openrq.onerror = fail(t, "open.error"); openrq.onblocked = fail(t, "open.blocked");
--- a/testing/web-platform/tests/docs/github-101.md +++ b/testing/web-platform/tests/docs/github-101.md @@ -262,17 +262,17 @@ GitHub UI. Below is one method and othe f. If you'd like to add more detailed comments, use the comment field below. g. Click ![the send pull request button][sendpullrequest] 4. Wait for feedback on your pull request and once your pull request is -accepted, detele youre branch (see ' +accepted, delete your branch (see ' [When Pull Request is Accepted][cleanup]'). That's it! If you're currently at a Test the Web Forward event, find an expert nearby and ask for a review. If you're doing this on your own (AWESOME!), your pull request will go into a queue and will be reviewed soon. ## Modify
--- a/testing/web-platform/tests/html/semantics/document-metadata/the-meta-element/the-lang-attribute-012.html +++ b/testing/web-platform/tests/html/semantics/document-metadata/the-meta-element/the-lang-attribute-012.html @@ -5,28 +5,28 @@ <meta http-equiv="Content-Language" content="ko,zh,ja" > <title>Multiple languages in Content-Language meta element</title> <link rel='author' title='Richard Ishida' href='mailto:ishida@w3.org'> <link rel='help' href='https://html.spec.whatwg.org/multipage/#pragma-directives'> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> <meta name='flags' content='dom'> <style type='text/css'> - #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } - #colonlangcontroltest:lang(xx) { display:none; } + #colonlangcontroltest { color: red; font-weight: bold; width: 400px; } + #colonlangcontroltest:lang(xx) { display:none; } .test div { width: 50px; } #box:lang(ko) { width: 100px; } #box:lang(zh) { width: 100px; } #box:lang(ja) { width: 100px; } - /* styling for debugging related notes */ - .notes span:lang(ko) { background-color: #0000FF; color: white; padding: 0 5px; } - .notes span:lang(zh) { background-color: #0000FF; color: white; padding: 0 5px; } - .notes span:lang(ja) { background-color: #0000FF; color: white; padding: 0 5px; } + /* styling for debugging related notes */ + .notes span:lang(ko) { background-color: #0000FF; color: white; padding: 0 5px; } + .notes span:lang(zh) { background-color: #0000FF; color: white; padding: 0 5px; } + .notes span:lang(ja) { background-color: #0000FF; color: white; padding: 0 5px; } </style> </head> <body> <div class="test"><div id="box"> </div></div>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/pattern_attribute.html +++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/pattern_attribute.html @@ -1,34 +1,34 @@ <!DOCTYPE html> <html> <head> <title>Pattern Attribute</title> <meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" /> - <link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com"> - <link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu"> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-pattern"> + <link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com"> + <link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-pattern"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> - <h1>Pattern Attribute</h1> - <div style="display: none"> - <input pattern="[a-z]{3}" value="abcd" title="three letters max"/> - </div> + <h1>Pattern Attribute</h1> + <div style="display: none"> + <input pattern="[a-z]{3}" value="abcd" title="three letters max"/> + </div> <div id="log"> </div> - <script type="text/javascript"> + <script type="text/javascript"> - test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("pattern"), "[a-z]{3}")}, "pattern attribute support on input element"); + test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("pattern"), "[a-z]{3}")}, "pattern attribute support on input element"); - </script> + </script> </body> </html>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/required_attribute.html +++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/required_attribute.html @@ -1,34 +1,34 @@ <!DOCTYPE html> <html> <head> <title>Required Attribute</title> <meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" /> - <link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com"> - <link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu"> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-required"> + <link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com"> + <link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#attr-input-required"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> - <h1>Required Attribute</h1> - <div style="display: none"> - <input type="text" required="required" /> - </div> + <h1>Required Attribute</h1> + <div style="display: none"> + <input type="text" required="required" /> + </div> <div id="log"> </div> - <script type="text/javascript"> + <script type="text/javascript"> - test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("required"), "required")}, "required attribute support on input element"); + test(function() {assert_equals(document.getElementsByTagName("input")[0].getAttribute("required"), "required")}, "required attribute support on input element"); - </script> + </script> </body> </html>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/search_input.html +++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/search_input.html @@ -1,35 +1,35 @@ <!DOCTYPE html> <html> <head> <title>Search Input</title> <meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" /> - <link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com"> - <link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu"> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element"> + <link rel="author" title="Fabrice Clari" href="mailto:f.clari@inno-group.com"> + <link rel="author" title="Dimitri Bocquet" href="mailto:Dimitri.Bocquet@mosquito-fp7.eu"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> - <h1>Search Input</h1> - <input type="search" style="display:none" placeholder="Search..." /> + <h1>Search Input</h1> + <input type="search" style="display:none" placeholder="Search..." /> <div id="log"> </div> - <script type="text/javascript"> + <script type="text/javascript"> - test(function() {assert_equals(document.getElementsByTagName("input")[0].type, "search")}, "search type support on input element", { - "help" : "https://html.spec.whatwg.org/multipage/#dom-input-type" }); - test(function() {assert_equals(document.getElementsByTagName("input")[0].placeholder, "Search...")}, "placeholder attribute support on input element", { - "help" : "https://html.spec.whatwg.org/multipage/#dom-input-placeholder" }); + test(function() {assert_equals(document.getElementsByTagName("input")[0].type, "search")}, "search type support on input element", { + "help" : "https://html.spec.whatwg.org/multipage/#dom-input-type" }); + test(function() {assert_equals(document.getElementsByTagName("input")[0].placeholder, "Search...")}, "placeholder attribute support on input element", { + "help" : "https://html.spec.whatwg.org/multipage/#dom-input-placeholder" }); - </script> + </script> </body> </html>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/telephone.html +++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/telephone.html @@ -1,84 +1,84 @@ <!DOCTYPE html> <html> <head> - <title>Input tel</title> - <link rel="author" title="Kazuki Kanamori" href="mailto:yogurito@gmail.com"> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#telephone-state-(type=tel)"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> + <title>Input tel</title> + <link rel="author" title="Kazuki Kanamori" href="mailto:yogurito@gmail.com"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#telephone-state-(type=tel)"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> </head> <body> - <h1>Input tel</h1> - <input type="tel" id="novalue" /> - <input type="tel" id="value_with_LF" value="0
1" /> - <input type="tel" id="value_with_CR" value="0
1" /> - <input type="tel" id="value_with_CRLF" value="0

1" /> - <div id="log"> - </div> + <h1>Input tel</h1> + <input type="tel" id="novalue" /> + <input type="tel" id="value_with_LF" value="0
1" /> + <input type="tel" id="value_with_CR" value="0
1" /> + <input type="tel" id="value_with_CRLF" value="0

1" /> + <div id="log"> + </div> - <script type="text/javascript"> - var element = document.getElementById('novalue'); - test(function(){ - assert_equals(element.type, 'tel'); - }, 'tel type supported on input element'); - test(function(){ - element.value = '0\u000A1'; - assert_equals(element.value, '01'); - }, 'User agents must not allow users to insert "LF" (U+000A)'); - test(function(){ - element.value = '0\u000D1'; - assert_equals(element.value, '01'); - }, 'User agents must not allow users to insert "CR" (U+000D)'); + <script type="text/javascript"> + var element = document.getElementById('novalue'); + test(function(){ + assert_equals(element.type, 'tel'); + }, 'tel type supported on input element'); + test(function(){ + element.value = '0\u000A1'; + assert_equals(element.value, '01'); + }, 'User agents must not allow users to insert "LF" (U+000A)'); + test(function(){ + element.value = '0\u000D1'; + assert_equals(element.value, '01'); + }, 'User agents must not allow users to insert "CR" (U+000D)'); - element = document.getElementById('value_with_LF'); - test(function(){ - assert_equals(element.value, '01'); - }, 'The value attribute, if specified, must have a value that contains no "LF" (U+000A)'); + element = document.getElementById('value_with_LF'); + test(function(){ + assert_equals(element.value, '01'); + }, 'The value attribute, if specified, must have a value that contains no "LF" (U+000A)'); - element = document.getElementById('value_with_CR'); - test(function(){ - assert_equals(element.value, '01'); - }, 'The value attribute, if specified, must have a value that contains no "CR" (U+000D)'); + element = document.getElementById('value_with_CR'); + test(function(){ + assert_equals(element.value, '01'); + }, 'The value attribute, if specified, must have a value that contains no "CR" (U+000D)'); - test(function(){ - element = document.getElementById('novalue'); - element.value = '0\u000D\u000A1'; - assert_equals(element.value, '01'); + test(function(){ + element = document.getElementById('novalue'); + element.value = '0\u000D\u000A1'; + assert_equals(element.value, '01'); - element = document.getElementById('value_with_CRLF'); - assert_equals(element.value, '01'); - }, 'The value sanitization algorithm is as follows: Strip line breaks from the value'); + element = document.getElementById('value_with_CRLF'); + assert_equals(element.value, '01'); + }, 'The value sanitization algorithm is as follows: Strip line breaks from the value'); - element = document.getElementById('novalue'); - test(function(){ - element.value = '+811234'; - assert_equals(element.value, '+811234'); - }, 'Element can accept the phone number with plus sign(country code)'); - test(function(){ - element.value = '1234#5678'; - assert_equals(element.value, '1234#5678'); - }, 'Element can accept the phone number with hash mark(extension number)'); - test(function(){ - element.value = '123-456-789'; - assert_equals(element.value, '123-456-789'); - }, 'Element can accept the phone number with hyphen'); - test(function(){ - element.value = '123.456.789'; - assert_equals(element.value, '123.456.789'); - }, 'Element can accept the phone number with dots'); - test(function(){ - element.value = '1 23 4'; - assert_equals(element.value, '1 23 4'); - }, 'Element can accept the phone number with whitespace'); - test(function(){ - element.value = ' 1234 '; - assert_equals(element.value, ' 1234 '); - }, 'Element can accept the phone number with leading & following whitespaces'); - test(function(){ - element.value = '(03)12345678'; - assert_equals(element.value, '(03)12345678'); - }, 'Element can accept the phone number with parentheses(area code)'); - </script> + element = document.getElementById('novalue'); + test(function(){ + element.value = '+811234'; + assert_equals(element.value, '+811234'); + }, 'Element can accept the phone number with plus sign(country code)'); + test(function(){ + element.value = '1234#5678'; + assert_equals(element.value, '1234#5678'); + }, 'Element can accept the phone number with hash mark(extension number)'); + test(function(){ + element.value = '123-456-789'; + assert_equals(element.value, '123-456-789'); + }, 'Element can accept the phone number with hyphen'); + test(function(){ + element.value = '123.456.789'; + assert_equals(element.value, '123.456.789'); + }, 'Element can accept the phone number with dots'); + test(function(){ + element.value = '1 23 4'; + assert_equals(element.value, '1 23 4'); + }, 'Element can accept the phone number with whitespace'); + test(function(){ + element.value = ' 1234 '; + assert_equals(element.value, ' 1234 '); + }, 'Element can accept the phone number with leading & following whitespaces'); + test(function(){ + element.value = '(03)12345678'; + assert_equals(element.value, '(03)12345678'); + }, 'Element can accept the phone number with parentheses(area code)'); + </script> </body> </html>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/time.html +++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/time.html @@ -1,207 +1,207 @@ <!DOCTYPE html> <html> <head> <title>Input Time</title> <meta name=viewport content="width=device-width, maximum-scale=1.0, user-scalable=no" /> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-input-element"> <script src="/resources/testharness.js"></script> <script src="/resources/testharnessreport.js"></script> </head> <body> - <h1>Input Time</h1> - <div style="display:none;"> - <input type="time "id="chkDefaultValue" /> - <input type="time" id="chkStep" /> - <input type="time" id="chkSetValueTest" /> - <input type="time" id="chkSupportAttribute" min="01:01:01.001" max="12:12:12.012" step="600" /> - </div> - <div id="log"> + <h1>Input Time</h1> + <div style="display:none;"> + <input type="time "id="chkDefaultValue" /> + <input type="time" id="chkStep" /> + <input type="time" id="chkSetValueTest" /> + <input type="time" id="chkSupportAttribute" min="01:01:01.001" max="12:12:12.012" step="600" /> + </div> + <div id="log"> </div> - <script type="text/javascript"> + <script type="text/javascript"> /* check default value */ test(function(){ assert_equals(document.getElementById("chkDefaultValue").value, ""); }, "time element of default time value"); test(function(){assert_equals(document.getElementById('chkStep').step, ""); -} , "step attribute on default value check"); +}, "step attribute on default value check"); test(function(){assert_equals(document.getElementById('chkDefaultValue').max, ""); -} , "max attribute on default value check") +}, "max attribute on default value check") test(function(){assert_equals(document.getElementById('chkDefaultValue').max, ""); -} , "min attribute on default value check") +}, "min attribute on default value check") /* simple attribute test*/ test(function(){assert_equals(document.getElementById("chkSupportAttribute").type,"time");} - , "type attribute support on input element"); + , "type attribute support on input element"); test(function(){assert_equals(document.getElementById('chkSupportAttribute').min, "01:01:01.001")} - , "max attribute support on input element"); + , "max attribute support on input element"); test(function(){assert_equals(document.getElementById('chkSupportAttribute').max, "12:12:12.012")} - , "min attribute support on input element"); + , "min attribute support on input element"); test(function(){assert_equals(document.getElementById("chkSupportAttribute").step, "600")} - , "step attribute support on input element"); + , "step attribute support on input element"); /* check step up and down */ var _StepTest = document.getElementById("chkStep"); test(function(){ assert_true(typeof(_StepTest.stepUp) ==="function" ) } , "stepUp function support on input Element"); test(function(){ assert_true(typeof(_StepTest.stepDown) ==="function" ) } , "stepDown function support on input Element"); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = ""; - _StepTest.stepUp(); - assert_equals(_StepTest.value,"12:01"); + _StepTest.value = "12:00"; + _StepTest.step = ""; + _StepTest.stepUp(); + assert_equals(_StepTest.value,"12:01"); } , "stepUp step value empty on default step value "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = ""; - _StepTest.stepDown(); - assert_equals(_StepTest.value,"11:59"); + _StepTest.value = "12:00"; + _StepTest.step = ""; + _StepTest.stepDown(); + assert_equals(_StepTest.value,"11:59"); }, "stepDown step value empty default step value"); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "-600"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "12:01"); + _StepTest.value = "12:00"; + _StepTest.step = "-600"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "12:01"); },"stepUp on step value minus"); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "-600"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "11:59"); + _StepTest.value = "12:00"; + _StepTest.step = "-600"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "11:59"); },"stepDown on step value minus"); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "0"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "12:01"); + _StepTest.value = "12:00"; + _StepTest.step = "0"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "12:01"); } , "stepUp on step value zero "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "0"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "11:59"); + _StepTest.value = "12:00"; + _StepTest.step = "0"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "11:59"); } , "stepDown on step value zero "); test(function(){ - _StepTest.value = "00:00"; - _StepTest.step = "86399"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "23:59:59"); + _StepTest.value = "00:00"; + _StepTest.step = "86399"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "23:59:59"); } , "stepUp on step value 24 hour"); test(function(){ - _StepTest.value = "23:59:59"; - _StepTest.step = "86399"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "00:00:00"); + _StepTest.value = "23:59:59"; + _StepTest.step = "86399"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "00:00:00"); } , "stepDown on step value 24 hour "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "3600"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "13:00"); + _StepTest.value = "12:00"; + _StepTest.step = "3600"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "13:00"); } , "stepUp on step value hour "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "3600"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "11:00"); + _StepTest.value = "12:00"; + _StepTest.step = "3600"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "11:00"); } , "stepDown on step value hour "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "1"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "12:00:01"); + _StepTest.value = "12:00"; + _StepTest.step = "1"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "12:00:01"); } , "stepUp on step value second "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "1"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "11:59:59"); + _StepTest.value = "12:00"; + _StepTest.step = "1"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "11:59:59"); } , "stepDown on step value second "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "0.001"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "12:00:00.001"); + _StepTest.value = "12:00"; + _StepTest.step = "0.001"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "12:00:00.001"); } , "stepUp on step value miri second "); test(function(){ - _StepTest.value = "12:00"; - _StepTest.step = "0.001"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "11:59:59.999"); + _StepTest.value = "12:00"; + _StepTest.step = "0.001"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "11:59:59.999"); } , "stepDown on step value miri second "); test(function(){ - _StepTest.value = "13:00:00"; - _StepTest.step = "1"; - _StepTest.stepUp(2); - assert_equals(_StepTest.value, "13:00:02"); + _StepTest.value = "13:00:00"; + _StepTest.step = "1"; + _StepTest.stepUp(2); + assert_equals(_StepTest.value, "13:00:02"); }, "stepUp argment 2 times"); test(function(){ - _StepTest.value = "13:00:00"; - _StepTest.step = "1"; - _StepTest.stepDown(2); - assert_equals(_StepTest.value, "12:59:58"); + _StepTest.value = "13:00:00"; + _StepTest.step = "1"; + _StepTest.stepDown(2); + assert_equals(_StepTest.value, "12:59:58"); }, "stepDown argment 2 times"); test(function(){ - _StepTest.max = "15:00"; - _StepTest.value = "15:00"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "15:00"); - _StepTest.max = ""; + _StepTest.max = "15:00"; + _StepTest.value = "15:00"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "15:00"); + _StepTest.max = ""; } , "stepUp stop because it exceeds the maximum value"); test(function(){ - _StepTest.min = "13:00"; - _StepTest.value = "13:00"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "13:00"); - _StepTest.min=""; + _StepTest.min = "13:00"; + _StepTest.value = "13:00"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "13:00"); + _StepTest.min=""; } , "stepDown Stop so lower than the minimum value"); test(function(){ - _StepTest.max = "15:01"; - _StepTest.value = "15:00"; - _StepTest.step = "120"; - _StepTest.stepUp(); - assert_equals(_StepTest.value, "15:01"); - _StepTest.max = ""; + _StepTest.max = "15:01"; + _StepTest.value = "15:00"; + _StepTest.step = "120"; + _StepTest.stepUp(); + assert_equals(_StepTest.value, "15:01"); + _StepTest.max = ""; } , "stop at border on stepUp"); test(function(){ - _StepTest.min = "12:59"; - _StepTest.value = "13:00"; - _StepTest.step = "120"; - _StepTest.stepDown(); - assert_equals(_StepTest.value, "12:59"); - _StepTest.min=""; + _StepTest.min = "12:59"; + _StepTest.value = "13:00"; + _StepTest.step = "120"; + _StepTest.stepDown(); + assert_equals(_StepTest.value, "12:59"); + _StepTest.min=""; } , "stop at border on stepDown"); test(function(){ - _StepTest.value = ""; - _StepTest.step = "60"; + _StepTest.value = ""; + _StepTest.step = "60"; _StepTest.stepUp(); - assert_equals(_StepTest.value, "00:01"); + assert_equals(_StepTest.value, "00:01"); } , " empty value of stepUp"); /* set value test */ test(function(){ - var _time = document.getElementById("chkSetValueTest"); - _time.value = "12:00:00.000"; - assert_equals(_time.value, "12:00:00.000"); - _time.value = "hh:mi:ss.sss"; - assert_equals(_time.value, ""); + var _time = document.getElementById("chkSetValueTest"); + _time.value = "12:00:00.000"; + assert_equals(_time.value, "12:00:00.000"); + _time.value = "hh:mi:ss.sss"; + assert_equals(_time.value, ""); }, "set value on not time format value"); - </script> + </script> </body> </html>
--- a/testing/web-platform/tests/html/semantics/forms/the-input-element/url.html +++ b/testing/web-platform/tests/html/semantics/forms/the-input-element/url.html @@ -1,59 +1,59 @@ <!DOCTYPE html> <html> <head> - <title>Input url</title> - <link rel="author" title="Hyeonseok Shin" href="mailto:hyeonseok@gmail.com"> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#url-state-%28type=url%29"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> + <title>Input url</title> + <link rel="author" title="Hyeonseok Shin" href="mailto:hyeonseok@gmail.com"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#url-state-%28type=url%29"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> </head> <body> - <h1>Input url</h1> - <div style="display: none"> - <input type="url" id="type_support" /> - <input type="url" id="set_value_LF" /> - <input type="url" id="set_value_CR" /> - <input type="url" id="set_value_CRLF" /> - <input type="url" id="value_with_CRLF" value="a
a" /> - <input type="url" id="value_with_leading_trailing_white_space" value=" aa " /> - <input type="url" id="value_with_leading_trailing_inner_white_space" value=" a a " /> - </div> - <div id="log"> - </div> + <h1>Input url</h1> + <div style="display: none"> + <input type="url" id="type_support" /> + <input type="url" id="set_value_LF" /> + <input type="url" id="set_value_CR" /> + <input type="url" id="set_value_CRLF" /> + <input type="url" id="value_with_CRLF" value="a
a" /> + <input type="url" id="value_with_leading_trailing_white_space" value=" aa " /> + <input type="url" id="value_with_leading_trailing_inner_white_space" value=" a a " /> + </div> + <div id="log"> + </div> - <script type="text/javascript"> - test(function(){ - var element = document.getElementById('type_support'); - assert_equals(element.type, 'url'); - }, 'url type supported on input element'); + <script type="text/javascript"> + test(function(){ + var element = document.getElementById('type_support'); + assert_equals(element.type, 'url'); + }, 'url type supported on input element'); - test(function(){ - var element = document.getElementById('set_value_LF'); - element.value = 'a\u000Aa'; - assert_equals(element.value, 'aa'); + test(function(){ + var element = document.getElementById('set_value_LF'); + element.value = 'a\u000Aa'; + assert_equals(element.value, 'aa'); - element = document.getElementById('set_value_CR'); - element.value = 'a\u000Da'; - assert_equals(element.value, 'aa'); + element = document.getElementById('set_value_CR'); + element.value = 'a\u000Da'; + assert_equals(element.value, 'aa'); - element = document.getElementById('set_value_CRLF'); - element.value = 'a\u000D\u000Aa'; - assert_equals(element.value, 'aa'); - }, 'The value must not be set with "LF" (U+000A) or "CR" (U+000D)'); + element = document.getElementById('set_value_CRLF'); + element.value = 'a\u000D\u000Aa'; + assert_equals(element.value, 'aa'); + }, 'The value must not be set with "LF" (U+000A) or "CR" (U+000D)'); - test(function(){ - var element = document.getElementById('value_with_CRLF'); - assert_equals(element.value, 'aa'); - }, 'The value sanitization algorithm is as follows: Strip line breaks from the value'); + test(function(){ + var element = document.getElementById('value_with_CRLF'); + assert_equals(element.value, 'aa'); + }, 'The value sanitization algorithm is as follows: Strip line breaks from the value'); - test(function(){ - var element = document.getElementById('value_with_leading_trailing_white_space'); - assert_equals(element.value, 'aa'); + test(function(){ + var element = document.getElementById('value_with_leading_trailing_white_space'); + assert_equals(element.value, 'aa'); - element = document.getElementById('value_with_leading_trailing_inner_white_space'); - assert_equals(element.value, 'a a'); - }, 'The value sanitization algorithm is as follows: Strip leading and trailing whitespace from the value.'); - </script> + element = document.getElementById('value_with_leading_trailing_inner_white_space'); + assert_equals(element.value, 'a a'); + }, 'The value sanitization algorithm is as follows: Strip leading and trailing whitespace from the value.'); + </script> </body> </html>
--- a/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/resources/template-child-nodes-div.xhtml +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/resources/template-child-nodes-div.xhtml @@ -1,14 +1,14 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> - <title>Template tag with children div tags inside</title> + <title>Template tag with children div tags inside</title> <link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"/> </head> <body> - <p>Template tag with div tags inside</p> - <template> - <div>This is div inside template</div> - <div>This is another div inside template</div> - </template> + <p>Template tag with div tags inside</p> + <template> + <div>This is div inside template</div> + <div>This is another div inside template</div> + </template> </body> </html>
--- a/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/resources/template-child-nodes-nested.xhtml +++ b/testing/web-platform/tests/html/semantics/scripting-1/the-template-element/resources/template-child-nodes-nested.xhtml @@ -1,16 +1,16 @@ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> - <title>Template tag with children div tags inside another template tag</title> + <title>Template tag with children div tags inside another template tag</title> <link rel="author" title="Aleksei Yu. Semenov" href="mailto:a.semenov@unipro.ru"/> </head> <body> - <p>Template tag with children div tags inside another template tag</p> - <template> - <template> - <div>This is div inside template</div> - <div>This is another div inside template</div> - </template> - </template> + <p>Template tag with children div tags inside another template tag</p> + <template> + <template> + <div>This is div inside template</div> + <div>This is another div inside template</div> + </template> + </template> </body> </html>
--- a/testing/web-platform/tests/html/semantics/tabular-data/the-table-element/caption-methods.html +++ b/testing/web-platform/tests/html/semantics/tabular-data/the-table-element/caption-methods.html @@ -1,56 +1,56 @@ <!DOCTYPE HTML> <html> <head> - <title>Creating and deleting captions</title> - <link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com"> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" /> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" /> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" /> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> + <title>Creating and deleting captions</title> + <link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com"> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" /> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" /> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" /> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> </head> <body> - <div id="log"></div> - <table id="table1" style="display:none"> - <caption id="caption1">caption</caption> - <tr> - <td>cell</td> - <td>cell</td> - </tr> - </table> - <table id="table2" style="display:none"> - <tr> - <td>cell</td> - <td>cell</td> - </tr> - </table> - <table id="table3" style="display:none"> - <caption id="caption3">caption 3</caption> - <tr> - <td>cell</td> - <td>cell</td> - </tr> - </table> - <script> - test(function () { - var table1 = document.getElementById('table1'); - var testCaption = table1.createCaption(); - var table1FirstCaption = table1.caption; - assert_equals(testCaption, table1FirstCaption); - }, "createCaption method returns the first caption element child of the table") - test(function () { - var table2 = document.getElementById('table2'); - var test2Caption = table2.createCaption(); - var table2FirstNode = table2.firstChild; - assert_true(test2Caption instanceof HTMLTableCaptionElement); - assert_equals(table2FirstNode, test2Caption); - }, "createCaption method creates a new caption and inserts it as the first node of the table element") - test(function () { - var table3 = document.getElementById('table3'); - assert_equals(table3.caption.textContent, "caption 3"); - table3.deleteCaption(); - assert_equals(table3.caption, null); - }, "deleteCaption method removes the first caption element child of the table element") - </script> + <div id="log"></div> + <table id="table1" style="display:none"> + <caption id="caption1">caption</caption> + <tr> + <td>cell</td> + <td>cell</td> + </tr> + </table> + <table id="table2" style="display:none"> + <tr> + <td>cell</td> + <td>cell</td> + </tr> + </table> + <table id="table3" style="display:none"> + <caption id="caption3">caption 3</caption> + <tr> + <td>cell</td> + <td>cell</td> + </tr> + </table> + <script> + test(function () { + var table1 = document.getElementById('table1'); + var testCaption = table1.createCaption(); + var table1FirstCaption = table1.caption; + assert_equals(testCaption, table1FirstCaption); + }, "createCaption method returns the first caption element child of the table") + test(function () { + var table2 = document.getElementById('table2'); + var test2Caption = table2.createCaption(); + var table2FirstNode = table2.firstChild; + assert_true(test2Caption instanceof HTMLTableCaptionElement); + assert_equals(table2FirstNode, test2Caption); + }, "createCaption method creates a new caption and inserts it as the first node of the table element") + test(function () { + var table3 = document.getElementById('table3'); + assert_equals(table3.caption.textContent, "caption 3"); + table3.deleteCaption(); + assert_equals(table3.caption, null); + }, "deleteCaption method removes the first caption element child of the table element") + </script> </body> -</html> \ No newline at end of file +</html>
--- a/testing/web-platform/tests/html/semantics/text-level-semantics/the-time-element/001.html +++ b/testing/web-platform/tests/html/semantics/text-level-semantics/the-time-element/001.html @@ -1,68 +1,68 @@ <!doctype html> <html> - <head> - <meta charset=utf-8> - <title>HTML time element API</title> - <style> + <head> + <meta charset=utf-8> + <title>HTML time element API</title> + <style> #time { visibility: hidden; } - </style> - <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-time-element"> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - </head> - <body> - <div id="log"></div> - <!-- intentionally nested to test parsing rules --> - <p id="time"><time pubdate datetime="2000-02-01T03:04:05Z">Dummy text <time>2001-06-07T<time>08:09<time></time></time>Z</time></time></p> - <script type="text/javascript"> + </style> + <link rel="help" href="https://html.spec.whatwg.org/multipage/#the-time-element"> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + </head> + <body> + <div id="log"></div> + <!-- intentionally nested to test parsing rules --> + <p id="time"><time pubdate datetime="2000-02-01T03:04:05Z">Dummy text <time>2001-06-07T<time>08:09<time></time></time>Z</time></time></p> + <script type="text/javascript"> function makeTime(dateTime,contents,dateTimeProp) { - var timeEl = document.createElement('time'); - if( dateTime ) { - timeEl.setAttribute('datetime',dateTime); - } - if( contents ) { - timeEl.innerHTML = contents; - } - if( dateTimeProp ) { - timeEl.dateTime = dateTimeProp; - } - return timeEl; + var timeEl = document.createElement('time'); + if( dateTime ) { + timeEl.setAttribute('datetime',dateTime); + } + if( contents ) { + timeEl.innerHTML = contents; + } + if( dateTimeProp ) { + timeEl.dateTime = dateTimeProp; + } + return timeEl; } var timep = document.getElementById('time'); var times = timep.getElementsByTagName('time'); //TIME elements test(function () { - assert_equals( times.length, 4 ); + assert_equals( times.length, 4 ); }, 'HTML parsing should locate 4 time elements in this document'); test(function () { - assert_true( !!window.HTMLTimeElement ); + assert_true( !!window.HTMLTimeElement ); }, 'HTMLTimeElement should be exposed for prototyping'); test(function () { - assert_true( makeTime() instanceof window.HTMLTimeElement, 'createElement variant' ); - assert_true( times[0] instanceof window.HTMLTimeElement, 'HTML parsing variant' ); + assert_true( makeTime() instanceof window.HTMLTimeElement, 'createElement variant' ); + assert_true( times[0] instanceof window.HTMLTimeElement, 'HTML parsing variant' ); }, 'the time elements should be instanceof HTMLTimeElement'); //dateTime test(function () { - assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' ); + assert_equals( makeTime('2000-02-01T03:04:05Z','2001-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' ); }, 'the datetime attribute should be reflected by the .dateTime property'); test(function () { - assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' ); - assert_equals( makeTime().dateTime, '', 'value test' ); + assert_equals( typeof makeTime().dateTime, 'string', 'typeof test' ); + assert_equals( makeTime().dateTime, '', 'value test' ); }, 'the dateTime IDL property should default to an empty string'); test(function () { - assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' ); + assert_equals( makeTime(false,false,'2000-02-01T03:04:05Z').dateTime, '2000-02-01T03:04:05Z' ); }, 'the dateTime property should be read/write'); test(function () { - assert_equals( makeTime('go fish').dateTime, 'go fish' ); + assert_equals( makeTime('go fish').dateTime, 'go fish' ); }, 'the datetime attribute should be reflected by the .dateTime property even if it is invalid'); test(function () { - assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' ); + assert_equals( makeTime(false,'2000-02-01T03:04:05Z').dateTime, '' ); }, 'the datetime attribute should not reflect the textContent'); - </script> + </script> - </body> + </body> </html>
--- a/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html +++ b/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/content.html @@ -16,87 +16,87 @@ increase that limit for the tests below <script> test(function () { assert_idl_attribute(navigator, 'registerContentHandler'); }, 'the registerContentHandler method should exist on the navigator object'); /* Happy path */ test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s', 'foo'); }, 'a handler with valid arguments should work'); /* URL argument */ test(function () { - navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', '%s', 'foo'); }, 'a relative URL should work'); test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '#%s', 'foo'); }, 'a URL with a fragment identifier should work'); test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s', 'foo'); }, 'a URL with a query string should work'); test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '?foo=%s&bar', 'foo'); }, 'a URL with a multi-argument query string should work'); test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/', 'foo'); }, 'a URL with the passed string as a directory name should work'); test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo'); }, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work'); test(function () { - navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo'); + navigator.registerContentHandler('text/x-unknown-type', location.href + '/%s/foo/%s/', 'foo'); }, 'a URL with the passed string included twice should work'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', '', 'foo') } ); }, 'an empty url argument should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.com', 'foo') } ); }, '%s instead of domain name should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://%s.example.com', 'foo') } ); }, '%s instead of subdomain name should throw syntax_err'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '', 'foo') } ); }, 'a url argument without %s should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com', 'foo') } ); }, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%', 'foo') } ); }, 'a url argument without %s (but with %) should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', location.href + '/%a', 'foo') } ); }, 'a url argument without %s (but with %a) should throw SYNTAX_ERR'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://example.com/%s', 'foo') } ); }, 'a url argument pointing to a different domain name should throw SECURITY_ERR'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'https://example.com/%s', 'foo') } ); }, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler('text/x-unknown-type', 'http://foobar.example.com/%s', 'foo') } ); }, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)'); /* Content type argument */ /* The following MIME types are handled natively by the browser, and must not * be possible to override. Note that this list only covers a few basic content * types. Full lists of content types handled by each browser is found under * /vendor/. */ @@ -104,33 +104,33 @@ test(function () { var blacklist = new Array( 'image/jpeg', 'text/html', 'text/javascript', 'text/plain'); for (var bi=0, bl=blacklist.length; bi<bl; ++bi){ - test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } ); - }, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR'); + test(function () { + assert_throws('SECURITY_ERR', function () { navigator.registerContentHandler(blacklist[bi], location.href + '/%s', 'foo') } ); + }, 'attempting to override the ' + blacklist[bi] + ' MIME type should throw SECURITY_ERR'); } /* Overriding the following MIME types should be possible. */ var whitelist = new Array('application/atom+xml', /* For feeds. */ 'application/rss+xml', /* For feeds. */ 'application/x-unrecognized', /* Arbitrary MIME types should be overridable. */ 'text/unrecognized', 'foo/bar'); for (var wi=0, wl=whitelist.length; wi<wl; ++wi){ - test(function () { - navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo'); - }, 'overriding the ' + whitelist[wi] + ' MIME type should work'); + test(function () { + navigator.registerContentHandler(whitelist[wi], location.href + '/%s', 'foo'); + }, 'overriding the ' + whitelist[wi] + ' MIME type should work'); } </script> </body> </html>
--- a/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html +++ b/testing/web-platform/tests/html/webappapis/system-state-and-capabilities/the-navigator-object/protocol.html @@ -15,200 +15,200 @@ increase that limit for the tests below <script type='text/javascript'> test(function () { assert_idl_attribute(navigator, 'registerProtocolHandler'); }, 'the registerProtocolHandler method should exist on the navigator object'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '/%s', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '/%s', 'foo'); }, 'a handler with valid arguments should work'); /* URL argument */ test(function () { - navigator.registerProtocolHandler('tel', '%s', 'foo'); + navigator.registerProtocolHandler('tel', '%s', 'foo'); }, 'a relative URL should work'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '#%s', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '#%s', 'foo'); }, 'a URL with a fragment identifier should work'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '?foo=%s', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '?foo=%s', 'foo'); }, 'a URL with a query string should work'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '?foo=%s&bar', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '?foo=%s&bar', 'foo'); }, 'a URL with a multi-argument query string should work'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/', 'foo'); }, 'a URL with the passed string as a directory name should work'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '/%s/bar/baz/?foo=1337&bar#baz', 'foo'); }, 'a URL with the passed string as a directory name followed by a query string and fragment identifier should work'); test(function () { - navigator.registerProtocolHandler('tel', location.href + '/%s/foo/%s/', 'foo'); + navigator.registerProtocolHandler('tel', location.href + '/%s/foo/%s/', 'foo'); }, 'a URL with the passed string included twice should work'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', '', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', '', 'foo') } ); }, 'an empty url argument should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.com', 'foo') } ); }, '%s instead of domain name should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://%s.example.com', 'foo') } ); }, '%s instead of subdomain name should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '', 'foo') } ); }, 'a url argument without %s should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com', 'foo') } ); }, 'a url argument pointing to a different domain name, without %s should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%', 'foo') } ); }, 'a url argument without %s (but with %) should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto', location.href + '/%a', 'foo') } ); }, 'a url argument without %s (but with %a) should throw SYNTAX_ERR'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com/%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://example.com/%s', 'foo') } ); }, 'a url argument pointing to a different domain name should throw SECURITY_ERR'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'https://example.com/%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'https://example.com/%s', 'foo') } ); }, 'a url argument pointing to a different domain name should throw SECURITY_ERR (2)'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://foobar.example.com/%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'http://foobar.example.com/%s', 'foo') } ); }, 'a url argument pointing to a different domain name should throw SECURITY_ERR (3)'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'mailto:%s@example.com', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('mailto', 'mailto:%s@example.com', 'foo') } ); }, 'looping handlers should throw SECURITY_ERR'); test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('sms', 'tel:%s', 'foo') } ); + assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler('sms', 'tel:%s', 'foo') } ); }, 'a url argument pointing to a non-http[s] scheme should throw SECURITY_ERR due to not being of the same origin'); /* Protocol argument */ test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('unrecognized', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('unrecognized', location.href + '/%a', 'foo') } ); }, 'a protocol argument containing an unrecognized scheme should throw SECURITY_ERR'); /* This is a whitelist, not a blacklist. */ test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto:', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto:', location.href + '/%a', 'foo') } ); }, 'a protocol argument containing : should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto://', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto://', location.href + '/%a', 'foo') } ); }, 'a protocol argument containing :// should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('http://', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('http://', location.href + '/%a', 'foo') } ); }, 'a protocol argument containing http:// should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(0), location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(0), location.href + '/%a', 'foo') } ); }, 'a protocol argument containing a null character should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailtoo' + String.fromCharCode(8), location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailtoo' + String.fromCharCode(8), location.href + '/%a', 'foo') } ); }, 'a protocol argument containing a backspace character should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(10), location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mailto' + String.fromCharCode(10), location.href + '/%a', 'foo') } ); }, 'a protocol argument containing a LF character should throw SYNTAX_ERR'); test(function () { - assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mаilto', location.href + '/%a', 'foo') } ); + assert_throws('SYNTAX_ERR', function () { navigator.registerProtocolHandler('mаilto', location.href + '/%a', 'foo') } ); }, 'a protocol argument containing non-alphanumeric characters (like a cyrillic “а”) should throw SYNTAX_ERR'); test(function () { - navigator.registerProtocolHandler('TEL', location.href + '/%s', 'foo'); + navigator.registerProtocolHandler('TEL', location.href + '/%s', 'foo'); }, 'a protocol argument of “TEL” should be equivalent to “tel”'); test(function () { - navigator.registerProtocolHandler('teL', location.href + '/%s', 'foo'); + navigator.registerProtocolHandler('teL', location.href + '/%s', 'foo'); }, 'a protocol argument of “teL” should be equivalent to “tel”'); /* Overriding any of the following protocols must never be allowed. That would * break the browser. */ var blacklist = new Array( - 'about', - 'attachment', - 'blob', - 'chrome', - 'cid', - 'data', - 'file', - 'ftp', - 'http', - 'https', - 'javascript', - 'livescript', - 'mid', - 'mocha', - 'opera', - 'operamail', - 'res', - 'resource', - 'shttp', - 'tcl', - 'vbscript', - 'view-source', - 'ws', - 'wss', - 'wyciwyg'); + 'about', + 'attachment', + 'blob', + 'chrome', + 'cid', + 'data', + 'file', + 'ftp', + 'http', + 'https', + 'javascript', + 'livescript', + 'mid', + 'mocha', + 'opera', + 'operamail', + 'res', + 'resource', + 'shttp', + 'tcl', + 'vbscript', + 'view-source', + 'ws', + 'wss', + 'wyciwyg'); for ( var bi=0, bl=blacklist.length; bi<bl; ++bi ){ - test(function () { - assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler(blacklist[bi], location.href + '/%s', 'foo') } ); - }, 'attempting to override the ' + blacklist[bi] + ' protocol should throw SECURITY_ERR'); + test(function () { + assert_throws('SECURITY_ERR', function () { navigator.registerProtocolHandler(blacklist[bi], location.href + '/%s', 'foo') } ); + }, 'attempting to override the ' + blacklist[bi] + ' protocol should throw SECURITY_ERR'); } /* The following protocols must be possible to override. * We're just testing that the call goes through here. Whether or not they * actually work as handlers is covered by the interactive tests. */ var whitelist = new Array( - 'geo', - 'im', - 'irc', - 'ircs', - 'mailto', - 'mms', - 'news', - 'nntp', - 'sms', - 'smsto', - 'tel', - 'urn', - 'webcal', - 'wtai', - 'xmpp'); + 'geo', + 'im', + 'irc', + 'ircs', + 'mailto', + 'mms', + 'news', + 'nntp', + 'sms', + 'smsto', + 'tel', + 'urn', + 'webcal', + 'wtai', + 'xmpp'); for ( var wi=0, wl=whitelist.length; wi<wl; ++wi ){ - test(function () { - navigator.registerProtocolHandler(whitelist[wi], location.href + '/%s', 'foo'); - assert_true(true); - }, 'overriding the ' + whitelist[wi] + ' protocol should work'); + test(function () { + navigator.registerProtocolHandler(whitelist[wi], location.href + '/%s', 'foo'); + assert_true(true); + }, 'overriding the ' + whitelist[wi] + ' protocol should work'); } </script> </body> </html>
--- a/testing/web-platform/tests/lint.whitelist +++ b/testing/web-platform/tests/lint.whitelist @@ -10,19 +10,17 @@ INDENT TABS: .gitmodules INDENT TABS: app-uri/* INDENT TABS: conformance-checkers/* INDENT TABS: content-security-policy/* INDENT TABS: custom-elements/* INDENT TABS: DOMEvents/* INDENT TABS: eventsource/* INDENT TABS: html/editing/dnd/* -INDENT TABS: html/semantics/* INDENT TABS: html/syntax/* -INDENT TABS: html/webappapis/* INDENT TABS: media-source/* INDENT TABS: old-tests/* INDENT TABS: pointerlock/* INDENT TABS: shadow-dom/* INDENT TABS: tools/* INDENT TABS: touch-events/* INDENT TABS: web-animations/* INDENT TABS: webaudio/* @@ -84,16 +82,17 @@ PRINT STATEMENT:tools/* W3C-TEST.ORG:*/tools/* PRINT STATEMENT:*/tools/* ### Test exclusions ## CR AT EOL:WebIDL/valid/idl/documentation-dos.widl CR AT EOL:cors/resources/cors-headers.asis CR AT EOL:html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html +INDENT TABS:html/semantics/embedded-content/the-canvas-element/size.attributes.parse.whitespace.html CR AT EOL:webvtt/webvtt-file-format-parsing/webvtt-file-parsing/support/newlines.vtt PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.svg PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/empty.xhtml PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/minimal_html.svg PARSE-FAILED:dom/nodes/Document-createElement-namespace-tests/minimal_html.xhtml # These have undefined entities; should probably find a way to define them PARSE-FAILED:ext-xhtml-pubid/the-xhtml-syntax/parsing-xhtml-documents/xhtml-pubid-1.xhtml
--- a/testing/web-platform/tests/old-tests/submission/Opera/script_scheduling/111.html +++ b/testing/web-platform/tests/old-tests/submission/Opera/script_scheduling/111.html @@ -1,32 +1,32 @@ <!DOCTYPE html> <html><head> - <title> scheduler: removing async attribute at runtime</title> - <script src="/resources/testharness.js"></script> - <script src="/resources/testharnessreport.js"></script> - <script src="testlib/testlib.js"></script> + <title> scheduler: removing async attribute at runtime</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <script src="testlib/testlib.js"></script> </head> <body> <div id="test"></div> - <div id="log">FAILED (This TC requires JavaScript enabled)</div> + <div id="log">FAILED (This TC requires JavaScript enabled)</div> - <script id="async-script" async src="scripts/include-2.js?pipe=trickle(d1)"></script> + <script id="async-script" async src="scripts/include-2.js?pipe=trickle(d2)"></script> - <script> + <script> var t = async_test(); t.step(function() { document.getElementById("async-script").removeAttribute("async"); var s = document.createElement("script"); s.async = false; s.src = "scripts/include-1.js"; document.body.appendChild(s); }); addEventListener("load", t.step_func(function () { assert_array_equals(eventOrder, ["external script #1", "external script #2"]); t.done(); }), false); - + </script> </body></html>
new file mode 100644 --- /dev/null +++ b/testing/web-platform/tests/referrer-policy/README.html @@ -0,0 +1,9 @@ +<!DOCTYPE html> +<head> +<title>Referrer-Policy Web Platform Tests - README</title> +</head> +<body> + <p> + TODO(burnik): Instructions on how to write tests for Referrer-Policy. + </p> +</body>
new file mode 100644 --- /dev/null +++ b/testing/web-platform/tests/referrer-policy/generic/common.js @@ -0,0 +1,28 @@ +// NOTE: This method only strips the fragment and is not in accordance to the +// recommended draft specification: +// https://w3c.github.io/webappsec/specs/referrer-policy/#null +// TODO(burnik): Implement this helper as defined by spec once added scenarios +// for URLs containing username/password/etc. +function stripUrlForUseAsReferrer(url) { + return url.replace(/#.*$/, ""); +} + +function parseUrlQueryString(queryString) { + var queries = queryString.replace(/^\?/, "").split("&"); + var params = {}; + + for (var i in queries) { + var kvp = queries[i].split("="); + params[kvp[0]] = kvp[1]; + } + + return params; +}; + +function appendIframeToBody(url) { + var iframe = document.createElement("iframe"); + iframe.src = url; + document.body.appendChild(iframe); + + return iframe; +}
new file mode 100644 --- /dev/null +++ b/testing/web-platform/tests/referrer-policy/no-referrer-policy/no-referrer-policy.html @@ -0,0 +1,159 @@ +<!DOCTYPE html> +<html> + <head> + <title>Check that sub-resource gets the referrer URL when no explicit + Referrer Policy is set.</title> + <script src="/resources/testharness.js"></script> + <script src="/resources/testharnessreport.js"></script> + <!-- Common global functions for referrer-policy tests. --> + <script src="../generic/common.js"></script> + </head> + <body> + <h1>Check that sub-resource gets the referrer URL when no explicit Referrer + Policy is set.</h1> + + <p>This page loads sub-resources (iframes) and waits for messages containing + referrer URLs from children.</p> + + <script> + var documentUrl = document.location.toString(); + + // Referrer policy can also be defined via meta tag of parent. + // TODO(burnik): For now we use the DOM element itself as we expect it not + // to be explicitly defined on the page. We should use the content + // attribute value instead. + var documentMetaReferrer = document.querySelector("meta[name=referrer]"); + + // The referrer URL should be this document's URL adjusted according to + // this section: + // https://w3c.github.io/webappsec/specs/referrer-policy/#strip-url + var expectedReferrerUrl = stripUrlForUseAsReferrer(documentUrl); + + // Path to the sub-resource page which reports back it's own context. + var subresourceUrlPath = "/referrer-policy/no-referrer-policy" + + "/no-referrer-policy.subresource.py"; + + // Define all the test definitions here to create correspoding test + // arrangements. Each test arrangement will have it's own iframe and ID + // passed by URL. The ID should be unique as it identifies the message + // coming back from the iframe and matches the corressponding test to be + // run. + var scenarios = [ + { + id: "same-origin", + url: location.protocol + "//" + location.hostname + ":" + + location.port + subresourceUrlPath, + metaReferrer: documentMetaReferrer, + expectedReferrerUrl: expectedReferrerUrl, + description: "Refrerer URL is passed to sub-resource (iframe) of " + + "same-origin." + }, + { + id: "cross-origin", + url: location.protocol + "//www1." + location.hostname + ":" + + location.port + subresourceUrlPath, + metaReferrer: documentMetaReferrer, + expectedReferrerUrl: expectedReferrerUrl, + description: "Refrerer URL is passed to sub-resource (iframe) of " + + "cross-origin." + } + ]; + + ////////////////////////////////////////////////////////////////////////// + // Rest of the script arranges and runs all the tests defined above. + ////////////////////////////////////////////////////////////////////////// + + // Creates a test arrangement from a test scenario. + function arrangeScenario(scenario) { + var test = async_test(scenario.description); + var subresourceUrl = scenario.url + "?id=" + scenario.id; + var testArrangement = { + scenario:scenario, + test:test, + subresourceUrl:subresourceUrl + }; + + return testArrangement; + } + + // Asserts the values for an iframe response message and matched test + // arrangement. + function assertScenario(message, testArrangement) { + // Defense: Making sure the message and test arrangement are up to date. + testArrangement.test.step(function() { + assert_equals(Object.keys(message).length, 4); + assert_own_property(message, "id"); + assert_own_property(message, "location"); + assert_own_property(message, "referrer"); + assert_own_property(message, "headers"); + assert_own_property(message.headers, "referer"); + + assert_equals(Object.keys(testArrangement).length, 3); + assert_own_property(testArrangement, "scenario"); + assert_own_property(testArrangement, "test"); + assert_own_property(testArrangement, "subresourceUrl"); + + assert_equals(Object.keys(testArrangement.scenario).length, 5); + assert_own_property(testArrangement.scenario, "id"); + assert_own_property(testArrangement.scenario, "url"); + assert_own_property(testArrangement.scenario, "metaReferrer"); + assert_own_property(testArrangement.scenario, "expectedReferrerUrl"); + assert_own_property(testArrangement.scenario, "description"); + }, "Running a valid test scenario."); + + testArrangement.test.step(function() { + // TODO(burnik): This check should be specified by the scenario + // itself. For now we only expect that there is no CSP so neither is + // the referrer policy explicitly defined via HTTP headers. + assert_not_exists(message.headers, "content-security-policy", + "No referrer policy is set."); + + // The meta defined refferer should also not exist. + assert_equals(testArrangement.scenario.metaReferrer, null); + }, "No referrer policy is explicity defined via HTTP headers or meta.") + + testArrangement.test.step(function() { + // Sanity check - location of iframe matches reported location. + assert_equals(message.location, testArrangement.subresourceUrl, + "Child reported location."); + + // Child reports the referrer URL available from DOM. + assert_equals(message.referrer, + testArrangement.scenario.expectedReferrerUrl, + "Child reported referrer."); + + // Also check the request headers reported from the server. + assert_equals(message.headers.referer, + testArrangement.scenario.expectedReferrerUrl, + "Child reported referrer (from server)."); + + }, "Referrer URL is passed to the sub-resource (iframe)."); + + testArrangement.test.done(); + } + + // Using a map to easily find and run the test corresponding to the + // received message ID (iframe). + var testArrangementMap = {}; + + // With this handler we receive all the messages from the iframes. + // We identify the source and appropriate test arrangement to be run via + // the provided message ID. + window.addEventListener("message", function (event) { + var childMessage = event.data; + var testArrangement = testArrangementMap[childMessage.id]; + // Run the test for this sub-resource. + assertScenario(childMessage, testArrangement); + }); + + // Map all test arrangements by ID and append iframes. + for (var i in scenarios) { + var testArrangement = arrangeScenario(scenarios[i]); + testArrangementMap[scenarios[i].id] = testArrangement; + appendIframeToBody(testArrangement.subresourceUrl); + } + </script> + + <div id="log"></div> + </body> +</html>
new file mode 100644 --- /dev/null +++ b/testing/web-platform/tests/referrer-policy/no-referrer-policy/no-referrer-policy.subresource.py @@ -0,0 +1,15 @@ +import os, json + +def main(request, response): + script_directory = os.path.dirname(os.path.abspath(__file__)) + template_basename = "no-referrer-policy.subresource.template.html" + template_filename = os.path.join(script_directory, template_basename); + + with open(template_filename) as f: + template = f.read() + + headers_as_json = json.dumps(request.headers) + exported_headers = "var SERVER_REQUEST_HEADERS = " + headers_as_json + ";" + rendered_html = template % {"headers": headers_as_json} + + return response.headers, rendered_html
new file mode 100644 --- /dev/null +++ b/testing/web-platform/tests/referrer-policy/no-referrer-policy/no-referrer-policy.subresource.template.html @@ -0,0 +1,31 @@ +<!DOCTYPE html> +<html> + <head> + <title>This page reports back it's request details the parent frame</title> + <!-- Common global functions for referrer-policy tests. --> + <script src="../generic/common.js"></script> + </head> + <body> + <h2>This page reports back it's request details to the parent frame.</h2> + + <script> + // Notice: This is filled in from server side. + var SERVER_REQUEST_HEADERS = %(headers)s; + + var query = parseUrlQueryString(document.location.search) + + // Note: Read the ID from the query section of this page's URL. + // The ID is used to identify the sender of the message in the parent. + var pageInfo = { + id: query.id, + location: document.location.toString(), + referrer: document.referrer, + headers: SERVER_REQUEST_HEADERS + }; + + // Notify parent frame. + parent.postMessage(pageInfo, "*"); + </script> + + </body> +</html>
--- a/testing/web-platform/tests/webmessaging/with-ports/020.html +++ b/testing/web-platform/tests/webmessaging/with-ports/020.html @@ -8,25 +8,23 @@ var iframe = document.createElement('iframe'); var url_prefix = location.href.replace('://', '://www1.').replace(/\/with(out)?-ports\/[^\/]+$/, ''); var url = url_prefix + '/without-ports/020-1.html'; iframe.src = url; document.body.appendChild(iframe); </script> <div id=log></div> <script> -var t = async_test(); -onload = t.step_func(function() { +onload = function() { window[0].postMessage(1, location.href, []); window[1].postMessage(2, url, []); var i = 0; - onmessage = t.step_func(function(e) { + onmessage = function(e) { i++; assert_equals(e.data[0], i); assert_equals(e.data[1], location.protocol + '//' + location.host); if (i === 2) { - t.done(); + done(); } - }); - setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2") }), 1000); -}); + }; +}; </script>
--- a/testing/web-platform/tests/webmessaging/with-ports/021.html +++ b/testing/web-platform/tests/webmessaging/with-ports/021.html @@ -8,25 +8,23 @@ var iframe = document.createElement('iframe'); var url_prefix = location.href.replace('://', '://www1.').replace(/\/with(out)?-ports\/[^\/]+$/, ''); var url = url_prefix + '/without-ports/020-1.html'; iframe.src = url; document.body.appendChild(iframe); </script> <div id=log></div> <script> -var t = async_test(); -onload = t.step_func(function() { +onload = function() { window[0].postMessage(1, '*', []); window[1].postMessage(2, '*', []); var i = 0; - onmessage = t.step_func(function(e) { + onmessage = function(e) { i++; assert_equals(e.data[0], i); assert_equals(e.data[1], location.protocol + '//' + location.host); if (i === 2) { - t.done(); + done(); } - }); - setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2") }), 1000); -}); + }; +}; </script>
--- a/testing/web-platform/tests/webmessaging/without-ports/020.html +++ b/testing/web-platform/tests/webmessaging/without-ports/020.html @@ -8,25 +8,23 @@ var iframe = document.createElement('iframe'); var url_prefix = location.href.replace('://', '://www1.').replace(/\/with(out)?-ports\/[^\/]+$/, ''); var url = url_prefix + '/without-ports/020-1.html'; iframe.src = url; document.body.appendChild(iframe); </script> <div id=log></div> <script> -var t = async_test(); -onload = t.step_func(function() { +onload = function() { window[0].postMessage(1, location.href); window[1].postMessage(2, url); var i = 0; - onmessage = t.step_func(function(e) { + onmessage = function(e) { i++; assert_equals(e.data[0], i); assert_equals(e.data[1], location.protocol + '//' + location.host); if (i == 2) { - t.done(); + done(); } - }); - setTimeout(t.step_func(function() {assert_unreached("Only got " + i + " events before timeout, expected 2")}), 1000); -}); + }; +}; </script>
--- a/testing/web-platform/tests/webmessaging/without-ports/021.html +++ b/testing/web-platform/tests/webmessaging/without-ports/021.html @@ -8,25 +8,23 @@ var iframe = document.createElement('iframe'); var url_prefix = location.href.replace('://', '://www1.').replace(/\/with(out)?-ports\/[^\/]+$/, ''); var url = url_prefix + '/without-ports/020-1.html'; iframe.src = url; document.body.appendChild(iframe); </script> <div id=log></div> <script> -var t = async_test(); -onload = t.step_func(function() { +onload = function() { window[0].postMessage(1, '*'); window[1].postMessage(2, '*'); var i = 0; - onmessage = t.step_func(function(e) { + onmessage = function(e) { i++; assert_equals(e.data[0], i); assert_equals(e.data[1], location.protocol + '//' + location.host); if (i === 2) { - t.done(); + done(); } - }); - setTimeout(t.step_func(function() { assert_unreached("Only got " + i + " events before timeout, expected 2")}), 1000); -}); + }; +}; </script>