diff --git a/.taskcluster.yml b/.taskcluster.yml
index 3c99913eb486f0..755fc2eca36d68 100644
--- a/.taskcluster.yml
+++ b/.taskcluster.yml
@@ -5,81 +5,89 @@ tasks:
$flattenDeep:
- $if: tasks_for == "github-push"
then:
- $if: event.ref == "refs/heads/master"
- then:
- $map: [{name: firefox, channel: nightly}, {name: chrome, channel: dev}]
- each(browser):
- $map:
- - [testharness, 1, 15]
- - [testharness, 2, 15]
- - [testharness, 3, 15]
- - [testharness, 4, 15]
- - [testharness, 5, 15]
- - [testharness, 6, 15]
- - [testharness, 7, 15]
- - [testharness, 8, 15]
- - [testharness, 9, 15]
- - [testharness, 10, 15]
- - [testharness, 11, 15]
- - [testharness, 12, 15]
- - [testharness, 13, 15]
- - [testharness, 14, 15]
- - [testharness, 15, 15]
- - [reftest, 1, 10]
- - [reftest, 2, 10]
- - [reftest, 3, 10]
- - [reftest, 4, 10]
- - [reftest, 5, 10]
- - [reftest, 6, 10]
- - [reftest, 7, 10]
- - [reftest, 8, 10]
- - [reftest, 9, 10]
- - [reftest, 10, 10]
- - [wdspec, 1, 1]
- each(chunk):
- taskId: {$eval: 'as_slugid(browser.name + browser.channel + chunk[0] + str(chunk[1]))'}
- taskGroupId: {$eval: 'as_slugid("task group")'}
- created: {$fromNow: ''}
- deadline: {$fromNow: '24 hours'}
- provisionerId: aws-provisioner-v1
- # Contributors interested in configurating TaskCluster to run
- # against their fork of WPT should change the `workerType` to
- # "github-worker".
- workerType: wpt-docker-worker
- metadata:
- name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}
- description: >-
- A subset of WPT's "${chunk[0]}" tests (chunk number ${chunk[1]}
- of ${chunk[2]}), run in the ${browser.channel} release of
- ${browser.name}.
- owner: ${event.pusher.email}
- source: ${event.repository.url}
- payload:
- image: jugglinmike/web-platform-tests:0.20
- maxRunTime: 7200
- artifacts:
- public/results:
- path: /home/test/artifacts
- type: directory
- command:
- - /bin/bash
- - --login
- - -c
- - set -ex;
- ~/start.sh
- ${event.repository.url}
- ${event.ref}
- ${event.after}
- ${browser.name}-${browser.channel};
- cd ~/web-platform-tests;
- ./tools/ci/taskcluster-run.py
- ${browser.name}
- --
- --log-wptreport=../artifacts/wpt_report.json
- --no-fail-on-unexpected
- --test-type=${chunk[0]}
- --this-chunk=${chunk[1]}
- --total-chunks=${chunk[2]};
+ $map:
+ $flatten:
+ $match: {
+ event.ref == "refs/heads/master": [{name: firefox, channel: nightly}, {name: chrome, channel: dev}],
+ event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: beta}, {name: chrome, channel: beta}],
+ event.ref == "refs/heads/epochs/weekly": [{name: firefox, channel: stable}, {name: chrome, channel: stable}]
+ }
+ each(browser):
+ $map:
+ - [testharness, 1, 15]
+ - [testharness, 2, 15]
+ - [testharness, 3, 15]
+ - [testharness, 4, 15]
+ - [testharness, 5, 15]
+ - [testharness, 6, 15]
+ - [testharness, 7, 15]
+ - [testharness, 8, 15]
+ - [testharness, 9, 15]
+ - [testharness, 10, 15]
+ - [testharness, 11, 15]
+ - [testharness, 12, 15]
+ - [testharness, 13, 15]
+ - [testharness, 14, 15]
+ - [testharness, 15, 15]
+ - [reftest, 1, 10]
+ - [reftest, 2, 10]
+ - [reftest, 3, 10]
+ - [reftest, 4, 10]
+ - [reftest, 5, 10]
+ - [reftest, 6, 10]
+ - [reftest, 7, 10]
+ - [reftest, 8, 10]
+ - [reftest, 9, 10]
+ - [reftest, 10, 10]
+ - [wdspec, 1, 1]
+ each(chunk):
+ taskId: {$eval: 'as_slugid(browser.name + browser.channel + chunk[0] + str(chunk[1]))'}
+ taskGroupId: {$eval: 'as_slugid("task group")'}
+ created: {$fromNow: ''}
+ deadline: {$fromNow: '24 hours'}
+ provisionerId: aws-provisioner-v1
+ workerType:
+ $if: event.repository.full_name == 'web-platform-tests/wpt'
+ then:
+ wpt-docker-worker
+ else:
+ github-worker
+ metadata:
+ name: wpt-${browser.name}-${browser.channel}-${chunk[0]}-${chunk[1]}
+ description: >-
+ A subset of WPT's "${chunk[0]}" tests (chunk number ${chunk[1]}
+ of ${chunk[2]}), run in the ${browser.channel} release of
+ ${browser.name}.
+ owner: ${event.pusher.email}
+ source: ${event.repository.url}
+ payload:
+ image: jugglinmike/web-platform-tests:0.21
+ maxRunTime: 7200
+ artifacts:
+ public/results:
+ path: /home/test/artifacts
+ type: directory
+ command:
+ - /bin/bash
+ - --login
+ - -c
+ - set -ex;
+ ~/start.sh
+ ${event.repository.url}
+ ${event.ref}
+ ${event.after}
+ ${browser.name}
+ ${browser.channel};
+ cd ~/web-platform-tests;
+ ./tools/ci/taskcluster-run.py
+ ${browser.name}
+ --
+ --channel=${browser.channel}
+ --log-wptreport=../artifacts/wpt_report.json
+ --no-fail-on-unexpected
+ --test-type=${chunk[0]}
+ --this-chunk=${chunk[1]}
+ --total-chunks=${chunk[2]};
- $if: tasks_for == "github-pull-request"
then:
$map: [{name: firefox, channel: nightly}, {name: chrome, channel: dev}]
@@ -101,17 +109,19 @@ tasks:
created: {$fromNow: ''}
deadline: {$fromNow: '24 hours'}
provisionerId: aws-provisioner-v1
- # Contributors interested in configurating TaskCluster to run
- # against their fork of WPT should change the `workerType` to
- # "github-worker".
- workerType: wpt-docker-worker
+ workerType:
+ $if: event.repository.full_name == 'web-platform-tests/wpt'
+ then:
+ wpt-docker-worker
+ else:
+ github-worker
metadata:
name: ${operation.name}
description: ${operation.description}
owner: ${event.pull_request.user.login}@users.noreply.github.com
source: ${event.repository.url}
payload:
- image: jugglinmike/web-platform-tests:0.20
+ image: jugglinmike/web-platform-tests:0.21
maxRunTime: 7200
artifacts:
public/results:
@@ -132,13 +142,15 @@ tasks:
${event.repository.clone_url}
refs/pull/${event.number}/merge
FETCH_HEAD
- ${browser.name}-${browser.channel};
+ ${browser.name}
+ ${browser.channel};
cd ~/web-platform-tests;
result=0;
./tools/ci/taskcluster-run.py
--commit-range HEAD^
${browser.name}
--
+ --channel=${browser.channel}
${operation.extra_args} || result=$?;
echo $result > ../artifacts/run-return-code.txt;
echo "Command exited with code $result (failures are allowed while this task is being vetted)."
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic.png b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic.png
index 1e313371d828e9..70d7b046cb226c 100644
Binary files a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic.png and b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.basic.png differ
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.large.png b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.large.png
index 1e313371d828e9..70d7b046cb226c 100644
Binary files a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.large.png and b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.maxWidth.large.png differ
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.rtl.png b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.rtl.png
index 1e313371d828e9..70d7b046cb226c 100644
Binary files a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.rtl.png and b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.fill.rtl.png differ
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.basic.png b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.basic.png
index b04566f5c66e58..fb3b5b830d345d 100644
Binary files a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.basic.png and b/2dcontext/drawing-text-to-the-canvas/2d.text.draw.stroke.basic.png differ
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.actualBoundingBox.html b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.actualBoundingBox.html
new file mode 100644
index 00000000000000..484af7c239935c
--- /dev/null
+++ b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.actualBoundingBox.html
@@ -0,0 +1,51 @@
+
+
+
Canvas test: 2d.text.measure.actualBoundingBox
+
+
+
+
+
+
+
+2d.text.measure.actualBoundingBox
+Testing actualBoundingBox
+
+
+A
+Actual output:
+
+
+
+
+
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html
new file mode 100644
index 00000000000000..ed8c04d0ab791b
--- /dev/null
+++ b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.advances.html
@@ -0,0 +1,53 @@
+
+
+Canvas test: 2d.text.measure.advances
+
+
+
+
+
+
+
+2d.text.measure.advances
+Testing width advances
+
+
+A
+Actual output:
+
+
+
+
+
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html
new file mode 100644
index 00000000000000..2472889a607f5a
--- /dev/null
+++ b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.baselines.html
@@ -0,0 +1,46 @@
+
+
+Canvas test: 2d.text.measure.baselines
+
+
+
+
+
+
+
+2d.text.measure.baselines
+Testing baselines
+
+
+A
+Actual output:
+
+
+
+
+
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html
new file mode 100644
index 00000000000000..36087e7b035020
--- /dev/null
+++ b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.emHeights.html
@@ -0,0 +1,46 @@
+
+
+Canvas test: 2d.text.measure.emHeights
+
+
+
+
+
+
+
+2d.text.measure.emHeights
+Testing emHeights
+
+
+A
+Actual output:
+
+
+
+
+
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html
new file mode 100644
index 00000000000000..1c9bfc492c1d1e
--- /dev/null
+++ b/2dcontext/drawing-text-to-the-canvas/2d.text.measure.fontBoundingBox.html
@@ -0,0 +1,44 @@
+
+
+Canvas test: 2d.text.measure.fontBoundingBox
+
+
+
+
+
+
+
+2d.text.measure.fontBoundingBox
+Testing fontBoundingBox
+
+
+A
+Actual output:
+
+
+
+
+
diff --git a/2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html b/2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html
similarity index 100%
rename from 2dcontext/drawing-text-to-the-canvas/2d.text.draw.baseline.alphabetic.html
rename to 2dcontext/text-styles/2d.text.draw.baseline.alphabetic.html
diff --git a/2dcontext/tools/name2dir.yaml b/2dcontext/tools/name2dir.yaml
index 479c171810cf82..40a04057881fe4 100644
--- a/2dcontext/tools/name2dir.yaml
+++ b/2dcontext/tools/name2dir.yaml
@@ -9,7 +9,6 @@
2d.fillRect: "drawing-rectangles-to-the-canvas"
2d.strokeRect: "drawing-rectangles-to-the-canvas"
2d.text.draw: "drawing-text-to-the-canvas"
-2d.text.draw.baseline.alphabetic: "drawing-text-to-the-canvas"
2d.text.draw.space.basic: "drawing-text-to-the-canvas"
2d.text.draw.space.collapse: "drawing-text-to-the-canvas"
2d.text.measure: "drawing-text-to-the-canvas"
diff --git a/2dcontext/tools/tests2dtext.yaml b/2dcontext/tools/tests2dtext.yaml
index 336e3cf38b496f..f89d6d48a4f0e3 100644
--- a/2dcontext/tools/tests2dtext.yaml
+++ b/2dcontext/tools/tests2dtext.yaml
@@ -1018,4 +1018,119 @@
@assert ctx.measureText('AB ').width === 100; @moz-todo
}), 500);
+- name: 2d.text.measure.advances
+ desc: Testing width advances
+ testing:
+ - 2d.text.measure.advances
+ fonts:
+ - CanvasTest
+ code: |
+ deferTest();
+ step_timeout(t.step_func_done(function () {
+ ctx.font = '50px CanvasTest';
+ ctx.direction = 'ltr';
+ ctx.align = 'left'
+ // Some platforms may return '-0'.
+ @assert Math.abs(ctx.measureText('Hello').advances[0]) === 0;
+ // Different platforms may render text slightly different.
+ @assert ctx.measureText('Hello').advances[1] >= 36;
+ @assert ctx.measureText('Hello').advances[2] >= 58;
+ @assert ctx.measureText('Hello').advances[3] >= 70;
+ @assert ctx.measureText('Hello').advances[4] >= 80;
+
+ var tm = ctx.measureText('Hello');
+ @assert ctx.measureText('Hello').advances[0] === tm.advances[0];
+ @assert ctx.measureText('Hello').advances[1] === tm.advances[1];
+ @assert ctx.measureText('Hello').advances[2] === tm.advances[2];
+ @assert ctx.measureText('Hello').advances[3] === tm.advances[3];
+ @assert ctx.measureText('Hello').advances[4] === tm.advances[4];
+ }), 500);
+
+- name: 2d.text.measure.actualBoundingBox
+ desc: Testing actualBoundingBox
+ testing:
+ - 2d.text.measure.actualBoundingBox
+ fonts:
+ - CanvasTest
+ code: |
+ deferTest();
+ step_timeout(t.step_func_done(function () {
+ ctx.font = '50px CanvasTest';
+ ctx.direction = 'ltr';
+ ctx.align = 'left'
+ ctx.baseline = 'alphabetic'
+ // Some platforms may return '-0'.
+ @assert Math.abs(ctx.measureText('A').actualBoundingBoxLeft) === 0;
+ // Different platforms may render text slightly different.
+ @assert ctx.measureText('A').actualBoundingBoxRight >= 50;
+ @assert ctx.measureText('A').actualBoundingBoxAscent >= 35;
+ @assert Math.abs(ctx.measureText('A').actualBoundingBoxDescent) === 0;
+
+ @assert Math.abs(ctx.measureText('ABCD').actualBoundingBoxLeft) === 0;
+ @assert ctx.measureText('ABCD').actualBoundingBoxRight >= 200;
+ @assert ctx.measureText('ABCD').actualBoundingBoxAscent >= 85;
+ @assert ctx.measureText('ABCD').actualBoundingBoxDescent >= 37;
+ }), 500);
+
+- name: 2d.text.measure.fontBoundingBox
+ desc: Testing fontBoundingBox
+ testing:
+ - 2d.text.measure.fontBoundingBox
+ fonts:
+ - CanvasTest
+ code: |
+ deferTest();
+ step_timeout(t.step_func_done(function () {
+ ctx.font = '50px CanvasTest';
+ ctx.direction = 'ltr';
+ ctx.align = 'left'
+ @assert ctx.measureText('A').fontBoundingBoxAscent === 85;
+ @assert ctx.measureText('A').fontBoundingBoxDescent === 39;
+
+ @assert ctx.measureText('ABCD').fontBoundingBoxAscent === 85;
+ @assert ctx.measureText('ABCD').fontBoundingBoxDescent === 39;
+ }), 500);
+
+- name: 2d.text.measure.emHeights
+ desc: Testing emHeights
+ testing:
+ - 2d.text.measure.emHeights
+ fonts:
+ - CanvasTest
+ code: |
+ deferTest();
+ step_timeout(t.step_func_done(function () {
+ ctx.font = '50px CanvasTest';
+ ctx.direction = 'ltr';
+ ctx.align = 'left'
+ @assert ctx.measureText('A').emHeightAscent === 37.5;
+ @assert ctx.measureText('A').emHeightDescent === 12.5;
+ @assert ctx.measureText('A').emHeightDescent + ctx.measureText('A').emHeightAscent === 50;
+
+ @assert ctx.measureText('ABCD').emHeightAscent === 37.5;
+ @assert ctx.measureText('ABCD').emHeightDescent === 12.5;
+ @assert ctx.measureText('ABCD').emHeightDescent + ctx.measureText('ABCD').emHeightAscent === 50;
+ }), 500);
+
+- name: 2d.text.measure.baselines
+ desc: Testing baselines
+ testing:
+ - 2d.text.measure.baselines
+ fonts:
+ - CanvasTest
+ code: |
+ deferTest();
+ step_timeout(t.step_func_done(function () {
+ ctx.font = '50px CanvasTest';
+ ctx.direction = 'ltr';
+ ctx.align = 'left'
+ @assert Math.abs(ctx.measureText('A').getBaselines().alphabetic) === 0;
+ @assert ctx.measureText('A').getBaselines().ideographic === -39;
+ @assert ctx.measureText('A').getBaselines().hanging === 68;
+
+ @assert Math.abs(ctx.measureText('ABCD').getBaselines().alphabetic) === 0;
+ @assert ctx.measureText('ABCD').getBaselines().ideographic === -39;
+ @assert ctx.measureText('ABCD').getBaselines().hanging === 68;
+ }), 500);
+
# TODO: shadows, alpha, composite, clip
diff --git a/background-fetch/fetch.https.window.js b/background-fetch/fetch.https.window.js
index 33c8124ffa4569..f2cffd0b8cfc56 100644
--- a/background-fetch/fetch.https.window.js
+++ b/background-fetch/fetch.https.window.js
@@ -73,12 +73,18 @@ backgroundFetchTest(async (test, backgroundFetch) => {
assert_equals(registration.uploadTotal, 0);
assert_equals(registration.uploaded, 0);
assert_equals(registration.downloadTotal, 0);
+ assert_equals(registration.state, "pending");
+ assert_equals(registration.failureReason, "");
// Skip `downloaded`, as the transfer may have started already.
- const {type, results} = await getMessageFromServiceWorker();
+ const {type, eventRegistration, results} = await getMessageFromServiceWorker();
assert_equals('backgroundfetchsuccess', type);
assert_equals(results.length, 1);
+ assert_equals(eventRegistration.id, registration.id);
+ assert_equals(eventRegistration.state, "success");
+ assert_equals(eventRegistration.failureReason, "");
+
assert_true(results[0].url.includes('resources/feature-name.txt'));
assert_equals(results[0].status, 200);
assert_equals(results[0].text, 'Background Fetch');
@@ -96,3 +102,23 @@ backgroundFetchTest(async (test, backgroundFetch) => {
'This fetch should have thrown a quota exceeded error');
}, 'Background Fetch that exceeds the quota throws a QuotaExceededError');
+
+backgroundFetchTest(async (test, backgroundFetch) => {
+ const registration = await backgroundFetch.fetch(
+ 'my-id', ['resources/feature-name.txt', 'resources/feature-name.txt']);
+
+ const {type, eventRegistration, results} = await getMessageFromServiceWorker();
+ assert_equals('backgroundfetchsuccess', type);
+ assert_equals(results.length, 2);
+
+ assert_equals(eventRegistration.id, registration.id);
+ assert_equals(eventRegistration.state, "success");
+ assert_equals(eventRegistration.failureReason, "");
+
+ for (const result of results) {
+ assert_true(result.url.includes('resources/feature-name.txt'));
+ assert_equals(result.status, 200);
+ assert_equals(result.text, 'Background Fetch');
+ }
+
+}, 'Fetches can have requests with duplicate URLs');
diff --git a/background-fetch/get.https.window.js b/background-fetch/get.https.window.js
index a0b2acd4a69552..5f249663fda2f0 100644
--- a/background-fetch/get.https.window.js
+++ b/background-fetch/get.https.window.js
@@ -41,6 +41,8 @@ backgroundFetchTest(async (test, backgroundFetch) => {
assert_equals(registration.uploadTotal, 0);
assert_equals(registration.uploaded, 0);
assert_equals(registration.downloadTotal, 1234);
+ assert_equals(registration.state, "pending");
+ assert_equals(registration.failureReason, "");
// Skip `downloaded`, as the transfer may have started already.
const secondRegistration = await backgroundFetch.get(registrationId);
diff --git a/background-fetch/service_workers/sw-helpers.js b/background-fetch/service_workers/sw-helpers.js
index ff51f22a2b950f..e4c772135dba26 100644
--- a/background-fetch/service_workers/sw-helpers.js
+++ b/background-fetch/service_workers/sw-helpers.js
@@ -5,6 +5,25 @@ function sendMessageToDocument(msg) {
source.postMessage(msg);
}
+// This is needed to create a local javascript object identical to the
+// one returned by a BackgroundFetchEvent, so that it can be serialized
+// and transmitted from the service worker context to the document.
+function cloneRegistration(registration) {
+ function deepCopy(src) {
+ if (typeof src !== 'object' || src === null)
+ return src;
+ var dst = Array.isArray(src) ? [] : {};
+ for (var property in src) {
+ if (typeof src[property] === 'function')
+ continue;
+ dst[property] = deepCopy(src[property]);
+ }
+ return dst;
+ }
+
+ return deepCopy(registration);
+}
+
// Notify the document that the SW is registered and ready.
self.addEventListener('message', event => {
source = event.source;
diff --git a/background-fetch/service_workers/sw.js b/background-fetch/service_workers/sw.js
index 10e17f5874f2c7..ab2445d18b0973 100644
--- a/background-fetch/service_workers/sw.js
+++ b/background-fetch/service_workers/sw.js
@@ -1,20 +1,24 @@
importScripts('sw-helpers.js');
-async function getFetchResult(settledFetch) {
- if (!settledFetch.response)
+async function getFetchResult(record) {
+ response = await record.responseReady;
+ if (!response)
return Promise.resolve(null);
return {
- url: settledFetch.response.url,
- status: settledFetch.response.status,
- text: await settledFetch.response.text(),
+ url: response.url,
+ status: response.status,
+ text: await response.text(),
};
}
self.addEventListener('backgroundfetchsuccess', event => {
event.waitUntil(
- event.fetches.values()
- .then(fetches => Promise.all(fetches.map(fetch => getFetchResult(fetch))))
- .then(results => sendMessageToDocument({ type: event.type, results })));
+ event.registration.matchAll()
+ .then(records => Promise.all(records.map(record => getFetchResult(record))))
+ .then(results => {
+ const registrationCopy = cloneRegistration(event.registration);
+ sendMessageToDocument({ type: event.type, eventRegistration: registrationCopy, results })
+ }));
});
diff --git a/beacon/beacon-readablestream.window.js b/beacon/beacon-readablestream.window.js
new file mode 100644
index 00000000000000..fc7f81f884bdf4
--- /dev/null
+++ b/beacon/beacon-readablestream.window.js
@@ -0,0 +1,3 @@
+test(() => {
+ assert_throws(new TypeError(), () => navigator.sendBeacon("...", new ReadableStream()));
+}, "sendBeacon() with a stream does not work due to the keepalive flag being set");
diff --git a/client-hints/accept_ch.tentative.https.html b/client-hints/accept_ch.tentative.https.html
index b8379de46a2206..491ef3c71873bd 100644
--- a/client-hints/accept_ch.tentative.https.html
+++ b/client-hints/accept_ch.tentative.https.html
@@ -52,7 +52,7 @@
function acceptChLoaded() {
// Open a new window. Verify that the user agent does not attach the client
// hints.
- var verify_win = window.open("do_not_expect_client_hints_headers.html");
+ var verify_win = window.open("resources/do_not_expect_client_hints_headers.html");
assert_not_equals(verify_win, null, "Popup windows not allowed?");
}
diff --git a/compat/css-style-declaration-alias-enumeration.html b/compat/css-style-declaration-alias-enumeration.html
index 4608af9d5fc7d3..cdd9cc8eaefb94 100644
--- a/compat/css-style-declaration-alias-enumeration.html
+++ b/compat/css-style-declaration-alias-enumeration.html
@@ -1,6 +1,5 @@
Aliases enumerated on CSSStyleDeclaration
-
diff --git a/compat/webkit-appearance.html b/compat/webkit-appearance.html
new file mode 100644
index 00000000000000..210944522a9a7d
--- /dev/null
+++ b/compat/webkit-appearance.html
@@ -0,0 +1,57 @@
+
+-webkit-appearance
+
+
+
+
diff --git a/content-security-policy/blob/blob-urls-do-not-match-self.sub.html b/content-security-policy/blob/blob-urls-do-not-match-self.sub.html
index 1bf96df17c0ed1..cafa1e366026c2 100644
--- a/content-security-policy/blob/blob-urls-do-not-match-self.sub.html
+++ b/content-security-policy/blob/blob-urls-do-not-match-self.sub.html
@@ -7,7 +7,7 @@
blob-urls-do-not-match-self
-
+
diff --git a/content-security-policy/default-src/default-src-inline-blocked.sub.html b/content-security-policy/default-src/default-src-inline-blocked.sub.html
index 86873553c6bd8f..0cb4ca55387990 100644
--- a/content-security-policy/default-src/default-src-inline-blocked.sub.html
+++ b/content-security-policy/default-src/default-src-inline-blocked.sub.html
@@ -12,7 +12,7 @@
default-src-inline-blocked
-
+
diff --git a/content-security-policy/generic/filesystem-urls-do-not-match-self.sub.html b/content-security-policy/generic/filesystem-urls-do-not-match-self.sub.html
index 401b65a898dd1c..afb272cf36adbf 100644
--- a/content-security-policy/generic/filesystem-urls-do-not-match-self.sub.html
+++ b/content-security-policy/generic/filesystem-urls-do-not-match-self.sub.html
@@ -7,7 +7,7 @@
filesystem-urls-do-not-match-self
-
+
@@ -19,7 +19,7 @@
window.addEventListener('securitypolicyviolation', function(e) {
log("violated-directive=" + e.violatedDirective);
});
-
+
if(!window.webkitRequestFileSystem) {
t_log = async_test();
t_log.set_status(t_log.NOTRUN, "No filesystem:// support, cannot run test.");
diff --git a/content-security-policy/generic/generic-0_1-script-src.html b/content-security-policy/generic/generic-0_1-script-src.html
index d27b922565b84e..35033c3899f78e 100644
--- a/content-security-policy/generic/generic-0_1-script-src.html
+++ b/content-security-policy/generic/generic-0_1-script-src.html
@@ -16,9 +16,9 @@ default-src should cascade to script-src directive
var scriptsrc2 = async_test("Verify cascading of default-src to script-src policy: allow");
var allowedScriptRan = false;
var t_spv = async_test("Should fire violation events for every failed violation");
-
+
window.addEventListener("securitypolicyviolation", t_spv.step_func_done(function(e) {
- assert_equals(e.violatedDirective, "script-src");
+ assert_equals(e.violatedDirective, "script-src-elem");
}));
diff --git a/content-security-policy/generic/generic-0_10_1.sub.html b/content-security-policy/generic/generic-0_10_1.sub.html
index 107ab905bcfc12..f48c1e3c56ffde 100644
--- a/content-security-policy/generic/generic-0_10_1.sub.html
+++ b/content-security-policy/generic/generic-0_10_1.sub.html
@@ -2,16 +2,16 @@
implicit port number matching fails with a different port
-
+
-
+
+
+
+
+
diff --git a/cookies/http-state/resources/cookie-http-state-template.js b/cookies/http-state/resources/cookie-http-state-template.js
index 470d46ebc43837..d737b38c520b83 100644
--- a/cookies/http-state/resources/cookie-http-state-template.js
+++ b/cookies/http-state/resources/cookie-http-state-template.js
@@ -1,16 +1,32 @@
const SERVER_LOCATION = "resources";
const SERVER_SCRIPT = SERVER_LOCATION + "/cookie-setter.py";
+/* Adds a div with "