mirror of
https://github.com/servo/servo.git
synced 2025-07-14 10:53:42 +01:00
Update web-platform-tests to revision 388ba3a049a3473b1945b9f8f81e9d6e342a249e
This commit is contained in:
parent
43e21dc845
commit
bdaf11b099
139 changed files with 3089 additions and 807 deletions
|
@ -14,9 +14,6 @@
|
||||||
[Revoke blob URL after creating Request, will fetch]
|
[Revoke blob URL after creating Request, will fetch]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
||||||
[url-with-fetch.any.html]
|
[url-with-fetch.any.html]
|
||||||
[Untitled]
|
[Untitled]
|
||||||
|
@ -37,6 +34,3 @@
|
||||||
[Revoke blob URL after creating Request, will fetch]
|
[Revoke blob URL after creating Request, will fetch]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[Revoke blob URL after calling fetch, fetch should succeed]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -0,0 +1,2 @@
|
||||||
|
[overflow-wrap-break-word-006.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[break-spaces-004.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[break-spaces-005.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[break-spaces-006.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[break-spaces-007.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[break-spaces-008.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[word-break-break-all-012.html]
|
||||||
|
expected: FAIL
|
|
@ -0,0 +1,2 @@
|
||||||
|
[word-break-break-all-013.html]
|
||||||
|
expected: FAIL
|
|
@ -1079,3 +1079,9 @@
|
||||||
[text-indent percentage(%) / values]
|
[text-indent percentage(%) / values]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[padding-left length(px) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[padding-bottom length(ex) / values]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
2
tests/wpt/metadata/css/css-values/ic-unit-008.html.ini
Normal file
2
tests/wpt/metadata/css/css-values/ic-unit-008.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[ic-unit-008.html]
|
||||||
|
expected: FAIL
|
2
tests/wpt/metadata/css/css-values/ic-unit-009.html.ini
Normal file
2
tests/wpt/metadata/css/css-values/ic-unit-009.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[ic-unit-009.html]
|
||||||
|
expected: FAIL
|
2
tests/wpt/metadata/css/css-values/ic-unit-010.html.ini
Normal file
2
tests/wpt/metadata/css/css-values/ic-unit-010.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[ic-unit-010.html]
|
||||||
|
expected: FAIL
|
2
tests/wpt/metadata/css/css-values/ic-unit-011.html.ini
Normal file
2
tests/wpt/metadata/css/css-values/ic-unit-011.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[ic-unit-011.html]
|
||||||
|
expected: FAIL
|
2
tests/wpt/metadata/css/css-values/ic-unit-012.html.ini
Normal file
2
tests/wpt/metadata/css/css-values/ic-unit-012.html.ini
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[ic-unit-012.html]
|
||||||
|
expected: FAIL
|
|
@ -2,7 +2,7 @@
|
||||||
type: testharness
|
type: testharness
|
||||||
|
|
||||||
[single-byte-decoder.html?document]
|
[single-byte-decoder.html?document]
|
||||||
expected: CRASH
|
expected: TIMEOUT
|
||||||
[ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
|
[ISO-8859-4: iso_8859-4:1988 (document.characterSet and document.inputEncoding)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@
|
||||||
|
|
||||||
|
|
||||||
[single-byte-decoder.html?XMLHttpRequest]
|
[single-byte-decoder.html?XMLHttpRequest]
|
||||||
expected: TIMEOUT
|
expected: CRASH
|
||||||
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
[ISO-8859-2: iso_8859-2:1987 (XMLHttpRequest)]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -312,15 +312,3 @@
|
||||||
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
[<iframe>: separate response Content-Type: text/plain */*;charset=gbk]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[<iframe>: combined response Content-Type: text/html */*]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html */*;charset=gbk]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: */* text/html]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,3 @@
|
||||||
[X-Content-Type-Options%3A%20nosniff%0C]
|
[X-Content-Type-Options%3A%20nosniff%0C]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
[X-Content-Type-Options%3A%0D%0AX-Content-Type-Options%3A%20nosniff]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
||||||
|
|
|
@ -1,4 +0,0 @@
|
||||||
[traverse_the_history_5.html]
|
|
||||||
[Multiple history traversals, last would be aborted]
|
|
||||||
expected: FAIL
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[autoplay-supported-by-feature-policy.html]
|
||||||
|
[document.featurePolicy.features should advertise autoplay.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[script-onerror-insertion-point-2.html]
|
|
||||||
expected: TIMEOUT
|
|
|
@ -1,5 +0,0 @@
|
||||||
[promise-rejection-events.html]
|
|
||||||
expected: TIMEOUT
|
|
||||||
[rejectionhandled is dispatched from a queued task, and not immediately]
|
|
||||||
expected: TIMEOUT
|
|
||||||
|
|
|
@ -143,3 +143,24 @@
|
||||||
[Property shape-margin does not support quirky length]
|
[Property shape-margin does not support quirky length]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset-inline-start does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset-block does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset-block-start does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset-inline does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset-inline-end does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
[Property inset-block-end does not support quirky length]
|
||||||
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[excluded-properties-003.html]
|
||||||
|
[inset does not support quirky length values]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[realtimeanalyser-fft-scaling.html]
|
[realtimeanalyser-fft-scaling.html]
|
||||||
expected: TIMEOUT
|
|
||||||
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
[X 2048-point FFT peak position is not equal to 64. Got 0.]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[webvr-supported-by-feature-policy.html]
|
||||||
|
[document.featurePolicy.features should advertise xr.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
[import-in-moduleworker.html]
|
[import-in-moduleworker.html]
|
||||||
|
expected: ERROR
|
||||||
[Base URL in module dedicated workers: import]
|
[Base URL in module dedicated workers: import]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
[sharedworker-in-worker.html]
|
[sharedworker-in-worker.html]
|
||||||
expected: ERROR
|
|
||||||
[Base URL in workers: new SharedWorker()]
|
[Base URL in workers: new SharedWorker()]
|
||||||
expected: FAIL
|
expected: FAIL
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[sync-xhr-supported-by-feature-policy.html]
|
||||||
|
[document.featurePolicy.features should advertise sync-xhr.]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
[transition_calc_implicit.html]
|
|
||||||
expected: TIMEOUT
|
|
4
tests/wpt/mozilla/meta/mozilla/paint_timing.html.ini
Normal file
4
tests/wpt/mozilla/meta/mozilla/paint_timing.html.ini
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
[paint_timing.html]
|
||||||
|
[Performance entries observer]
|
||||||
|
expected: FAIL
|
||||||
|
|
|
@ -6,9 +6,13 @@
|
||||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables
|
||||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/index
|
# https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/index
|
||||||
#
|
#
|
||||||
# In addition to this configuration file, the "Build pull requests from forks
|
# In addition to this configuration file, some setup in the Azure DevOps
|
||||||
# of this repository" setting must also be enabled in the Azure DevOps project:
|
# project is required:
|
||||||
# https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github#validate-contributions-from-forks
|
# - The "Build pull requests from forks of this repository" setting must be
|
||||||
|
# enabled: https://docs.microsoft.com/en-us/azure/devops/pipelines/repos/github#validate-contributions-from-forks
|
||||||
|
# - A scheduled build needs to be set up for the the epochs/daily branch.
|
||||||
|
# - To get results from scheduled builds into wpt.fyi, a service connection
|
||||||
|
# named wpt.fyi with URL https://wpt.fyi is needed.
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# The affected tests jobs are unconditional for speed, as most PRs have one or
|
# The affected tests jobs are unconditional for speed, as most PRs have one or
|
||||||
|
@ -125,7 +129,7 @@ jobs:
|
||||||
|
|
||||||
- job: all_macOS
|
- job: all_macOS
|
||||||
displayName: 'all tests (Safari Technology Preview)'
|
displayName: 'all tests (Safari Technology Preview)'
|
||||||
condition: eq(variables['Build.SourceBranch'], 'refs/heads/epochs/daily')
|
condition: eq(variables['Build.Reason'], 'Schedule')
|
||||||
strategy:
|
strategy:
|
||||||
parallel: 4 # chosen to make runtime ~2h
|
parallel: 4 # chosen to make runtime ~2h
|
||||||
timeoutInMinutes: 360
|
timeoutInMinutes: 360
|
||||||
|
@ -148,3 +152,20 @@ jobs:
|
||||||
inputs:
|
inputs:
|
||||||
artifactName: 'results'
|
artifactName: 'results'
|
||||||
condition: succeededOrFailed()
|
condition: succeededOrFailed()
|
||||||
|
|
||||||
|
# The InvokeRESTAPI task can only run in a server job.
|
||||||
|
- job: all_post
|
||||||
|
displayName: 'all tests (wpt.fyi hook)'
|
||||||
|
dependsOn: all_macOS
|
||||||
|
pool: server
|
||||||
|
steps:
|
||||||
|
- task: InvokeRESTAPI@1
|
||||||
|
displayName: 'Invoke wpt.fyi hook'
|
||||||
|
inputs:
|
||||||
|
serviceConnection: wpt.fyi
|
||||||
|
urlSuffix: /api/checks/azure/$(Build.BuildId)
|
||||||
|
- task: InvokeRESTAPI@1
|
||||||
|
displayName: 'Invoke staging.wpt.fyi hook'
|
||||||
|
inputs:
|
||||||
|
serviceConnection: staging.wpt.fyi
|
||||||
|
urlSuffix: /api/checks/azure/$(Build.BuildId)
|
||||||
|
|
|
@ -61,7 +61,7 @@ tasks:
|
||||||
owner: ${event.pusher.email}
|
owner: ${event.pusher.email}
|
||||||
source: ${event.repository.url}
|
source: ${event.repository.url}
|
||||||
payload:
|
payload:
|
||||||
image: harjgam/web-platform-tests:0.25
|
image: harjgam/web-platform-tests:0.26
|
||||||
maxRunTime: 7200
|
maxRunTime: 7200
|
||||||
artifacts:
|
artifacts:
|
||||||
public/results:
|
public/results:
|
||||||
|
@ -136,7 +136,7 @@ tasks:
|
||||||
owner: ${event.pull_request.user.login}@users.noreply.github.com
|
owner: ${event.pull_request.user.login}@users.noreply.github.com
|
||||||
source: ${event.repository.url}
|
source: ${event.repository.url}
|
||||||
payload:
|
payload:
|
||||||
image: harjgam/web-platform-tests:0.25
|
image: harjgam/web-platform-tests:0.26
|
||||||
maxRunTime: 7200
|
maxRunTime: 7200
|
||||||
artifacts:
|
artifacts:
|
||||||
public/results:
|
public/results:
|
||||||
|
|
|
@ -188,20 +188,17 @@ promise_test(async testCase => {
|
||||||
});
|
});
|
||||||
// Txn1 should commit before txn2, even though txn2 uses commit().
|
// Txn1 should commit before txn2, even though txn2 uses commit().
|
||||||
const txn1 = db.transaction(['books'], 'readwrite');
|
const txn1 = db.transaction(['books'], 'readwrite');
|
||||||
const objectStore1 = txn1.objectStore('books');
|
txn1.objectStore('books').put({isbn: 'one', title: 'title1'});
|
||||||
const putRequest1 = objectStore1.put({isbn:'one', title:'title1'});
|
|
||||||
const releaseTxnFunction = keepAlive(testCase, txn1, 'books');
|
const releaseTxnFunction = keepAlive(testCase, txn1, 'books');
|
||||||
|
|
||||||
const txn2 = db.transaction(['books'], 'readwrite');
|
const txn2 = db.transaction(['books'], 'readwrite');
|
||||||
const objectStore2 = txn2.objectStore('books');
|
txn2.objectStore('books').put({isbn:'one', title:'title2'});
|
||||||
const putRequest2 = objectStore2.put({isbn:'one', title:'title2'});
|
|
||||||
txn2.commit();
|
txn2.commit();
|
||||||
|
|
||||||
// Exercise the IndexedDB transaction ordering by executing one with a
|
// Exercise the IndexedDB transaction ordering by executing one with a
|
||||||
// different scope.
|
// different scope.
|
||||||
const txn3 = db.transaction(['not_books'], 'readwrite');
|
const txn3 = db.transaction(['not_books'], 'readwrite');
|
||||||
const objectStore3 = txn3.objectStore('not_books');
|
txn3.objectStore('not_books').put({'title': 'not_title'}, 'key');
|
||||||
objectStore3.put({'title': 'not_title'}, 'key');
|
|
||||||
txn3.oncomplete = function() {
|
txn3.oncomplete = function() {
|
||||||
releaseTxnFunction();
|
releaseTxnFunction();
|
||||||
}
|
}
|
||||||
|
@ -210,8 +207,7 @@ promise_test(async testCase => {
|
||||||
|
|
||||||
// Read the data back to verify that txn2 executed last.
|
// Read the data back to verify that txn2 executed last.
|
||||||
const txn4 = db.transaction(['books'], 'readonly');
|
const txn4 = db.transaction(['books'], 'readonly');
|
||||||
const objectStore4 = txn4.objectStore('books');
|
const getRequest4 = txn4.objectStore('books').get('one');
|
||||||
const getRequest4 = objectStore4.get('one');
|
|
||||||
await promiseForTransaction(testCase, txn4);
|
await promiseForTransaction(testCase, txn4);
|
||||||
assert_equals(getRequest4.result.title, 'title2');
|
assert_equals(getRequest4.result.title, 'title2');
|
||||||
db.close();
|
db.close();
|
||||||
|
@ -225,8 +221,7 @@ promise_test(async testCase => {
|
||||||
});
|
});
|
||||||
// Txn1 creates the book 'one' so the 'add()' below fails.
|
// Txn1 creates the book 'one' so the 'add()' below fails.
|
||||||
const txn1 = db.transaction(['books'], 'readwrite');
|
const txn1 = db.transaction(['books'], 'readwrite');
|
||||||
const objectStore1 = txn1.objectStore('books');
|
txn1.objectStore('books').add({isbn:'one', title:'title1'});
|
||||||
const putRequest1 = objectStore1.add({isbn:'one', title:'title1'});
|
|
||||||
txn1.commit();
|
txn1.commit();
|
||||||
await promiseForTransaction(testCase, txn1);
|
await promiseForTransaction(testCase, txn1);
|
||||||
|
|
||||||
|
@ -235,15 +230,17 @@ promise_test(async testCase => {
|
||||||
const txn2 = db.transaction(['books'], 'readwrite');
|
const txn2 = db.transaction(['books'], 'readwrite');
|
||||||
const objectStore2 = txn2.objectStore('books');
|
const objectStore2 = txn2.objectStore('books');
|
||||||
objectStore2.put({isbn:'two', title:'title2'});
|
objectStore2.put({isbn:'two', title:'title2'});
|
||||||
const addRequest2 = objectStore2.add({isbn:'one', title:'title2'});
|
const addRequest = objectStore2.add({isbn:'one', title:'title2'});
|
||||||
txn2.commit();
|
txn2.commit();
|
||||||
txn2.oncomplete = assert_unreached(
|
txn2.oncomplete = () => { assert_unreached(
|
||||||
'Transaction with invalid "add" call should not be completed.');
|
'Transaction with invalid "add" call should not be completed.'); };
|
||||||
|
|
||||||
var addWatcher = requestWatcher(testCase, addRequest2);
|
// Wait for the transaction to complete. We have to explicitly wait for the
|
||||||
var txnWatcher = transactionWatcher(testCase, txn2);
|
// error signal on the transaction because of the nature of the test tooling.
|
||||||
await Promise.all([addWatcher.wait_for('error'),
|
await Promise.all([
|
||||||
txnWatcher.wait_for('error', 'abort')]);
|
requestWatcher(testCase, addRequest).wait_for('error'),
|
||||||
|
transactionWatcher(testCase, txn2).wait_for(['error', 'abort'])
|
||||||
|
]);
|
||||||
|
|
||||||
// Read the data back to verify that txn2 was aborted.
|
// Read the data back to verify that txn2 was aborted.
|
||||||
const txn3 = db.transaction(['books'], 'readonly');
|
const txn3 = db.transaction(['books'], 'readonly');
|
||||||
|
@ -255,3 +252,41 @@ promise_test(async testCase => {
|
||||||
assert_equals(getRequest2.result, 0);
|
assert_equals(getRequest2.result, 0);
|
||||||
db.close();
|
db.close();
|
||||||
}, 'Transactions that explicitly commit and have errors should abort.');
|
}, 'Transactions that explicitly commit and have errors should abort.');
|
||||||
|
|
||||||
|
|
||||||
|
promise_test(async testCase => {
|
||||||
|
const db = await createDatabase(testCase, db => {
|
||||||
|
createBooksStore(testCase, db);
|
||||||
|
});
|
||||||
|
const txn1 = db.transaction(['books'], 'readwrite');
|
||||||
|
txn1.objectStore('books').add({isbn: 'one', title: 'title1'});
|
||||||
|
txn1.commit();
|
||||||
|
await promiseForTransaction(testCase, txn1);
|
||||||
|
|
||||||
|
// The second add request will throw an error, but the onerror handler will
|
||||||
|
// appropriately catch the error allowing the valid put request on the
|
||||||
|
// transaction to commit.
|
||||||
|
const txn2 = db.transaction(['books'], 'readwrite');
|
||||||
|
const objectStore2 = txn2.objectStore('books');
|
||||||
|
objectStore2.put({isbn: 'two', title:'title2'});
|
||||||
|
const addRequest = objectStore2.add({isbn: 'one', title:'unreached_title'});
|
||||||
|
addRequest.onerror = (event) => {
|
||||||
|
event.preventDefault();
|
||||||
|
addRequest.transaction.commit();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Wait for the transaction to complete. We have to explicitly wait for the
|
||||||
|
// error signal on the transaction because of the nature of the test tooling.
|
||||||
|
await transactionWatcher(testCase,txn2).wait_for(['error', 'complete'])
|
||||||
|
|
||||||
|
// Read the data back to verify that txn2 was committed.
|
||||||
|
const txn3 = db.transaction(['books'], 'readonly');
|
||||||
|
const objectStore3 = txn3.objectStore('books');
|
||||||
|
const getRequest1 = objectStore3.get('one');
|
||||||
|
const getRequest2 = objectStore3.get('two');
|
||||||
|
await promiseForTransaction(testCase, txn3);
|
||||||
|
assert_equals(getRequest1.result.title, 'title1');
|
||||||
|
assert_equals(getRequest2.result.title, 'title2');
|
||||||
|
db.close();
|
||||||
|
}, 'Transactions that handle all errors properly should be behave as ' +
|
||||||
|
'expected when an explicit commit is called in an onerror handler.');
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that accelerometer is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('accelerometer', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise accelerometer.');
|
||||||
|
</script>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that ambient-light-sensor is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('ambient-light-sensor', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise ambient-light-sensor.');
|
||||||
|
</script>
|
|
@ -30,3 +30,9 @@ function waitForAsyncAnimationFrames(count) {
|
||||||
// AnimationWorklet.
|
// AnimationWorklet.
|
||||||
return waitForAnimationFrames(count + 1);
|
return waitForAnimationFrames(count + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function waitForAnimationFrameWithCondition(condition) {
|
||||||
|
do {
|
||||||
|
await new Promise(window.requestAnimationFrame);
|
||||||
|
} while (!condition())
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<style>
|
||||||
|
#box {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
transform: translateY(100px);
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="box"></div>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<title>Verify that calling pause immediately after playing works as expected</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
<link rel="match" href="references/translated-box-ref.html">
|
||||||
|
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
<style>
|
||||||
|
#box {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="box"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
registerPassthroughAnimator().then(async _ => {
|
||||||
|
const box = document.getElementById('box');
|
||||||
|
const effect = new KeyframeEffect(box,
|
||||||
|
{ transform: ['translateY(100px)', 'translateY(200px)'] },
|
||||||
|
{ duration: 100, iterations: 1 }
|
||||||
|
);
|
||||||
|
|
||||||
|
const animation = new WorkletAnimation('passthrough', effect);
|
||||||
|
animation.play();
|
||||||
|
// Immediately pausing animation should freeze the current time at 0.
|
||||||
|
animation.pause();
|
||||||
|
// Wait at least one frame to ensure a paused animation actually freezes.
|
||||||
|
await waitForAsyncAnimationFrames(1);
|
||||||
|
takeScreenshot();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</html>
|
|
@ -0,0 +1,40 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html class="reftest-wait">
|
||||||
|
<title>Verify that calling pause immediately after playing works as expected</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
<link rel="match" href="references/translated-box-ref.html">
|
||||||
|
|
||||||
|
<script src="/common/reftest-wait.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
<style>
|
||||||
|
#box {
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background-color: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<div id="box"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
registerPassthroughAnimator().then(async _ => {
|
||||||
|
const duration = 18; // a bit longer than a frame
|
||||||
|
const box = document.getElementById('box');
|
||||||
|
const effect = new KeyframeEffect(box,
|
||||||
|
{ transform: ['translateY(0px)', 'translateY(100px)'] },
|
||||||
|
{ duration: duration, iterations: 1, fill: 'forwards'}
|
||||||
|
);
|
||||||
|
|
||||||
|
const animation = new WorkletAnimation('passthrough', effect);
|
||||||
|
// Immediately pausing animation should freeze the current time at 0.
|
||||||
|
animation.pause();
|
||||||
|
// Playing should cause animation to resume.
|
||||||
|
animation.play();
|
||||||
|
// Wait until we ensure animation has reached completion.
|
||||||
|
await waitForAnimationFrameWithCondition( _ => {
|
||||||
|
return animation.currentTime >= duration;
|
||||||
|
});
|
||||||
|
takeScreenshot();
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</html>
|
|
@ -0,0 +1,58 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Verify that currentTime and playState are correct when animation is paused</title>
|
||||||
|
<link rel="help" href="https://drafts.css-houdini.org/css-animationworklet/">
|
||||||
|
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script src="/web-animations/testcommon.js"></script>
|
||||||
|
<script src="common.js"></script>
|
||||||
|
|
||||||
|
<div id="box"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
|
||||||
|
setup(setupAndRegisterTests, {explicit_done: true});
|
||||||
|
|
||||||
|
function createAnimation() {
|
||||||
|
const box = document.getElementById('box');
|
||||||
|
const effect = new KeyframeEffect(box,
|
||||||
|
{ transform: ['translateY(100px)', 'translateY(200px)'] },
|
||||||
|
{ duration: 100, iterations: 1 }
|
||||||
|
);
|
||||||
|
|
||||||
|
return new WorkletAnimation('passthrough', effect);
|
||||||
|
}
|
||||||
|
|
||||||
|
async function setupAndRegisterTests() {
|
||||||
|
await registerPassthroughAnimator();
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const animation = createAnimation();
|
||||||
|
animation.play();
|
||||||
|
// Immediately pausing animation should freeze the current time at 0.
|
||||||
|
animation.pause();
|
||||||
|
assert_equals(animation.currentTime, 0);
|
||||||
|
assert_equals(animation.playState, "paused");
|
||||||
|
// Wait some time to ensure a paused animation actually freezes.
|
||||||
|
await waitForNextFrame();
|
||||||
|
assert_equals(animation.currentTime, 0);
|
||||||
|
assert_equals(animation.playState, "paused");
|
||||||
|
}, 'pausing an animation freezes its current time');
|
||||||
|
|
||||||
|
promise_test(async t => {
|
||||||
|
const animation = createAnimation();
|
||||||
|
const startTime = document.timeline.currentTime;
|
||||||
|
animation.pause();
|
||||||
|
animation.play();
|
||||||
|
await waitForNextFrame();
|
||||||
|
const timelineTime = document.timeline.currentTime;
|
||||||
|
assert_equals(animation.playState, "running");
|
||||||
|
assert_greater_than(animation.currentTime, 0);
|
||||||
|
assert_times_equal(animation.currentTime, (timelineTime - startTime));
|
||||||
|
}, 'playing a paused animation should resume it');
|
||||||
|
|
||||||
|
done();
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
|
@ -44,3 +44,21 @@ backgroundFetchTest(async (test, backgroundFetch) => {
|
||||||
|
|
||||||
assert_equals(uploaded, uploadData.length);
|
assert_equals(uploaded, uploadData.length);
|
||||||
}, 'Progress event includes uploaded bytes');
|
}, 'Progress event includes uploaded bytes');
|
||||||
|
|
||||||
|
backgroundFetchTest(async (test, backgroundFetch) => {
|
||||||
|
const uploadRequest1 =
|
||||||
|
new Request('resources/upload.py', {method: 'POST', body: 'upload1'});
|
||||||
|
const uploadRequest2 =
|
||||||
|
new Request('resources/upload.py', {method: 'POST', body: 'upload2'});
|
||||||
|
|
||||||
|
await backgroundFetch.fetch(uniqueId(), [uploadRequest1, uploadRequest2]);
|
||||||
|
|
||||||
|
const {type, eventRegistration, results} = await getMessageFromServiceWorker();
|
||||||
|
assert_equals(type, 'backgroundfetchsuccess');
|
||||||
|
assert_equals(results.length, 2);
|
||||||
|
assert_equals(eventRegistration.result, 'success');
|
||||||
|
assert_equals(eventRegistration.failureReason, '');
|
||||||
|
|
||||||
|
assert_array_equals([results[0].text, results[1].text].sort(),
|
||||||
|
['upload1', 'upload2']);
|
||||||
|
}, 'Duplicate upload requests work and can be distinguished.');
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<title>CSS Shadow Parts - Interaction with tree-abiding</title>
|
<title>CSS Shadow Parts - Interaction with pseudo-elements</title>
|
||||||
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
|
<meta href="mailto:fergal@chromium.org" rel="author" title="Fergal Daly">
|
||||||
<link href="http://www.google.com/" rel="author" title="Google">
|
<link href="http://www.google.com/" rel="author" title="Google">
|
||||||
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
|
<link href="https://drafts.csswg.org/css-shadow-parts/" rel="help">
|
||||||
|
@ -14,6 +14,9 @@
|
||||||
#c-e::part(before-p)::before { color: green; }
|
#c-e::part(before-p)::before { color: green; }
|
||||||
#c-e::part(after-p)::after { color: green; }
|
#c-e::part(after-p)::after { color: green; }
|
||||||
#c-e::part(placeholder-p)::placeholder { color: green; }
|
#c-e::part(placeholder-p)::placeholder { color: green; }
|
||||||
|
#c-e::part(selection-p)::selection { color: green; }
|
||||||
|
#c-e::part(first-line-p)::first-line { color: green; }
|
||||||
|
#c-e::part(first-letter-p)::first-letter { color: green; }
|
||||||
</style>
|
</style>
|
||||||
<script>installCustomElement("custom-element", "custom-element-template");</script>
|
<script>installCustomElement("custom-element", "custom-element-template");</script>
|
||||||
<template id="custom-element-template">
|
<template id="custom-element-template">
|
||||||
|
@ -21,6 +24,9 @@
|
||||||
#before-i::before { content: "this text"; color: red; }
|
#before-i::before { content: "this text"; color: red; }
|
||||||
#after-i::after { content: "this text"; color: red; }
|
#after-i::after { content: "this text"; color: red; }
|
||||||
#placeholder-i::placeholder { color: red; }
|
#placeholder-i::placeholder { color: red; }
|
||||||
|
#selection-i::selection { color: red; }
|
||||||
|
#first-line-i::first-line { color: red; }
|
||||||
|
#first-letter-i::first-letter { color: red; }
|
||||||
</style>
|
</style>
|
||||||
<div>
|
<div>
|
||||||
The following text should be green:
|
The following text should be green:
|
||||||
|
@ -34,6 +40,18 @@
|
||||||
The following text should be green:
|
The following text should be green:
|
||||||
<input id="placeholder-i" part="placeholder-p" placeholder="this text"></input>
|
<input id="placeholder-i" part="placeholder-p" placeholder="this text"></input>
|
||||||
</div>
|
</div>
|
||||||
|
<div>
|
||||||
|
The selected text should be green:
|
||||||
|
<div id="selection-i" part="selection-p">select some text</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
The following text should be green:
|
||||||
|
<div id="first-line-i" part="first-line-p">this text<br>Not this</div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
The first letter should be green:
|
||||||
|
<div id="first-letter-i" part="first-letter-p"><p>this text</p></div>
|
||||||
|
</div>
|
||||||
</template>
|
</template>
|
||||||
<custom-element id="c-e"></custom-element>
|
<custom-element id="c-e"></custom-element>
|
||||||
<script>
|
<script>
|
||||||
|
@ -51,6 +69,18 @@
|
||||||
const el = getElementByShadowIds(document, ["c-e", "placeholder-i"]);
|
const el = getElementByShadowIds(document, ["c-e", "placeholder-i"]);
|
||||||
assert_equals(window.getComputedStyle(el, '::placeholder').color, colorGreen);
|
assert_equals(window.getComputedStyle(el, '::placeholder').color, colorGreen);
|
||||||
}, "::placeholder in selected host is styled");
|
}, "::placeholder in selected host is styled");
|
||||||
|
test(function() {
|
||||||
|
const el = getElementByShadowIds(document, ["c-e", "selection-i"]);
|
||||||
|
assert_equals(window.getComputedStyle(el, '::selection').color, colorGreen);
|
||||||
|
}, "::selection in selected host is styled");
|
||||||
|
test(function() {
|
||||||
|
const el = getElementByShadowIds(document, ["c-e", "first-line-i"]);
|
||||||
|
assert_equals(window.getComputedStyle(el, '::first-line').color, colorGreen);
|
||||||
|
}, "::first-line in selected host is styled");
|
||||||
|
test(function() {
|
||||||
|
const el = getElementByShadowIds(document, ["c-e", "first-letter-i"]);
|
||||||
|
assert_equals(window.getComputedStyle(el, '::first-letter').color, colorGreen);
|
||||||
|
}, "::first-letter in selected host is styled");
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
|
@ -0,0 +1,17 @@
|
||||||
|
<!doctype html>
|
||||||
|
<title>@charset isn't a valid rule and should be dropped</title>
|
||||||
|
<meta name="author" title="Tab Atkins-Bittner">
|
||||||
|
<link rel=help href="https://drafts.csswg.org/css-syntax/#charset-rule">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<style>
|
||||||
|
@charset "utf-8";
|
||||||
|
@charset "utf-8";
|
||||||
|
foo { color: blue; }
|
||||||
|
@charset "utf-8";
|
||||||
|
</style>
|
||||||
|
<script>
|
||||||
|
test(()=>{
|
||||||
|
assert_true(document.styleSheets[0].cssRules.length == 1)
|
||||||
|
}, "@charset isn't a valid rule and shouldn't show up in the OM");
|
||||||
|
</script>
|
|
@ -22,7 +22,7 @@ div {
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<p>This test passes if there is nothing below this sentence.
|
<p>This test passes if there is nothing below this sentence.
|
||||||
<div> FAIL <div>
|
<div> FAIL </div>
|
||||||
<!--
|
<!--
|
||||||
white-space:break-spaces should cause the spaces at the end of the line to be preserved.
|
white-space:break-spaces should cause the spaces at the end of the line to be preserved.
|
||||||
Since there is an allowed break point between the first space and the F,
|
Since there is an allowed break point between the first space and the F,
|
||||||
|
|
|
@ -22,4 +22,4 @@ div {
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<p>This test passes if the word FAIL does not appear below.
|
<p>This test passes if the word FAIL does not appear below.
|
||||||
<div>PASS FAIL<div>
|
<div>PASS FAIL</div>
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
<title>CSS Text Test: overflow-wrap: break-word</title>
|
<title>CSS Text Test: overflow-wrap: break-word</title>
|
||||||
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
|
||||||
<meta name="flags" content="ahem">
|
<meta name="flags" content="ahem">
|
||||||
<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
|
<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
|
||||||
<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken.">
|
<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: pre-wrap' property, that must prevent the word to be broken.">
|
||||||
|
|
|
@ -0,0 +1,36 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: overflow-wrap: break-word</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-overflow-wrap-break-word">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<link rel="match" href="reference/overflow-wrap-break-word-001-ref.html">
|
||||||
|
<meta name="assert" content="A Single leading white-space constitutes a soft breaking opportunity, honoring the 'white-space: break-spaces' property, that must prevent the word to be broken.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: Ahem;
|
||||||
|
}
|
||||||
|
.red {
|
||||||
|
position: absolute;
|
||||||
|
background: green;
|
||||||
|
color: red;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
line-height: 1em;
|
||||||
|
width: 5ch;
|
||||||
|
white-space: break-spaces;
|
||||||
|
overflow-wrap: break-word;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="red"><br>XXXXX</div>
|
||||||
|
<div class="test"> XXXXX </div>
|
||||||
|
</body>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: white-space: break-spaces</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
|
||||||
|
<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-word">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<link rel="match" href="reference/pre-wrap-001-ref.html">
|
||||||
|
<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the 'white-space: break-spaces' value.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font: 20px/1 Ahem;
|
||||||
|
}
|
||||||
|
.fail {
|
||||||
|
position: absolute;
|
||||||
|
color: red;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
span { color: green; }
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
width: 2ch;
|
||||||
|
|
||||||
|
white-space: break-spaces;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="fail"><span>XX</span><br>XX</div>
|
||||||
|
<div class="test"> XX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,33 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: white-space - break-spaces</title>
|
||||||
|
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
|
||||||
|
<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://drafts.csswg.org/css-text-3/#white-space-property">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<meta name="assert" content="If 'white-space' is set to 'break-spaces', collapsing preserved white-spaces' advance width is not allowed, so that they can be wrapped honoring the 'white-space' propery.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font: 10px/1 Ahem;
|
||||||
|
}
|
||||||
|
.fail {
|
||||||
|
position: absolute;
|
||||||
|
color: red;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
span { color: green; }
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
width: 100px;
|
||||||
|
|
||||||
|
white-space: break-spaces;
|
||||||
|
}
|
||||||
|
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="fail">XXXX<span>XXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XXXXXXXXXX</span><br><span>XX</span>XXXX<span>XXXX</span></div>
|
||||||
|
<div class="test">XXXX XXXX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: white-space - break-spaces</title>
|
||||||
|
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
|
||||||
|
<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
|
||||||
|
<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', but the words are broken, honring the 'word-beak: break-all' even though there are previous breaking opportunities in the white-spaces.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font: 25px/1 Ahem;
|
||||||
|
}
|
||||||
|
.fail {
|
||||||
|
position: absolute;
|
||||||
|
color: red;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
span { color: green; }
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
width: 4ch;
|
||||||
|
|
||||||
|
white-space: break-spaces;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="fail"><span>X</span>XXX<br>X<span>X</span>XX<br>X<span>XXX</span><br><span>XXXX</span></div>
|
||||||
|
<div class="test"> XXXX XXX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,34 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: white-space - break-spaces</title>
|
||||||
|
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
|
||||||
|
<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
|
||||||
|
<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<meta name="assert" content="A single leading white-space should be used, honoring white-space: break-spaces, to avoid overflow; however, a single preserved white-space at the end of the line cannot be wrapped, hence it hangs when breaking after it to move the rest of the text to the next line.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font: 25px/1 Ahem;
|
||||||
|
}
|
||||||
|
.fail {
|
||||||
|
position: absolute;
|
||||||
|
color: red;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
span { color: green; }
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
width: 4ch;
|
||||||
|
|
||||||
|
white-space: break-spaces;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="fail"><span>XXXX</span><br>XXXX<br>XXX<span>X</span><br><span>XXXX</span></div>
|
||||||
|
<div class="test"> XXXX XXX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,35 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: white-space - break-spaces</title>
|
||||||
|
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
|
||||||
|
<link rel="help" title="3. White Space and Wrapping: the white-space property" href="https://www.w3.org/TR/css-text-3/#white-space-property">
|
||||||
|
<link rel="help" title="5.2. Breaking Rules for Letters: the word-break property" href="https://drafts.csswg.org/css-text-3/#word-break-property">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="match" href="reference/white-space-break-spaces-005-ref.html">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<meta name="assert" content="White spaces are preserved, honoring the 'white-space: break-spaces', which may lead to overfow. However, we can break before the first white-space after the word honoring the 'break-all' value.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font: 25px/1 Ahem;
|
||||||
|
}
|
||||||
|
.fail {
|
||||||
|
position: absolute;
|
||||||
|
color: red;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
span { color: green; }
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
width: 4ch;
|
||||||
|
|
||||||
|
white-space: break-spaces;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="fail">XXXX<br><span>X</span>XX<span>X</span><br><span>XXXX</span><br><span>XXXX</span></div>
|
||||||
|
<div class="test">XXXX XX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: white-space: pre-wrap</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-word">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<link rel="match" href="reference/pre-wrap-001-ref.html">
|
||||||
|
<meta name="assert" content="The word is not broken if there are previous breaking opportunities, honoring the white-space: pre-wrap value.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: Ahem;
|
||||||
|
}
|
||||||
|
.red {
|
||||||
|
position: absolute;
|
||||||
|
white-space: pre;
|
||||||
|
background: green;
|
||||||
|
color: red;
|
||||||
|
width: 40px;
|
||||||
|
height: 40px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
line-height: 1em;
|
||||||
|
width: 2ch;
|
||||||
|
|
||||||
|
white-space: pre-wrap;
|
||||||
|
word-break: break-word;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="red"><br>XX</div>
|
||||||
|
<div class="test"> XX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Reference File</title>
|
||||||
|
<link rel="author" title="Javier Fernandez" href="mailto:jfernandez@igalia.com" />
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
background: green;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div></div>
|
||||||
|
</body>
|
|
@ -1,8 +1,9 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Text Test: overflow-wrap: break-word</title>
|
<title>CSS Text Test: word-break: break-all</title>
|
||||||
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
|
||||||
<meta name="flags" content="ahem">
|
<meta name="flags" content="ahem">
|
||||||
<link rel="match" href="reference/word-break-break-all-010-ref.html">
|
<link rel="match" href="reference/word-break-break-all-010-ref.html">
|
||||||
<meta name="assert" content="The word is broken even if pre-wrap provides a former breaking opportunity in leading white-space.">
|
<meta name="assert" content="The word is broken even if pre-wrap provides a former breaking opportunity in leading white-space.">
|
||||||
|
|
|
@ -1,8 +1,9 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<meta charset="utf-8">
|
<meta charset="utf-8">
|
||||||
<title>CSS Text Test: overflow-wrap: break-word</title>
|
<title>CSS Text Test: word-break: break-all</title>
|
||||||
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-pre-wrap">
|
||||||
<meta name="flags" content="ahem">
|
<meta name="flags" content="ahem">
|
||||||
<link rel="match" href="reference/word-break-break-all-010-ref.html">
|
<link rel="match" href="reference/word-break-break-all-010-ref.html">
|
||||||
<meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: pre-wrap', on top to the ones provided by 'word-break: break-all'.">
|
<meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: pre-wrap', on top to the ones provided by 'word-break: break-all'.">
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: overflow-wrap: break-word</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<link rel="match" href="reference/word-break-break-all-010-ref.html">
|
||||||
|
<meta name="assert" content="The word is broken even if white-space: break-spaces provides a former breaking opportunity in leading white-space.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: Ahem;
|
||||||
|
}
|
||||||
|
.red {
|
||||||
|
position: absolute;
|
||||||
|
white-space: pre;
|
||||||
|
background: green;
|
||||||
|
color: red;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
line-height: 1em;
|
||||||
|
width: 5ch;
|
||||||
|
|
||||||
|
white-space: break-spaces;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="red"> XXXX<br>X</div>
|
||||||
|
<div class="test"> XXXXX</div>
|
||||||
|
</body>
|
|
@ -0,0 +1,37 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<title>CSS Text Test: word-break: break-all</title>
|
||||||
|
<link rel="author" title="Javier Fernandez Garcia-Boente" href="mailto:jfernandez@igalia.com">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-word-break-break-all">
|
||||||
|
<link rel="help" href="https://drafts.csswg.org/css-text-3/#valdef-white-space-break-spaces">
|
||||||
|
<meta name="flags" content="ahem">
|
||||||
|
<link rel="match" href="reference/word-break-break-all-010-ref.html">
|
||||||
|
<meta name="assert" content="A single leading white-space should account as soft breaking opportunity, honoring the 'white-space: break-spaces', on top to the ones provided by 'word-break: break-all'.">
|
||||||
|
<style>
|
||||||
|
div {
|
||||||
|
position: relative;
|
||||||
|
font-size: 20px;
|
||||||
|
font-family: Ahem;
|
||||||
|
}
|
||||||
|
.red {
|
||||||
|
position: absolute;
|
||||||
|
background: green;
|
||||||
|
color: red;
|
||||||
|
width: 100px;
|
||||||
|
height: 100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
.test {
|
||||||
|
color: green;
|
||||||
|
background: green;
|
||||||
|
line-height: 1em;
|
||||||
|
width: 1ch;
|
||||||
|
white-space: break-spaces;
|
||||||
|
word-break: break-all;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
<body>
|
||||||
|
<p>Test passes if there is a <strong>filled green square</strong> and <strong>no red</strong>.</p>
|
||||||
|
<div class="red">X<br>X<br>X</div>
|
||||||
|
<div class="test"> XX</div>
|
||||||
|
</body>
|
|
@ -9,7 +9,7 @@
|
||||||
<meta name="assert" content="
|
<meta name="assert" content="
|
||||||
When the fallback value of an attr() function is invalid, the delcaration is ignored.
|
When the fallback value of an attr() function is invalid, the delcaration is ignored.
|
||||||
" />
|
" />
|
||||||
|
<meta name="flags" content="invalid">
|
||||||
<link
|
<link
|
||||||
rel="author"
|
rel="author"
|
||||||
title="François REMY"
|
title="François REMY"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<meta name="assert" content="
|
<meta name="assert" content="
|
||||||
When the type of an attr() function is known and unexpected, the declaration is ignored
|
When the type of an attr() function is known and unexpected, the declaration is ignored
|
||||||
" />
|
" />
|
||||||
|
<meta name="flags" content="invalid">
|
||||||
<link
|
<link
|
||||||
rel="author"
|
rel="author"
|
||||||
title="François REMY"
|
title="François REMY"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<meta name="assert" content="
|
<meta name="assert" content="
|
||||||
When the type of an attr() function is known and unexpected, the declaration is ignored
|
When the type of an attr() function is known and unexpected, the declaration is ignored
|
||||||
" />
|
" />
|
||||||
|
<meta name="flags" content="invalid">
|
||||||
<link
|
<link
|
||||||
rel="author"
|
rel="author"
|
||||||
title="François REMY"
|
title="François REMY"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<meta name="assert" content="
|
<meta name="assert" content="
|
||||||
When the attr() fallback is an invalid length, the delcaration is correctly ignored.
|
When the attr() fallback is an invalid length, the delcaration is correctly ignored.
|
||||||
" />
|
" />
|
||||||
|
<meta name="flags" content="invalid">
|
||||||
<link
|
<link
|
||||||
rel="author"
|
rel="author"
|
||||||
title="François REMY"
|
title="François REMY"
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
<meta name="assert" content="
|
<meta name="assert" content="
|
||||||
When the fallback of a pixel attribute reference is invalid, the declaration is ignored.
|
When the fallback of a pixel attribute reference is invalid, the declaration is ignored.
|
||||||
" />
|
" />
|
||||||
|
<meta name="flags" content="invalid">
|
||||||
<link
|
<link
|
||||||
rel="author"
|
rel="author"
|
||||||
title="François REMY"
|
title="François REMY"
|
||||||
|
|
49
tests/wpt/web-platform-tests/css/css-values/ic-unit-008.html
Normal file
49
tests/wpt/web-platform-tests/css/css-values/ic-unit-008.html
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: ic unit in width (basic)</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths">
|
||||||
|
<link rel="match" href="reference/ic-unit-008-ref.html">
|
||||||
|
|
||||||
|
<meta name="flags" content="">
|
||||||
|
<meta name="assert" content="In this test, the ic unit is the advance width measure of the 水 (CJK water ideograph, U+6C34) glyph.">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
}
|
||||||
|
|
||||||
|
div#test-blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
height: 1.8em;
|
||||||
|
width: 5ic;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#reference-orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
clear: left;
|
||||||
|
color: orange;
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same width</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="test-blue"></div>
|
||||||
|
|
||||||
|
<div id="reference-orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
49
tests/wpt/web-platform-tests/css/css-values/ic-unit-009.html
Normal file
49
tests/wpt/web-platform-tests/css/css-values/ic-unit-009.html
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: ic unit in height (basic)</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths">
|
||||||
|
<link rel="match" href="reference/ic-unit-009-ref.html">
|
||||||
|
|
||||||
|
<meta name="flags" content="">
|
||||||
|
<meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph.">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#test-blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
height: 5ic;
|
||||||
|
width: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#reference-orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
color: orange;
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="test-blue"></div>
|
||||||
|
|
||||||
|
<div id="reference-orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
50
tests/wpt/web-platform-tests/css/css-values/ic-unit-010.html
Normal file
50
tests/wpt/web-platform-tests/css/css-values/ic-unit-010.html
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: ic unit in height with 'text-orientation: mixed'</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths">
|
||||||
|
<link rel="match" href="reference/ic-unit-009-ref.html">
|
||||||
|
|
||||||
|
<meta name="flags" content="">
|
||||||
|
<meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph.">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
text-orientation: mixed;
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#test-blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
height: 5ic;
|
||||||
|
width: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#reference-orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
color: orange;
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="test-blue"></div>
|
||||||
|
|
||||||
|
<div id="reference-orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
50
tests/wpt/web-platform-tests/css/css-values/ic-unit-011.html
Normal file
50
tests/wpt/web-platform-tests/css/css-values/ic-unit-011.html
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: ic unit in height with 'text-orientation: upright'</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths">
|
||||||
|
<link rel="match" href="reference/ic-unit-009-ref.html">
|
||||||
|
|
||||||
|
<meta name="flags" content="">
|
||||||
|
<meta name="assert" content="In this test, the ic unit is the advance height measure of the 水 (CJK water ideograph, U+6C34) glyph.">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
text-orientation: upright;
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#test-blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
height: 5ic;
|
||||||
|
width: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#reference-orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
color: orange;
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="test-blue"></div>
|
||||||
|
|
||||||
|
<div id="reference-orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
50
tests/wpt/web-platform-tests/css/css-values/ic-unit-012.html
Normal file
50
tests/wpt/web-platform-tests/css/css-values/ic-unit-012.html
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: ic unit in height with 'text-orientation: sideways'</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-4/#font-relative-lengths">
|
||||||
|
<link rel="match" href="reference/ic-unit-009-ref.html">
|
||||||
|
|
||||||
|
<meta name="flags" content="">
|
||||||
|
<meta name="assert" content="In this test, the ic unit is the advance width measure of the 水 (CJK water ideograph, U+6C34) glyph.">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
text-orientation: sideways;
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#test-blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
height: 5ic;
|
||||||
|
width: 1.8em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#reference-orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
color: orange;
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="test-blue"></div>
|
||||||
|
|
||||||
|
<div id="reference-orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
|
@ -0,0 +1,47 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: case-insensitivity of Q unit (quarter-millimeter)</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-3/#absolute-lengths">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/CSS22/syndata.html#characters">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||||
|
|
||||||
|
<meta content="This test checks that 'Q' unit is case-insensitive." name="assert">
|
||||||
|
<meta name="flags" content="">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div#test-overlapping-green
|
||||||
|
{
|
||||||
|
background-color: green;
|
||||||
|
height: 105.83333Q;
|
||||||
|
width: 1px;
|
||||||
|
width: 105.83333q;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
25.4mm == 96px
|
||||||
|
Therefore, 26.45833mm == 100px
|
||||||
|
So, 26.45833 * 4 (Q per mm) == 105.83333Q == 100px
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
div#reference-overlapped-red
|
||||||
|
{
|
||||||
|
background-color: red;
|
||||||
|
bottom: 100px;
|
||||||
|
height: 100px;
|
||||||
|
position: relative;
|
||||||
|
width: 100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||||
|
|
||||||
|
<div id="test-overlapping-green"></div>
|
||||||
|
|
||||||
|
<div id="reference-overlapped-red"></div>
|
|
@ -0,0 +1,47 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test: case-insensitivity of Q unit (quarter-millimeter)</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/css-values-3/#absolute-lengths">
|
||||||
|
<link rel="help" href="https://www.w3.org/TR/CSS22/syndata.html#characters">
|
||||||
|
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
|
||||||
|
|
||||||
|
<meta content="This test checks that 'Q' unit is case-insensitive." name="assert">
|
||||||
|
<meta name="flags" content="">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div#test-overlapping-green
|
||||||
|
{
|
||||||
|
background-color: green;
|
||||||
|
height: 105.83333q;
|
||||||
|
width: 1px;
|
||||||
|
width: 105.83333Q;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
25.4mm == 96px
|
||||||
|
Therefore, 26.45833mm == 100px
|
||||||
|
So, 26.45833 * 4 (Q per mm) == 105.83333Q == 100px
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
div#reference-overlapped-red
|
||||||
|
{
|
||||||
|
background-color: red;
|
||||||
|
bottom: 100px;
|
||||||
|
height: 100px;
|
||||||
|
position: relative;
|
||||||
|
width: 100px;
|
||||||
|
z-index: -1;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a filled green square and <strong>no red</strong>.
|
||||||
|
|
||||||
|
<div id="test-overlapping-green"></div>
|
||||||
|
|
||||||
|
<div id="reference-overlapped-red"></div>
|
|
@ -0,0 +1,43 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test Reference File</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
}
|
||||||
|
|
||||||
|
div#blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
color: orange;
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same width</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="blue">水水水水水</div>
|
||||||
|
|
||||||
|
<div id="orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
|
@ -0,0 +1,43 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
|
||||||
|
<title>CSS Values and Units Test Reference File</title>
|
||||||
|
|
||||||
|
<link rel="author" title="Gérard Talbot" href="http://www.gtalbot.org/BrowserBugsSection/css21testsuite/">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
div
|
||||||
|
{
|
||||||
|
float: left;
|
||||||
|
font-size: 80px; /* arbitrary font size */
|
||||||
|
line-height: 1.8; /* arbitrary line-height */
|
||||||
|
writing-mode: vertical-rl;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#blue
|
||||||
|
{
|
||||||
|
background-color: blue;
|
||||||
|
color: blue;
|
||||||
|
}
|
||||||
|
|
||||||
|
div#orange
|
||||||
|
{
|
||||||
|
background-color: orange;
|
||||||
|
color: orange;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<p>Test passes if there is a blue rectangle with the <strong>same height</strong> as an orange rectangle.
|
||||||
|
|
||||||
|
<div id="blue">水水水水水</div>
|
||||||
|
|
||||||
|
<div id="orange">水水水水水</div>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
水 (CJK water ideograph, U+6C34) glyph == 水
|
||||||
|
|
||||||
|
-->
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Encrypted Media Extensions: Check encryptionScheme with Clear Key</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/encrypted-media/">
|
||||||
|
|
||||||
|
<!-- Web Platform Test Harness scripts -->
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
|
||||||
|
<!-- Helper scripts for Encrypted Media Extensions tests -->
|
||||||
|
<script src=/encrypted-media/util/utils.js></script>
|
||||||
|
<script src=/encrypted-media/util/utf8.js></script>
|
||||||
|
|
||||||
|
<!-- Content metadata -->
|
||||||
|
<!--<script src=/encrypted-media/content/content-metadata.js></script>-->
|
||||||
|
|
||||||
|
<!-- The script for this specific test -->
|
||||||
|
<script src=/encrypted-media/scripts/check-encryption-scheme.js></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id='log'></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var config = { keysystem: 'org.w3.clearkey' }
|
||||||
|
|
||||||
|
runTest(config);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Encrypted Media Extensions: Check HDCP status with Clear Key</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/encrypted-media/">
|
||||||
|
|
||||||
|
<!-- Web Platform Test Harness scripts -->
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
|
||||||
|
<!-- Helper scripts for Encrypted Media Extensions tests -->
|
||||||
|
<script src=/encrypted-media/util/utils.js></script>
|
||||||
|
<script src=/encrypted-media/util/utf8.js></script>
|
||||||
|
|
||||||
|
<!-- Content metadata -->
|
||||||
|
<!--<script src=/encrypted-media/content/content-metadata.js></script>-->
|
||||||
|
|
||||||
|
<!-- The script for this specific test -->
|
||||||
|
<script src=/encrypted-media/scripts/check-status-for-hdcp.js></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id='log'></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var config = { keysystem: 'org.w3.clearkey' }
|
||||||
|
|
||||||
|
runTest(config);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Encrypted Media Extensions: Check encryptionScheme with DRM</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/encrypted-media/">
|
||||||
|
|
||||||
|
<!-- Web Platform Test Harness scripts -->
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
|
||||||
|
<!-- Helper scripts for Encrypted Media Extensions tests -->
|
||||||
|
<script src=/encrypted-media/util/utils.js></script>
|
||||||
|
<script src=/encrypted-media/util/utf8.js></script>
|
||||||
|
|
||||||
|
<!-- Content metadata -->
|
||||||
|
<!--<script src=/encrypted-media/content/content-metadata.js></script>-->
|
||||||
|
|
||||||
|
<!-- The script for this specific test -->
|
||||||
|
<script src=/encrypted-media/scripts/check-encryption-scheme.js></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id='log'></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var config = { keysystem: getSupportedKeySystem() }
|
||||||
|
|
||||||
|
runTest(config);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,32 @@
|
||||||
|
<!doctype html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset=utf-8>
|
||||||
|
<title>Encrypted Media Extensions: Check HDCP status with DRM</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/encrypted-media/">
|
||||||
|
|
||||||
|
<!-- Web Platform Test Harness scripts -->
|
||||||
|
<script src=/resources/testharness.js></script>
|
||||||
|
<script src=/resources/testharnessreport.js></script>
|
||||||
|
|
||||||
|
<!-- Helper scripts for Encrypted Media Extensions tests -->
|
||||||
|
<script src=/encrypted-media/util/utils.js></script>
|
||||||
|
<script src=/encrypted-media/util/utf8.js></script>
|
||||||
|
|
||||||
|
<!-- Content metadata -->
|
||||||
|
<!--<script src=/encrypted-media/content/content-metadata.js></script>-->
|
||||||
|
|
||||||
|
<!-- The script for this specific test -->
|
||||||
|
<script src=/encrypted-media/scripts/check-status-for-hdcp.js></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id='log'></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
var config = { keysystem: getSupportedKeySystem() }
|
||||||
|
|
||||||
|
runTest(config);
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that encrypted-media is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://github.com/w3c/encrypted-media/pull/432">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('encrypted-media', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise encrypted-media.');
|
||||||
|
</script>
|
|
@ -0,0 +1,41 @@
|
||||||
|
function runTest(config, qualifier)
|
||||||
|
{
|
||||||
|
function checkEncryptionScheme(encryptionScheme)
|
||||||
|
{
|
||||||
|
var simpleConfig = getSimpleConfiguration();
|
||||||
|
assert_greater_than(simpleConfig[0].audioCapabilities.length, 0);
|
||||||
|
simpleConfig[0].audioCapabilities.forEach(function(capability) {
|
||||||
|
capability.encryptionScheme = encryptionScheme;
|
||||||
|
});
|
||||||
|
|
||||||
|
return navigator.requestMediaKeySystemAccess(config.keysystem, simpleConfig)
|
||||||
|
.then(
|
||||||
|
function(access) {
|
||||||
|
var actualConfiguration = access.getConfiguration();
|
||||||
|
for (let i = 0; i < actualConfiguration.audioCapabilities.length; i++) {
|
||||||
|
const capability = actualConfiguration.audioCapabilities[i];
|
||||||
|
|
||||||
|
// If "encryptionScheme" is not supported, fail.
|
||||||
|
if (!('encryptionScheme' in capability)) {
|
||||||
|
return Promise.reject('Not implemented');
|
||||||
|
}
|
||||||
|
|
||||||
|
// If "encryptionScheme" is supported, it should be returned.
|
||||||
|
assert_equals(capability.encryptionScheme, encryptionScheme);
|
||||||
|
}
|
||||||
|
return Promise.resolve('Supported');
|
||||||
|
},
|
||||||
|
function error() {
|
||||||
|
// CDM does not support "encryptionScheme". Test should still pass.
|
||||||
|
return Promise.resolve('Not supported');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
promise_test(
|
||||||
|
() => checkEncryptionScheme('cenc'),
|
||||||
|
testnamePrefix(qualifier, config.keysystem) + ' support for "cenc" encryption scheme.');
|
||||||
|
|
||||||
|
promise_test(
|
||||||
|
() => checkEncryptionScheme('cbcs'),
|
||||||
|
testnamePrefix(qualifier, config.keysystem) + ' support for "cbcs" encryption scheme.');
|
||||||
|
}
|
|
@ -0,0 +1,26 @@
|
||||||
|
function runTest(config, qualifier)
|
||||||
|
{
|
||||||
|
function checkStatusForMinHdcpVersionPolicy(hdcpVersion)
|
||||||
|
{
|
||||||
|
return navigator.requestMediaKeySystemAccess(config.keysystem, getSimpleConfiguration())
|
||||||
|
.then(function(access) {
|
||||||
|
return access.createMediaKeys();
|
||||||
|
})
|
||||||
|
.then(function(mediaKeys) {
|
||||||
|
// As HDCP policy depends on the hardware running this test,
|
||||||
|
// don't bother checking the result returned as it may or
|
||||||
|
// may not be supported. This simply verifies that
|
||||||
|
// getStatusForPolicy() exists and doesn't blow up.
|
||||||
|
return mediaKeys.getStatusForPolicy({minHdcpVersion: hdcpVersion});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
promise_test(
|
||||||
|
() => checkStatusForMinHdcpVersionPolicy(''),
|
||||||
|
testnamePrefix(qualifier, config.keysystem) +
|
||||||
|
' support for empty HDCP version.');
|
||||||
|
|
||||||
|
promise_test(
|
||||||
|
() => checkStatusForMinHdcpVersionPolicy('1.0'),
|
||||||
|
testnamePrefix(qualifier, config.keysystem) + ' support for HDCP 1.0.');
|
||||||
|
}
|
|
@ -0,0 +1,11 @@
|
||||||
|
test(() => {
|
||||||
|
if (typeof PerformanceObserver.supportedEntryTypes === "undefined")
|
||||||
|
assert_unreached("supportedEntryTypes is not supported.");
|
||||||
|
const types = PerformanceObserver.supportedEntryTypes;
|
||||||
|
assert_true(types.includes("firstInput"),
|
||||||
|
"There should be 'firstInput' in PerformanceObserver.supportedEntryTypes");
|
||||||
|
assert_true(types.includes("event"),
|
||||||
|
"There should be 'event' in PerformanceObserver.supportedEntryTypes");
|
||||||
|
assert_greater_than(types.indexOf("firstInput"), types.indexOf('event'),
|
||||||
|
"The 'firstInput' entry should appear after the 'event' entry");
|
||||||
|
}, "supportedEntryTypes contains 'event' and 'firstInput'.");
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that payment is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://github.com/w3c/payment-request/issues/600">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('payment', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise payment.');
|
||||||
|
</script>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that picture-in-picture is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://wicg.github.io/picture-in-picture/#feature-policy">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('picture-in-picture', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise picture-in-picture.');
|
||||||
|
</script>
|
Binary file not shown.
After Width: | Height: | Size: 43 KiB |
|
@ -0,0 +1,24 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<script src='/resources/testharness.js'></script>
|
||||||
|
<script src='/resources/testharnessreport.js'></script>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<img src="./unoptimized-image.jpg">
|
||||||
|
<script>
|
||||||
|
var check_report_format = (reports, observer) => {
|
||||||
|
let report = reports[0];
|
||||||
|
assert_equals(report.type, "feature-policy-violation");
|
||||||
|
assert_equals(report.url, document.location.href);
|
||||||
|
assert_equals(report.body.featureId, "unoptimized-images");
|
||||||
|
assert_equals(report.body.disposition, "enforce");
|
||||||
|
};
|
||||||
|
|
||||||
|
async_test(t => {
|
||||||
|
new ReportingObserver(t.step_func_done(check_report_format),
|
||||||
|
{types: ['feature-policy-violation'], buffered: true}).observe();
|
||||||
|
}, "unoptimized-images Report Format");
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1 @@
|
||||||
|
Feature-Policy: unoptimized-images 'none'
|
|
@ -8,7 +8,8 @@ const crossOriginURL = get_host_info().HTTP_REMOTE_ORIGIN + "/fetch/cross-origin
|
||||||
"SAME-ORIGIN",
|
"SAME-ORIGIN",
|
||||||
"Same-Origin",
|
"Same-Origin",
|
||||||
"same-origin, <>",
|
"same-origin, <>",
|
||||||
"same-origin, same-origin"
|
"same-origin, same-origin",
|
||||||
|
"https://www.example.com", // See https://github.com/whatwg/fetch/issues/760
|
||||||
].forEach(incorrectHeaderValue => {
|
].forEach(incorrectHeaderValue => {
|
||||||
// Note: an incorrect value results in a successful load, so this test is only meaningful in
|
// Note: an incorrect value results in a successful load, so this test is only meaningful in
|
||||||
// implementations with support for the header.
|
// implementations with support for the header.
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that geolocation is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('geolocation', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise geolocation.');
|
||||||
|
</script>
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that gyroscope is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('gyroscope', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise gyroscope.');
|
||||||
|
</script>
|
|
@ -106,16 +106,22 @@ addTest(function() {
|
||||||
C.location[prop]; // Shouldn't throw.
|
C.location[prop]; // Shouldn't throw.
|
||||||
Object.getOwnPropertyDescriptor(C.location, prop); // Shouldn't throw.
|
Object.getOwnPropertyDescriptor(C.location, prop); // Shouldn't throw.
|
||||||
assert_true(Object.prototype.hasOwnProperty.call(C.location, prop), "hasOwnProperty for " + prop);
|
assert_true(Object.prototype.hasOwnProperty.call(C.location, prop), "hasOwnProperty for " + prop);
|
||||||
|
assert_throws("SecurityError", function() { C.location[prop] = undefined; }, "Should throw when writing to " + prop + " on Location");
|
||||||
|
}
|
||||||
|
else if (prop == 'href') {
|
||||||
|
Object.getOwnPropertyDescriptor(C.location, prop); // Shouldn't throw.
|
||||||
|
assert_true(Object.prototype.hasOwnProperty.call(C.location, prop), "hasOwnProperty for " + prop);
|
||||||
|
assert_throws("SecurityError", function() { C.location[prop] },
|
||||||
|
"Should throw reading href on Location");
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
assert_throws("SecurityError", function() { C[prop]; }, "Should throw when accessing " + prop + " on Location");
|
assert_throws("SecurityError", function() { C.location[prop]; }, "Should throw when accessing " + prop + " on Location");
|
||||||
assert_throws("SecurityError", function() { Object.getOwnPropertyDescriptor(C, prop); },
|
assert_throws("SecurityError", function() { Object.getOwnPropertyDescriptor(C.location, prop); },
|
||||||
"Should throw when accessing property descriptor for " + prop + " on Location");
|
"Should throw when accessing property descriptor for " + prop + " on Location");
|
||||||
assert_throws("SecurityError", function() { Object.prototype.hasOwnProperty.call(C, prop); },
|
assert_throws("SecurityError", function() { Object.prototype.hasOwnProperty.call(C.location, prop); },
|
||||||
"Should throw when invoking hasOwnProperty for " + prop + " on Location");
|
"Should throw when invoking hasOwnProperty for " + prop + " on Location");
|
||||||
|
assert_throws("SecurityError", function() { C.location[prop] = undefined; }, "Should throw when writing to " + prop + " on Location");
|
||||||
}
|
}
|
||||||
if (prop != 'href')
|
|
||||||
assert_throws("SecurityError", function() { C[prop] = undefined; }, "Should throw when writing to " + prop + " on Location");
|
|
||||||
}
|
}
|
||||||
}, "Only whitelisted properties are accessible cross-origin");
|
}, "Only whitelisted properties are accessible cross-origin");
|
||||||
|
|
||||||
|
@ -150,11 +156,22 @@ addTest(function() {
|
||||||
assert_throws(new TypeError, function() { protoSetter.call(C, new Object()); }, "proto setter |call| on cross-origin Window");
|
assert_throws(new TypeError, function() { protoSetter.call(C, new Object()); }, "proto setter |call| on cross-origin Window");
|
||||||
assert_throws(new TypeError, function() { protoSetter.call(C.location, new Object()); }, "proto setter |call| on cross-origin Location");
|
assert_throws(new TypeError, function() { protoSetter.call(C.location, new Object()); }, "proto setter |call| on cross-origin Location");
|
||||||
});
|
});
|
||||||
|
// Hack to avoid "duplicate test name" harness issues.
|
||||||
|
setters.forEach(function(protoSetter) {
|
||||||
|
test(function() { protoSetter.call(C, null); },
|
||||||
|
"proto setter |call| on cross-origin Window with null (" + protoSetter + ")");
|
||||||
|
test(function() { protoSetter.call(C.location, null); },
|
||||||
|
"proto setter |call| on cross-origin Location with null (" + protoSetter + ")");
|
||||||
|
});
|
||||||
if (Reflect.setPrototypeOf) {
|
if (Reflect.setPrototypeOf) {
|
||||||
assert_false(Reflect.setPrototypeOf(C, new Object()),
|
assert_false(Reflect.setPrototypeOf(C, new Object()),
|
||||||
"Reflect.setPrototypeOf on cross-origin Window");
|
"Reflect.setPrototypeOf on cross-origin Window");
|
||||||
|
assert_true(Reflect.setPrototypeOf(C, null),
|
||||||
|
"Reflect.setPrototypeOf on cross-origin Window with null");
|
||||||
assert_false(Reflect.setPrototypeOf(C.location, new Object()),
|
assert_false(Reflect.setPrototypeOf(C.location, new Object()),
|
||||||
"Reflect.setPrototypeOf on cross-origin Location");
|
"Reflect.setPrototypeOf on cross-origin Location");
|
||||||
|
assert_true(Reflect.setPrototypeOf(C.location, null),
|
||||||
|
"Reflect.setPrototypeOf on cross-origin Location with null");
|
||||||
}
|
}
|
||||||
}, "[[SetPrototypeOf]] should return false");
|
}, "[[SetPrototypeOf]] should return false");
|
||||||
|
|
||||||
|
@ -230,6 +247,19 @@ addTest(function() {
|
||||||
assert_equals(typeof D.then, "object");
|
assert_equals(typeof D.then, "object");
|
||||||
}, "[[GetOwnProperty]] - Subframe named 'then' should shadow the default 'then' value");
|
}, "[[GetOwnProperty]] - Subframe named 'then' should shadow the default 'then' value");
|
||||||
|
|
||||||
|
addTest(function() {
|
||||||
|
assert_equals(typeof D.close, "function");
|
||||||
|
assert_equals(typeof D.open, "object");
|
||||||
|
}, "[[GetOwnProperty]] - Subframes should be visible cross-origin only if their names don't match the names of cross-origin-exposed IDL properties");
|
||||||
|
|
||||||
|
addTest(function() {
|
||||||
|
assert_equals(typeof Object.getOwnPropertyDescriptor(C, '0').value, "object");
|
||||||
|
assert_equals(typeof Object.getOwnPropertyDescriptor(C, '1').value, "object");
|
||||||
|
assert_throws("SecurityError", function() {
|
||||||
|
Object.getOwnPropertyDescriptor(C, '2');
|
||||||
|
});
|
||||||
|
}, "[[GetOwnProperty]] - Should be able to get a property descriptor for an indexed property only if it corresponds to a child window.");
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* [[Delete]]
|
* [[Delete]]
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -6,5 +6,9 @@
|
||||||
<!-- A subframe to test "then" behavior -->
|
<!-- A subframe to test "then" behavior -->
|
||||||
<iframe name="then"></iframe>
|
<iframe name="then"></iframe>
|
||||||
<iframe name="b"></iframe>
|
<iframe name="b"></iframe>
|
||||||
|
<!-- Two subframes with names corresponding to IDL-defined properties; one
|
||||||
|
a cross-origin-exposed property and one not exposed cross-origin -->
|
||||||
|
<iframe name="close"></iframe>
|
||||||
|
<iframe name="open"></iframe>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that autoplay is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/infrastructure.html#policy-controlled-features">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('autoplay', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise autoplay.');
|
||||||
|
</script>
|
|
@ -200,6 +200,7 @@ interface IDBTransaction : EventTarget {
|
||||||
readonly attribute DOMException error;
|
readonly attribute DOMException error;
|
||||||
|
|
||||||
IDBObjectStore objectStore(DOMString name);
|
IDBObjectStore objectStore(DOMString name);
|
||||||
|
void commit();
|
||||||
void abort();
|
void abort();
|
||||||
|
|
||||||
// Event handlers:
|
// Event handlers:
|
||||||
|
|
|
@ -18,7 +18,7 @@ interface MediaRecorder : EventTarget {
|
||||||
readonly attribute unsigned long videoBitsPerSecond;
|
readonly attribute unsigned long videoBitsPerSecond;
|
||||||
readonly attribute unsigned long audioBitsPerSecond;
|
readonly attribute unsigned long audioBitsPerSecond;
|
||||||
|
|
||||||
void start(optional long timeslice);
|
void start(optional unsigned long timeslice);
|
||||||
void stop();
|
void stop();
|
||||||
void pause();
|
void pause();
|
||||||
void resume();
|
void resume();
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that magnetometer is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://w3c.github.io/sensors/#feature-policy-api">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('magnetometer', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise magnetometer.');
|
||||||
|
</script>
|
|
@ -0,0 +1,15 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<title>Test that accelerometer is advertised in the feature list</title>
|
||||||
|
<link rel="help" href="https://w3c.github.io/webappsec-feature-policy/#dom-featurepolicy-features">
|
||||||
|
<link rel="help" href="https://w3c.github.io/mediacapture-main/#feature-policy-integration">
|
||||||
|
<script src="/resources/testharness.js"></script>
|
||||||
|
<script src="/resources/testharnessreport.js"></script>
|
||||||
|
<script>
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('camera', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise camera.');
|
||||||
|
|
||||||
|
test(() => {
|
||||||
|
assert_in_array('microphone', document.featurePolicy.features());
|
||||||
|
}, 'document.featurePolicy.features should advertise microphone.');
|
||||||
|
</script>
|
|
@ -1,6 +1,7 @@
|
||||||
<!doctype html>
|
<!doctype html>
|
||||||
<title>MediaStreamTrack GetSettings</title>
|
<title>MediaStreamTrack GetSettings</title>
|
||||||
<p class="instructions">When prompted, accept to share your video stream.</p>
|
<p class="instructions">When prompted, accept to share your video stream.</p>
|
||||||
|
<meta name=timeout content=long>
|
||||||
<script src=/resources/testharness.js></script>
|
<script src=/resources/testharness.js></script>
|
||||||
<script src=/resources/testharnessreport.js></script>
|
<script src=/resources/testharnessreport.js></script>
|
||||||
<script>
|
<script>
|
||||||
|
|
|
@ -68,7 +68,6 @@ function runManualTest(button, expected = {}) {
|
||||||
<button onclick="
|
<button onclick="
|
||||||
const expectedAddress = {
|
const expectedAddress = {
|
||||||
country: 'AU',
|
country: 'AU',
|
||||||
regionCode: 'QLD',
|
|
||||||
addressLine: '55 test st',
|
addressLine: '55 test st',
|
||||||
city: 'Chapel Hill',
|
city: 'Chapel Hill',
|
||||||
dependentLocality: '',
|
dependentLocality: '',
|
||||||
|
|
|
@ -81,11 +81,6 @@ function retryShowsShippingAddressMember(button, error) {
|
||||||
The payment sheet shows "REGION ERROR" for the shipping address' region.
|
The payment sheet shows "REGION ERROR" for the shipping address' region.
|
||||||
</button>
|
</button>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
|
||||||
<button onclick="retryShowsShippingAddressMember(this, { regionCode: 'REGIONCODE ERROR' });">
|
|
||||||
The payment sheet shows "REGIONCODE ERROR" for the shipping address' region code.
|
|
||||||
</button>
|
|
||||||
</li>
|
|
||||||
<li>
|
<li>
|
||||||
<button onclick="retryShowsShippingAddressMember(this, { sortingCode: 'SORTINGCODE ERROR' });">
|
<button onclick="retryShowsShippingAddressMember(this, { sortingCode: 'SORTINGCODE ERROR' });">
|
||||||
The payment sheet shows "SORTINGCODE ERROR" for the shipping address' sorting code.
|
The payment sheet shows "SORTINGCODE ERROR" for the shipping address' sorting code.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue