OLD | NEW |
(Empty) | |
| 1 <!DOCTYPE html> |
| 2 <title>Shared Worker: UseCounter</title> |
| 3 <script src="../../resources/testharness.js"></script> |
| 4 <script src="../../resources/testharnessreport.js"></script> |
| 5 <body> |
| 6 </body> |
| 7 <script> |
| 8 |
| 9 const kFeature = 675; // From UseCounter.h |
| 10 const kDeprecatedFeature = 538; // From Deprecation.h |
| 11 |
| 12 function isUseCounted(win, feature) { |
| 13 return win.internals.isUseCounted(win.document, feature); |
| 14 } |
| 15 |
| 16 function openWindow(url) { |
| 17 return new Promise(resolve => { |
| 18 let win = window.open(url, '_blank'); |
| 19 add_completion_callback(() => win.close()); |
| 20 window.onmessage = e => { |
| 21 assert_equals(e.data, 'LOADED'); |
| 22 resolve(win); |
| 23 }; |
| 24 }); |
| 25 } |
| 26 |
| 27 promise_test(t => { |
| 28 const kWindowUrl = 'resources/shared-worker-usecounter-window.html'; |
| 29 |
| 30 let win1; |
| 31 let win2; |
| 32 let win3; |
| 33 let worker; |
| 34 |
| 35 return openWindow(kWindowUrl) |
| 36 .then(win => { |
| 37 win1 = win; |
| 38 win1.connectToWorker(); |
| 39 return openWindow(kWindowUrl); |
| 40 }) |
| 41 .then(win => { |
| 42 win2 = win; |
| 43 win2.connectToWorker(); |
| 44 |
| 45 // Connect to a shared worker from the main document to get a |
| 46 // communication channel to the worker. |
| 47 worker = new SharedWorker('resources/shared-worker-usecounter.js'); |
| 48 return new Promise(resolve => worker.port.onmessage = resolve); |
| 49 }) |
| 50 .then(e => { |
| 51 assert_equals(e.data, 'CONNECTED'); |
| 52 |
| 53 assert_false(isUseCounted(win1, kFeature)); |
| 54 assert_false(isUseCounted(win2, kFeature)); |
| 55 |
| 56 // Request to count a feature. |
| 57 let promise = |
| 58 new Promise(resolve => worker.port.onmessage = resolve); |
| 59 worker.port.postMessage({type: 'COUNT_FEATURE', feature: kFeature}); |
| 60 return promise; |
| 61 }) |
| 62 .then(e => { |
| 63 assert_equals(e.data, 'COUNTED'); |
| 64 |
| 65 // API use on the SharedWorkerGlobalScope is recorded in UseCounters on |
| 66 // all connected documents. |
| 67 assert_true(isUseCounted(win1, kFeature)); |
| 68 assert_true(isUseCounted(win2, kFeature)); |
| 69 |
| 70 assert_false(isUseCounted(win1, kDeprecatedFeature)); |
| 71 assert_false(isUseCounted(win2, kDeprecatedFeature)); |
| 72 |
| 73 // Request to count a deprecated feature. |
| 74 let promise = |
| 75 new Promise(resolve => worker.port.onmessage = resolve); |
| 76 worker.port.postMessage( |
| 77 {type: 'COUNT_DEPRECATION', feature: kDeprecatedFeature}); |
| 78 return promise; |
| 79 }) |
| 80 .then(e => { |
| 81 assert_equals(e.data, 'COUNTED'); |
| 82 |
| 83 // Deprecated API use on the SharedWorkerGlobalScope is recorded in |
| 84 // UseCounters on all connected documents. |
| 85 assert_true(isUseCounted(win1, kDeprecatedFeature)); |
| 86 assert_true(isUseCounted(win2, kDeprecatedFeature)); |
| 87 |
| 88 return openWindow(kWindowUrl); |
| 89 }) |
| 90 .then(win => { |
| 91 win3 = win; |
| 92 // A new document hasn't connected to the worker, so the API use should |
| 93 // not be counted yet. |
| 94 assert_false(isUseCounted(win3, kFeature)); |
| 95 assert_false(isUseCounted(win3, kDeprecatedFeature)); |
| 96 return win3.connectToWorker(); |
| 97 }) |
| 98 .then(() => { |
| 99 // A counter of the newly connected document should be synced with |
| 100 // others. |
| 101 assert_true(isUseCounted(win3, kFeature)); |
| 102 assert_true(isUseCounted(win3, kDeprecatedFeature)); |
| 103 }); |
| 104 }, 'UseCounter on SharedWorkerGlobalScope'); |
| 105 |
| 106 </script> |
| 107 </html> |
OLD | NEW |