| Differences between
and this patch
- a/LayoutTests/imported/w3c/ChangeLog +35 lines
Lines 1-3 a/LayoutTests/imported/w3c/ChangeLog_sec1
1
2019-01-28  cathie chen  <cathiechen@igalia.com>
2
3
        Import Resize Observer test cases from WPTs
4
        https://bugs.webkit.org/show_bug.cgi?id=193821
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        * resources/import-expectations.json:
9
        * web-platform-tests/resize-observer/META.yml: Added.
10
        * web-platform-tests/resize-observer/eventloop-expected.txt: Added.
11
        * web-platform-tests/resize-observer/eventloop.html: Added.
12
        * web-platform-tests/resize-observer/idlharness.window-expected.txt: Added.
13
        * web-platform-tests/resize-observer/idlharness.window.html: Added.
14
        * web-platform-tests/resize-observer/idlharness.window.js: Added.
15
        * web-platform-tests/resize-observer/notify-expected.txt: Added.
16
        * web-platform-tests/resize-observer/notify.html: Added.
17
        * web-platform-tests/resize-observer/observe-expected.txt: Added.
18
        * web-platform-tests/resize-observer/observe.html: Added.
19
        * web-platform-tests/resize-observer/resources/iframe.html: Added.
20
        * web-platform-tests/resize-observer/resources/resizeTestHelper.js: Added.
21
        (ResizeTestHelper):
22
        (ResizeTestHelper.prototype.get _currentStep):
23
        (ResizeTestHelper.prototype._nextStep):
24
        (ResizeTestHelper.prototype._handleNotification):
25
        (ResizeTestHelper.prototype._handleTimeout):
26
        (ResizeTestHelper.prototype._done):
27
        (ResizeTestHelper.prototype.start):
28
        (ResizeTestHelper.prototype.get rafCount):
29
        (ResizeTestHelper.prototype._incrementRaf):
30
        (ResizeTestHelper.prototype.startCountingRaf):
31
        * web-platform-tests/resize-observer/resources/w3c-import.log: Added.
32
        * web-platform-tests/resize-observer/svg-expected.txt: Added.
33
        * web-platform-tests/resize-observer/svg.html: Added.
34
        * web-platform-tests/resize-observer/w3c-import.log: Added.
35
1
2019-01-24  Charles Vazac  <cvazac@akamai.com>
36
2019-01-24  Charles Vazac  <cvazac@akamai.com>
2
37
3
        Implement PerformanceObserver.supportedEntryTypes
38
        Implement PerformanceObserver.supportedEntryTypes
- a/LayoutTests/imported/w3c/resources/import-expectations.json +1 lines
Lines 296-301 a/LayoutTests/imported/w3c/resources/import-expectations.json_sec1
296
    "web-platform-tests/remote-playback": "skip", 
296
    "web-platform-tests/remote-playback": "skip", 
297
    "web-platform-tests/requestidlecallback": "skip", 
297
    "web-platform-tests/requestidlecallback": "skip", 
298
    "web-platform-tests/resize-observer": "skip", 
298
    "web-platform-tests/resize-observer": "skip", 
299
    "web-platform-tests/resize-observer/": "import", 
299
    "web-platform-tests/resource-timing": "import", 
300
    "web-platform-tests/resource-timing": "import", 
300
    "web-platform-tests/resources": "import", 
301
    "web-platform-tests/resources": "import", 
301
    "web-platform-tests/screen-orientation": "skip", 
302
    "web-platform-tests/screen-orientation": "skip", 
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/META.yml +4 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/META.yml_sec1
1
spec: https://wicg.github.io/ResizeObserver/
2
suggested_reviewers:
3
  - atotic
4
  - dholbert
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/eventloop-expected.txt +7 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/eventloop-expected.txt_sec1
1
CONSOLE MESSAGE: line 50: ReferenceError: Can't find variable: ResizeObserver
2
ResizeObserver notification event loop tests
3
4
t1
5
6
FAIL ResizeObserver implemented assert_own_property: expected property "ResizeObserver" missing
7
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/eventloop.html +259 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/eventloop.html_sec1
1
<!doctype html>
2
<script src="/resources/testharness.js"></script>
3
<script src="/resources/testharnessreport.js"></script>
4
<script src="./resources/resizeTestHelper.js"></script>
5
<style>
6
  div {
7
    border: 1px dotted gray
8
  }
9
</style>
10
<p>ResizeObserver notification event loop tests</p>
11
<div id="target1" style="width:100px;height:100px;">t1
12
</div>
13
<div id="container">
14
  <div id="a1" style="width:100px;height:100px">
15
    <div id="a2" style="width:100px;height:100px">
16
    </div>
17
  </div>
18
  <div id="b1" style="width:100px;height:100px">
19
    <div id="b2" style="width:100px;height:100px">
20
    </div>
21
  </div>
