Bug 1163709 - Update web-platform-tests to revision 5aa79b303c81164549041d1bd9f7887390a10f72, a=testonly

This commit is contained in:
James Graham 2015-05-11 14:28:20 +01:00
parent d2a4a1c342
commit 0a3da2cb68
35 changed files with 753 additions and 514 deletions

View File

@ -16123,6 +16123,10 @@
"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"
@ -24841,7 +24845,7 @@
}
]
},
"rev": "28de405307d9613052ccd1228be7888e109738a6",
"rev": "5aa79b303c81164549041d1bd9f7887390a10f72",
"url_base": "/",
"version": 2
}

View File

@ -1 +1 @@
6e958cb0c757bc80226f22d98a93f7fec974aa6c
36bf12e75b3d8fc5ac90187f21d50a3eed5a0442

View File

@ -16,7 +16,7 @@
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");

View File

@ -16,7 +16,7 @@
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++) {

View File

@ -29,7 +29,7 @@ open_rq.onsuccess = 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 #')

View File

@ -1,6 +1,6 @@
<!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>

View File

@ -47,7 +47,7 @@ should_throw({
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()
}

View File

@ -25,11 +25,14 @@
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()
})
}

View File

@ -7,7 +7,6 @@
<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" };

View File

@ -36,7 +36,7 @@
// 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);
});

View File

@ -267,7 +267,7 @@ GitHub UI. Below is one method and others can be found on
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

View File

@ -10,18 +10,18 @@
<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>

View File

@ -4,9 +4,9 @@
<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>
@ -14,20 +14,20 @@
<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>

View File

@ -4,9 +4,9 @@
<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>
@ -14,20 +14,20 @@
<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>

View File

@ -4,9 +4,9 @@
<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>
@ -14,21 +14,21 @@
<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>

View File

@ -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&#x000A;1" />
<input type="tel" id="value_with_CR" value="0&#x000D;1" />
<input type="tel" id="value_with_CRLF" value="0&#x000A;&#x000D;1" />
<div id="log">
</div>
<h1>Input tel</h1>
<input type="tel" id="novalue" />
<input type="tel" id="value_with_LF" value="0&#x000A;1" />
<input type="tel" id="value_with_CR" value="0&#x000D;1" />
<input type="tel" id="value_with_CRLF" value="0&#x000A;&#x000D;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>

View File

@ -4,43 +4,43 @@
<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");
@ -48,160 +48,160 @@ test(function(){ assert_true(typeof(_StepTest.stepUp) ==="function" ) } , "ste
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>

View File

@ -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&#x000D;&#x000A;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&#x000D;&#x000A;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>

View File

@ -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>

View File

@ -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>

View File

@ -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>
</html>

View File

@ -1,32 +1,32 @@
<!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');
@ -34,35 +34,35 @@ 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>

View File

@ -21,77 +21,77 @@ test(function () {
/* 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 */
@ -109,9 +109,9 @@ var blacklist = new Array(
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');
}
@ -124,9 +124,9 @@ var whitelist = new Array('application/atom+xml', /* For feeds. */
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');
}

View File

@ -20,163 +20,163 @@ test(function () {
}, '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');
}
@ -184,28 +184,28 @@ for ( var bi=0, bl=blacklist.length; bi<bl; ++bi ){
* 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>

View File

@ -15,9 +15,7 @@ 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/*
@ -89,6 +87,7 @@ PRINT STATEMENT:*/tools/*
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

View File

@ -1,18 +1,18 @@
<!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() {
@ -27,6 +27,6 @@
assert_array_equals(eventOrder, ["external script #1", "external script #2"]);
t.done();
}), false);
</script>
</body></html>

View File

@ -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>

View File

@ -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;
}

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

@ -13,20 +13,18 @@ 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>

View File

@ -13,20 +13,18 @@ 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>

View File

@ -13,20 +13,18 @@ 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>

View File

@ -13,20 +13,18 @@ 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>