Auto merge of #24449 - servo-wpt-sync:wpt_update_15-10-2019, r=jdm

Sync WPT with upstream (15-10-2019)

Automated downstream sync of changes from upstream as of 15-10-2019.
[no-wpt-sync]
r? @servo-wpt-sync
This commit is contained in:
bors-servo 2019-10-17 06:39:24 -04:00 committed by GitHub
commit d8f2f2ef0e
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
144 changed files with 3110 additions and 1980 deletions

View file

@ -7,7 +7,7 @@
expected: FAIL
[Opening a blob URL in a new window immediately before revoking it works.]
expected: TIMEOUT
expected: FAIL
[Opening a blob URL in a noopener about:blank window immediately before revoking it works.]
expected: FAIL

File diff suppressed because it is too large Load diff

View file

@ -2,3 +2,12 @@
[#container 1]
expected: FAIL
[[data-expected-height\] 1]
expected: FAIL
[[data-expected-height\] 2]
expected: FAIL
[[data-expected-height\] 7]
expected: FAIL

View file

@ -59,3 +59,21 @@
[Property font-variation-settings has initial value normal]
expected: FAIL
[Property font-variant-alternates has initial value normal]
expected: FAIL
[Property font-language-override inherits]
expected: FAIL
[Property font-optical-sizing has initial value auto]
expected: FAIL
[Property font-optical-sizing inherits]
expected: FAIL
[Property font-variant-alternates inherits]
expected: FAIL
[Property font-language-override has initial value normal]
expected: FAIL

View file

@ -0,0 +1,7 @@
[font-language-override-computed.html]
[Property font-language-override value '"ksw"' computes to '"ksw"']
expected: FAIL
[Property font-language-override value 'normal' computes to 'normal']
expected: FAIL

View file

@ -0,0 +1,7 @@
[font-language-override-valid.html]
[e.style['font-language-override'\] = "\\"ksw\\"" should set the property value]
expected: FAIL
[e.style['font-language-override'\] = "normal" should set the property value]
expected: FAIL

View file

@ -0,0 +1,7 @@
[font-optical-sizing-computed.html]
[Property font-optical-sizing value 'none' computes to 'none']
expected: FAIL
[Property font-optical-sizing value 'auto' computes to 'auto']
expected: FAIL

View file

@ -0,0 +1,7 @@
[font-optical-sizing-valid.html]
[e.style['font-optical-sizing'\] = "auto" should set the property value]
expected: FAIL
[e.style['font-optical-sizing'\] = "none" should set the property value]
expected: FAIL

View file

@ -0,0 +1,4 @@
[client-props-inline-list-item.html]
[client* returns the same for non-replaced inlines regardless of list-item-ness]
expected: FAIL

View file

@ -1,2 +0,0 @@
[matchMedia-display-none-iframe.html]
expected: ERROR

View file

@ -0,0 +1,10 @@
[matchMediaAddListener-handleEvent.html]
[throws if handleEvent is falsy and not callable]
expected: FAIL
[rethrows errors when getting handleEvent]
expected: FAIL
[throws if handleEvent is thruthy and not callable]
expected: FAIL

View file

@ -312,21 +312,21 @@
[<iframe>: separate response Content-Type: */* text/html]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/plain */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html */*;charset=gbk]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;" \\" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html */*]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;x=" text/plain]
[<iframe>: combined response Content-Type: text/html;" text/plain]
expected: FAIL
[<iframe>: separate response Content-Type: text/html;x=" text/plain]
expected: FAIL
[<iframe>: combined response Content-Type: text/html;" \\" text/plain]
expected: FAIL

View file

@ -56,3 +56,6 @@
[separate text/javascript x/x]
expected: FAIL
[separate text/javascript;charset=windows-1252 error text/javascript]
expected: FAIL

View file

@ -0,0 +1,4 @@
[traverse_the_history_5.html]
[Multiple history traversals, last would be aborted]
expected: FAIL

View file

@ -1,24 +1,5 @@
[open-features-negative-innerwidth-innerheight.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `innerwidth`, `innerheight`]
expected: FAIL
[features "innerheight=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404.5" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerheight=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerwidth=-404e1" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-screenx-screeny.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for legacy `screenx`, `screeny`]
expected: FAIL
[features "screenx=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "screeny=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "screeny=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "screenx=-0" should NOT set "left=204"]
expected: TIMEOUT
[features "screenx=-204.5" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-top-left.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `top`, `left`]
expected: FAIL
[features "top=-204" should NOT set "top=204"]
expected: TIMEOUT
[features "top=-204.5" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204" should NOT set "left=204"]
expected: TIMEOUT
[features "top=-0" should NOT set "top=204"]
expected: TIMEOUT
[features "left=-204.5" should NOT set "left=204"]
expected: TIMEOUT
[features "left=-0" should NOT set "left=204"]
expected: TIMEOUT

View file

@ -1,24 +1,5 @@
[open-features-negative-width-height.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: negative values for `width`, `height`]
expected: FAIL
[features "height=-404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404e1" should NOT set "height=404"]
expected: TIMEOUT
[features "height=-404.5" should NOT set "height=404"]
expected: TIMEOUT
[features "width=-404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404e1" should NOT set "width=404"]
expected: TIMEOUT
[features "width=-404.5" should NOT set "width=404"]
expected: TIMEOUT

View file

@ -1,48 +1,32 @@
[open-features-non-integer-height.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `height`]
expected: FAIL
[features "height=405*3" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405.32" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405e1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405/5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405^4" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405.5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405e-1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405 " should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "height=405LLl" should set "height=405"]
expected: TIMEOUT
[features "height=/404" should NOT set "height=404"]
expected: TIMEOUT
[top=0,left=0,width=401,: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[top=0,left=0: absence of feature "height" should be treated same as "height=0"]
expected: TIMEOUT
[features "height=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "height=L404" should NOT set "height=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-innerheight.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerheight`]
expected: FAIL
[features "innerheight=405e-1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405LLl" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405^4" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405e1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405 " should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405/5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405.32" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405.5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "innerheight=405*3" should set "height=405"]
expected: TIMEOUT
[features "innerheight=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "innerheight=/404" should NOT set "height=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-innerwidth.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `innerwidth`]
expected: FAIL
[features "innerwidth=405e-1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405*3" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405.5" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405e1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405.32" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405 " should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405LLl" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405/5" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "innerwidth=405^4" should set "width=405"]
expected: TIMEOUT
[features "innerwidth=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=_404" should NOT set "width=404"]
expected: TIMEOUT
[features "innerwidth=L404" should NOT set "width=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-left.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `left`]
expected: FAIL
[features "left=105e1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105 " should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105/5" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105e-1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105^4" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105LLl" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105.32" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105*3" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "left=105.5" should set "left=105"]
expected: TIMEOUT
[features "left=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=/104" should NOT set "left=104"]
expected: TIMEOUT
[features "left=_104" should NOT set "left=104"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-screenx.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screenx`]
expected: FAIL
[features "screenx=105.5" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105e1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105 " should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105*3" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105e-1" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105^4" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105LLl" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105/5" should set "left=105"]
expected: TIMEOUT
expected: FAIL
[features "screenx=105.32" should set "left=105"]
expected: TIMEOUT
[features "screenx=_104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=L104" should NOT set "left=104"]
expected: TIMEOUT
[features "screenx=/104" should NOT set "left=104"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-screeny.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for legacy feature `screeny`]
expected: FAIL
[features "screeny=405^4" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405e-1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405LLl" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405e1" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405 " should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405/5" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405*3" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405.32" should set "height=405"]
expected: TIMEOUT
expected: FAIL
[features "screeny=405.5" should set "height=405"]
expected: TIMEOUT
[features "screeny=_404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=L404" should NOT set "height=404"]
expected: TIMEOUT
[features "screeny=/404" should NOT set "height=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,42 +1,32 @@
[open-features-non-integer-top.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `top`]
expected: FAIL
[features "top=105/5" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105*3" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105LLl" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105e-1" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105.32" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105e1" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105 " should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105^4" should set "top=105"]
expected: TIMEOUT
expected: FAIL
[features "top=105.5" should set "top=105"]
expected: TIMEOUT
[features "top=/104" should NOT set "top=104"]
expected: TIMEOUT
[features "top=_104" should NOT set "top=104"]
expected: TIMEOUT
[features "top=L104" should NOT set "top=104"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,48 +1,32 @@
[open-features-non-integer-width.html]
type: testharness
expected: TIMEOUT
[HTML: window.open `features`: non-integer values for feature `width`]
expected: FAIL
[features "width=405^4" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405.5" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405e1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405 " should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405.32" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405LLl" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405*3" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405e-1" should set "width=405"]
expected: TIMEOUT
expected: FAIL
[features "width=405/5" should set "width=405"]
expected: TIMEOUT
[top=0,left=0: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=_404" should NOT set "width=404"]
expected: TIMEOUT
[top=0,left=0,height=401,: absence of feature "width" should be treated same as "width=0"]
expected: TIMEOUT
[features "width=/404" should NOT set "width=404"]
expected: TIMEOUT
[features "width=L404" should NOT set "width=404"]
expected: TIMEOUT
expected: FAIL

View file

@ -1,4 +1,8 @@
[skip-document-with-fragment.html]
expected: TIMEOUT
[Autofocus elements in iframed documents with URL fragments should be skipped.]
expected: FAIL
[Autofocus elements in top-level browsing context's documents with URI fragments should be skipped.]
expected: TIMEOUT

View file

@ -0,0 +1,2 @@
[select-sizing-001.html]
expected: FAIL

View file

@ -1,7 +0,0 @@
[toggleEvent.html]
[Calling open twice on 'details' fires only one toggle event]
expected: FAIL
[Setting open=true to opened 'details' element should not fire a toggle event at the 'details' element]
expected: FAIL

View file

@ -1,2 +0,0 @@
[script-onerror-insertion-point-2.html]
expected: TIMEOUT

View file

@ -1,5 +1,5 @@
[nested-context-navigations-iframe.html]
expected: TIMEOUT
expected: CRASH
[Test that iframe navigations are not observable by the parent, even after history navigations by the parent]
expected: FAIL

View file

@ -1,5 +1,4 @@
[realtimeanalyser-fft-scaling.html]
expected: TIMEOUT
[X 2048-point FFT peak position is not equal to 64. Got 0.]
expected: FAIL

View file

@ -0,0 +1,2 @@
[Worker-constructor.html]
expected: ERROR

View file

@ -0,0 +1,2 @@
[transition_calc_implicit.html]
expected: TIMEOUT

View file

@ -17,6 +17,10 @@
# Documention for the setup of these agents:
# https://docs.microsoft.com/en-us/azure/devops/pipelines/agents/v2-windows
trigger:
- epochs/*
- triggers/*
jobs:
# The affected tests jobs are unconditional for speed, as most PRs have one or
# more affected tests: https://github.com/web-platform-tests/wpt/issues/13936.

View file

@ -14,10 +14,11 @@ jobs:
uses: actions/checkout@v1
with:
fetch-depth: 50
- name: Install dependencies
run: |
sudo apt-get -qqy install zstd
pip install -r tools/wpt/requirements.txt
- name: Run manifest_build.py
uses: ./tools/docker/github
run: tools/docker/retry.py --delay 60 python tools/ci/manifest_build.py
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
entrypoint: python
args: tools/ci/manifest_build.py

View file

@ -12,15 +12,16 @@ tasks:
$flatten:
$match: {
event.ref == "refs/heads/master": [{name: firefox, channel: nightly}, {name: chrome, channel: dev}],
event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: stable}, {name: chrome, channel: stable}, {name: webkitgtk_minibrowser, channel: stable}],
event.ref == "refs/heads/epochs/weekly": [{name: firefox, channel: beta}, {name: chrome, channel: beta}],
event.ref == "refs/heads/epochs/daily": [{name: firefox, channel: stable}, {name: chrome, channel: stable}, {name: webkitgtk_minibrowser, channel: nightly}],
event.ref == "refs/heads/epochs/weekly": [{name: firefox, channel: beta}, {name: chrome, channel: beta}, {name: webkitgtk_minibrowser, channel: stable}],
event.ref == "refs/heads/triggers/chrome_stable": [{name: chrome, channel: stable}],
event.ref == "refs/heads/triggers/chrome_beta": [{name: chrome, channel: beta}],
event.ref == "refs/heads/triggers/chrome_dev": [{name: chrome, channel: dev}],
event.ref == "refs/heads/triggers/firefox_stable": [{name: firefox, channel: stable}],
event.ref == "refs/heads/triggers/firefox_beta": [{name: firefox, channel: beta}],
event.ref == "refs/heads/triggers/firefox_nightly": [{name: firefox, channel: nightly}],
event.ref == "refs/heads/triggers/webkitgtk_minibrowser_stable": [{name: webkitgtk_minibrowser, channel: stable}]
event.ref == "refs/heads/triggers/webkitgtk_minibrowser_stable": [{name: webkitgtk_minibrowser, channel: stable}],
event.ref == "refs/heads/triggers/webkitgtk_minibrowser_nightly": [{name: webkitgtk_minibrowser, channel: nightly}]
}
each(browser):
$map:
@ -72,10 +73,6 @@ tasks:
source: ${event.repository.url}
payload:
image:
$if: browser.name == 'webkitgtk_minibrowser'
then:
cl0p3z/web-platform-tests:0.1
else:
harjgam/web-platform-tests:0.33
maxRunTime: 7200
artifacts:

View file

@ -4,24 +4,45 @@
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<link rel="help" href="https://crbug.com/979894">
<link rel="help" href="https://crbug.com/1011816">
<link rel="help" href="https://drafts.csswg.org/css2/visudet.html#inline-width">
<link rel="author" title="Koji Ishii" href="mailto:kojii@chromium.org">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
html, body { margin: 0; }
div {
#container {
font-family: Ahem;
font-size: 10px;
line-height: 1;
margin-left: 10ch;
}
#container {
inline-block {
display: inline-block;
}
.w1 { width: 1ch; }
.w2 { width: 2ch; }
.w4 { width: 4ch; }
.w5 { width: 5ch; }
span {
color: orange;
}
img {
height: .6em;
background: orange;
}
</style>
<body>
<div id="container" data-expected-height=10>123 <span style="margin-left: -8ch">1234 </span></div>
<script>checkLayout('#container');</script>
<section id="container">
<div><inline-block data-expected-height=10>123 <span style="margin-left: -8ch">1234 </span></inline-block></div>
<div><inline-block data-expected-height=10>123 <span style="margin-left: -8ch">123 </span></inline-block></div>
<div class="w4" data-expected-height=10>123 <span style="margin-left: -4ch">1234 </span></div>
<div class="w4" data-expected-height=10>123 <span style="margin-left: -4ch">123 </span></div>
<div class="w4" data-expected-height=10><img class="w4"><span style="margin-left: -4ch">123</span></div>
<div class="w4" data-expected-height=10><img class="w5"><span style="margin-left: -5ch">123</span></div>
<div class="w4" data-expected-height=20><img class="w5"><span style="margin-left: -3ch">123</span></div>
<div class="w4" data-expected-height=10><img class="w4"><img class="w1" style="margin-left: -1ch"></div>
<div class="w4" data-expected-height=20><img class="w4"><img class="w2" style="margin-left: -1ch"></div>
<div class="w4" data-expected-height=10><img class="w5"><img class="w1" style="margin-left: -2ch"></div>
<div class="w4" data-expected-height=20><img class="w5"><img class="w2" style="margin-left: -2ch"></div>
</section>
<script>checkLayout('[data-expected-height]');</script>
</body>

View file

@ -0,0 +1,8 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test Reference</title>
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<p>There should be an space between "Foo" and "bar" below</p>
<span>Foo bar</span>

View file

@ -0,0 +1,10 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test: Whitespace inside display: contents is preserved correctly.</title>
<link rel="help" href="https://drafts.csswg.org/css-display-3/#valdef-display-contents">
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<link rel="match" href="display-contents-whitespace-inside-inline-ref.html">
<p>There should be an space between "Foo" and "bar" below</p>
<span>Foo<div style="display: contents"> </div>bar</span>

View file

@ -29,12 +29,15 @@ const mediumFontSize = getComputedStyle(box).fontSize;
assert_inherited('font-family', null, '"Not Initial!"'); // Initial value depends on user agent.
assert_inherited('font-feature-settings', 'normal', '"smcp", "swsh" 2');
assert_inherited('font-kerning', 'auto', 'none');
assert_inherited('font-language-override', 'normal' , '"ksw"');
assert_inherited('font-optical-sizing', 'auto' , 'none');
assert_inherited('font-size', mediumFontSize /* medium */, '123px');
assert_inherited('font-size-adjust', 'none', '1.5');
assert_inherited('font-stretch', '100%' /* normal */, '75%');
assert_inherited('font-style', 'normal', 'italic');
assert_inherited('font-synthesis', 'weight style', 'none');
assert_inherited('font-variant', 'normal', 'none');
assert_inherited('font-variant-alternates', 'normal', 'historical-forms');
assert_inherited('font-variant-caps', 'normal', 'small-caps');
assert_inherited('font-variant-east-asian', 'normal', 'ruby');
assert_inherited('font-variant-ligatures', 'normal', 'none');

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: getComputedStyle().fontLanguageOverride</title>
<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-language-override">
<meta name="assert" content="font-language-override computed value is as specified.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value('font-language-override', 'normal');
test_computed_value('font-language-override', '"ksw"');
</script>
</body>
</html>

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: parsing font-language-override with invalid values</title>
<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-language-override">
<meta name="assert" content="font-language-override supports only the grammar 'normal | <string>'.">
<meta name="assert" content="font-language-override string has three letters.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value('font-language-override', 'auto');
test_invalid_value('font-language-override', 'normal "ksw"');
test_invalid_value('font-language-override', '"tr"');
test_invalid_value('font-language-override', '"1 %"');
</script>
</body>
</html>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: parsing font-language-override with valid values</title>
<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-language-override">
<meta name="assert" content="font-language-override supports the full grammar 'normal | <string>'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value('font-language-override', 'normal');
test_valid_value('font-language-override', '"ksw"');
</script>
</body>
</html>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: getComputedStyle().fontOpticalSizing</title>
<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-optical-sizing">
<meta name="assert" content="font-optical-sizing computed value is as specified.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
</head>
<body>
<div id="target"></div>
<script>
test_computed_value('font-optical-sizing', 'auto');
test_computed_value('font-optical-sizing', 'none');
</script>
</body>
</html>

View file

@ -0,0 +1,19 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: parsing font-optical-sizing with invalid values</title>
<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-optical-sizing">
<meta name="assert" content="font-optical-sizing supports only the grammar 'auto | none'.">
<meta name="assert" content="font-optical-sizing string has three letters.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_invalid_value('font-optical-sizing', 'normal');
test_invalid_value('font-optical-sizing', 'auto none');
</script>
</body>
</html>

View file

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Fonts Module Level 4: parsing font-optical-sizing with valid values</title>
<link rel="help" href="https://www.w3.org/TR/css-fonts-4/#propdef-font-optical-sizing">
<meta name="assert" content="font-optical-sizing supports the full grammar 'auto | none'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_valid_value('font-optical-sizing', 'auto');
test_valid_value('font-optical-sizing', 'none');
</script>
</body>
</html>

View file

@ -0,0 +1,174 @@
<!DOCTYPE html>
<meta charset="utf-8">
<title>CSS Grid Layout test: align-content property</title>
<link rel="author" title="Rossana Monteriso" href="mailto:rmonteriso@igalia.com">
<link rel="help" href="https://drafts.csswg.org/css-grid-1/#grid-align">
<link rel="help" href="https://drafts.csswg.org/css-align-3/#content-distribution">
<meta name="assert" content="This test checks that the align-content property is applied correctly in both directions RTL and LTR.">
<meta name="flags" content="ahem">
<link rel="stylesheet" href="/css/support/grid.css">
<link rel="stylesheet" href="/css/support/alignment.css">
<link rel="stylesheet" type="text/css" href="/fonts/ahem.css" />
<style>
body {
margin: 0;
}
.grid {
grid: 100px 100px / 50px 50px;
position: relative;
width: 200px;
height: 300px;
}
.verticalGrid {
width: 300px;
height: 200px;
}
.cell {
width: 20px;
height: 40px;
}
</style>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/check-layout-th.js"></script>
<body onload="checkLayout('.grid')">
<div style="position: relative">
<p>direction: LTR | align-content: 'center'</p>
<div class="grid alignContentCenter" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="50" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="50" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="150" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="150" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: LTR | align-content: 'left'</p>
<div class="grid alignContentLeft" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: LTR | align-content: 'right'</p>
<div class="grid alignContentRight" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: LTR | align-content: 'start'</p>
<div class="grid alignContentStart" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: LTR | align-content: 'end'</p>
<div class="grid alignContentEnd" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: LTR | align-content: 'flex-start'</p>
<div class="grid alignContentFlexStart" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: LTR | align-content: 'flex-end</p>
<div class="grid alignContentFlexEnd" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="200" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<!-- Default alignment and initial values. -->
<div style="position: relative">
<p>direction: LTR | align-content: 'auto' (resolved to 'start')</p>
<div class="grid" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="0" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="50" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="0" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="50" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<!-- RTL direction. -->
<div style="position: relative">
<p>direction: RTL | align-content: 'center'</p>
<div class="grid directionRTL alignContentCenter" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="50" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="50" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="150" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="150" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: RTL | align-content: 'left'</p>
<div class="grid directionRTL alignContentLeft" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: RTL | align-content: 'right'</p>
<div class="grid directionRTL alignContentRight" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: RTL | align-content: 'start'</p>
<div class="grid directionRTL alignContentStart" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="0" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="0" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
<div style="position: relative">
<p>direction: RTL | align-content: 'end'</p>
<div class="grid directionRTL alignContentEnd" data-expected-width="200" data-expected-height="300">
<div class="cell firstRowFirstColumn" data-offset-x="180" data-offset-y="100" data-expected-width="20" data-expected-height="40"></div>
<div class="firstRowSecondColumn" data-offset-x="100" data-offset-y="100" data-expected-width="50" data-expected-height="100"></div>
<div class="secondRowFirstColumn" data-offset-x="150" data-offset-y="200" data-expected-width="50" data-expected-height="100"></div>
<div class="cell secondRowSecondColumn" data-offset-x="130" data-offset-y="200" data-expected-width="20" data-expected-height="40"></div>
</div>
</div>
</body>

View file

@ -38,5 +38,20 @@ x { background: grey; }
</div>
</div>
<script>
const expectedResults = [
"subgrid [] [] [] []",
];
[...document.querySelectorAll('.subgrid')].forEach(function(subgrid, i) {
let actual = window.getComputedStyle(subgrid)['grid-template-columns'];
let expected = expectedResults[i];
if (actual != expected) {
let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" +
" Actual: \"" + actual + "\", Expected: \"" + expected + "\"";
document.body.appendChild(document.createTextNode(err));
}
});
</script>
</body>
</html>

View file

@ -50,5 +50,20 @@ x { background: grey; }
</div>
</div>
<script>
const expectedResults = [
"subgrid [x] [b] [] [] [b]",
];
[...document.querySelectorAll('.subgrid')].forEach(function(subgrid, i) {
let actual = window.getComputedStyle(subgrid)['grid-template-columns'];
let expected = expectedResults[i];
if (actual != expected) {
let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" +
" Actual: \"" + actual + "\", Expected: \"" + expected + "\"";
document.body.appendChild(document.createTextNode(err));
}
});
</script>
</body>
</html>

View file

@ -151,5 +151,32 @@ x {
</div>
</div>
<script>
const expectedResults = [
"subgrid [] [] [] [] [] [] [] [] []",
"subgrid [] [] [] [] [] [] [] [] []",
"subgrid [] [] [] [] [] [] [] [] []",
"subgrid [] [] [] [b] [] [] [] [] [] [] []",
"subgrid [] [] [] [b] [] [] [] [] [] [] []",
"subgrid [] [] [] [b] [] [] [] [] [] [] []",
"subgrid [] [] [] [b] [] [] [] [] [] [] []",
"subgrid [] [] [] [b] [] [] [] [] [] [] []",
"subgrid [] [] [] [b] [] [] [] [] [] [] []",
"subgrid [] [] [] [] [] [] [] [] [] [] []",
"subgrid [] [] [] [] [] []",
"subgrid [] [] [] [] [] [] [] [] [] [] []",
"subgrid [] [] [] [] [] []",
];
[...document.querySelectorAll('div > div')].forEach(function(subgrid, i) {
let actual = window.getComputedStyle(subgrid)['grid-template-columns'];
let expected = expectedResults[i];
if (actual != expected) {
let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" +
" Actual: \"" + actual + "\", Expected: \"" + expected + "\"";
document.body.appendChild(document.createTextNode(err));
}
});
</script>
</body>
</html>

View file

@ -390,5 +390,44 @@ html,body {
<div style="grid-column:y -5"></div>
</div></div>
<script>
const expectedResults = [
"subgrid [z] [z] [z] [z] [z]",
"subgrid [x] [z] [z] [z] [z]",
"subgrid [x] [x] [z] [z] [z]",
"subgrid [x] [x] [x] [z] [z]",
"subgrid [x] [x] [x] [x] [z]",
"subgrid [x] [x] [x] [x] [x]",
"subgrid [x] [x] [x] [x] [x]",
"subgrid [x] [x] [x] [x] [x]",
"subgrid [x] [x] [x] [x] [x]",
"subgrid [x] [x] [x] [x] [x]",
"subgrid [y] [z] [z] [z] [z]",
"subgrid [x] [y] [z] [z] [z]",
"subgrid [x] [x] [y] [z] [z]",
"subgrid [x] [x] [x] [y] [z]",
"subgrid [x] [x] [x] [x] [y]",
"subgrid [y] [y] [z] [z] [z]",
"subgrid [x] [y] [y] [z] [z]",
"subgrid [x] [x] [y] [y] [z]",
"subgrid [x] [x] [x] [y] [y]",
"subgrid [y] [y] [y] [z] [z]",
"subgrid [x] [y] [y] [y] [z]",
"subgrid [x] [x] [y] [y] [y]",
"subgrid [y] [y] [y] [y] [z]",
"subgrid [x] [y] [y] [y] [y]",
"subgrid [y] [y] [y] [y] [y]",
];
[...document.querySelectorAll('.subgrid')].forEach(function(subgrid, i) {
let actual = window.getComputedStyle(subgrid)['grid-template-columns'];
let expected = expectedResults[i];
if (actual != expected) {
let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" +
" Actual: \"" + actual + "\", Expected: \"" + expected + "\"";
document.body.appendChild(document.createTextNode(err));
}
});
</script>
</body>
</html>

View file

@ -165,5 +165,40 @@ item {
</div>
</div>
<script>
const expectedResults = [
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] []",
"subgrid [x] [x] [] [] [x]",
"subgrid [x] [x] [] [x] []",
"subgrid [x] [x] [x] [x] []",
"subgrid [] [] [] [] []",
"subgrid [] [] [] [x] []",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] []",
"subgrid [] [] [] [] []",
"subgrid [] [] [] [] [x]",
"subgrid [x] [x] [] [] [x]",
"subgrid [x] [x] [x] [] []",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] [x]",
"subgrid [] [] [] [] []",
];
[...document.querySelectorAll('.subgrid')].forEach(function(subgrid, i) {
let actual = window.getComputedStyle(subgrid)['grid-template-rows'];
let expected = expectedResults[i];
if (actual != expected) {
let err = "Unexpected getComputedStyle value for subgrid " + i + " with className '" + subgrid.className + "':" +
" Actual: \"" + actual + "\", Expected: \"" + expected + "\"";
document.body.appendChild(document.createTextNode(err));
}
});
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Logical Properties and Values: inset-block and inset-inline set longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-logical/#propdef-inset-block">
<meta name="assert" content="inset-block, inset-inline support the full grammar '<'top'>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/parsing-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('inset-block', '10px', {
'inset-block-start': '10px',
'inset-block-end': '10px'
});
test_shorthand_value('inset-block', '20% auto', {
'inset-block-start': '20%',
'inset-block-end': 'auto'
});
test_shorthand_value('inset-inline', '30%', {
'inset-inline-start': '30%',
'inset-inline-end': '30%'
});
test_shorthand_value('inset-inline', 'auto 40px', {
'inset-inline-start': 'auto',
'inset-inline-end': '40px'
});
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Logical Properties and Values: margin-block and margin-inline sets longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-logical/#propdef-margin-block">
<meta name="assert" content="margin-block, margin-inline support the full grammar '<'margin-top'>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('margin-block', '10px', {
'margin-block-start': '10px',
'margin-block-end': '10px'
});
test_shorthand_value('margin-block', '20% auto', {
'margin-block-start': '20%',
'margin-block-end': 'auto'
});
test_shorthand_value('margin-inline', '30%', {
'margin-inline-start': '30%',
'margin-inline-end': '30%'
});
test_shorthand_value('margin-inline', 'auto 40px', {
'margin-inline-start': 'auto',
'margin-inline-end': '40px'
});
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Logical Properties and Values: padding-block and padding-inline set longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-logical/#propdef-padding-block">
<meta name="assert" content="padding-block, padding-inline support the full grammar '<'padding-top'>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('padding-block', '0% 10px', {
'padding-block-start': '0%',
'padding-block-end': '10px'
});
test_shorthand_value('padding-block', '20%', {
'padding-block-start': '20%',
'padding-block-end': '20%'
});
test_shorthand_value('padding-inline', '10px 30%', {
'padding-inline-start': '10px',
'padding-inline-end': '30%'
});
test_shorthand_value('padding-inline', '0%', {
'padding-inline-start': '0%',
'padding-inline-end': '0%'
});
</script>
</body>
</html>

View file

@ -0,0 +1,14 @@
<!DOCTYPE html>
<link rel="author" title="Morten Stenshorne" href="mailto:mstensho@chromium.org">
<link rel="help" href="https://bugs.chromium.org/p/chromium/issues/detail?id=1006249">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<div style="columns:2; column-fill:auto; width:500px; height:500px; margin-top:-1px;">
<div style="columns:2; column-fill:auto; height:400px; padding-top:1px;">
<div></div>
<div style="width:100px; column-span:all; background:red;">
<div style="height:50px; break-inside:avoid; background:green;"></div>
<div style="height:50px; break-inside:avoid; background:green;"></div>
</div>
</div>
</div>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-margin-block, scroll-margin-inline set longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#margin-longhands-logical">
<meta name="assert" content="scroll-margin-block, scroll-margin-inline support the full grammar '<length>{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('scroll-margin-block', '10px 20px', {
'scroll-margin-block-start': '10px',
'scroll-margin-block-end': '20px'
});
test_shorthand_value('scroll-margin-block', '30px', {
'scroll-margin-block-start': '30px',
'scroll-margin-block-end': '30px'
});
test_shorthand_value('scroll-margin-inline', '50px 60px', {
'scroll-margin-inline-start': '50px',
'scroll-margin-inline-end': '60px'
});
test_shorthand_value('scroll-margin-inline', '-40px', {
'scroll-margin-inline-start': '-40px',
'scroll-margin-inline-end': '-40px'
});
</script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-margin sets longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-margin">
<meta name="assert" content="scroll-margin supports the full grammar '<length>{1,4}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('scroll-margin', '10px', {
'scroll-margin-top': '10px',
'scroll-margin-right': '10px',
'scroll-margin-bottom': '10px',
'scroll-margin-left': '10px'
});
test_shorthand_value('scroll-margin', '30px 20px', {
'scroll-margin-top': '30px',
'scroll-margin-right': '20px',
'scroll-margin-bottom': '30px',
'scroll-margin-left': '20px'
});
test_shorthand_value('scroll-margin', '1px 2px 3px', {
'scroll-margin-top': '1px',
'scroll-margin-right': '2px',
'scroll-margin-bottom': '3px',
'scroll-margin-left': '2px'
});
test_shorthand_value('scroll-margin', '-1px 2px 3px 0', {
'scroll-margin-top': '-1px',
'scroll-margin-right': '2px',
'scroll-margin-bottom': '3px',
'scroll-margin-left': '0px'
});
</script>
</body>
</html>

View file

@ -0,0 +1,35 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding-block, scroll-padding-inline set longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#padding-longhands-logical">
<meta name="assert" content="scroll-padding-block, scroll-padding-inline support the full grammar '[ auto | <length-percentage> ]{1,2}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('scroll-padding-block', 'auto 10px', {
'scroll-padding-block-start': 'auto',
'scroll-padding-block-end': '10px'
});
test_shorthand_value('scroll-padding-block', '20%', {
'scroll-padding-block-start': '20%',
'scroll-padding-block-end': '20%'
});
test_shorthand_value('scroll-padding-inline', '10px auto', {
'scroll-padding-inline-start': '10px',
'scroll-padding-inline-end': 'auto'
});
test_shorthand_value('scroll-padding-inline', '0%', {
'scroll-padding-inline-start': '0%',
'scroll-padding-inline-end': '0%'
});
</script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Scroll Snap Test: scroll-padding sets longhands</title>
<link rel="help" href="https://drafts.csswg.org/css-scroll-snap-1/#propdef-scroll-padding">
<meta name="assert" content="scroll-padding supports the full grammar '[ <length-percentage> | auto ]{1,4}'.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/shorthand-testcommon.js"></script>
</head>
<body>
<script>
test_shorthand_value('scroll-padding', '10px', {
'scroll-padding-top': '10px',
'scroll-padding-right': '10px',
'scroll-padding-bottom': '10px',
'scroll-padding-left': '10px'
});
test_shorthand_value('scroll-padding', 'auto 20px', {
'scroll-padding-top': 'auto',
'scroll-padding-right': '20px',
'scroll-padding-bottom': 'auto',
'scroll-padding-left': '20px'
});
test_shorthand_value('scroll-padding', '1px 2px 3px', {
'scroll-padding-top': '1px',
'scroll-padding-right': '2px',
'scroll-padding-bottom': '3px',
'scroll-padding-left': '2px'
});
test_shorthand_value('scroll-padding', '1% 2px 3px 0', {
'scroll-padding-top': '1%',
'scroll-padding-right': '2px',
'scroll-padding-bottom': '3px',
'scroll-padding-left': '0px'
});
</script>
</body>
</html>

