content-index.https.html (5337B)
1 <!DOCTYPE html> 2 <title>Test Content Index API</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <script src="/resources/testdriver.js"></script> 6 <script src="/resources/testdriver-vendor.js"></script> 7 <script src="/common/utils.js"></script> 8 <script src="/common/dispatcher/dispatcher.js"></script> 9 <script src="resources/utils.js"></script> 10 11 <body> 12 <script> 13 const id = 'fenced-frame-id'; 14 15 promise_test(async () => { 16 const frame = attachFencedFrameContext(); 17 try { 18 await frame.execute(async (id) => { 19 navigator.serviceWorker.register( 20 "empty-worker.js", { scope: location.href }); 21 const registration = await navigator.serviceWorker.ready; 22 return registration.index.add({ 23 id, 24 title: 'same title', 25 description: 'same description', 26 url: 'resources/' 27 }); 28 }, [id]); 29 assert_unreached('index.add executed without error; want error'); 30 } catch(e) { 31 assert_equals(e.message, "Failed to execute 'add' on 'ContentIndex': " + 32 "ContentIndex is not allowed in fenced frames.") 33 } 34 }, 'index.add should fail inside a fenced frame'); 35 36 promise_test(async () => { 37 const frame = attachFencedFrameContext(); 38 try { 39 await frame.execute(async (id) => { 40 navigator.serviceWorker.register( 41 "empty-worker.js", { scope: location.href }); 42 const registration = await navigator.serviceWorker.ready; 43 return registration.index.delete(id); 44 }, [id]); 45 assert_unreached('index.delete executed without error; want error'); 46 } catch(e) { 47 assert_equals(e.message, "Failed to execute 'delete' on 'ContentIndex': " + "ContentIndex is not allowed in fenced frames."); 48 } 49 }, 'index.delete should fail inside a fenced frame'); 50 51 promise_test(async () => { 52 const frame = attachFencedFrameContext(); 53 try { 54 await frame.execute(async () => { 55 navigator.serviceWorker.register( 56 "empty-worker.js", { scope: location.href }); 57 const registration = await navigator.serviceWorker.ready; 58 return registration.index.getAll(); 59 }); 60 assert_unreached('index.getAll executed without error; want error'); 61 } catch(e) { 62 assert_equals(e.message, "Failed to execute 'getAll' on 'ContentIndex': " + "ContentIndex is not allowed in fenced frames."); 63 } 64 }, 'index.getAll should fail inside a fenced frame'); 65 66 promise_test(async () => { 67 const frame = attachFencedFrameContext(); 68 const message = await frame.execute(async () => { 69 const getController = () => { 70 if (navigator.serviceWorker.controller) { 71 return navigator.serviceWorker.controller; 72 } 73 return new Promise(resolve => { 74 navigator.serviceWorker.addEventListener('controllerchange', () => { 75 resolve(navigator.serviceWorker.controller); 76 }); 77 }); 78 }; 79 80 navigator.serviceWorker.register( 81 "content-index-sw.js", { scope: location.href }); 82 return new Promise(async resolve => { 83 const ctrl = await getController(); 84 ctrl.postMessage('add'); 85 navigator.serviceWorker.onmessage = e => { 86 resolve(e.data); 87 } 88 }); 89 }); 90 assert_equals(message, "Failed to execute 'add' on 'ContentIndex': " + 91 "ContentIndex is not allowed in fenced frames."); 92 }, 'index.add should fail from the service worker inside a fenced frame'); 93 94 promise_test(async () => { 95 const frame = attachFencedFrameContext(); 96 const message = await frame.execute(async () => { 97 const getController = () => { 98 if (navigator.serviceWorker.controller) { 99 return navigator.serviceWorker.controller; 100 } 101 return new Promise(resolve => { 102 navigator.serviceWorker.addEventListener('controllerchange', () => { 103 resolve(navigator.serviceWorker.controller); 104 }); 105 }); 106 }; 107 108 navigator.serviceWorker.register( 109 "content-index-sw.js", { scope: location.href }); 110 return new Promise(async resolve => { 111 const ctrl = await getController(); 112 ctrl.postMessage('delete'); 113 navigator.serviceWorker.onmessage = e => { 114 resolve(e.data); 115 } 116 }); 117 }); 118 assert_equals(message, "Failed to execute 'delete' on 'ContentIndex': " + 119 "ContentIndex is not allowed in fenced frames."); 120 }, 'index.delete should fail from the service worker inside a fenced frame'); 121 122 promise_test(async () => { 123 const frame = attachFencedFrameContext(); 124 const message = await frame.execute(async () => { 125 const getController = () => { 126 if (navigator.serviceWorker.controller) { 127 return navigator.serviceWorker.controller; 128 } 129 return new Promise(resolve => { 130 navigator.serviceWorker.addEventListener('controllerchange', () => { 131 resolve(navigator.serviceWorker.controller); 132 }); 133 }); 134 }; 135 136 navigator.serviceWorker.register( 137 "content-index-sw.js", { scope: location.href }); 138 return new Promise(async resolve => { 139 const ctrl = await getController(); 140 ctrl.postMessage('getAll'); 141 navigator.serviceWorker.onmessage = e => { 142 resolve(e.data); 143 } 144 }); 145 }); 146 assert_equals(message, "Failed to execute 'getAll' on 'ContentIndex': " + 147 "ContentIndex is not allowed in fenced frames."); 148 }, 'index.getAll should fail from the service worker inside a fenced frame'); 149 </script> 150 </body>