22
</div>
23
<script>
24
'use strict';
25
26
let t1 = document.querySelector('#target1');
27
28
// allow uncaught exception because ResizeObserver posts exceptions
29
// to window error handler when limit is exceeded.
30
// This codepath is tested in this file.
31
32
setup({allow_uncaught_exception: true});
33
34
function template() {
35
  let helper = new ResizeTestHelper(
36
    "test0: title",
37
  [
38
    {
39
      setup: observer => {
40
      },
41
      notify: (entries, observer) => {
42
        return true;  // Delay next step
43
      }
44
    }
45
  ]);
46
  return helper.start();
47
}
48
49
var onErrorCalled = false;
50
51
window.onerror = err => {
52
  onErrorCalled = true;
53
}
54
55
function test0() {
56
57
  let divs = [t1];
58
  let rAF = 0;
59
  let helper = new ResizeTestHelper(
60
    "test0: multiple notifications inside same event loop",
61
  [
62
    {
63
      setup: observer => {
64
        onErrorCalled = false;
65
        let t2 = document.createElement('div');
66
        let t3 = document.createElement('div');
67
        t2.appendChild(t3);
68
        t1.appendChild(t2);
69
        divs.push(t2);
70
        divs.push(t3);
71
        observer.observe(t1);
72
        observer.observe(t2);
73
        observer.observe(t3);
74
      },
75
      notify: (entries, observer) => {
76
        assert_equals(entries.length, 3, "3 notifications");
77
      }
78
    },
79
    {
80
      setup: observer => {
81
        helper.startCountingRaf();
82
        divs.forEach( el => { el.style.width = "101px";});
83
      },
84
      notify: (entries, observer) => {
85
        // t1 is not delivered
86
        assert_equals(entries.length, 2, "2 notifications");
87
        assert_equals(helper.rafCount, 0, "still in same loop");
88
      }
89
    },
90
    {
91
      setup: observer => {
92
        divs.forEach( el => { el.style.width = "102px";});
93
      },
94
      notify: (entries, observer) => {
95
        assert_equals(entries.length, 1, "1 notifications");
96
        assert_equals(helper.rafCount, 0, "same loop");
97
      }
98
    },
99
    { // t1 and t2 get notified
100
      setup: observer => {
101
      },
102
      notify: (entries, observer) => {
103
        assert_equals(entries.length, 2, "2 notifications");
104
        assert_equals(helper.rafCount, 1, "new loop");
105
        assert_equals(onErrorCalled, true, "error was fired");
106
        observer.disconnect();
107
        while (t1.childNodes.length > 0)
108
          t1.removeChild(t1.childNodes[0]);
109
      }
110
    }
111
  ]);
112
  return helper.start();
113
}
114
115
function test1() {
116
117
  var resizers = [t1];
118
  // Testing depths of shadow roots
119
  // DOM: t1 <- t2 <- t3 <-shadow- t4 <- t5
120
  let helper = new ResizeTestHelper(
121
    "test1: depths of shadow roots",
122
  [
123
    {
124
      setup: observer => {
125
        onErrorCalled = false;
126
        let t2 = document.createElement('div');
127
        t1.appendChild(t2);
128
        resizers.push(t2);
129
        let t3 = document.createElement('div');
130
        resizers.push(t3);
131
        t2.appendChild(t3);
132
        let shadow = t3.attachShadow({ mode: "open" });
133
        let t4 = document.createElement('div');
134
        resizers.push(t4);
135
        shadow.appendChild(t4);
136
        let t5 = document.createElement('div');
137
        resizers.push(t5);
138
        t4.appendChild(t5);
139
        resizers.forEach( el => observer.observe(el) );
140
      },
141
      notify: (entries, observer) => {
142
        assert_equals(entries.length, 5, "all entries resized");
143
      }
144
    },
145
    {
146
      setup: observer => {
147
        resizers.forEach( el => el.style.width = "111px" );
148
      },
149
      notify: (entries, observer) => {
150
        assert_equals(entries.length, 4, "depth limited");
151
      }
152
    },
153
    {
154
      setup: observer => {
155
        resizers.forEach( el => el.style.width = "112px" );
156
      },
157
      notify: (entries, observer) => {
158
        assert_equals(entries.length, 3, "depth limited");
159
      }
160
    },
161
    {
162
      setup: observer => {
163
        resizers.forEach( el => el.style.width = "113px" );
164
      },
165
      notify: (entries, observer) => {
166
        assert_equals(entries.length, 2, "depth limited");
167
      }
168
    },
169
    {
170
      setup: observer => {
171
        resizers.forEach( el => el.style.width = "114px" );
172
      },
173
      notify: (entries, observer) => {
174
        assert_equals(entries.length, 1, "depth limited");
175
      }
176
    },
177
    {
178
      setup: observer => {
179
      },
180
      notify: (entries, observer) => {
181
        assert_equals(entries.length, 4, "limit notifications");
182
        assert_equals(onErrorCalled, true, "breached limit");
183
        observer.disconnect();
184
        t1.removeChild(t1.firstChild);
185
      }
186
    },
187
  ]);
188
  return helper.start();
189
}
190
191
function test2() {
192
  let container = document.querySelector('#container');
193
  let a1 = document.querySelector('#a1');
194
  let a2 = document.querySelector('#a2');
195
  let b1 = document.querySelector('#b1');
196
  let b2 = document.querySelector('#b2');
197
  let targets = [a1, a2, b1, b2];
198
199
  let helper = new ResizeTestHelper(
200
    "test2: move target in dom while inside event loop",
201
  [
202
    {
203
      setup: observer => {
204
        for (let t of targets)
205
          observer.observe(t);
206
      },
207
      notify: (entries, observer) => {
208
        return true;  // delay next observation
209
      }
210
    },
211
    { // resize them all
212
      setup: observer => {
213
        for (let t of targets)
214
          t.style.width = "110px";
215
      },
216
      notify: (entries, observer) => {
217
        assert_equals(entries.length, targets.length, "all targets observed");
218
      }
219
    },
220
    { // resize all, move dom upwards
221
      setup: observer => {
222
        for (let t of targets)
223
          t.style.width = "130px";
224
        container.appendChild(b2);
225
      },
226
      notify: (entries, observer) => {
227
        assert_equals(entries.length, 1, "b2 moved upwards");
228
        assert_equals(entries[0].target, a2);
229
      }
230
    },
231
    { // resize all, move dom downwards
232
      setup: observer => {
233
        for (let t of targets)
234
          t.style.width = "130px";
235
        a2.appendChild(b2);
236
      },
237
      notify: (entries, observer) => {
238
        assert_equals(entries.length, 1, "b2 moved downwards");
239
        assert_equals(entries[0].target, b2);
240
        a1.appendChild(a2);
241
      }
242
    },
243
  ]);
244
  return helper.start();
245
}
246
247
let guard;
248
test(_ => {
249
  assert_own_property(window, "ResizeObserver");
250
  guard = async_test('guard');
251
}, "ResizeObserver implemented")
252
253
test0()
254
  .then(() => { return test1(); })
255
  .then(() => { return test2(); })
256
  .then(() => { guard.done(); });