View file

@ -0,0 +1,43 @@
<!doctype html>
<title>Collapsed borders and background-clip</title>
<link rel="author" title="David Grogan" href="mailto:dgrogan@chromium.org">
<link rel="help" href="https://drafts.csswg.org/css-tables-3/#in-collapsed-borders-mode">
<link rel="help" href="https://drafts.csswg.org/css-backgrounds-3/#the-background-clip">
<link rel="match" href="../reference/ref-filled-green-100px-square.xht">
<link rel="bookmark" href="https://crbug.com/1008400" />
<meta name="flags" content="" />
<meta name="assert" content="background-clip on a cell with collapsed borders is calculated correctly" />
<style>
table {
border-collapse: collapse;
/* The properties after the blank line are not the behavior under test. */
background: red;
}
td {
background-clip: content-box;
border: 30px solid green;
background-color: green;
padding: 0px;
line-height: 0px;
}
.cell-content {
display: inline-block;
height: 40px;
width: 40px;
}
</style>
<p>Test passes if there is a filled green square and <strong>no red</strong>.</p>
<table>
<tr>
<td>
<span class="cell-content"></span>
</td>
</tr>
</table>

View file

@ -0,0 +1,33 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CSS Text Module Test: getComputedStyle().textAlign</title>
<link rel="help" href="https://www.w3.org/TR/css-text-3/#propdef-text-align">
<meta name="assert" content="text-align computed value is as specified.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/css/support/computed-testcommon.js"></script>
<style>
#container {
text-align: center;
}
</style>
</head>
<body>
<div id="container">
<div id="target"></div>
</div>
<script>
test_computed_value("text-align", "start");
test_computed_value("text-align", "end");
test_computed_value("text-align", "left");
test_computed_value("text-align", "right");
test_computed_value("text-align", "center");
test_computed_value("text-align", "justify");
test_computed_value("text-align", "match-parent", "center");
// TODO: Test justify-all
</script>
</body>
</html>

