browser_test_animations_without_apz_sampler.js (3954B)
1 /* -*- Mode: indent-tabs-mode: nil; js-indent-level: 2 -*- */ 2 /* vim: set sts=2 sw=2 et tw=80: */ 3 "use strict"; 4 5 Services.scriptloader.loadSubScript( 6 "chrome://mochitests/content/browser/browser/components/extensions/test/browser/head.js", 7 this 8 ); 9 Services.scriptloader.loadSubScript( 10 "chrome://mochitests/content/browser/browser/components/extensions/test/browser/head_browserAction.js", 11 this 12 ); 13 14 add_task(async () => { 15 let extension = ExtensionTestUtils.loadExtension({ 16 manifest: { 17 browser_action: { 18 default_popup: "popup.html", 19 browser_style: true, 20 }, 21 }, 22 23 files: { 24 "popup.html": ` 25 <html> 26 <head> 27 <meta charset="utf-8"> 28 <style> 29 #target { 30 width: 100px; 31 height: 50px; 32 background: green; 33 } 34 #target2 { 35 width: 100px; 36 height: 50px; 37 background: green; 38 } 39 </style> 40 </head> 41 <body> 42 <div id="target"></div> 43 <div id="target2"></div> 44 </body> 45 </html>`, 46 }, 47 }); 48 49 await extension.startup(); 50 51 async function takeSnapshot(browserWin, callback) { 52 let browser = await openBrowserActionPanel(extension, browserWin, true); 53 54 if (callback) { 55 await SpecialPowers.spawn(browser, [], callback); 56 } 57 58 // Ensure there's no pending paint requests. 59 // The below code is a simplified version of promiseAllPaintsDone in 60 // paint_listener.js. 61 await SpecialPowers.spawn(browser, [], async () => { 62 return new Promise(resolve => { 63 function waitForPaints() { 64 // Wait until paint suppression has ended 65 if (SpecialPowers.DOMWindowUtils.paintingSuppressed) { 66 dump`waiting for paint suppression to end...`; 67 content.window.setTimeout(waitForPaints, 0); 68 return; 69 } 70 71 if (SpecialPowers.DOMWindowUtils.isMozAfterPaintPending) { 72 dump`waiting for paint...`; 73 content.window.addEventListener("MozAfterPaint", waitForPaints, { 74 once: true, 75 }); 76 return; 77 } 78 resolve(); 79 } 80 waitForPaints(); 81 }); 82 }); 83 84 const snapshot = await SpecialPowers.spawn(browser, [], async () => { 85 return SpecialPowers.snapshotWindowWithOptions( 86 content.window, 87 undefined /* use the default rect */, 88 undefined /* use the default bgcolor */, 89 { DRAWWINDOW_DRAW_VIEW: true } /* to capture scrollbars */ 90 ) 91 .toDataURL() 92 .toString(); 93 }); 94 95 const popup = getBrowserActionPopup(extension, browserWin); 96 await closeBrowserAction(extension, browserWin); 97 is(popup.state, "closed", "browserAction popup has been closed"); 98 99 return snapshot; 100 } 101 102 // Test without apz sampler. 103 await SpecialPowers.pushPrefEnv({ set: [["apz.popups.enabled", false]] }); 104 105 // Reference 106 const newWin = await BrowserTestUtils.openNewBrowserWindow(); 107 const reference = await takeSnapshot(newWin); 108 await BrowserTestUtils.closeWindow(newWin); 109 110 // Test target 111 const testWin = await BrowserTestUtils.openNewBrowserWindow(); 112 const result = await takeSnapshot(testWin, async () => { 113 let div = content.window.document.getElementById("target"); 114 const anim = div.animate({ opacity: [1, 0.5] }, 10); 115 await anim.finished; 116 const anim2 = div.animate( 117 { transform: ["translateX(10px)", "translateX(20px)"] }, 118 10 119 ); 120 await anim2.finished; 121 122 let div2 = content.window.document.getElementById("target2"); 123 const anim3 = div2.animate( 124 { transform: ["translateX(10px)", "translateX(20px)"] }, 125 10 126 ); 127 await anim3.finished; 128 }); 129 await BrowserTestUtils.closeWindow(testWin); 130 131 is(result, reference, "The omta property value should be reset"); 132 133 await extension.unload(); 134 });