257
258
</script>
259
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window-expected.txt +30 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window-expected.txt_sec1
1
2
FAIL idl_test setup promise_test: Unhandled rejection with value: object "Got an error before parsing any named definition: Unrecognised tokens, line 1 (tokens: "{\"error\": {\"message\"")
3
[
4
    {
5
        "type": "{",
6
        "value": "{",
7
        "trivia": ""
8
    },
9
    {
10
        "type": "string",
11
        "value": "\"error\"",
12
        "trivia": ""
13
    },
14
    {
15
        "type": ":",
16
        "value": ":",
17
        "trivia": ""
18
    },
19
    {
20
        "type": "{",
21
        "value": "{",
22
        "trivia": " "
23
    },
24
    {
25
        "type": "string",
26
        "value": "\"message\"",
27
        "trivia": ""
28
    }
29
]"
30
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window.html +1 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window.html_sec1
1
<!-- This file is required for WebKit test infrastructure to run the templated test -->
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window.js +37 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window.js_sec1
1
// META: script=/resources/WebIDLParser.js
2
// META: script=/resources/idlharness.js
3
// META: script=resources/resizeTestHelper.js
4
5
'use strict';
6
7
// https://wicg.github.io/ResizeObserver/
8
9
idl_test(
10
  ['ResizeObserver'],
11
  ['dom', 'geometry'],
12
  async idl_array => {
13
    idl_array.add_objects({
14
      ResizeObserver: ['observer'],
15
      ResizeObserverEntry: ['entry'],
16
    });
17
18
    const div = document.createElement('div');
19
    document.body.appendChild(div);
20
    let helper = new ResizeTestHelper(
21
      "ResizeObserverEntry creator",
22
      [
23
        {
24
          setup: observer => {
25
            self.observer = observer;
26
            observer.observe(div);
27
            div.style.width = "5px";
28
          },
29
          notify: entries => {
30
            self.entry = entries[0];
31
            assert_equals(entries[0].contentRect.width, 5, "target width");
32
          }
33
        }
34
      ]);
35
    await helper.start();
36
  }
37
);
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/notify-expected.txt +11 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/notify-expected.txt_sec1
1
CONSOLE MESSAGE: line 50: ReferenceError: Can't find variable: ResizeObserver
2
ResizeObserver tests
3
4
t1
5
t2
6
t3 inline
7
8
Harness Error (FAIL), message = ReferenceError: Can't find variable: ResizeObserver
9
10
FAIL ResizeObserver implemented assert_own_property: expected property "ResizeObserver" missing
11
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/notify.html +351 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/notify.html_sec1
1
<!doctype html>
2
<script src="/resources/testharness.js"></script>
3
<script src="/resources/testharnessreport.js"></script>
4
<script src="./resources/resizeTestHelper.js"></script>
5
<style>
6
  div {
7
    border: 1px dotted gray
8
  }
9
  .transform {
10
    transform: scale(2,2) rotate(90deg)
11
  }
12
</style>
13
<p>ResizeObserver tests</p>
14
<div id="target1" style="width:100px;height:100px;">t1
15
  <div id="target2" style="width:100px;height:100px;">t2
16
    <div id="target3" style="width:100px;height:100px;">t3
17
      <span id="inline">inline</span>
18
    </div>
19
  </div>