View file

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test Reference: positioning of a sideways-lr block alongside vertical-lr floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<meta content="image" name="flags">
<style>
html {
writing-mode: vertical-lr;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
display: flow-root; /* Establishes a block formatting context */
}
</style>
<body>
<p><img src="support/ortho-htb-alongside-vrl-floats-002-exp-res.png" width="300" height="36" alt="Image download support must be enabled"></p>
<!--
The image says:
Test passes if the orange rectangle
is below the blue rectangle.
-->
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test: positioning of a sideways-lr block alongside vertical-lr floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow" title="3.2. Block Flow Direction: the writing-mode property">
<link rel="match" href="slr-alongside-vlr-floats-ref.html">
<!-- This test is adapted from Gérard Talbot's "ortho-htb-alongside-vrl-floats-014.xht" -->
<meta content="image" name="flags">
<meta content="This test verifies that the orange block box, which creates a new block formatting context, should flow next to the earliest float that offers sufficient space in the inline-direction." name="assert">
<style>
html {
writing-mode: vertical-lr;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
writing-mode: sideways-lr; /* Same block direction as <html> */
}
</style>
<body>
<p><img src="support/ortho-htb-alongside-vrl-floats-002-exp-res.png" width="300" height="36" alt="Image download support must be enabled"></p>
<!--
The image says:
Test passes if the orange rectangle
is below the blue rectangle.
-->
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,50 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test Reference: positioning of a sideways-rl block alongside vertical-rl floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<meta content="image" name="flags">
<style>
html {
writing-mode: vertical-rl;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
display: flow-root; /* Establishes a block formatting context */
}
</style>
<body>
<p><img src="support/ortho-htb-alongside-vrl-floats-002-exp-res.png" width="300" height="36" alt="Image download support must be enabled"></p>
<!--
The image says:
Test passes if the orange rectangle
is below the blue rectangle.
-->
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test: positioning of a sideways-rl block alongside vertical-rl floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow" title="3.2. Block Flow Direction: the writing-mode property">
<link rel="match" href="srl-alongside-vrl-floats-ref.html">
<!-- This test is adapted from Gérard Talbot's "ortho-htb-alongside-vrl-floats-014.xht" -->
<meta content="image" name="flags">
<meta content="This test verifies that the orange block box, which creates a new block formatting context, should flow next to the earliest float that offers sufficient space in the inline-direction." name="assert">
<style>
html {
writing-mode: vertical-rl;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
writing-mode: sideways-rl; /* Same block direction as <html> */
}
</style>
<body>
<p><img src="support/ortho-htb-alongside-vrl-floats-002-exp-res.png" width="300" height="36" alt="Image download support must be enabled"></p>
<!--
The image says:
Test passes if the orange rectangle
is below the blue rectangle.
-->
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test Reference: positioning of a text-orientation:sideways block alongside vertical-lr floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<style>
html {
writing-mode: vertical-lr;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
writing-mode: vertical-lr;
}
</style>
<body>
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test: positioning of a text-orientation:sideways block alongside vertical-lr floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow" title="3.2. Block Flow Direction: the writing-mode property">
<link rel="match" href="vlr-text-orientation-sideways-alongside-vlr-floats-ref.html">
<!-- This test is adapted from Gérard Talbot's "ortho-htb-alongside-vrl-floats-014.xht" -->
<meta content="This test verifies that the orange block box, which should not create a new block formatting context, should flow next to the first float." name="assert">
<style>
html {
writing-mode: vertical-lr;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
writing-mode: vertical-lr;
text-orientation: sideways; /* Should not create block formatting context */
}
</style>
<body>
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,42 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test Reference: positioning of a text-orientation:sideways block alongside vertical-rl floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<style>
html {
writing-mode: vertical-rl;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
writing-mode: vertical-rl;
}
</style>
<body>
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,49 @@
<!DOCTYPE html>
<html>
<title>CSS Writing Modes Test: positioning of a text-orientation:sideways block alongside vertical-rl floats</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="https://www.mozilla.org/">
<link rel="help" href="https://drafts.csswg.org/css-writing-modes/#block-flow" title="3.2. Block Flow Direction: the writing-mode property">
<link rel="match" href="vrl-text-orientation-sideways-alongside-vrl-floats-ref.html">
<!-- This test is adapted from Gérard Talbot's "ortho-htb-alongside-vrl-floats-014.xht" -->
<meta content="This test verifies that the orange block box, which should not create a new block formatting context, should flow next to the first float." name="assert">
<style>
html {
writing-mode: vertical-rl;
}
div {
block-size: 100px;
}
div#first-olive-float {
background-color: olive;
float: left;
inline-size: 50%;
}
div#second-blue-float-with-clear {
background-color: blue;
clear: left;
float: left;
inline-size: 25%;
}
div#orange-bfc {
background-color: orange;
inline-size: 75%;
writing-mode: vertical-rl;
text-orientation: sideways; /* Should not create block formatting context */
}
</style>
<body>
<div id="first-olive-float">&nbsp;</div>
<div id="second-blue-float-with-clear">&nbsp;</div>
<div id="orange-bfc">&nbsp;</div>
</body>
</html>

View file

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>CSS-Writing Modes Test: propagation of the writing-mode property from body to root</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
<link rel=help href="https://drafts.csswg.org/css-writing-modes-3/#principal-flow">
<link rel="match" href="block-flow-direction-025-ref.xht">
<meta name=assert content="The writing mode of the body must be propagated to the root with the dynamic change.">
<script>
function runTest() {
document.body.offsetHeight;
document.body.style.writingMode = "vertical-rl";
}
</script>
<style>
div {
background-color: blue;
height: 100px;
width: 100px;
}
</style>
<body onload="runTest();">
<div></div>
<p><img src="support/block-flow-direction-025-exp-res.png" width="359" height="36" alt="Image download support must be enabled"></p>
<!--
The image says:
Test passes if there is a blue square in the
<strong>upper-right corner</strong> of the page.
-->
</body>
</html>

View file

@ -0,0 +1,29 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>CSS-Writing Modes Test: propagation of the writing-mode property from body to root</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
<style>
html {
writing-mode: vertical-rl;
}
main {
writing-mode: horizontal-tb;
inline-size: 100px;
}
div {
background-color: blue;
height: 100px;
width: 100px;
}
</style>
<main>
<div></div>
<p>Test passes if you see a blue square in the upper-right corner of the page</p>
</main>
</html>

View file

@ -0,0 +1,47 @@
<!DOCTYPE html>
<html>
<meta charset="utf-8">
<title>CSS-Writing Modes Test: propagation of the writing-mode property from body to root</title>
<link rel="author" title="Ting-Yu Lin" href="tlin@mozilla.com">
<link rel="author" title="Mozilla" href="http://www.mozilla.org/">
<link rel=help href="https://drafts.csswg.org/css-writing-modes-3/#principal-flow">
<link rel="match" href="wm-propagation-body-dynamic-change-002-ref.html">
<meta name=assert content="The writing mode of the newly inserted body must be propagated to the root.">
<script>
function runTest() {
document.body.offsetHeight;
var newBody = document.createElement("body");
newBody.id = "new-body";
var oldBody = document.getElementById("old-body");
/* Insert a new <body> before the old one, which should become the primary <body>. */
document.documentElement.insertBefore(newBody, oldBody);
}
</script>
<style>
#new-body {
/* This writing-mode should propagate to the root element. */
writing-mode: vertical-rl;
margin: 0;
}
#old-body {
writing-mode: horizontal-tb;
inline-size: 100px;
}
div {
background-color: blue;
height: 100px;
width: 100px;
}
</style>
<body id="old-body" onload="runTest();">
<div></div>
<p>Test passes if you see a blue square in the upper-right corner of the page</p>
</body>
</html>

View file

@ -0,0 +1,26 @@
<!doctype html>
<title>client* returns the same for non-replaced inlines regardless of list-item-ness</title>
<link rel="help" href="https://drafts.csswg.org/cssom-view/#extension-to-the-element-interface">
<link rel="help" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1581467">
<link rel="author" title="Emilio Cobos Álvarez" href="mailto:emilio@crisal.io">
<link rel="author" title="Mozilla" href="https://mozilla.org">
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<style>
.li {
display: inline list-item;
}
</style>
<div style="position: absolute"><span>Foo</span></div>
<div style="position: absolute"><span class="li">Foo</span></div>
<script>
test(() => {
let first = document.querySelector("span");
let second = document.querySelector(".li");
assert_equals(first.clientWidth, second.clientWidth, "clientWidth should match");
assert_equals(first.clientHeight, second.clientHeight, "clientHeight should match");
assert_equals(first.clientTop, second.clientTop, "clientTop should match");
assert_equals(first.clientLeft, second.clientLeft, "clientLeft should match");
}, "client* returns the same for non-replaced inlines regardless of list-item-ness");
</script>

View file

