| Index: third_party/WebKit/LayoutTests/fast/workers/shared-worker-usecounter.html
|
| diff --git a/third_party/WebKit/LayoutTests/fast/workers/shared-worker-usecounter.html b/third_party/WebKit/LayoutTests/fast/workers/shared-worker-usecounter.html
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ef5fecba9666e235672aec7354df4955e58b19c9
|
| --- /dev/null
|
| +++ b/third_party/WebKit/LayoutTests/fast/workers/shared-worker-usecounter.html
|
| @@ -0,0 +1,107 @@
|
| +<!DOCTYPE html>
|
| +<title>Shared Worker: UseCounter</title>
|
| +<script src="../../resources/testharness.js"></script>
|
| +<script src="../../resources/testharnessreport.js"></script>
|
| +<body>
|
| +</body>
|
| +<script>
|
| +
|
| +const kFeature = 675; // From UseCounter.h
|
| +const kDeprecatedFeature = 538; // From Deprecation.h
|
| +
|
| +function isUseCounted(win, feature) {
|
| + return win.internals.isUseCounted(win.document, feature);
|
| +}
|
| +
|
| +function openWindow(url) {
|
| + return new Promise(resolve => {
|
| + let win = window.open(url, '_blank');
|
| + add_completion_callback(() => win.close());
|
| + window.onmessage = e => {
|
| + assert_equals(e.data, 'LOADED');
|
| + resolve(win);
|
| + };
|
| + });
|
| +}
|
| +
|
| +promise_test(t => {
|
| + const kWindowUrl = 'resources/shared-worker-usecounter-window.html';
|
| +
|
| + let win1;
|
| + let win2;
|
| + let win3;
|
| + let worker;
|
| +
|
| + return openWindow(kWindowUrl)
|
| + .then(win => {
|
| + win1 = win;
|
| + win1.connectToWorker();
|
| + return openWindow(kWindowUrl);
|
| + })
|
| + .then(win => {
|
| + win2 = win;
|
| + win2.connectToWorker();
|
| +
|
| + // Connect to a shared worker from the main document to get a
|
| + // communication channel to the worker.
|
| + worker = new SharedWorker('resources/shared-worker-usecounter.js');
|
| + return new Promise(resolve => worker.port.onmessage = resolve);
|
| + })
|
| + .then(e => {
|
| + assert_equals(e.data, 'CONNECTED');
|
| +
|
| + assert_false(isUseCounted(win1, kFeature));
|
| + assert_false(isUseCounted(win2, kFeature));
|
| +
|
| + // Request to count a feature.
|
| + let promise =
|
| + new Promise(resolve => worker.port.onmessage = resolve);
|
| + worker.port.postMessage({type: 'COUNT_FEATURE', feature: kFeature});
|
| + return promise;
|
| + })
|
| + .then(e => {
|
| + assert_equals(e.data, 'COUNTED');
|
| +
|
| + // API use on the SharedWorkerGlobalScope is recorded in UseCounters on
|
| + // all connected documents.
|
| + assert_true(isUseCounted(win1, kFeature));
|
| + assert_true(isUseCounted(win2, kFeature));
|
| +
|
| + assert_false(isUseCounted(win1, kDeprecatedFeature));
|
| + assert_false(isUseCounted(win2, kDeprecatedFeature));
|
| +
|
| + // Request to count a deprecated feature.
|
| + let promise =
|
| + new Promise(resolve => worker.port.onmessage = resolve);
|
| + worker.port.postMessage(
|
| + {type: 'COUNT_DEPRECATION', feature: kDeprecatedFeature});
|
| + return promise;
|
| + })
|
| + .then(e => {
|
| + assert_equals(e.data, 'COUNTED');
|
| +
|
| + // Deprecated API use on the SharedWorkerGlobalScope is recorded in
|
| + // UseCounters on all connected documents.
|
| + assert_true(isUseCounted(win1, kDeprecatedFeature));
|
| + assert_true(isUseCounted(win2, kDeprecatedFeature));
|
| +
|
| + return openWindow(kWindowUrl);
|
| + })
|
| + .then(win => {
|
| + win3 = win;
|
| + // A new document hasn't connected to the worker, so the API use should
|
| + // not be counted yet.
|
| + assert_false(isUseCounted(win3, kFeature));
|
| + assert_false(isUseCounted(win3, kDeprecatedFeature));
|
| + return win3.connectToWorker();
|
| + })
|
| + .then(() => {
|
| + // A counter of the newly connected document should be synced with
|
| + // others.
|
| + assert_true(isUseCounted(win3, kFeature));
|
| + assert_true(isUseCounted(win3, kDeprecatedFeature));
|
| + });
|
| +}, 'UseCounter on SharedWorkerGlobalScope');
|
| +
|
| +</script>
|
| +</html>
|
|
|