20
</div>
21
<div id="absolute" style="width:100.5px;height:100.5px;position:absolute;top:10.3px;left:10.3px"></div>
22
<script>
23
'use strict';
24
25
let t1 = document.querySelector('#target1');
26
let t2 = document.querySelector('#target2');
27
let t3 = document.querySelector('#target3');
28
let abs = document.querySelector('#absolute');
29
let inline = document.querySelector('#inline');
30
31
function test0() {
32
  let helper = new ResizeTestHelper(
33
    "test0: notification ordering",
34
  [
35
    {
36
      setup: observer => {
37
        observer.observe(t3);
38
        observer.observe(t2);
39
        observer.observe(t1);
40
        t1.style.width = "5px";
41
        t3.style.width = "5px";
42
        t2.style.width = "5px";
43
      },
44
      notify: (entries, observer) => {
45
        assert_equals(entries.length, 3, "3 resizes");
46
        assert_equals(entries[0].target, t3, "ordering");
47
        assert_equals(entries[1].target, t2, "ordering");
48
        assert_equals(entries[2].target, t1, "ordering");
49
        observer.disconnect();
50
        t1.style.width = "100px";
51
        t2.style.width = "100px";
52
        t3.style.width = "100px";
53
      }
54
    }
55
  ]);
56
  return helper.start();
57
}
58
59
function test1() {
60
  let helper = new ResizeTestHelper(
61
    "test1: display:none triggers notification",
62
  [
63
    {
64
      setup: observer => {
65
        observer.observe(t1);
66
      },
67
      notify: (entries, observer) => {
68
        return true;  // Delay next step
69
      }
70
    },
71
    {
72
      setup: observer => {
73
        t1.style.display = "none";
74
      },
75
      notify: (entries, observer) => {
76
        t1.style.display = "";
77
      }
78
    }
79
  ]);
80
  return helper.start();
81
}
82
83
84
function test2() {
85
  let helper = new ResizeTestHelper(
86
    "test2: remove/appendChild trigger notification",
87
  [
88
    {
89
      setup: observer => {
90
        observer.observe(t1);
91
      },
92
      notify: (entries, observer) => {
93
        return true;  // Delay next step
94
      }
95
    },
96
    { // "removeChild triggers notification"
97
      setup: observer => {
98
        t1.parentNode.removeChild(t1);
99
      },
100
      notify: (entries, observer) => {
101
        assert_equals(entries[0].target, t1);
102
        return true;  // Delay next step
103
      }
104
    },
105
    { // "appendChild triggers notification",
106
      setup: observer => {
107
        document.body.appendChild(t1);
108
      },
109
      notify: (entries, observer) => {
110
        assert_equals(entries[0].target, t1)
111
      }
112
    }
113
  ]);
114
  return helper.start();
115
}
116
117
118
function test3() {
119
  let helper = new ResizeTestHelper(
120
    "test3: dimensions match",
121
  [
122
    {
123
      setup: observer => {
124
        observer.observe(t1);
125
        t1.style.width = "200.5px";
126
        t1.style.height = "100px";
127
        t1.style.paddingLeft = "20px";
128
        t1.style.paddingTop = "10px";
129
      },
130
      notify: (entries, observer) => {
131
        assert_equals(entries[0].contentRect.left,20);
132
        assert_equals(entries[0].contentRect.top,10);
133
        assert_between_inclusive(entries[0].contentRect.width, 200.4, 200.6, "width is not rounded");
134
        assert_equals(entries[0].contentRect.height, 100);
135
      }
136
    }
137
  ]);
138
  return helper.start();
139
}
140
141
function test4() {
142
  let helper = new ResizeTestHelper(
143
    "test4: transform do not cause notifications",
144
  [
145
    {
146
      setup: observer => {
147
        observer.observe(t2);
148
      },
149
      notify: (entries, observer) => {
150
        return true; // Delay next step
151
      }
152
    },
153
    {
154
      setup: observer => {
155
        t2.classList.add("transform");
156
      },
157
      notify: (entries, observer) => {
158
        assert_unreached("transform must not trigger notifications");
159
      },
160
      timeout: () => {
161
        t2.classList.remove("transform");
162
      }
163
    }
164
  ]);
165
  return helper.start();
166
}
167
168
function test5() {
169
  let helper = new ResizeTestHelper(
170
    "test5: moving an element does not trigger notifications",
171
  [
172
    {
173
      setup: observer => {
174
        observer.observe(abs);
175
      },
176
      notify: (entries, observer) => {
177
        return true; // Delay next step
178
      }
179
    },
180
    {
181
      setup: observer => {
182
        abs.style.top = "20.33px";
183
        abs.style.left = "20.33px";
184
      },
185
      notify: (entries, observer) => {
186
        assert_unreached("movement should not cause resize notifications");
187
      },
188
      timeout: () => {
189
      }
190
    }
191
  ]);
192
  return helper.start();
193
}
194
195
function test6() {
196
  let helper = new ResizeTestHelper(
197
    "test6: inline element does not notify",
198
  [
199
    {
200
      setup: observer => {
201
        observer.observe(inline);
202
        observer.observe(t1);
203
        t1.style.width = "66px";
204
        inline.style.width = "66px";
205
      },
206
      notify: (entries, observer) => {
207
        assert_equals(entries.length, 1, "inline elements must not trigger notifications");
208
        assert_equals(entries[0].target, t1, "inline elements must not trigger notifications");
209
        return true; // Delay next step
210
      }
211
    },
212
    { // "inline element that becomes block should notify",
213
      setup: observer => {
214
        inline.style.display = "block";
215
      },
216
      notify: (entries, observer) => {
217
        assert_equals(entries[0].target, inline);
218
      }
219
    }
220
  ]);
221
  return helper.start();
222
}
223
224
function test7() {
225
  let helper = new ResizeTestHelper(
226
    "test7: unobserve inside notify callback",
227
  [
228
    {
229
      setup: observer => {
230
        observer.observe(t1);
231
        observer.observe(t2);
232
      },
233
      notify: (entries, observer) => {
234
        t1.style.width = "777px";
235
        t2.style.width = "777px";
236
        observer.unobserve(t1);
237
        return true;  // Delay next step
238
      }
239
    },
240
    {
241
      setup: observer => {
242
      },
243
      notify: (entries, observer) => {
244
        assert_equals(entries.length, 1, "only t2 is observed");
245
        assert_equals(entries[0].target, t2, "only t2 is observed");
246
      }
247
    }
248
  ]);
249
  return helper.start();
250
}
251
252
function test8() {
253
  let helper = new ResizeTestHelper(
254
    "test8: observe inside notify callback",
255
  [
256
    {
257
      setup: observer => {
258
        observer.observe(t1);
259
      },
260
      notify: (entries, observer) => {
261
        observer.observe(t2);
262
        t2.style.width = "888px";
263
        return true;  // Delay next step
264
      }
265
    },
266
    {
267
      setup: observer => {
268
      },
269
      notify: (entries, observer) => {
270
        assert_equals(entries.length, 1, "only t2 is observed");
271
        assert_equals(entries[0].target, t2, "only t2 is observed");
272
      }
273
    }
274
  ]);
275
  return helper.start();
276
}
277
278
function test9() {
279
  let helper = new ResizeTestHelper(
280
    "test9: disconnect inside notify callback",
281
  [
282
    {
283
      setup: observer => {
284
        observer.observe(t1);
285
      },
286
      notify: (entries, observer) => {
287
        t1.style.width = "999px";
288
        observer.disconnect();
289
        return true;  // Delay next step
290
      }
291
    },
292
    {
293
      setup: observer => {
294
      },
295
      notify: (entries, observer) => {
296
        assert_unreached("there should be no notifications after disconnect");
297
      },
298
      timeout: () => {
299
      }
300
    }
301
  ]);
302
  return helper.start();
303
}
304
305
function test10() {
306
  var parent = t1.parentNode;
307
  let helper = new ResizeTestHelper(
308
    "test10: element notifies when parent removed",
309
  [
310
    {
311
      setup: observer => {
312
        observer.observe(t3);
313
      },
314
      notify: (entries, observer) => {
315
        return true;  // Delay next step
316
      }
317
    },
318
    {
319
      setup: observer => {
320
        t1.parentNode.removeChild(t1);
321
      },
322
      notify: (entries, observer) => {
323
        assert_equals(entries.length, 1);
324
        assert_equals(entries[0].target, t3);
325
        parent.appendChild(t1);
326
      }
327
    }
328
  ]);
329
  return helper.start();
330
}
331
332
let guard;
333
test(_ => {
334
  assert_own_property(window, "ResizeObserver");
335
  guard = async_test('guard');
336
}, "ResizeObserver implemented")
337
338
test0()
339
  .then(() => { return test1(); })
340
  .then(() => { return test2(); })
341
  .then(() => { return test3(); })
342
  .then(() => { return test4(); })
343
  .then(() => { return test5(); })
344
  .then(() => { return test6(); })
345
  .then(() => { return test7(); })
346
  .then(() => { return test8(); })
347
  .then(() => { return test9(); })
348
  .then(() => { return test10(); })
349
  .then(() => { guard.done(); });
350
351
</script>
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/observe-expected.txt +9 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/observe-expected.txt_sec1
1
CONSOLE MESSAGE: line 50: ReferenceError: Can't find variable: ResizeObserver
2
ResizeObserver tests
3
4
t1
5
t2
6
 