@ -0,0 +1,136 @@
<!doctype html>
<meta charset="utf-8">
<title>CSS Test: CSSOM View matchMedia handleEvent via addListener</title>
<link rel="help" href="https://dom.spec.whatwg.org/#callbackdef-eventlistener">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="resources/matchMedia.js"></script>
<div id="log"></div>
<script>
setup({ allow_uncaught_exception: true });
promise_test(async t => {
const iframe = await createIframe(t);
const mql = iframe.contentWindow.matchMedia(MEDIA_QUERY);
let _this;
let _event;
const eventListener = {
handleEvent(event) {
_this = this;
_event = event;
},
};
mql.addListener(eventListener);
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(_this, eventListener);
assert_equals(_event.matches, mql.matches);
assert_equals(_event.media, MEDIA_QUERY);
}, "calls handleEvent method of event listener");
promise_test(async t => {
const iframe = await createIframe(t);
const mql = iframe.contentWindow.matchMedia(MEDIA_QUERY);
let uncaughtError;
const errorHandler = event => {
uncaughtError = event.error;
};
window.addEventListener("error", errorHandler);
t.add_cleanup(() => {
window.removeEventListener("error", errorHandler);
});
const thrownError = { name: "test" };
mql.addListener({
get handleEvent() {
throw thrownError;
},
});
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(uncaughtError, thrownError);
}, "rethrows errors when getting handleEvent");
promise_test(async t => {
const iframe = await createIframe(t);
const mql = iframe.contentWindow.matchMedia(MEDIA_QUERY);
let calls = 0;
mql.addListener({
get handleEvent() {
calls++;
return function() {};
},
});
assert_equals(calls, 0);
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(calls, 1);
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(calls, 2);
}, "looks up handleEvent method on every event dispatch");
promise_test(async t => {
const iframe = await createIframe(t);
const mql = iframe.contentWindow.matchMedia(MEDIA_QUERY);
let calls = 0;
const eventListener = function() { calls++; };
Object.defineProperty(eventListener, "handleEvent", {
get: t.unreached_func("handleEvent method should not be looked up on functions"),
});
mql.addListener(eventListener);
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(calls, 1);
}, "doesn't look up handleEvent method on callable event listeners");
promise_test(async t => {
const iframe = await createIframe(t);
const mql = iframe.contentWindow.matchMedia(MEDIA_QUERY);
let uncaughtError;
const errorHandler = event => {
uncaughtError = event.error;
};
window.addEventListener("error", errorHandler);
t.add_cleanup(() => {
window.removeEventListener("error", errorHandler);
});
mql.addListener({ handleEvent: null });
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(uncaughtError.name, "TypeError");
}, "throws if handleEvent is falsy and not callable");
promise_test(async t => {
const iframe = await createIframe(t);
const mql = iframe.contentWindow.matchMedia(MEDIA_QUERY);
let uncaughtError;
const errorHandler = event => {
uncaughtError = event.error;
};
window.addEventListener("error", errorHandler);
t.add_cleanup(() => {
window.removeEventListener("error", errorHandler);
});
mql.addListener({ handleEvent: "str" });
triggerMQLEvent(iframe);
await waitForChangesReported();
assert_equals(uncaughtError.name, "TypeError");
}, "throws if handleEvent is thruthy and not callable");
</script>

View file

@ -0,0 +1,32 @@
const IFRAME_BASE_WIDTH = "200";
const MEDIA_QUERY = `(max-width: ${IFRAME_BASE_WIDTH}px)`;
function createIframe(t) {
const iframe = document.createElement("iframe");
iframe.srcdoc = "";
iframe.width = IFRAME_BASE_WIDTH;
iframe.height = "100";
iframe.style.border = "none";
t.add_cleanup(() => {
document.body.removeChild(iframe);
});
return new Promise(resolve => {
iframe.addEventListener("load", () => {
resolve(iframe);
});
document.body.appendChild(iframe);
});
}
function triggerMQLEvent(iframe) {
iframe.width = iframe.width === IFRAME_BASE_WIDTH ? "250" : IFRAME_BASE_WIDTH;
}
function waitForChangesReported() {
return new Promise(resolve => {
step_timeout(resolve, 75);
});
}

View file

@ -20,5 +20,5 @@ tools/%:
# Catch-all target: route all unknown targets to Sphinx using the new
# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS).
%: Makefile tools/wptserve tools/certs
%: Makefile tools/wptserve tools/certs tools/wptrunner
@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

View file

@ -11,6 +11,7 @@ infrastructure which makes the project possible.
../README
../tools/wptserve/docs/index.rst
../tools/wptrunner/README
.. toctree::
:hidden:

View file

@ -43,7 +43,8 @@ release = u''
extensions = [
'recommonmark',
'sphinxarg.ext',
'sphinx.ext.autodoc'
'sphinx.ext.autodoc',
'sphinx.ext.intersphinx'
]
# Add any paths that contain templates here, relative to this directory.
@ -191,3 +192,6 @@ epub_title = project
# A list of files that should not be packed into the epub file.
epub_exclude_files = ['search.html']
intersphinx_mapping = {'python': ('https://docs.python.org/2/', None),
'mozilla': ('https://firefox-source-docs.mozilla.org/', None)}

View file

@ -29,6 +29,7 @@ if not exist tools\ ( mkdir tools )
if not exist tools\wptserve\ ( mklink /d tools\wptserve ..\..\tools\wptserve )
if not exist tools\certs\ ( mklink /d tools\certs ..\..\tools\certs )
if not exist tools\wptrunner\ ( mklink /d tools\wptrunner ..\..\tools\wptrunner )
%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
goto end

View file

@ -147,3 +147,9 @@ Additional browser-specific documentation:
safari
webkitgtk_minibrowser
```
For use in continuous integration systems, and other scenarios where regression
tracking is required, the command-line interface supports storing and loading
the expected result of each test in a test run. See [Expectations
Data](../../tools/wptrunner/docs/expectation) for more information on creating
and maintaining these files.

View file

@ -2,24 +2,12 @@
"use strict";
Promise.resolve().then(async () => {
// On success, WakeLock.request() returns a promise that never resolves. To
// prevent a timeout, abort it with an AbortController and use the different
// DOMExceptions we get to determine if this worked or not.
const controller = new AbortController();
const wakeLock = WakeLock.request("screen", { signal: controller.signal });
wakeLock.catch(e => {
if (e.name == "AbortError") {
// We stopped due to the call to AbortController.abort(), so we did manage
// to get the lock.
window.parent.postMessage({ enabled: true }, "*");
} else if (e.name == "NotAllowedError") {
// This means requesting the lock failed.
window.parent.postMessage({ enabled: false }, "*");
} else {
// We should not really hit this branch.
window.parent.postMessage({ enabled: false }, "*");
}
});
controller.abort();
try {
const wakeLock = await navigator.wakeLock.request("screen");
await wakeLock.release();
window.parent.postMessage({ enabled: true }, "*");
} catch (e) {
window.parent.postMessage({ enabled: false }, "*");
}
});
</script>

View file

@ -246,12 +246,15 @@ function runGenericSensorTests(sensorName,
assert_true(verificationFunction(expected, sensor2, /*isNull=*/true));
}, `${sensorName}: sensor reading is correct.`);
sensor_test(async t => {
sensor_test(async (t, sensorProvider) => {
assert_true(sensorName in self);
const sensor = new sensorType();
const sensorWatcher = new EventWatcher(t, sensor, ["reading", "error"]);
sensor.start();
const mockSensor = await sensorProvider.getCreatedSensor(sensorName);
await mockSensor.setSensorReading(readings);
await sensorWatcher.wait_for("reading");
const cachedTimeStamp1 = sensor.timestamp;
@ -392,6 +395,7 @@ function runGenericSensorTests(sensorName,
fastSensor.start();
const mockSensor = await sensorProvider.getCreatedSensor(sensorName);
await mockSensor.setSensorReading(readings);
const fastCounter = await new Promise((resolve, reject) => {
let fastSensorNotifiedCounter = 0;

View file

@ -0,0 +1,59 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Reference for sizing of select elements, with wide vs. empty option selected</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<style>
select {
color: transparent;
margin: 1px;
}
div.customBorder > select {
/* This class is to let us test select elements *without* native theming
(for browsers that have both native and non-native controls): */
border: 3px solid black;
}
</style>
</head>
<body>
<div>
<select>
<option>some wide option</option>
</select>
<br>
<select>
<option>some wide option</option>
</select>
<br>
<select>
<option>some wide option</option>
</select>
<br>
<select>
<option>some wide option</option>
</select>
</div>
<!-- This is the same as above, but now with a custom border on the
select elements: -->
<div class="customBorder">
<select>
<option>some wide option</option>
</select>
<br>
<select>
<option>some wide option</option>
</select>
<br>
<select>
<option>some wide option</option>
</select>
<br>
<select>
<option>some wide option</option>
</select>
</div>
</body>
</html>

View file

@ -0,0 +1,77 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test for sizing of select elements, with wide vs. empty option selected</title>
<link rel="author" title="Daniel Holbert" href="mailto:dholbert@mozilla.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#list-box">
<link rel="match" href="select-sizing-001-ref.html">
<style>
select {
color: transparent;
margin: 1px;
}
div.customBorder > select {
/* This class is to let us test select elements *without* native theming
(for browsers that have both native and non-native controls): */
border: 3px solid black;
}
</style>
</head>
<body>
<div>
<!-- Wide thing is 2nd, and not selected: -->
<select>
<option></option>
<option>some wide option</option>
</select>
<br>
<!-- Wide thing is 2nd, and selected: -->
<select>
<option></option>
<option selected>some wide option</option>
</select>
<br>
<!-- Wide thing is 1st, and selected (implicitly): -->
<select>
<option>some wide option</option>
<option></option>
</select>
<br>
<!-- Wide thing is 1st, and not selected: -->
<select>
<option>some wide option</option>
<option selected></option>
</select>
</div>
<!-- This is the same as above, but now with a custom border on the
select elements: -->
<div class="customBorder">
<!-- Wide thing is 2nd, and not selected: -->
<select>
<option></option>
<option>some wide option</option>
</select>
<br>
<!-- Wide thing is 2nd, and selected: -->
<select>
<option></option>
<option selected>some wide option</option>
</select>
<br>
<!-- Wide thing is 1st, and selected (implicitly): -->
<select>
<option>some wide option</option>
<option></option>
</select>
<br>
<!-- Wide thing is 1st, and not selected: -->
<select>
<option>some wide option</option>
<option selected></option>
</select>
</div>
</body>
</html>

View file

@ -63,12 +63,15 @@ var relativeContainer = document.querySelector('#relative-div');
reset();
test(function() {
this.add_cleanup(reset);
dialog.showModal();
checkVerticallyCentered(dialog);
reset();
}, "showModal() should center in the viewport");
test(function() {
this.add_cleanup(reset);
assert_equals(window.getComputedStyle(dialog).top, 'auto');
assert_equals(window.getComputedStyle(dialog).bottom, 'auto');
@ -80,19 +83,21 @@ test(function() {
// Set back original value to 'height'.
dialog.style.height = 'auto';
reset();
}, "The dialog is a positioned element, so the top and bottom should not have style auto.");
test(function() {
this.add_cleanup(reset);
dialog.showModal();
dialog.close();
window.scroll(0, 2 * window.scrollY);
dialog.showModal();
checkVerticallyCentered(dialog);
reset();
}, "Dialog should be recentered if showModal() is called after close()");
test(function() {
this.add_cleanup(reset);
dialog.showModal();
var expectedTop = dialog.getBoundingClientRect().top;
window.scroll(0, window.scrollY * 2);
@ -102,30 +107,33 @@ test(function() {
window.scroll(0, window.scrollY / 2);
assert_equals(dialog.getBoundingClientRect().top, expectedTop);
reset();
}, "Dialog should not recenter on relayout.");
test(function() {
this.add_cleanup(reset);
dialog.style.height = '20000px';
dialog.showModal();
assert_equals(dialog.getBoundingClientRect().top, 0);
// Set back original value to 'height'.
dialog.style.height = 'auto';
reset();
}, "A tall dialog should be positioned at the top of the viewport.");
test(function() {
this.add_cleanup(reset);
document.body.style.width = '4000px';
dialog.showModal();
checkVerticallyCentered(dialog);
// Set back original value to 'width'.
document.body.style.width = 'auto';
reset();
}, "The dialog should be centered regardless of the presence of a horizontal scrollbar.");
test(function() {
this.add_cleanup(reset);
dialog.remove();
absoluteContainer.appendChild(dialog);
dialog.showModal();
@ -136,21 +144,21 @@ test(function() {
relativeContainer.appendChild(dialog);
dialog.showModal();
checkVerticallyCentered(dialog);
reset();
}, "Centering should work when dialog is inside positioned containers.");
test(function() {
this.add_cleanup(reset);
dialog.showModal();
var expectedTop = dialog.getBoundingClientRect().top;
relativeContainer.style.display = 'none';
relativeContainer.style.display = 'block';
assert_equals(dialog.getBoundingClientRect().top, expectedTop);
reset();
}, "A centered dialog's position should survive becoming display:none temporarily.");
test(function() {
this.add_cleanup(reset);
// Remove and reinsert so that the document position isn't changed by the second remove and reinsert
dialog.remove();
relativeContainer.appendChild(dialog);
@ -162,11 +170,11 @@ test(function() {
relativeContainer.appendChild(dialog);
assert_equals(dialog.parentNode, relativeContainer);
assert_equals(dialog.getBoundingClientRect().top, relativeContainer.getBoundingClientRect().top);
reset();
}, "Dialog should lose centering when removed from the document.");
test(function() {
this.add_cleanup(reset);
dialog.showModal();
dialog.style.top = '0px';
var expectedTop = dialog.getBoundingClientRect().top;
@ -176,21 +184,22 @@ test(function() {
// Set back original value to 'top'.
dialog.style.top = 'auto';
reset();
}, "Dialog's specified position should survive after close() and showModal().");
test(function() {
this.add_cleanup(reset);
dialog.showModal();
dialog.removeAttribute('open');
window.scroll(0, window.scrollY * 2);
checkNotVerticallyCentered(dialog);
dialog.showModal();
checkVerticallyCentered(dialog);
reset();
}, "Dialog should be recentered if showModal() is called after removing 'open'.");
test(function() {
this.add_cleanup(reset);
dialog.remove();
absoluteContainer.appendChild(dialog);
absoluteContainer.style.display = 'none';
@ -198,26 +207,27 @@ test(function() {
absoluteContainer.style.display = 'block';
// Since dialog's containing block is the ICB, it's statically positioned after <body>.
assert_equals(dialog.getBoundingClientRect().top, document.body.getBoundingClientRect().bottom);
reset();
}, "Dialog should not be centered if showModal() was called when an ancestor had display 'none'.");
test(function() {
this.add_cleanup(reset);
var offset = 50;
dialog.style.top = offset + 'px';
dialog.showModal();
assert_equals(dialog.getBoundingClientRect().top + window.scrollY, offset);
// Set back original value to 'top'.
dialog.style.top = 'auto';
reset();
}, "A dialog with specified 'top' should be positioned as usual");
test(function() {
this.add_cleanup(reset);
var offset = 50;
dialog.style.bottom = offset + 'px';
dialog.showModal();
assert_equals(dialog.getBoundingClientRect().bottom + window.scrollY, window.innerHeight - offset);
// Set back original value to 'bottom'.
dialog.style.bottom = 'auto';
reset();
}, "A dialog with specified 'bottom' should be positioned as usual");
</script>

View file

@ -70,9 +70,9 @@
});
test(function(){
this.add_cleanup(function() { d2.close(); });
assert_throws("INVALID_STATE_ERR", function() {
d2.showModal();
this.add_cleanup(function() { d2.close(); });
});
}, "showModal() on a <dialog> that already has an open attribute throws an InvalidStateError exception");
@ -88,9 +88,9 @@
test(function(){
var d = document.createElement("dialog");
this.add_cleanup(function() { d.close(); });
assert_throws("INVALID_STATE_ERR", function() {
d.showModal();
this.add_cleanup(function() { d.close(); });
});
}, "showModal() on a <dialog> not in a Document throws an InvalidStateError exception");

View file

@ -36,7 +36,7 @@ interface MediaSession {
void setActionHandler(MediaSessionAction action, MediaSessionActionHandler? handler);
void setPositionState(optional MediaPositionState? state);
void setPositionState(optional MediaPositionState state = {});
};
[Exposed=Window]

View file

@ -21,9 +21,9 @@ interface NDEFRecord {
readonly attribute USVString mediaType;
readonly attribute USVString id;
USVString? toText();
[NewObject] ArrayBuffer? toArrayBuffer();
[NewObject] any toJSON();
USVString? text();
[NewObject] ArrayBuffer? arrayBuffer();
[NewObject] any json();
sequence<NDEFRecord> toRecords();
};

View file

@ -0,0 +1,67 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Test Script and Limit Schemata</title>
<link rel="help" href="https://mathml-refresh.github.io/mathml-core/#script-and-limit-schemata">
<meta name="assert" content="Script and Limit Schemata should not render anything when empty.">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/mathml/support/feature-detection.js"></script>
<script>
var epsilon = 1;
function getBox(aId) {
return document.getElementById(aId).getBoundingClientRect();
}
setup({ explicit_done: true });
window.addEventListener("load", () => { document.fonts.ready.then(runTests); });
function runTests() {
test(function() {
["over", "under", "underover", "sub", "sup", "subsup", "multiscripts"].forEach(function(name) {
assert_true(MathMLFeatureDetection.has_mspace());
assert_approx_equals(getBox(name).width, 0, epsilon, "width of empty " + name);
assert_approx_equals(getBox(name).height, 0, epsilon, "height of empty " + name);
});
}, "Size of empty script elements");
done();
}
</script>
</head>
<body>
<div id="log"></div>
<p>
<math>
<munderover id="underover">
</munderover>
</math>
<math>
<munder id="under">
</munder>
</math>
<math>
<mover id="over">
</mover>
</math>
<math>
<msub id="sub">
</msub>
</math>
<math>
<msup id="sup">
</msup>
</math>
<math>
<msubsup id="subsup">
</msubsup>
</math>
<math>
<mmultiscripts id="multiscripts">
</mmultiscripts>
</math>
</p>
</body>
</html>

View file

@ -199,6 +199,19 @@ var GenericSensorTest = (() => {
this.maxFrequency_ = Math.min(10, this.maxFrequency_);
}
// Chromium applies some rounding and other privacy-related measures that
// can cause ALS not to report a reading when it has not changed beyond a
// certain threshold compared to the previous illuminance value. Make
// each reading return a different value that is significantly different
// from the previous one when setSensorReading() is not called by client
// code (e.g. run_generic_sensor_iframe_tests()).
if (type == device.mojom.SensorType.AMBIENT_LIGHT) {
this.activeSensors_.get(type).setSensorReading([
[window.performance.now() * 100],
[(window.performance.now() + 50) * 100]
]);
}
const initParams = new device.mojom.SensorInitParams({
sensor: sensorPtr,
clientReceiver: mojo.makeRequest(this.activeSensors_.get(type).client_),

View file

@ -0,0 +1,22 @@
<!DOCTYPE html>
<title>Mutation of the 'end' attribute changes current interval end</title>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<svg>
<rect width="100" height="100" fill="green">
<set attributeName="fill" to="red"/>
</rect>
</svg>
<script>
async_test(t => {
onload = t.step_func(() => {
t.step_timeout(() => {
let set = document.querySelector('set');
set.setAttribute('end', '0s');
requestAnimationFrame(t.step_func_done(() => {
assert_equals(getComputedStyle(set.targetElement, null).fill, 'rgb(0, 128, 0)');
}));
});
});
});
</script>

View file

@ -1,13 +1,10 @@
<!doctype html>
<title>Check correct event bases for onclick</title>
<meta charset="utf-8">
<link rel="help" href="https://svgwg.org/svg2-draft/single-page.html#interact-EventAttributes">
<link rel="author" title="Edvard Thörnros" href="mailto:edvardt@opera.com">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<svg width="200" height="100">
<rect x="0" y="0" width="100" height="100" id="a" fill="#0AA">
<set begin="a.click" attributeName="display" to="none" fill="freeze"/>
@ -18,24 +15,33 @@
<set begin="b.click" attributeName="display" to="none" fill="freeze"/>
</rect>
</svg>
<script>
let retries = 3;
let clicks_remaining = 2;
let a = document.querySelector("#a");
let b = document.querySelector("#b");
let t = async_test();
let interval = setInterval(t.step_func(function() {
retries--;
if (retries == 0) {
clearInterval(interval);
assert_equals(window.getComputedStyle(a).display, "block");
assert_equals(window.getComputedStyle(b).display, "none");
t.done();
return;
}
a.dispatchEvent(new Event("click"));
function perform_clicks(t) {
t.step_timeout(function() {
b.dispatchEvent(new Event("click"));
a.dispatchEvent(new Event("click"));
t.step_timeout(function() {
b.dispatchEvent(new Event("click"));
}, 20);
}, 20);
}), 20 * 2);
}
async_test(t => {
let observer = document.querySelector("#b > set + set");
observer.addEventListener('beginEvent', t.step_func(function() {
if (clicks_remaining == 0) {
assert_equals(window.getComputedStyle(a).display, "block");
assert_equals(window.getComputedStyle(b).display, "none");
t.done();
return;
}
perform_clicks(t);
clicks_remaining--;
}));
window.onload = t.step_func(() => {
perform_clicks(t);
clicks_remaining--;
});
});
</script>

View file

@ -74,3 +74,8 @@ the path to the OpenSSL config file (typically this will be
},
}
```
### Regenerating the pregenerated certificates
From the root, run `./wpt serve --config tools/certs/config.json` and terminate
it after it has started up.