7
8
FAIL ResizeObserver implemented assert_own_property: expected property "ResizeObserver" missing
9
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/observe.html +207 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/observe.html_sec1
1
<!doctype html>
2
<script src="/resources/testharness.js"></script>
3
<script src="/resources/testharnessreport.js"></script>
4
<script src="./resources/resizeTestHelper.js"></script>
5
<p>ResizeObserver tests</p>
6
<div id="target1" style="width:100px;height:100px;">t1</div>
7
<div id="target2" style="width:100px;height:100px;">t2</div>
8
<img id="target3" style="width:100px;height:100px;">
9
<iframe src="./resources/iframe.html" width="300px" height="100px" style="display:block"></iframe>
10
<script>
11
'use strict';
12
13
let t1 = document.querySelector('#target1');
14
let t2 = document.querySelector('#target2');
15
16
// allow uncaught exception because ResizeObserver posts exceptions
17
// to window error handler when limit is exceeded.
18
setup({allow_uncaught_exception: true});
19
20
function test0() {
21
  let helper = new ResizeTestHelper(
22
    "test0: simple observation",
23
  [
24
    {
25
      setup: observer => {
26
        observer.observe(t1);
27
        t1.style.width = "5px";
28
      },
29
      notify: entries => {
30
        assert_equals(entries.length, 1, "1 pending notification");
31
        assert_equals(entries[0].target, t1, "target is t1");
32
        assert_equals(entries[0].contentRect.width, 5, "target width");
33
      }
34
    }
35
  ]);
36
  return helper.start();
37
}
38
39
function test1() {
40
  let helper = new ResizeTestHelper(
41
    "test1: multiple observation on same element trigger only one",
42
  [
43
    {
44
      setup: observer => {
45
        observer.observe(t1);
46
        observer.observe(t1);
47
        t1.style.width = "10px";
48
      },
49
      notify: entries => {
50
        assert_equals(entries.length, 1, "1 pending notification");
51
      }
52
    }
53
  ]);
54
  return helper.start();
55
}
56
57
function test2() {
58
  test(() => {
59
      assert_throws({name: "TypeError"}, _=> {
60
        let ro = new ResizeObserver(() => {});
61
        ro.observe({});
62
      });
63
    },
64
    "test2: throw exception when observing non-element"
65
  );
66
  return Promise.resolve();
67
}
68
69
function test3() {
70
  let helper = new ResizeTestHelper(
71
    "test3: disconnect stops all notifications", [
72
    {
73
      setup: observer => {
74
        observer.observe(t1);
75
        observer.observe(t2);
76
        observer.disconnect();
77
        t1.style.width = "30px";
78
      },
79
      notify: entries => {
80
         assert_unreached("no entries should be observed");
81
      },
82
      timeout: () => {
83
        // expected
84
      }
85
    }
86
  ]);
87
  return helper.start();
88
}
89
90
function test4() {
91
  let helper = new ResizeTestHelper(
92
    "test4: unobserve target stops notifications, unobserve non-observed does nothing", [
93
    {
94
      setup: observer => {
95
        observer.observe(t1);
96
        observer.observe(t2);
97
        observer.unobserve(t1);
98
        observer.unobserve(document.body);
99
        t1.style.width = "40px";
100
        t2.style.width = "40px";
101
      },
102
      notify: entries => {
103
        assert_equals(entries.length, 1, "only t2");
104
        assert_equals(entries[0].target, t2, "t2 was observed");
105
      }
106
    }
107
  ]);
108
  return helper.start();
109
}
110
111
function test5() {
112
  let t3 = document.querySelector('#target3');
113
  var helper = new ResizeTestHelper("test5: observe img",[
114
    {
115
      setup: observer => {
116
        observer.observe(t3);
117
      },
118
      notify: entries => {
119
      }
120
    },
121
    {
122
      setup: observer => {
123
        t3.style.width = "100.5px";
124
      },
125
      notify: entries => {
126
        assert_equals(entries.length, 1);
127
        assert_equals(entries[0].contentRect.width, 100.5);
128
      }
129
    }
130
  ]);
131
  return helper.start();
132
}
133
134
function test6() {
135
  let resolvePromise;
136
  let promise = new Promise((resolve) => {
137
    resolvePromise = resolve;
138
  });
139
  let test = async_test('test6: iframe notifications');
140
  let testRequested = false;
141
  let iframe = document.querySelector('iframe');
142
  window.addEventListener('message', event => {
143
    switch(event.data) {
144
    case 'readyToTest':
145
      if (!testRequested) {
146
        iframe.contentWindow.postMessage('startTest', '*');
147
        testRequested = true;
148
      }
149
    break;
150
    case 'success':
151
    case 'fail':
152
      window.requestAnimationFrame(() => {
153
        test.step( () => {
154
          assert_equals(event.data, 'success');
155
          test.done();
156
          resolvePromise();
157
        });
158
      });
159
    break;
160
    }
161
  }, false);
162
  return promise;
163
}
164
165
function test7() {
166
  let harnessTest = async_test("test7: callback.this");
167
  let resolvePromise;
168
  let ro = new ResizeObserver( function(entries, obs)  {
169
    let callbackThis = this;
170
    resolvePromise();
171
    harnessTest.step(() => {
172
      assert_equals(callbackThis, ro, "callback.this is ResizeObserver");
173
      assert_equals(obs, ro, "2nd argument is ResizeObserver");
174
      ro.disconnect();
175
      // every reference to RO must be null before test completes
176
      // to avoid triggering test leak-detection
177
      ro = null;
178
      callbackThis = null;
179
      obs = null;
180
      harnessTest.done();
181
     });
182
    }
183
  );
184
  ro.observe(t1);
185
186
  return new Promise( (resolve, reject) => {
187
    resolvePromise = resolve;
188
  });
189
}
190
191
let guard;
192
test(_ => {
193
  assert_own_property(window, "ResizeObserver");
194
  guard = async_test('guard');
195
}, "ResizeObserver implemented")
196
197
test0()
198
  .then(() => { return test1(); })
199
  .then(() => { return test2(); })
200
  .then(() => { return test3(); })