View file

@ -1,30 +1,30 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQILCSlhTzkRTICAggA
MB0GCWCGSAFlAwQBKgQQgcOfWGRpzftycTbFVXO4mgSCBNDv5/+mh+AabEQwzjk/
RIVjff2flwV0TooLISvRZYPEi60EsqsDhBpJ5iC6N8GFYXgoz06BaMQsuMGA8cRe
qcL6uGNdwexoReO7SGD2p3jBQU+r6SpDdVicMDUzYWt8P+kYemFVoCoFrhCiCx2k
p9ylcERn4JlUP3fW/FZslN77Nyx/M+hPowGmSBsCyFz9FiENeCRLMlyQpyG8Zp9Q
hNbWmXp5HL/Yato/wySxtDFwC/93sus1TbgSpmmp3csiDE1TIZ2FtlDCjqd0puY8
UVhhq+0ce01vZgOT4SWXaiMfXOt9tZ6vqsgTakQzQDXKPbPlM3ppFtTMUyNUPmol
Fj36DxrVEArb7CT/tgbNfd/cdVonDtJJF7vxrAWWKzbhXpLfKAx4j54gdDz/ng0D
LDvJwlCtMqS5qz30kOJLvSQu+ifG9ib+GBkiihG5VeYKjfvjxWl/3bHamIrwV8Lp
ijHF2rsSSdzlKksSga+84jmDgAlqCsFdEAzGL8Dg4zk55Wlkr6+EshOQJN8vQz+f
7O7fyLCS6hjjskmYTTXlHvtLiro870jd+nRXmwNlZ9DDayJCfUMayoihHqeIX4u6
ZQhjk+54Ln9vEMUlhkiGL/1rE6APVCBnlPzJfX/K2BXHWdu/NRT4rHG6zGQLViJr
yaaLV6F2bxCACjyjQmYzdGb238ApG5ubY50Eu4UfuB8N1zGDxqU7KQpRXLECmfKw
qa7lHHpuakC5gFddKHI62rQc9Tw5jLRohFTFA2e54d+rN5axiSBoeYY0Ky+Y6Id4
xGLkJoNeleyrXKj09ercxcUhg2EL/B4wHiyBLKikZiA4gUaCnCZ7WRPsGpJ5wo/K
TXiAj1W0QQELGo+k8xmXP9y6Qb4ZcJsnWJ35Spn5CeuI/y/Bms/o2klqbhn9h+gz
4w4Zo4PoKEfjnFublCoCa7F9jvxSM7GTeaRPf8E6/wYBV8Xdu/rAd3ypCXBRULR1
xqXvhp6u/k8XmAyd62mAwHRG1RDHZ2Kg1pspV8YGnYYE0pXRSsVKT1+Yu6pQ65n8
SG0YmZRN2/In0cyTkNwWwl9Bpdd7mghwiZ8uTed00Q7UvxBZxRe8I1VOwBrvA8Jo
HZ25f0fuzNYkGmLq80jVE6k4dPowOQVp7dKcH8EvGJunUJKeAZrh0B9At52XzqJX
9uibQrDyJvFKTepH7Gm/NuUQK1XG0tkJbysnvUk3Ezj6nihxL903IfyLhNI/R22P
45nQeqRzrxLq4pfjW/KY+7IkX8tdabfPDHmtjLi3DhpYlDQ8JTDMn6dElN6wNIpe
w8wh6c9srD5zbaguaMRy+5R46zyLkDIY/SOMDgXqg6rTsSSnEXc5RD1F2amBXRJF
g8evdUJ7klx6pDh91Sspn9B/RJs1se5H37Wq9AFvrSHvktNVS0kqim+dimNKRFQr
kJ8eqxoqJ268wTlnppn14LSig9iwE8a/+yEhfXfoZ12mYCVjT9Y8+ZtrzI+TqIDh
ThfExeBYbPe+KTcsmuaYHw4Dbf4j8EMh7TJZlVx0o3Aqiw5MOAti5nIYt4kqJx/T
+pNPJPhMEq0nGyE/iInxrYgH6JdNJqctexhxj5ZdfmrwpFPpDq5ZZ49HT1XFP5jE
WgiOtgAhQ01A0xiCr0EZbFczHg==
MIIFHzBJBgkqhkiG9w0BBQ0wPDAbBgkqhkiG9w0BBQwwDgQIminHTzkXhrsCAggA
MB0GCWCGSAFlAwQBKgQQXVwJcqWze6A3VYuAS0BPgwSCBNCRtvroB6qroQlF58HE
5SJHF/jQRJRxf051lrq+jfUxM7kZucNN+myV2ziLoga6OQM579D8vy8tqkrLpnsT
cXkgHuwtBJF47w1YAPGGARe3Ksv/2C9sUVcPvmnVrzSMX86EserffqM3zfwZ2H3S
jxTDSyIvJUU+4XfxrWegTiQQPNqDyLfO5dBfatT2ztXCmu3BFipuhGFpwwCJirKr
1xb6XPEuT0PCzTNpeSURpXFKHMDMkcjOkNAUygIEw+Lg7etVfLcsgBuzEA3RWwf3
OMY1mTBJlvx6zZxdX7a0QmxerUDkDS9YYAEGSFa+Fx6cGW5Pyeef9xtlHxZHi+pm
TxCwcvJyXqeD4gWm3s1gwOji5WmXvo2EircxfSKk8TUwapxfCYQbOjQIPaHnEGoa
CQhSEgDX5ufwsXJ9/pSP6kjW+y+f0gnhHVuKJKsOBmjg6iqwnqEhw+uNFWKKl/Mo
TFT7CrayJTvo+9UdQTJV9MBAsMUQS7d+HH9kNOAn/hfmEzzGUKVTZ0zId0fKH13p
TnoYgMYbm2Urn0NXBFO8RvzY3KpKyRhMcOLKxkPVUjKUA5BuAv6rcvMflI6Hn5wU
qPM+uECSgdOnNeImi1Ff+cW8dTGGRb+iha+EnABoX3wR5OvzgCYHeENJb32FUoVs
ID2T5MZtQNArkis/xWZ7JyPbmsQo2wyiFLasX8Wgh+8MgFxolpvjlX3/QdTTJqEc
rofVGOPOmfoHo3eYNJOlLbaJTDIe8OrK49PIeu1gm8zqB2WYqmF/3AYy4IAIwUYu
rbPwUC9HyceRPSYePM9Wf1xM2proK3nmp6apdHCRNjbd4689ELmB90b2aw6NFiam
3taKPmFLb/vt2YxgqOtagPrTlc1QLHBKrsnpg/BhcBjupqRKGFmXCJziPIaDKvAs
jtg4KDo8jNIxmwQAwEV4+aH0hhMumxa8yaXoC/3G6JxD2sdoraOp+vrTzjUMkIoc
xLqWl8GHVLF09fZJ4StJfIWIOmmpicSxW1vDICaZuU+iPwlNOzF7sePRkixbarHr
iqTlLG//+Huq/n9IRxhzmSOur63WMXFRy0sKW5W+uQ9xsnV8SdjwRmAGLtnZHq4Y
NOCQ/+yORl4yxkPvV01HykAl4CRtPBGR+4ZC5NKhpyhJbu6WcqwiXyAehU/cPgL+
h8NwEoyP+OHrvEYdy4ocBnJq/436WwzfWis8nIG4bSlD3DSEgJF/QUmq4i/EUq/A
D6SfzbFpPGtTj3KZ6D8DPrwWG68OCFsqRW9YEvUIK8JT265BN3MzI5i0/+k4CdAg
aSaiC97qg7qJaVM9b9EHscUXR/feFxvO5QkkkY5CTU3Bxb0s1I4Rw2MYoAdMGtbA
6mdzmRVYoRv9NMdzL6zOToPU6oOg6mbjHgZQgNd7w8GtTFW+sfslLOXXC8erzbHl
ByQJGcFGtKTBUD+7VHZhpwM7bPObtzyA2r0UbS1Qx0IznvubdFVcXyE7dIjW7cAg
IbBzKeiERwpu3rMq2bYVW3DA33VlrTfpjXujhHv1iX15i6qsWd7OtZw6x7TccH1Z
jdmh9XB9xDydnss3u9DwGREMYC9TdPZY/nui6lgCjjOhaTaunMuigFBMWUBkDlIb
uju+Atv+PSBT9DmTyTQGhPZRIw==
-----END ENCRYPTED PRIVATE KEY-----

View file

@ -1,116 +1,125 @@
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 372738 (0x5b002)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=web-platform-tests
Validity
Not Before: Dec 20 12:20:35 2018 GMT
Not After : Dec 17 12:20:35 2028 GMT
Subject: CN=web-platform-tests
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:a5:c0:b9:6d:f2:13:01:17:f3:ec:bf:91:db:4f:
cd:4a:73:c7:d1:6a:b8:0d:c0:1e:7a:06:df:f2:f6:
08:c1:36:a2:11:da:fb:0a:7a:2a:4f:a9:c0:6f:19:
0b:e2:6d:26:3a:f9:3e:71:29:45:a4:4f:27:1d:6d:
ef:40:98:dc:01:7f:2c:4f:e2:35:4d:2b:8e:97:c5:
41:9e:cd:f4:0e:60:fc:65:a4:39:5c:88:36:05:60:
e8:7f:b4:b4:32:9c:70:47:08:15:51:c8:cb:d8:21:
ba:54:48:73:72:e3:8a:95:61:e6:00:ef:e3:5f:f6:
18:b6:4e:24:b5:41:7f:ce:b2:d7:28:33:ee:06:21:
4f:cb:d6:4f:55:3a:bb:4f:74:e9:b6:e8:3b:cc:a7:
bb:f3:86:7a:c8:71:e1:f4:f2:2b:fe:1f:71:5e:1f:
49:12:f9:c3:8a:7e:dc:5f:75:38:4d:7b:4a:a2:e5:
6e:bf:ce:d9:9c:99:af:a7:6e:38:97:3c:b5:3f:13:
0c:63:7e:78:ee:e4:ad:d8:18:c7:ec:da:38:44:49:
af:fb:44:8d:79:29:db:cf:4c:0a:6a:fd:5a:54:15:
e0:cd:ac:4d:17:5d:ef:58:c8:3d:84:fd:20:79:55:
9f:14:c7:c8:5f:c8:98:5c:3c:ff:53:89:c5:1f:e7:
83:a3
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:TRUE
X509v3 Subject Key Identifier:
7A:EA:6A:75:AA:23:78:B5:5E:06:61:4A:56:CF:56:A9:6D:B0:54:02
X509v3 Authority Key Identifier:
keyid:7A:EA:6A:75:AA:23:78:B5:5E:06:61:4A:56:CF:56:A9:6D:B0:54:02
DirName:/CN=web-platform-tests
serial:05:B0:02
X509v3 Key Usage:
Certificate Sign
X509v3 Name Constraints:
Permitted:
DNS:web-platform.test
DNS:not-web-platform.test
DNS:www.web-platform.test
DNS:www1.web-platform.test
DNS:www2.web-platform.test
DNS:www.not-web-platform.test
DNS:www2.not-web-platform.test
DNS:www1.not-web-platform.test
DNS:xn--lve-6lad.web-platform.test
DNS:xn--lve-6lad.not-web-platform.test
DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test
DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
Signature Algorithm: sha256WithRSAEncryption
57:8e:97:2b:a5:3f:82:be:c9:80:b3:ef:0f:c8:b9:4c:f2:a6:
91:40:ab:1f:70:0e:31:fb:74:ae:17:23:ea:b1:c8:19:f7:29:
13:da:59:aa:61:7f:24:17:24:84:22:81:4c:23:b1:e6:a8:d8:
65:95:b0:a9:2e:2d:b8:8f:86:67:69:b8:d2:7a:87:d3:75:67:
6a:24:2a:a9:af:31:a6:33:2a:50:46:c4:2e:37:f0:e0:e0:a1:
e0:fe:bb:2f:6a:8d:9c:a6:45:cd:3f:8f:cd:fd:95:b1:70:24:
b8:2b:39:56:3f:81:0d:42:59:0a:8e:b2:c4:a7:1b:8a:73:98:
51:4d:f5:14:ab:8b:95:dc:5e:6a:bc:30:57:79:16:3e:6c:73:
09:f9:be:1b:4b:bf:cb:f4:ae:3a:ad:0e:57:20:e7:2f:f5:1f:
b3:7b:cf:1a:77:73:94:c6:f5:08:d5:24:29:12:9c:f1:0a:75:
99:43:7b:91:c7:69:6f:ff:86:10:54:94:22:73:f9:00:c2:91:
3d:6d:52:e5:5a:c6:43:e2:37:84:4c:59:02:b7:59:6c:b0:c5:
18:72:03:61:94:00:11:e6:a3:cb:18:99:3e:8e:a2:00:82:4a:
65:c3:08:3b:c9:10:19:c3:09:44:3c:a9:b0:2a:c3:84:2c:46:
43:ba:dc:bf
-----BEGIN CERTIFICATE-----
MIIGVzCCBT+gAwIBAgIDBbACMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0xODEyMjAxMjIwMzVaFw0yODEyMTcxMjIwMzVa
MIIW5zCCFc+gAwIBAgIDBbFHMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0xOTEwMTQxMzQ5MjlaFw0yOTEwMTExMzQ5Mjla
MB0xGzAZBgNVBAMMEndlYi1wbGF0Zm9ybS10ZXN0czCCASIwDQYJKoZIhvcNAQEB
BQADggEPADCCAQoCggEBAKXAuW3yEwEX8+y/kdtPzUpzx9FquA3AHnoG3/L2CME2
ohHa+wp6Kk+pwG8ZC+JtJjr5PnEpRaRPJx1t70CY3AF/LE/iNU0rjpfFQZ7N9A5g
/GWkOVyINgVg6H+0tDKccEcIFVHIy9ghulRIc3LjipVh5gDv41/2GLZOJLVBf86y
1ygz7gYhT8vWT1U6u0906bboO8ynu/OGeshx4fTyK/4fcV4fSRL5w4p+3F91OE17
SqLlbr/O2ZyZr6duOJc8tT8TDGN+eO7krdgYx+zaOERJr/tEjXkp289MCmr9WlQV
4M2sTRdd71jIPYT9IHlVnxTHyF/ImFw8/1OJxR/ng6MCAwEAAaOCA54wggOaMAwG
A1UdEwQFMAMBAf8wHQYDVR0OBBYEFHrqanWqI3i1XgZhSlbPVqltsFQCMEcGA1Ud
IwRAMD6AFHrqanWqI3i1XgZhSlbPVqltsFQCoSGkHzAdMRswGQYDVQQDDBJ3ZWIt
cGxhdGZvcm0tdGVzdHOCAwWwAjALBgNVHQ8EBAMCAgQwggGLBgNVHR4EggGCMIIB
fqCCAXowE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVbm90LXdlYi1wbGF0Zm9ybS50
BQADggEPADCCAQoCggEBANQI10vytPN5G8m6cWePZLHYgBIJsWfjx2NWk/WFELoc
DnUv2zRp5E27AhxEJJ6c6JGu+3WjT7l+fGykoK1RwOn4Oi/KNJnDE2XeSjQH/awP
Mi2j0hAivTvCXnomTXn3cqcTkrapcDXV1+WUSaebJw+8wHLoJUWIbeU7KLVgXscf
hLGBQB6p/uQewzmmb1bUbizF3GnbFxSbFgkK3Ttf9NpHqqRtgUAaZtP9eda/kRP7
j0iIQncCyhwUMcEg/9YsKeLOSUGzLjUSCJqOIvULnQwRBYjIEwui00qdChqV8chz
Kbk32dj6vLFs3t7P+xoj/JjZXZiWQFTzFSVjpS5A7MECAwEAAaOCFC4wghQqMAwG
A1UdEwQFMAMBAf8wHQYDVR0OBBYEFEFJ/4xmUF+HoQaou6uK3XMNDjcaMEcGA1Ud
IwRAMD6AFEFJ/4xmUF+HoQaou6uK3XMNDjcaoSGkHzAdMRswGQYDVQQDDBJ3ZWIt
cGxhdGZvcm0tdGVzdHOCAwWxRzALBgNVHQ8EBAMCAgQwggoFBgNVHR4Eggn8MIIJ
+KCCCfQwE4IRd2ViLXBsYXRmb3JtLnRlc3QwF4IVbm90LXdlYi1wbGF0Zm9ybS50
ZXN0MBeCFXd3dy53ZWItcGxhdGZvcm0udGVzdDAYghZ3d3cxLndlYi1wbGF0Zm9y
bS50ZXN0MBiCFnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwG4IZd3d3Lm5vdC13ZWIt
cGxhdGZvcm0udGVzdDAcghp3d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdDAcghp3
d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh54bi0tbHZlLTZsYWQud2ViLXBs
YXRmb3JtLnRlc3QwJIIieG4tLWx2ZS02bGFkLm5vdC13ZWItcGxhdGZvcm0udGVz
dDArgil4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdDAv
gi14bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw
EwYDVR0lBAwwCgYIKwYBBQUHAwEwggFvBgNVHREEggFmMIIBYoIRd2ViLXBsYXRm
b3JtLnRlc3SCFW5vdC13ZWItcGxhdGZvcm0udGVzdIIVd3d3LndlYi1wbGF0Zm9y
bS50ZXN0ghZ3d3cxLndlYi1wbGF0Zm9ybS50ZXN0ghZ3d3cyLndlYi1wbGF0Zm9y
bS50ZXN0ghl3d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cyLm5vdC13ZWIt
cGxhdGZvcm0udGVzdIIad3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnhuLS1s
dmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIieG4tLWx2ZS02bGFkLm5vdC13ZWIt
cGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRm
b3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZv
cm0udGVzdDANBgkqhkiG9w0BAQsFAAOCAQEAV46XK6U/gr7JgLPvD8i5TPKmkUCr
H3AOMft0rhcj6rHIGfcpE9pZqmF/JBckhCKBTCOx5qjYZZWwqS4tuI+GZ2m40nqH
03VnaiQqqa8xpjMqUEbELjfw4OCh4P67L2qNnKZFzT+Pzf2VsXAkuCs5Vj+BDUJZ
Co6yxKcbinOYUU31FKuLldxearwwV3kWPmxzCfm+G0u/y/SuOq0OVyDnL/Ufs3vP
GndzlMb1CNUkKRKc8Qp1mUN7kcdpb/+GEFSUInP5AMKRPW1S5VrGQ+I3hExZArdZ
bLDFGHIDYZQAEeajyxiZPo6iAIJKZcMIO8kQGcMJRDypsCrDhCxGQ7rcvw==
cGxhdGZvcm0udGVzdDAbghl3d3cud3d3LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3
dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEubm90LXdlYi1wbGF0Zm9y
bS50ZXN0MByCGnd3dy53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzIud3d3
LndlYi1wbGF0Zm9ybS50ZXN0MByCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0
MByCGnd3dy53d3cxLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzEud3d3MS53ZWIt
cGxhdGZvcm0udGVzdDAdght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3QwHYIb
d3d3Mi53d3cyLndlYi1wbGF0Zm9ybS50ZXN0MB2CG3d3dzIud3d3MS53ZWItcGxh
dGZvcm0udGVzdDAfgh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdDAggh53
d3cud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3MS53d3cubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0MCCCHnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVz
dDAggh53d3cud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwIIIed3d3Mi53d3cu
bm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3QwIYIfd3d3Mi53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdDAhgh93
d3cxLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCGCH3d3dzEud3d3Mi5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3QwJIIieG4tLWx2ZS02bGFkLnd3dy53ZWItcGxhdGZv
cm0udGVzdDAkgiJ3d3cueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0MCSC
InhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwJYIjeG4tLWx2ZS02
bGFkLnd3dzEud2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3Mi54bi0tbHZlLTZsYWQu
d2ViLXBsYXRmb3JtLnRlc3QwJYIjd3d3MS54bi0tbHZlLTZsYWQud2ViLXBsYXRm
b3JtLnRlc3QwJYIjeG4tLWx2ZS02bGFkLnd3dzIud2ViLXBsYXRmb3JtLnRlc3Qw
KIImeG4tLWx2ZS02bGFkLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKIImd3d3
LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02
bGFkLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MCmCJ3d3dzIueG4tLWx2ZS02
bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDApgid3d3cxLnhuLS1sdmUtNmxhZC5u
b3Qtd2ViLXBsYXRmb3JtLnRlc3QwKYIneG4tLWx2ZS02bGFkLnd3dzIubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0MCuCKXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1w
bGF0Zm9ybS50ZXN0MC2CK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBs
YXRmb3JtLnRlc3QwL4IteG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1w
bGF0Zm9ybS50ZXN0MC+CLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dy53ZWIt
cGxhdGZvcm0udGVzdDAvgi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3QwMIIud3d3MS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53
ZWItcGxhdGZvcm0udGVzdDAwgi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cx
LndlYi1wbGF0Zm9ybS50ZXN0MDCCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYy
OGEud2ViLXBsYXRmb3JtLnRlc3QwMIIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu
d3d3Mi53ZWItcGxhdGZvcm0udGVzdDAxgi94bi0tbHZlLTZsYWQueG4tLWx2ZS02
bGFkLm5vdC13ZWItcGxhdGZvcm0udGVzdDAzgjF4bi0tbjhqNmRzNTNsd3drcnFo
djI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDOCMXd3dy54bi0tbjhqNmRz
NTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyd3d3MS54bi0t
bjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwNIIyeG4t
LW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3Qw
NIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3MS5ub3Qtd2ViLXBsYXRmb3Jt
LnRlc3QwNIIyd3d3Mi54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3QwOII2eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2ZS02
bGFkLndlYi1wbGF0Zm9ybS50ZXN0MDiCNnhuLS1sdmUtNmxhZC54bi0tbjhqNmRz
NTNsd3drcnFodjI4YS53ZWItcGxhdGZvcm0udGVzdDA8gjp4bi0tbHZlLTZsYWQu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0MDyC
OnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3QwQ4JBeG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLW44ajZk
czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3QwR4JFeG4tLW44ajZkczUz
bHd3a3JxaHYyOGEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0
Zm9ybS50ZXN0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiC
EXdlYi1wbGF0Zm9ybS50ZXN0ghVub3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53
ZWItcGxhdGZvcm0udGVzdIIWd3d3MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53
ZWItcGxhdGZvcm0udGVzdIIZd3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3
Lnd3dy53ZWItcGxhdGZvcm0udGVzdIIad3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3SCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0ghp3d3cud3d3Mi53ZWItcGxh
dGZvcm0udGVzdIIad3d3Mi53d3cud2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3
LndlYi1wbGF0Zm9ybS50ZXN0ghp3d3cud3d3MS53ZWItcGxhdGZvcm0udGVzdIIb
d3d3MS53d3cxLndlYi1wbGF0Zm9ybS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRm
b3JtLnRlc3SCG3d3dzIud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cx
LndlYi1wbGF0Zm9ybS50ZXN0gh13d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVz
dIIed3d3Lnd3dzIubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCHnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVz
dIIed3d3Lnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh53d3cyLnd3dy5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3SCH3d3dzIud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5u
b3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3Jt
LnRlc3SCInhuLS1sdmUtNmxhZC53d3cud2ViLXBsYXRmb3JtLnRlc3SCInd3dy54
bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9y
bS50ZXN0giN3d3cyLnhuLS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3
MS54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53
d3cyLndlYi1wbGF0Zm9ybS50ZXN0giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWIt
cGxhdGZvcm0udGVzdIImd3d3LnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3Jt
LnRlc3SCJ3huLS1sdmUtNmxhZC53d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIIn
d3d3Mi54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhu
LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53
d3cyLm5vdC13ZWItcGxhdGZvcm0udGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYy
OGEud2ViLXBsYXRmb3JtLnRlc3SCK3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQu
d2ViLXBsYXRmb3JtLnRlc3SCLXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13
ZWItcGxhdGZvcm0udGVzdIIteG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Lndl
Yi1wbGF0Zm9ybS50ZXN0gi13d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3SCLnd3dzEueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2Vi
LXBsYXRmb3JtLnRlc3SCLnd3dzIueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2Vi
LXBsYXRmb3JtLnRlc3SCLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2Vi
LXBsYXRmb3JtLnRlc3SCL3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdl
Yi1wbGF0Zm9ybS50ZXN0gjF4bi0tbjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90
LXdlYi1wbGF0Zm9ybS50ZXN0gjF3d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEu
bm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cxLnhuLS1uOGo2ZHM1M2x3d2tycWh2
MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIyeG4tLW44ajZkczUzbHd3a3JxaHYy
OGEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2
ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdII2eG4tLW44ajZk
czUzbHd3a3JxaHYyOGEueG4tLWx2ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gjZ4
bi0tbHZlLTZsYWQueG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3Jt
LnRlc3SCOnhuLS1sdmUtNmxhZC54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qt
d2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1s
dmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2ty
cWh2MjhhLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0
gkV4bi0tbjhqNmRzNTNsd3drcnFodjI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4
YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJKoZIhvcNAQELBQADggEBAHXiq1vA
xjc8ij34i4b+8inVBVwTWyHtczlZnIQTCxqJCDk83pz8QFHGyHYz+db36U6YwHak
I3HYhipPMB1VnlHkMA6xFuZL/aFWywLNU9nTmaAV0fP/R5k9vt8AEm0ZmEWkNYtL
opcy0rqjAaXTIWes91OZfniTFQDHMiurK8Vq+fq/Ozw+YQbRbU1KlHCNayisvQa4
TLO+DjMR0hzDT3DHEwPJLPYaa6RnIwo8zvCqk0ZRPAxeuldAe/u1PzteXRzEHTAE
DMVLMwM752bLFufv1GRCZNHELZKyhUoFrP30AqE7r3pnwQRW8Kdid38IMo7u9Dem
u5/tHefPKD7bm/Y=
-----END CERTIFICATE-----