201
  .then(() => { return test4(); })
202
  .then(() => { return test5(); })
203
  .then(() => { return test6(); })
204
  .then(() => { return test7(); })
205
  .then(() => { guard.done(); });
206
207
</script>
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/iframe.html +38 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/iframe.html_sec1
1
<!doctype html>
2
<head>
3
  <script src="./resizeTestHelper.js"></script>
4
</head>
5
<p>iframe test</p>
6
<div id="itarget1" style="width:100px;height:100px;">t1</div>
7
<script>
8
'use strict';
9
let t1 = document.querySelector('#itarget1');
10
function test0() {
11
  let timeoutId = window.setTimeout( () => {
12
    window.parent.postMessage('fail', '*');
13
  }, ResizeTestHelper.TIMEOUT);
14
  let ro = new ResizeObserver(function(entries) {
15
    window.clearTimeout(timeoutId);
16
    window.parent.postMessage('success', '*');
17
  });
18
  ro.observe(t1);
19
}
20
let testStarted = false;
21
window.addEventListener('message', function(ev) {
22
    switch(ev.data) {
23
        case 'startTest':
24
          testStarted = true;
25
          test0();
26
        break;
27
    }
28
});
29
// How does parent know we've loaded problem is solved by
30
// broadcasting readyToTest message repeatedly until test starts.
31
function broadcastReady() {
32
  if (!testStarted) {
33
    window.parent.postMessage('readyToTest', '*');
34
    window.requestAnimationFrame(broadcastReady);
35
  }
36
}
37
broadcastReady();
38
</script>
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/resizeTestHelper.js +148 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/resizeTestHelper.js_sec1
1
'use strict';
2
3
/**
4
  ResizeTestHelper is a framework to test ResizeObserver
5
  notifications. Use it to make assertions about ResizeObserverEntries.
6
  This framework is needed because ResizeObservations are
7
  delivered asynchronously inside the event loop.
8
9
  Features:
10
  - can queue multiple notification steps in a test
11
  - handles timeouts
12
  - returns Promise that is fullfilled when test completes.
13
    Use to chain tests (since parallel async ResizeObserver tests
14
    would conflict if reusing same DOM elements).
15
16
  Usage:
17
18
  create ResizeTestHelper for every test.
19
  Make assertions inside notify, timeout callbacks.
20
  Start tests with helper.start()
21
  Chain tests with Promises.
22
  Counts animation frames, see startCountingRaf
23
*/
24
25
/*
26
  @param name: test name
27
  @param steps:
28
  {
29
    setup: function(ResizeObserver) {
30
      // called at the beginning of the test step
31
      // your observe/resize code goes here
32
    },
33
    notify: function(entries, observer) {
34
      // ResizeObserver callback.
35
      // Make assertions here.
36
      // Return true if next step should start on the next event loop.
37
    },
38
    timeout: function() {
39
      // Define this if your test expects to time out.
40
      // If undefined, timeout is assert_unreached.
41
    }
42
  }
43
*/
44
function ResizeTestHelper(name, steps)
45
{
46
    this._name = name;
47
    this._steps = steps || [];
48
    this._stepIdx = -1;
49
    this._harnessTest = null;
50
    this._observer = new ResizeObserver(this._handleNotification.bind(this));
51
    this._timeoutBind = this._handleTimeout.bind(this);
52
    this._nextStepBind = this._nextStep.bind(this);
53
}
54
55
ResizeTestHelper.TIMEOUT = 100;
56
57
ResizeTestHelper.prototype = {
58
  get _currentStep() {
59
    return this._steps[this._stepIdx];
60
  },
61
62
  _nextStep: function() {
63
    if (++this._stepIdx == this._steps.length)
64
      return this._done();
65
    this._timeoutId = this._harnessTest.step_timeout(
66
      this._timeoutBind, ResizeTestHelper.TIMEOUT);
67
    try {
68
      this._steps[this._stepIdx].setup(this._observer);
69
    }
70
    catch(err) {
71
      this._harnessTest.step(() => {
72
        assert_unreached("Caught a throw, possible syntax error");
73
      });
74
    }
75
  },
76
77
  _handleNotification: function(entries) {
78
    if (this._timeoutId) {
79
      window.clearTimeout(this._timeoutId);
80
      delete this._timeoutId;
81
    }
82
    this._harnessTest.step(() => {
83
      let rafDelay = this._currentStep.notify(entries, this._observer);
84
      if (rafDelay)
85
        window.requestAnimationFrame(this._nextStepBind);
86
      else
87
        this._nextStep();
88
    });
89
  },
90
91
  _handleTimeout: function() {
92
    delete this._timeoutId;
93
    this._harnessTest.step(() => {
94
      if (this._currentStep.timeout) {
95
        this._currentStep.timeout();
96
      }
97
      else {
98
        assert_unreached("Timed out waiting for notification. (" + ResizeTestHelper.TIMEOUT + "ms)");
99
      }
100
      this._nextStep();
101
    });
102
  },
103
104
  _done: function() {
105
    this._observer.disconnect();
106
    delete this._observer;
107
    this._harnessTest.done();
108
    if (this._rafCountRequest) {
109
      window.cancelAnimationFrame(this._rafCountRequest);
110
      delete this._rafCountRequest;
111
    }
112
    window.requestAnimationFrame(() => { this._resolvePromise(); });
113
  },
114
115
  start: function() {
116
    this._harnessTest = async_test(this._name);
117
    this._harnessTest.step(() => {
118
      assert_equals(this._stepIdx, -1, "start can only be called once");
119
      this._nextStep();
120
    });
121
    return new Promise( (resolve, reject) => {
122
      this._resolvePromise = resolve;
123
      this._rejectPromise = reject;
124
    });
125
  },
126
127
  get rafCount() {
128
    if (!this._rafCountRequest)
129
      throw "rAF count is not active";
130
    return this._rafCount;
131
  },
132
133
  _incrementRaf: function() {
134
    if (this._rafCountRequest) {
135
      this._rafCount++;
136
      this._rafCountRequest = window.requestAnimationFrame(this._incrementRafBind);
137
    }
138
  },
139
140
  startCountingRaf: function() {
141
    if (this._rafCountRequest)
142
      window.cancelAnimationFrame(this._rafCountRequest);
143
    if (!this._incrementRafBind)
144
      this._incrementRafBind = this._incrementRaf.bind(this);
145
    this._rafCount = 0;
146
    this._rafCountRequest = window.requestAnimationFrame(this._incrementRafBind);
147
  }
148
}
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/w3c-import.log +18 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/w3c-import.log_sec1
1
The tests in this directory were imported from the W3C repository.
2
Do NOT modify these tests directly in WebKit.
3
Instead, create a pull request on the WPT github:
4
	https://github.com/web-platform-tests/wpt