View file

@ -1,28 +1,28 @@
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCpxFZDnnjgGrPj
2OirthoMrhDXhgQ0MupElcIG3ZtE9PNAqT20Ysr7cYgg1vQdylSo1aK3ZcBbtfuQ
8Yfa7+o6TiTcKiEmTWB34rJPx1t37rJz7nWC0JjIOArtpSIAI8yIXkAtw5TnHcL5
AAC7alliVMyF15UVxdeTUgmvw5IUGzfRX9HUVhCFvxtsS+GTOoDLHFqYGH4Qc6sg
dOEtzUPuRS51zKTwaG4QopCKfkvj3MLZ19/k0aJPibvLNACpkMlPFYZZekvt+WsB
AUjtixXM8f9Yon2XV9F7MXvDsaZUgebuYt7qxaG0xGNez8riLIhQB8wGSIJ18Ziy
VN62q9/bAgMBAAECggEAO9k7kBsOAfNn96tAW0iXZmD3DwPv93b7n7Ir9L+rPWQd
XW5MkotBg+NCWlFtPhNWRS8Lbhww9CPzy+VaP5TUvjlORU+U4CvnFlyVAAsH8//y
aWxngPaI5gzbzWup0OLN+EVB2uBYXiHf2mhl2axkVoYOlCCsLkDQ/t6tC4mmte9P
JB8VuMWKDc+Q0bMyGQ9V/qgQuw38mYyuBrbS3pwG9/1S7qADZ4/HK85CtEY6f0wQ
dyK7Rxjpo4eq/MWPTlrLYRZcPKkllFLLbU+346OPD06spMOxleYkMVLMhW9CZVSM
cRqxa7MLel7XumUK+7oC5bXuBICrAu69XtW8E6fsAQKBgQDfp+e+gb/ISu5CPgFu
/y2i191lr6uIIYTB8URx92WWqabim7U8YiSzaexY9qTNvMjxnn/qLnKvEtxLPjSx
3J+3ewoE62G7QjNSzwTRNTrhDDzh9MhzIr3YtLvPwpobd++TpbtVHxYOEzT9dI/w
jSIztVzLK+Md2ID7sqkwPxBmWQKBgQDCUWC99hi7mvmjoGsGpy5iZ5EL66GHlA9y
ivgg+DCoFQ7twiASqmrsVwztFvEV2P/JZVMleHOvMumOSRdI6CG3GpXRWi4rSrS5
K02bUS8GGE/Aobh2q6bNQfM2ujl+k/wlIIJHxlFb0JqLOEpuLft0Kf52odtLC8fV
lGDsabwZUwKBgHYoH19e7rHjHDJ0zY8VUsfIIRf6kbVud9N6If3PhKTu5dKsDjhj
ZR4/5HQvgWuLw+EaKlvOxBnH7gf2SiJ4+wwU/XsR22TxmWmzIslfxMZmD7gT+N4S
yZc2DE67cWz3lOM82FYlASLYdNM+BFlCRoJo2yge/HKlEadngMiTWJepAoGAB9Ja
wIq9aB/O2KVGaZglJ9TfY8lyURDGpmetoTYcT0e5uBxOSjIN58GBRbHctnJrqWGo
vSNiFLVJ7W5Hv6mIYeRyD2E/5oI1UBbMIupbqDUmUKyxziUOq8hxz8wjMFMonR33
4Ie9EqMM9XmolVLIgl6GXaQaPaUVwCUe2aVP6v0CgYEAtxJq1dY+w+79WXu6/pDj
fX7Np07DRgrkmWL4db+ytQpONvbxXZwduSfb4dv3lfCiPzib+WXdxpGDOR94d/qL
zhrQq25s44TtvdeUzdn5+lZYn+15ZtNgUTYDal82dxwIR56fCRdLWC26CwaBevXX
lK3MgwivpX6mQ3nr7s/4x2A=
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCrZXVXmOPlqo/+
2xj15PgcZGHGo/bofiQQ3gl6JL1VX1GptYINhTq2sUhfN8tCb+cHyzapO9oUmwqw
p5Up7tJ4Ip7uE1/wwSxVcvCawG5/PN5iD7H2wsmEppHXOc3Ll085/gzes+1+Nn+q
ARmp1bF/vjplD6VdH2rBW3sJ3DAoBaoXlAMfeRAFDpaqa+9lxMrM5WkUHndQ+uEM
6kZyevhyp02XDP0vLwNCtPLGB0emAAfC7xpwRGVGStEsUhf/mc9yNNaKgqBKI0no
oVnuU3RGdKHP18vcjtBSV0lYgjfg9a07OBu1hgQffhofi2BydfaCpBAMzFhlu1uy
s6ahVkJpAgMBAAECggEAfmvzxY0MbFcGp2FMY/Nj3u1cAXznnk2MpLRiISoATXxl
a9xp9TcUO7VAQJuS3YpUyrbltqZjEVfa5rp1l9yEegBvYgQAfEDARrblKgBOgKOR
FJunFPBQW/vRDwOf/E+7LHdrXskwoCvqtqbhGxh4OFVEFU8ZFjsaL00e0AMNsjZl
0OsEONlIH4nCa7E6DTasHxc1VkHQr3uvBl5/4HfOc05tr+ZKlMYXzAPWkL0sC216
Dqy4AxJ0M0ax8BYEZuo0gqQmMAonJTkEnpyoD4z89S877vFp8w1VPbGYkV48yjV/
I7fQ6Yjt3yg+as+s4arGEsUB0l+XApBYYY/J+qcYUQKBgQDed7DOMJUc3kPTFEcN
p/EbSh9TXxS/74cIyGid9IEiREJYxYv8kz0KplGuJolIQ3/Ik9Rac6B3Tu4WkW0g
TPbNunYEsydZBAnaQ4eAVdOfvRQ6V3eBZ2vErsHJRFaj5cOcesUXxBZI6m2tQESx
dBWFDNG9kztr0HmaL6Puz4zZIwKBgQDFOxfR7FcpGdw61ziSsZmtvkf6epkG3+ou
uhY50J0UrTbK7TuimkoRw/XHeBe4db+ejOOuLD9QE/yXvmtEWuyUTTYOVvZ+HuNj
Rp3kdi1GuWXn6gRvdlkf9XwW7jHmgkpbA5A+uDXs3EYYa18LxPNfMSvhyHdkFnUG
aTzyYNpdAwKBgGv/QNan4Qt1nwluU5v+hl6QGir4AnO2zR/nYloj4ziGWIsNw4pm
1ABCg25+iLCLDBKMKU+LyD+DErPj/0zp7/opZbecXSKqgjnyBGq5v5VRTeuQoJQy
Z6/AgpS5VzITjWV+eAW0jHjzTTEI/RAEYZoIgh18xyDswMuoCvYYzbBvAoGBAMM2
I/Nw+ywBHotWrfXztunSpidy5Ld7NKyfHpSGuJLYhpz/hcEA+ULwM/oEEWZPlSN2
y3t+7AN0ZNREcqMrY3G9oj07ManPJL0EDg8sMNAJfKW4aD9yYfBR50pC5D0ExFel
BUYuyaDwvKg6zc42V7PmVUqaQiFcYOPBkcNMvZTFAoGBALBtdt0iIvtBopp+IQaV
zZMA5ZQIQ5n5v071LKa1s7ar3+hIoDRsZbM7XkUIA8zQlrwFRhbU5YFNcbpooQSm
7j4+fIudcpxj9tAMGAb5yg89k1DjTy7FUWL9elGIgvJMqgF6IQ53+vR8xwGDyQLB
sP5mizF1wi47DYPJQcDRCzU+
-----END PRIVATE KEY-----

View file