5
6
Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
7
8
Do NOT modify or remove this file.
9
10
------------------------------------------------------------------------
11
Properties requiring vendor prefixes:
12
None
13
Property values requiring vendor prefixes:
14
None
15
------------------------------------------------------------------------
16
List of files:
17
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/iframe.html
18
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/resources/resizeTestHelper.js
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/svg-expected.txt +9 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/svg-expected.txt_sec1
1
CONSOLE MESSAGE: line 50: ReferenceError: Can't find variable: ResizeObserver
2
ResizeObserver svg tests
3
4
Here is a paragraph that requires word wrap
5
6
svg text tag
7
8
FAIL ResizeObserver implemented assert_own_property: expected property "ResizeObserver" missing
9
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/svg.html +333 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/svg.html_sec1
1
<!doctype html>
2
<script src="/resources/testharness.js"></script>
3
<script src="/resources/testharnessreport.js"></script>
4
<script src="./resources/resizeTestHelper.js"></script>
5
<p>ResizeObserver svg tests</p>
6
<svg height="430" width="500" >
7
  <circle cx="10" cy="10" r="5" style="fill:orange;stroke:black;stroke-width:1" />
8
  <ellipse cx="10" cy="30" rx="5" ry="5" style="fill:orange;stroke:black;stroke-width:1"/>
9
  <foreignObject cy="50" width="100" height="20">
10
    <body>
11
      <p>Here is a paragraph that requires word wrap</p>
12
    </body>
13
  </foreignObject>
14
  <image xlink:href="" x="0" y="100" height="30" width="100" />
15
  <line x1="0" y1="50" x2="20" y2="70" stroke="black" stroke-width="2"/>
16
  <path d="M 0 100 L 100 100 L 50 150 z"
17
        style="fill:orange;stroke:black;stroke-width:1" />
18
  <polygon points="0,200 100,200 50,250" style="fill:orange;stroke:black;stroke-width:1" />
19
  <polyline points="0,300 100,300 50,350" style="fill:orange;stroke:black;stroke-width:1"/>
20
  <rect x="0" y="380" width="10" height="10" style="fill:orange; stroke:black; stroke-width:1" />
21
  <text x="0" y="400" font-size="20">svg text tag</text>
22
</svg>
23
<script>
24
'use strict';
25
26
setup({allow_uncaught_exception: true});
27
28
function test0() {
29
  let target = document.querySelector('circle');
30
  let helper = new ResizeTestHelper(
31
    "test0: observe svg:circle",
32
  [
33
    {
34
      setup: observer => {
35
        observer.observe(target);
36
      },
37
      notify: (entries, observer) => {
38
        return true;  // Delay next step
39
      }
40
    },
41
    {
42
      setup: observer => {
43
        target.setAttribute('r', 10);
44
      },
45
      notify: (entries, observer) => {
46
        assert_equals(entries.length, 1);
47
      }
48
    }
49
  ]);
50
  return helper.start();
51
}
52
53
function test1() {
54
  let target = document.querySelector('ellipse');
55
  let helper = new ResizeTestHelper(
56
    "test1: observe svg:ellipse",
57
  [
58
    {
59
      setup: observer => {
60
        observer.observe(target);
61
      },
62
      notify: (entries, observer) => {
63
        return true;  // Delay next step
64
      }
65
    },
66
    {
67
      setup: observer => {
68
        target.setAttribute('rx', 10);
69
      },
70
      notify: (entries, observer) => {
71
        assert_equals(entries.length, 1);
72
        assert_equals(entries[0].contentRect.width, 20);
73
        assert_equals(entries[0].contentRect.height, 10);
74
      }
75
    }
76
  ]);
77
  return helper.start();
78
}
79
80
function test2() {
81
  let target = document.querySelector('foreignObject');
82
  let helper = new ResizeTestHelper(
83
    "test2: observe svg:foreignObject",
84
  [
85
    {
86
      setup: observer => {
87
        observer.observe(target);
88
      },
89
      notify: (entries, observer) => {
90
        return true;  // Delay next step
91
      }
92
    },
93
    {
94
      setup: observer => {
95
        target.setAttribute('width', 200);
96
      },
97
      notify: (entries, observer) => {
98
        assert_equals(entries.length, 1);
99
        assert_equals(entries[0].contentRect.width, 200);
100
        assert_equals(entries[0].contentRect.height, 20);
101
      }
102
    }
103
  ]);
104
  return helper.start();
105
}
106
107
function test3() {
108
  let target = document.querySelector('image');
109
  let helper = new ResizeTestHelper(
110
    "test3: observe svg:image",
111
  [
112
    {
113
      setup: observer => {
114
        observer.observe(target);
115
      },
116
      notify: (entries, observer) => {
117
        return true;  // Delay next step
118
      }
119
    },
120
    {
121
      setup: observer => {
122
        target.setAttribute('height', 40);
123
      },
124
      notify: (entries, observer) => {
125
        assert_equals(entries.length, 1);
126
        assert_equals(entries[0].contentRect.width, 100);
127
        assert_equals(entries[0].contentRect.height, 40);
128
      }
129
    }
130
  ]);
131
  return helper.start();
132
}
133
134
function test4() {
135
  let target = document.querySelector('line');
136
  let helper = new ResizeTestHelper(
137
    "test4: observe svg:line",
138
  [
139
    {
140
      setup: observer => {
141
        observer.observe(target);
142
      },
143
      notify: (entries, observer) => {
144
        return true;  // Delay next step
145
      }
146
    },
147
    {
148
      setup: observer => {
149
        target.setAttribute('y2', 80);
150
      },
151
      notify: (entries, observer) => {
152
        assert_equals(entries.length, 1);
153
        assert_equals(entries[0].contentRect.width, 20);
154
        assert_equals(entries[0].contentRect.height, 30);
155
      }
156
    }
157
  ]);
158
  return helper.start();
159
}
160
161
function test5() {
162
  let target = document.querySelector('path');
163
  let helper = new ResizeTestHelper(
164
    "test5: observe svg:path",
165
  [
166
    {
167
      setup: observer => {
168
        observer.observe(target);
169
      },
170
      notify: (entries, observer) => {
171
        return true;  // Delay next step
172
      }
173
    },
174
    {
175
      setup: observer => {
176
        target.setAttribute('d', "M 0 100 L 100 100 L 50 160 z");
177
      },
178
      notify: (entries, observer) => {
179
        assert_equals(entries.length, 1);
180
        assert_equals(entries[0].contentRect.width, 100);
181
        assert_equals(entries[0].contentRect.height, 60);
182
      }
183
    }
184
  ]);
185
  return helper.start();
186
}
187
188
function test6() {
189
  let target = document.querySelector('polygon');
190
  let helper = new ResizeTestHelper(
191
    "test6: observe svg:path",
192
  [
193
    {
194
      setup: observer => {
195
        observer.observe(target);
196
      },
197
      notify: (entries, observer) => {
198
        return true;  // Delay next step
199
      }
200
    },
201
    {
202
      setup: observer => {
203
        target.setAttribute('points', "0,200 100,200 50,260");
204
      },
205
      notify: (entries, observer) => {
206
        assert_equals(entries.length, 1);
207
        assert_equals(entries[0].contentRect.width, 100);
208
        assert_equals(entries[0].contentRect.height, 60);
209
      }
210
    }
211
  ]);
212
  return helper.start();
213
}
214
215
function test7() {
216
  let target = document.querySelector('polyline');
217
  let helper = new ResizeTestHelper(
218
    "test7: observe svg:polyline",
219
  [
220
    {
221
      setup: observer => {
222
        observer.observe(target);
223
      },
224
      notify: (entries, observer) => {
225
        return true;  // Delay next step
226
      }
227
    },
228
    {
229
      setup: observer => {
230
        target.setAttribute('points', "0,300 100,300 50,360");
231
      },
232
      notify: (entries, observer) => {
233
        assert_equals(entries.length, 1);
234
        assert_equals(entries[0].contentRect.width, 100);
235
        assert_equals(entries[0].contentRect.height, 60);
236
      }
237
    }
238
  ]);
239
  return helper.start();
240
}
241
242
function test8() {
243
  let target = document.querySelector('rect');
244
  let helper = new ResizeTestHelper(
245
    "test8: observe svg:rect",
246
  [
247
    {
248
      setup: observer => {
249
        observer.observe(target);
250
      },
251
      notify: (entries, observer) => {
252
        return true;  // Delay next step
253
      }
254
    },
255
    {
256
      setup: observer => {
257
        target.setAttribute('width', "20");
258
      },
259
      notify: (entries, observer) => {
260
        assert_equals(entries.length, 1);
261
        assert_equals(entries[0].contentRect.width, 20);
262
        assert_equals(entries[0].contentRect.height, 10);
263
      }
264
    }
265
  ]);
266
  return helper.start();
267
}
268
269
function test9() {
270
  let target = document.querySelector('text');
271
  let helper = new ResizeTestHelper(
272
    "test9: observe svg:text",
273
  [
274
    {
275
      setup: observer => {
276
        observer.observe(target);
277
      },
278
      notify: (entries, observer) => {
279
        return true;  // Delay next step
280
      }
281
    },
282
    {
283
      setup: observer => {
284
        target.setAttribute('font-size', "25");
285
      },
286
      notify: (entries, observer) => {
287
        assert_equals(entries.length, 1);
288
      }
289
    }
290
  ]);
291
  return helper.start();
292
}
293
294
295
function test10() {
296
  let target = document.querySelector('svg');
297
  let helper = new ResizeTestHelper(
298
    "test10: observe svg:svg, top/left is 0 even with padding",
299
  [
300
    {
301
      setup: observer => {
302
        observer.observe(target);
303
      },
304
      notify: (entries, observer) => {
305
        assert_equals(entries.length, 1);
306
        assert_equals(entries[0].contentRect.top, 0);
307
        assert_equals(entries[0].contentRect.left, 0);
308
      }
309
    }
310
  ]);
311
  return helper.start();
312
}
313
314
let guard;
315
test(_ => {
316
  assert_own_property(window, "ResizeObserver");
317
  guard = async_test('guard');
318
}, "ResizeObserver implemented")
319
320
test0()
321
  .then(() => { return test1(); })
322
  .then(() => { return test2(); })
323
  .then(() => { return test3(); })
324
  .then(() => { return test4(); })
325
  .then(() => { return test5(); })
326
  .then(() => { return test6(); })
327
  .then(() => { return test7(); })
328
  .then(() => { return test8(); })
329
  .then(() => { return test9(); })
330
  .then(() => { return test10(); })
331
  .then(() => { guard.done(); });
332
333
</script>
- a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/w3c-import.log +22 lines
Line 0 a/LayoutTests/imported/w3c/web-platform-tests/resize-observer/w3c-import.log_sec1
1
The tests in this directory were imported from the W3C repository.
2
Do NOT modify these tests directly in WebKit.
3
Instead, create a pull request on the WPT github:
4
	https://github.com/web-platform-tests/wpt
5
6
Then run the Tools/Scripts/import-w3c-tests in WebKit to reimport
7
8
Do NOT modify or remove this file.
9
10
------------------------------------------------------------------------
11
Properties requiring vendor prefixes:
12
None
13
Property values requiring vendor prefixes:
14
None
15
------------------------------------------------------------------------
16
List of files:
17
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/META.yml
18
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/eventloop.html
19
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/idlharness.window.js
20
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/notify.html
21
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/observe.html
22
/LayoutTests/imported/w3c/web-platform-tests/resize-observer/svg.html

Return to Bug 193821