@ -1,90 +1,133 @@
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 372739 (0x5b003)
Serial Number: 373064 (0x5b148)
Signature Algorithm: sha256WithRSAEncryption
Issuer: CN=web-platform-tests
Validity
Not Before: Dec 20 12:20:36 2018 GMT
Not After : Dec 17 12:20:36 2028 GMT
Not Before: Oct 14 13:49:29 2019 GMT
Not After : Oct 11 13:49:29 2029 GMT
Subject: CN=web-platform.test
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:a9:c4:56:43:9e:78:e0:1a:b3:e3:d8:e8:ab:b6:
1a:0c:ae:10:d7:86:04:34:32:ea:44:95:c2:06:dd:
9b:44:f4:f3:40:a9:3d:b4:62:ca:fb:71:88:20:d6:
f4:1d:ca:54:a8:d5:a2:b7:65:c0:5b:b5:fb:90:f1:
87:da:ef:ea:3a:4e:24:dc:2a:21:26:4d:60:77:e2:
b2:4f:c7:5b:77:ee:b2:73:ee:75:82:d0:98:c8:38:
0a:ed:a5:22:00:23:cc:88:5e:40:2d:c3:94:e7:1d:
c2:f9:00:00:bb:6a:59:62:54:cc:85:d7:95:15:c5:
d7:93:52:09:af:c3:92:14:1b:37:d1:5f:d1:d4:56:
10:85:bf:1b:6c:4b:e1:93:3a:80:cb:1c:5a:98:18:
7e:10:73:ab:20:74:e1:2d:cd:43:ee:45:2e:75:cc:
a4:f0:68:6e:10:a2:90:8a:7e:4b:e3:dc:c2:d9:d7:
df:e4:d1:a2:4f:89:bb:cb:34:00:a9:90:c9:4f:15:
86:59:7a:4b:ed:f9:6b:01:01:48:ed:8b:15:cc:f1:
ff:58:a2:7d:97:57:d1:7b:31:7b:c3:b1:a6:54:81:
e6:ee:62:de:ea:c5:a1:b4:c4:63:5e:cf:ca:e2:2c:
88:50:07:cc:06:48:82:75:f1:98:b2:54:de:b6:ab:
df:db
00:ab:65:75:57:98:e3:e5:aa:8f:fe:db:18:f5:e4:
f8:1c:64:61:c6:a3:f6:e8:7e:24:10:de:09:7a:24:
bd:55:5f:51:a9:b5:82:0d:85:3a:b6:b1:48:5f:37:
cb:42:6f:e7:07:cb:36:a9:3b:da:14:9b:0a:b0:a7:
95:29:ee:d2:78:22:9e:ee:13:5f:f0:c1:2c:55:72:
f0:9a:c0:6e:7f:3c:de:62:0f:b1:f6:c2:c9:84:a6:
91:d7:39:cd:cb:97:4f:39:fe:0c:de:b3:ed:7e:36:
7f:aa:01:19:a9:d5:b1:7f:be:3a:65:0f:a5:5d:1f:
6a:c1:5b:7b:09:dc:30:28:05:aa:17:94:03:1f:79:
10:05:0e:96:aa:6b:ef:65:c4:ca:cc:e5:69:14:1e:
77:50:fa:e1:0c:ea:46:72:7a:f8:72:a7:4d:97:0c:
fd:2f:2f:03:42:b4:f2:c6:07:47:a6:00:07:c2:ef:
1a:70:44:65:46:4a:d1:2c:52:17:ff:99:cf:72:34:
d6:8a:82:a0:4a:23:49:e8:a1:59:ee:53:74:46:74:
a1:cf:d7:cb:dc:8e:d0:52:57:49:58:82:37:e0:f5:
ad:3b:38:1b:b5:86:04:1f:7e:1a:1f:8b:60:72:75:
f6:82:a4:10:0c:cc:58:65:bb:5b:b2:b3:a6:a1:56:
42:69
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
X509v3 Subject Key Identifier:
F7:EE:CA:20:37:0F:BC:CF:F3:B7:DC:12:76:D1:D1:CA:40:67:3A:6D
2A:18:0B:09:22:6E:28:D2:DB:FD:C2:2D:40:A6:F3:38:62:6E:C7:C5
X509v3 Authority Key Identifier:
keyid:7A:EA:6A:75:AA:23:78:B5:5E:06:61:4A:56:CF:56:A9:6D:B0:54:02
keyid:41:49:FF:8C:66:50:5F:87:A1:06:A8:BB:AB:8A:DD:73:0D:0E:37:1A
X509v3 Key Usage:
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Subject Alternative Name:
DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.not-web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
DNS:web-platform.test, DNS:not-web-platform.test, DNS:www.web-platform.test, DNS:www1.web-platform.test, DNS:www2.web-platform.test, DNS:www.not-web-platform.test, DNS:www.www.web-platform.test, DNS:www2.not-web-platform.test, DNS:www1.not-web-platform.test, DNS:www.www2.web-platform.test, DNS:www2.www.web-platform.test, DNS:www1.www.web-platform.test, DNS:www.www1.web-platform.test, DNS:www1.www1.web-platform.test, DNS:www1.www2.web-platform.test, DNS:www2.www2.web-platform.test, DNS:www2.www1.web-platform.test, DNS:www.www.not-web-platform.test, DNS:www.www2.not-web-platform.test, DNS:www1.www.not-web-platform.test, DNS:xn--lve-6lad.web-platform.test, DNS:www.www1.not-web-platform.test, DNS:www2.www.not-web-platform.test, DNS:www2.www2.not-web-platform.test, DNS:www2.www1.not-web-platform.test, DNS:www1.www1.not-web-platform.test, DNS:www1.www2.not-web-platform.test, DNS:xn--lve-6lad.www.web-platform.test, DNS:www.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.web-platform.test, DNS:www2.xn--lve-6lad.web-platform.test, DNS:www1.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.www2.web-platform.test, DNS:xn--lve-6lad.www.not-web-platform.test, DNS:www.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www1.not-web-platform.test, DNS:www2.xn--lve-6lad.not-web-platform.test, DNS:www1.xn--lve-6lad.not-web-platform.test, DNS:xn--lve-6lad.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.web-platform.test, DNS:xn--lve-6lad.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www.not-web-platform.test, DNS:www.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:www1.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www2.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.www1.not-web-platform.test, DNS:www2.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--lve-6lad.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--lve-6lad.not-web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.web-platform.test, DNS:xn--n8j6ds53lwwkrqhv28a.xn--n8j6ds53lwwkrqhv28a.not-web-platform.test
Signature Algorithm: sha256WithRSAEncryption
63:c9:58:a8:38:b5:1f:2d:41:9f:06:a3:50:bc:a4:da:f5:e9:
c6:05:64:0e:d6:7e:ee:31:8d:81:00:c1:90:fd:71:4d:3c:92:
44:7f:c5:b6:be:fe:8d:c0:85:90:04:5c:20:08:88:47:8c:b6:
0d:b4:1f:22:a8:10:a9:e7:0d:9d:a0:79:44:0b:f3:3a:77:e6:
e2:89:f9:a4:ee:dc:e9:6c:6c:2c:1c:6f:c6:fb:e3:2c:36:a3:
72:89:4e:c2:9c:51:23:cc:af:2f:9d:67:82:d2:59:ea:ff:fd:
ef:7c:bc:c8:ff:a7:19:43:64:e6:5f:82:28:c9:de:8e:97:e6:
42:e0:ca:74:e6:c8:e0:d3:6a:bc:04:ca:bb:53:f0:64:b1:31:
98:af:e1:b8:6b:7d:0c:ad:b3:e0:29:00:1b:50:af:30:b3:fa:
d4:d3:0e:45:4b:12:0d:5a:ea:11:cd:29:be:32:ea:4f:4f:7c:
58:7d:e2:33:37:b9:ce:0f:94:00:6d:16:e4:91:6f:e6:4c:47:
a7:cd:b7:f1:ab:86:68:e2:6e:c5:e9:60:b7:24:b1:aa:1b:f6:
f5:ce:a4:03:bf:ed:20:92:a9:f7:ad:57:61:ef:d8:9a:b6:df:
cb:2f:4d:3b:ab:8f:71:c4:f2:87:93:25:48:89:c5:9c:c8:d8:
46:c5:5e:ac
af:c2:ea:cc:6a:5e:49:e0:db:72:14:05:3c:21:a0:8b:ff:b6:
a9:71:82:f7:61:cd:23:2a:00:66:91:ac:01:99:63:38:11:21:
85:b2:57:92:0b:3f:79:68:f5:d8:59:8b:a7:74:19:eb:0b:e7:
3d:86:4e:66:d4:e6:2f:ff:ed:6c:7d:9a:5e:12:4e:bf:39:ff:
f7:d0:fb:52:53:a0:fb:b1:5c:9a:91:92:36:00:d8:a4:6f:f9:
9c:36:21:b2:c2:5e:14:11:ca:55:e7:88:30:60:8d:86:da:65:
26:ff:e2:45:36:2a:09:3d:a4:bb:38:61:4d:57:e4:c9:b6:50:
3c:06:2f:6b:bf:04:34:42:54:dc:53:b6:61:c5:4e:40:00:d6:
5e:19:17:3a:54:2c:c5:16:7a:6d:4a:70:56:45:cd:99:5a:2a:
d1:a7:4e:35:97:3d:d8:c9:95:80:ab:15:42:86:f6:a0:a6:c3:
21:c1:9a:07:34:49:ad:61:3c:bc:94:b2:2d:92:f7:44:80:01:
5f:27:bd:83:f5:51:22:39:cd:98:b1:39:23:b8:f4:5c:08:20:
9e:fe:f1:2d:9a:e9:9b:c7:5e:b8:33:8b:16:77:52:3d:c9:7a:
43:9e:25:d0:c7:5a:96:08:53:1a:dc:75:53:75:44:62:18:7c:
ef:fb:73:52
-----BEGIN CERTIFICATE-----
MIIEnDCCA4SgAwIBAgIDBbADMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0xODEyMjAxMjIwMzZaFw0yODEyMTcxMjIwMzZa
MIIMsjCCC5qgAwIBAgIDBbFIMA0GCSqGSIb3DQEBCwUAMB0xGzAZBgNVBAMMEndl
Yi1wbGF0Zm9ybS10ZXN0czAeFw0xOTEwMTQxMzQ5MjlaFw0yOTEwMTExMzQ5Mjla
MBwxGjAYBgNVBAMMEXdlYi1wbGF0Zm9ybS50ZXN0MIIBIjANBgkqhkiG9w0BAQEF
AAOCAQ8AMIIBCgKCAQEAqcRWQ5544Bqz49joq7YaDK4Q14YENDLqRJXCBt2bRPTz
QKk9tGLK+3GIINb0HcpUqNWit2XAW7X7kPGH2u/qOk4k3CohJk1gd+KyT8dbd+6y
c+51gtCYyDgK7aUiACPMiF5ALcOU5x3C+QAAu2pZYlTMhdeVFcXXk1IJr8OSFBs3
0V/R1FYQhb8bbEvhkzqAyxxamBh+EHOrIHThLc1D7kUudcyk8GhuEKKQin5L49zC
2dff5NGiT4m7yzQAqZDJTxWGWXpL7flrAQFI7YsVzPH/WKJ9l1fRezF7w7GmVIHm
7mLe6sWhtMRjXs/K4iyIUAfMBkiCdfGYslTetqvf2wIDAQABo4IB5DCCAeAwCQYD
VR0TBAIwADAdBgNVHQ4EFgQU9+7KIDcPvM/zt9wSdtHRykBnOm0wHwYDVR0jBBgw
FoAUeupqdaojeLVeBmFKVs9WqW2wVAIwCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG
CCsGAQUFBwMBMIIBbwYDVR0RBIIBZjCCAWKCEXdlYi1wbGF0Zm9ybS50ZXN0ghVu
AAOCAQ8AMIIBCgKCAQEAq2V1V5jj5aqP/tsY9eT4HGRhxqP26H4kEN4JeiS9VV9R
qbWCDYU6trFIXzfLQm/nB8s2qTvaFJsKsKeVKe7SeCKe7hNf8MEsVXLwmsBufzze
Yg+x9sLJhKaR1znNy5dPOf4M3rPtfjZ/qgEZqdWxf746ZQ+lXR9qwVt7CdwwKAWq
F5QDH3kQBQ6WqmvvZcTKzOVpFB53UPrhDOpGcnr4cqdNlwz9Ly8DQrTyxgdHpgAH
wu8acERlRkrRLFIX/5nPcjTWioKgSiNJ6KFZ7lN0RnShz9fL3I7QUldJWII34PWt
OzgbtYYEH34aH4tgcnX2gqQQDMxYZbtbsrOmoVZCaQIDAQABo4IJ+jCCCfYwCQYD
VR0TBAIwADAdBgNVHQ4EFgQUKhgLCSJuKNLb/cItQKbzOGJux8UwHwYDVR0jBBgw
FoAUQUn/jGZQX4ehBqi7q4rdcw0ONxowCwYDVR0PBAQDAgXgMBMGA1UdJQQMMAoG
CCsGAQUFBwMBMIIJhQYDVR0RBIIJfDCCCXiCEXdlYi1wbGF0Zm9ybS50ZXN0ghVu
b3Qtd2ViLXBsYXRmb3JtLnRlc3SCFXd3dy53ZWItcGxhdGZvcm0udGVzdIIWd3d3
MS53ZWItcGxhdGZvcm0udGVzdIIWd3d3Mi53ZWItcGxhdGZvcm0udGVzdIIZd3d3
Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIad3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3SCGnd3dzEubm90LXdlYi1wbGF0Zm9ybS50ZXN0gh54bi0tbHZlLTZsYWQud2Vi
LXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3SCKXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gi14
bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3QwDQYJ
KoZIhvcNAQELBQADggEBAGPJWKg4tR8tQZ8Go1C8pNr16cYFZA7Wfu4xjYEAwZD9
cU08kkR/xba+/o3AhZAEXCAIiEeMtg20HyKoEKnnDZ2geUQL8zp35uKJ+aTu3Ols
bCwcb8b74yw2o3KJTsKcUSPMry+dZ4LSWer//e98vMj/pxlDZOZfgijJ3o6X5kLg
ynTmyODTarwEyrtT8GSxMZiv4bhrfQyts+ApABtQrzCz+tTTDkVLEg1a6hHNKb4y
6k9PfFh94jM3uc4PlABtFuSRb+ZMR6fNt/GrhmjibsXpYLcksaob9vXOpAO/7SCS
qfetV2Hv2Jq238svTTurj3HE8oeTJUiJxZzI2EbFXqw=
Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIZd3d3Lnd3dy53ZWItcGxhdGZvcm0udGVz
dIIad3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEubm90LXdlYi1wbGF0
Zm9ybS50ZXN0ghp3d3cud3d3Mi53ZWItcGxhdGZvcm0udGVzdIIad3d3Mi53d3cu
d2ViLXBsYXRmb3JtLnRlc3SCGnd3dzEud3d3LndlYi1wbGF0Zm9ybS50ZXN0ghp3
d3cud3d3MS53ZWItcGxhdGZvcm0udGVzdIIbd3d3MS53d3cxLndlYi1wbGF0Zm9y
bS50ZXN0ght3d3cxLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCG3d3dzIud3d3Mi53
ZWItcGxhdGZvcm0udGVzdIIbd3d3Mi53d3cxLndlYi1wbGF0Zm9ybS50ZXN0gh13
d3cud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzIubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gh53d3cxLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCHnhu
LS1sdmUtNmxhZC53ZWItcGxhdGZvcm0udGVzdIIed3d3Lnd3dzEubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gh53d3cyLnd3dy5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3
dzIud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCH3d3dzIud3d3MS5ub3Qtd2Vi
LXBsYXRmb3JtLnRlc3SCH3d3dzEud3d3MS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SC
H3d3dzEud3d3Mi5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCInhuLS1sdmUtNmxhZC53
d3cud2ViLXBsYXRmb3JtLnRlc3SCInd3dy54bi0tbHZlLTZsYWQud2ViLXBsYXRm
b3JtLnRlc3SCInhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCI3hu
LS1sdmUtNmxhZC53d3cxLndlYi1wbGF0Zm9ybS50ZXN0giN3d3cyLnhuLS1sdmUt
NmxhZC53ZWItcGxhdGZvcm0udGVzdIIjd3d3MS54bi0tbHZlLTZsYWQud2ViLXBs
YXRmb3JtLnRlc3SCI3huLS1sdmUtNmxhZC53d3cyLndlYi1wbGF0Zm9ybS50ZXN0
giZ4bi0tbHZlLTZsYWQud3d3Lm5vdC13ZWItcGxhdGZvcm0udGVzdIImd3d3Lnhu
LS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53
d3cxLm5vdC13ZWItcGxhdGZvcm0udGVzdIInd3d3Mi54bi0tbHZlLTZsYWQubm90
LXdlYi1wbGF0Zm9ybS50ZXN0gid3d3cxLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBs
YXRmb3JtLnRlc3SCJ3huLS1sdmUtNmxhZC53d3cyLm5vdC13ZWItcGxhdGZvcm0u
dGVzdIIpeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SC
K3huLS1sdmUtNmxhZC54bi0tbHZlLTZsYWQud2ViLXBsYXRmb3JtLnRlc3SCLXhu
LS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0udGVzdIIteG4t
LW44ajZkczUzbHd3a3JxaHYyOGEud3d3LndlYi1wbGF0Zm9ybS50ZXN0gi13d3cu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzEu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u
OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEud2ViLXBsYXRmb3JtLnRlc3SCLnd3dzIu
eG4tLW44ajZkczUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCLnhuLS1u
OGo2ZHM1M2x3d2tycWh2MjhhLnd3dzIud2ViLXBsYXRmb3JtLnRlc3SCL3huLS1s
dmUtNmxhZC54bi0tbHZlLTZsYWQubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF4bi0t
bjhqNmRzNTNsd3drcnFodjI4YS53d3cubm90LXdlYi1wbGF0Zm9ybS50ZXN0gjF3
d3cueG4tLW44ajZkczUzbHd3a3JxaHYyOGEubm90LXdlYi1wbGF0Zm9ybS50ZXN0
gjJ3d3cxLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13ZWItcGxhdGZvcm0u
dGVzdIIyeG4tLW44ajZkczUzbHd3a3JxaHYyOGEud3d3Mi5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3SCMnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnd3dzEubm90LXdlYi1w
bGF0Zm9ybS50ZXN0gjJ3d3cyLnhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLm5vdC13
ZWItcGxhdGZvcm0udGVzdII2eG4tLW44ajZkczUzbHd3a3JxaHYyOGEueG4tLWx2
ZS02bGFkLndlYi1wbGF0Zm9ybS50ZXN0gjZ4bi0tbHZlLTZsYWQueG4tLW44ajZk
czUzbHd3a3JxaHYyOGEud2ViLXBsYXRmb3JtLnRlc3SCOnhuLS1sdmUtNmxhZC54
bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRlc3SCOnhu
LS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1sdmUtNmxhZC5ub3Qtd2ViLXBsYXRm
b3JtLnRlc3SCQXhuLS1uOGo2ZHM1M2x3d2tycWh2MjhhLnhuLS1uOGo2ZHM1M2x3
d2tycWh2MjhhLndlYi1wbGF0Zm9ybS50ZXN0gkV4bi0tbjhqNmRzNTNsd3drcnFo
djI4YS54bi0tbjhqNmRzNTNsd3drcnFodjI4YS5ub3Qtd2ViLXBsYXRmb3JtLnRl
c3QwDQYJKoZIhvcNAQELBQADggEBAK/C6sxqXkng23IUBTwhoIv/tqlxgvdhzSMq
AGaRrAGZYzgRIYWyV5ILP3lo9dhZi6d0GesL5z2GTmbU5i//7Wx9ml4STr85//fQ
+1JToPuxXJqRkjYA2KRv+Zw2IbLCXhQRylXniDBgjYbaZSb/4kU2Kgk9pLs4YU1X
5Mm2UDwGL2u/BDRCVNxTtmHFTkAA1l4ZFzpULMUWem1KcFZFzZlaKtGnTjWXPdjJ
lYCrFUKG9qCmwyHBmgc0Sa1hPLyUsi2S90SAAV8nvYP1USI5zZixOSO49FwIIJ7+
8S2a6ZvHXrgzixZ3Uj3JekOeJdDHWpYIUxrcdVN1RGIYfO/7c1I=
-----END CERTIFICATE-----

View file

@ -41,6 +41,7 @@ import os
import re
import subprocess
import sys
import tempfile
try:
from urllib2 import urlopen
except ImportError:
@ -149,20 +150,35 @@ def install_webkitgtk_from_apt_repository(channel):
# Configure webkitgtk.org/debian repository for $channel and pin it with maximum priority
run(["sudo", "apt-key", "adv", "--fetch-keys", "https://webkitgtk.org/debian/apt.key"])
with open("/tmp/webkitgtk.list", "w") as f:
f.write("deb [arch=amd64] https://webkitgtk.org/debian buster-wpt-webkit-updates %s\n" % channel)
f.write("deb [arch=amd64] https://webkitgtk.org/apt bionic-wpt-webkit-updates %s\n" % channel)
run(["sudo", "mv", "/tmp/webkitgtk.list", "/etc/apt/sources.list.d/"])
with open("/tmp/99webkitgtk", "w") as f:
f.write("Package: *\nPin: origin webkitgtk.org\nPin-Priority: 1999\n")
run(["sudo", "mv", "/tmp/99webkitgtk", "/etc/apt/preferences.d/"])
# Install webkit2gtk from the webkitgtk.org/debian repository for $channel
# Install webkit2gtk from the webkitgtk.org/apt repository for $channel
run(["sudo", "apt-get", "-qqy", "update"])
run(["sudo", "apt-get", "-qqy", "upgrade"])
run(["sudo", "apt-get", "-qqy", "-t", "buster-wpt-webkit-updates", "install", "webkit2gtk-driver"])
run(["sudo", "apt-get", "-qqy", "-t", "bionic-wpt-webkit-updates", "install", "webkit2gtk-driver"])
def install_webkitgtk_from_tarball_bundle(channel):
with tempfile.NamedTemporaryFile(suffix=".tar.xz") as temp_tarball:
resp = urlopen("https://webkitgtk.org/built-products/nightly/webkitgtk-nightly-build-last.tar.xz")
while True:
chunk = resp.read(16*1024)
if not chunk:
break
temp_tarball.write(chunk)
temp_tarball.flush()
run(["sudo", "tar", "xfa", temp_tarball.name, "-C", "/"])
# Install dependencies
run(["sudo", "apt-get", "-qqy", "update"])
run(["sudo", "/opt/webkitgtk/nightly/install-dependencies"])
def install_webkitgtk(channel):
if channel in ("experimental", "dev", "nightly"):
raise NotImplementedError("Still can't install from release channel: %s" % channel)
install_webkitgtk_from_tarball_bundle(channel)
elif channel in ("beta", "stable"):
install_webkitgtk_from_apt_repository(channel)
else:

Some files were not shown because too many files have changed in this diff Show more