From 6ccd40c82a75d1f0bebe66ac86716bab2aad7bca Mon Sep 17 00:00:00 2001 From: Paul Rouget Date: Wed, 7 Jan 2015 22:47:00 -0500 Subject: [PATCH] Bug 1067145 - Make responsive design e10s-ready. r=ochameau --- b2g/chrome/content/desktop.js | 4 +- b2g/chrome/content/screen.js | 3 +- browser/devtools/responsivedesign/moz.build | 3 +- .../responsivedesign-child.js | 130 +++++++ .../responsivedesign/responsivedesign.jsm | 202 +++++------ .../responsivedesign/test/browser.ini | 4 +- .../test/browser_responsive_cmd.js | 5 +- .../test/browser_responsive_devicewidth.js | 8 +- .../test/browser_responsivecomputedview.js | 5 +- .../test/browser_responsiveruleview.js | 8 +- .../test/browser_responsiveui.js | 330 ++++++++---------- .../test/browser_responsiveui_touch.js | 4 +- .../browser_responsiveuiaddcustompreset.js | 281 +++++++-------- .../devtools/responsivedesign/test/head.js | 89 +++++ .../devtools/shared/FloatingScrollbars.jsm | 126 ------- browser/devtools/shared/moz.build | 1 - 16 files changed, 598 insertions(+), 605 deletions(-) create mode 100644 browser/devtools/responsivedesign/responsivedesign-child.js delete mode 100644 browser/devtools/shared/FloatingScrollbars.jsm diff --git a/b2g/chrome/content/desktop.js b/b2g/chrome/content/desktop.js index 30a7c1f30528..31a5b322842f 100644 --- a/b2g/chrome/content/desktop.js +++ b/b2g/chrome/content/desktop.js @@ -117,7 +117,7 @@ function checkDebuggerPort() { function initResponsiveDesign() { Cu.import('resource:///modules/devtools/responsivedesign.jsm'); ResponsiveUIManager.on('on', function(event, {tab:tab}) { - let responsive = tab.__responsiveUI; + let responsive = ResponsiveUIManager.getResponsiveUIForTab(tab); let document = tab.ownerDocument; // Only tweak reponsive mode for shell.html tabs. @@ -137,7 +137,7 @@ function initResponsiveDesign() { }, true); // Enable touch events - browserWindow.gBrowser.selectedTab.__responsiveUI.enableTouch(); + responsive.enableTouch(); }); // Automatically toggle responsive design mode diff --git a/b2g/chrome/content/screen.js b/b2g/chrome/content/screen.js index 6449e5604a36..a493e13432aa 100644 --- a/b2g/chrome/content/screen.js +++ b/b2g/chrome/content/screen.js @@ -148,7 +148,8 @@ window.addEventListener('ContentStart', function() { let chromewidth = window.outerWidth - window.innerWidth; let chromeheight = window.outerHeight - window.innerHeight + controlsHeight; if (isMulet) { - let responsive = browserWindow.gBrowser.selectedTab.__responsiveUI; + let tab = browserWindow.gBrowser.selectedTab; + let responsive = ResponsiveUIManager.getResponsiveUIForTab(tab); responsive.setSize((Math.round(width * scale) + 16*2), (Math.round(height * scale) + controlsHeight + 61)); } else { diff --git a/browser/devtools/responsivedesign/moz.build b/browser/devtools/responsivedesign/moz.build index 4b48e9be0478..f024a7dd7af8 100644 --- a/browser/devtools/responsivedesign/moz.build +++ b/browser/devtools/responsivedesign/moz.build @@ -4,7 +4,8 @@ EXTRA_JS_MODULES.devtools += [ 'resize-commands.js', - 'responsivedesign.jsm', + 'responsivedesign-child.js', + 'responsivedesign.jsm' ] BROWSER_CHROME_MANIFESTS += ['test/browser.ini'] diff --git a/browser/devtools/responsivedesign/responsivedesign-child.js b/browser/devtools/responsivedesign/responsivedesign-child.js new file mode 100644 index 000000000000..12d0696b5aa2 --- /dev/null +++ b/browser/devtools/responsivedesign/responsivedesign-child.js @@ -0,0 +1,130 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +const Ci = Components.interfaces; +const gDeviceSizeWasPageSize = docShell.deviceSizeIsPageSize; +const gFloatingScrollbarsStylesheet = Services.io.newURI("chrome://browser/skin/devtools/floating-scrollbars.css", null, null); +let gRequiresFloatingScrollbars; + +let active = false; + +let webProgress = docShell.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebProgress); + +addMessageListener("ResponsiveMode:Start", startResponsiveMode); +addMessageListener("ResponsiveMode:Stop", stopResponsiveMode); + +function startResponsiveMode({data:data}) { + if (active) { + return; + } + addMessageListener("ResponsiveMode:RequestScreenshot", screenshot); + addMessageListener("ResponsiveMode:NotifyOnResize", notifiyOnResize); + webProgress.addProgressListener(WebProgressListener, Ci.nsIWebProgress.NOTIFY_ALL); + docShell.deviceSizeIsPageSize = true; + gRequiresFloatingScrollbars = data.requiresFloatingScrollbars; + + // At this point, a content viewer might not be loaded for this + // docshell. makeScrollbarsFloating will be triggered by onLocationChange. + if (docShell.contentViewer) { + makeScrollbarsFloating(); + } + active = true; + sendAsyncMessage("ResponsiveMode:Start:Done"); +} + +function notifiyOnResize() { + content.addEventListener("resize", () => { + sendAsyncMessage("ResponsiveMode:OnContentResize"); + }, false); + sendAsyncMessage("ResponsiveMode:NotifyOnResize:Done"); +} + +function stopResponsiveMode() { + if (!active) { + return; + } + active = false; + removeMessageListener("ResponsiveMode:RequestScreenshot", screenshot); + removeMessageListener("ResponsiveMode:NotifyOnResize", notifiyOnResize); + webProgress.removeProgressListener(WebProgressListener); + docShell.deviceSizeIsPageSize = gDeviceSizeWasPageSize; + restoreScrollbars(); + sendAsyncMessage("ResponsiveMode:Stop:Done"); +} + +function makeScrollbarsFloating() { + if (!gRequiresFloatingScrollbars) { + return; + } + + let allDocShells = [docShell]; + + for (let i = 0; i < docShell.childCount; i++) { + let child = docShell.getChildAt(i).QueryInterface(Ci.nsIDocShell); + allDocShells.push(child); + } + + for (let d of allDocShells) { + let win = d.contentViewer.DOMDocument.defaultView; + let winUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); + try { + winUtils.loadSheet(gFloatingScrollbarsStylesheet, win.AGENT_SHEET); + } catch(e) { } + } + + flushStyle(); +} + +function restoreScrollbars() { + let allDocShells = [docShell]; + for (let i = 0; i < docShell.childCount; i++) { + allDocShells.push(docShell.getChildAt(i).QueryInterface(Ci.nsIDocShell)); + } + for (let d of allDocShells) { + let win = d.contentViewer.DOMDocument.defaultView; + let winUtils = win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils); + try { + winUtils.removeSheet(gFloatingScrollbarsStylesheet, win.AGENT_SHEET); + } catch(e) { } + } + flushStyle(); +} + +function flushStyle() { + // Force presContext destruction + let isSticky = docShell.contentViewer.sticky; + docShell.contentViewer.sticky = false; + docShell.contentViewer.hide(); + docShell.contentViewer.show(); + docShell.contentViewer.sticky = isSticky; +} + +function screenshot() { + let canvas = content.document.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); + let width = content.innerWidth; + let height = content.innerHeight; + canvas.mozOpaque = true; + canvas.width = width; + canvas.height = height; + let ctx = canvas.getContext("2d"); + ctx.drawWindow(content, content.scrollX, content.scrollY, width, height, "#fff"); + sendAsyncMessage("ResponsiveMode:RequestScreenshot:Done", canvas.toDataURL()); +} + +let WebProgressListener = { + onLocationChange: function onLocationChange(aWebProgress) { + makeScrollbarsFloating(); + }, + QueryInterface: function QueryInterface(aIID) { + if (aIID.equals(Ci.nsIWebProgressListener) || + aIID.equals(Ci.nsISupportsWeakReference) || + aIID.equals(Ci.nsISupports)) { + return this; + } + throw Components.results.NS_ERROR_NO_INTERFACE; + } +}; + +sendAsyncMessage("ResponsiveMode:ChildScriptReady"); diff --git a/browser/devtools/responsivedesign/responsivedesign.jsm b/browser/devtools/responsivedesign/responsivedesign.jsm index 9a1d506ca7b1..b9bc729c9085 100644 --- a/browser/devtools/responsivedesign/responsivedesign.jsm +++ b/browser/devtools/responsivedesign/responsivedesign.jsm @@ -10,8 +10,8 @@ const Cu = Components.utils; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource:///modules/devtools/gDevTools.jsm"); -Cu.import("resource:///modules/devtools/FloatingScrollbars.jsm"); Cu.import("resource://gre/modules/devtools/event-emitter.js"); +let { Promise: promise } = Cu.import("resource://gre/modules/Promise.jsm", {}); XPCOMUtils.defineLazyModuleGetter(this, "SystemAppProxy", "resource://gre/modules/SystemAppProxy.jsm"); @@ -33,6 +33,8 @@ const ROUND_RATIO = 10; const INPUT_PARSER = /(\d+)[^\d]+(\d+)/; +let ActiveTabs = new Map(); + this.ResponsiveUIManager = { /** * Check if the a tab is in a responsive mode. @@ -43,8 +45,8 @@ this.ResponsiveUIManager = { * @param aTab the tab targeted. */ toggle: function(aWindow, aTab) { - if (aTab.__responsiveUI) { - aTab.__responsiveUI.close(); + if (this.isActiveForTab(aTab)) { + ActiveTabs.get(aTab).close(); } else { new ResponsiveUI(aWindow, aTab); } @@ -56,7 +58,14 @@ this.ResponsiveUIManager = { * @param aTab the tab targeted. */ isActiveForTab: function(aTab) { - return !!aTab.__responsiveUI; + return ActiveTabs.has(aTab); + }, + + /** + * Return the responsive UI controller for a tab. + */ + getResponsiveUIForTab: function(aTab) { + return ActiveTabs.get(aTab); }, /** @@ -70,19 +79,19 @@ this.ResponsiveUIManager = { handleGcliCommand: function(aWindow, aTab, aCommand, aArgs) { switch (aCommand) { case "resize to": - if (!aTab.__responsiveUI) { + if (!this.isActiveForTab(aTab)) { new ResponsiveUI(aWindow, aTab); } - aTab.__responsiveUI.setSize(aArgs.width, aArgs.height); + ActiveTabs.get(aTab).setSize(aArgs.width, aArgs.height); break; case "resize on": - if (!aTab.__responsiveUI) { + if (!this.isActiveForTab(aTab)) { new ResponsiveUI(aWindow, aTab); } break; case "resize off": - if (aTab.__responsiveUI) { - aTab.__responsiveUI.close(); + if (this.isActiveForTab(aTab)) { + ActiveTabs.get(aTab).close(); } break; case "resize toggle": @@ -115,13 +124,28 @@ function ResponsiveUI(aWindow, aTab) { this.mainWindow = aWindow; this.tab = aTab; + this.mm = this.tab.linkedBrowser.messageManager; this.tabContainer = aWindow.gBrowser.tabContainer; this.browser = aTab.linkedBrowser; this.chromeDoc = aWindow.document; this.container = aWindow.gBrowser.getBrowserContainer(this.browser); this.stack = this.container.querySelector(".browserStack"); this._telemetry = new Telemetry(); - this._floatingScrollbars = !this.mainWindow.matchMedia("(-moz-overlay-scrollbars)").matches; + this.e10s = !this.browser.contentWindow; + + let childOn = () => { + this.mm.removeMessageListener("ResponsiveMode:Start:Done", childOn); + ResponsiveUIManager.emit("on", { tab: this.tab }); + } + this.mm.addMessageListener("ResponsiveMode:Start:Done", childOn); + + let requiresFloatingScrollbars = !this.mainWindow.matchMedia("(-moz-overlay-scrollbars)").matches; + this.mm.loadFrameScript("resource:///modules/devtools/responsivedesign-child.js", true); + this.mm.addMessageListener("ResponsiveMode:ChildScriptReady", () => { + this.mm.sendAsyncMessage("ResponsiveMode:Start", { + requiresFloatingScrollbars: requiresFloatingScrollbars + }); + }); // Try to load presets from prefs if (Services.prefs.prefHasUserValue("devtools.responsiveUI.presets")) { @@ -163,8 +187,6 @@ function ResponsiveUI(aWindow, aTab) this.stack.setAttribute("responsivemode", "true"); // Let's bind some callbacks. - this.bound_onPageLoad = this.onPageLoad.bind(this); - this.bound_onPageUnload = this.onPageUnload.bind(this); this.bound_presetSelected = this.presetSelected.bind(this); this.bound_handleManualInput = this.handleManualInput.bind(this); this.bound_addPreset = this.addPreset.bind(this); @@ -184,41 +206,22 @@ function ResponsiveUI(aWindow, aTab) this.buildUI(); this.checkMenus(); - this.docShell = this.browser.contentWindow.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIWebNavigation) - .QueryInterface(Ci.nsIDocShell); - - this._deviceSizeWasPageSize = this.docShell.deviceSizeIsPageSize; - this.docShell.deviceSizeIsPageSize = true; - try { if (Services.prefs.getBoolPref("devtools.responsiveUI.rotate")) { this.rotate(); } } catch(e) {} - if (this._floatingScrollbars) - switchToFloatingScrollbars(this.tab); - - this.tab.__responsiveUI = this; + ActiveTabs.set(aTab, this); this._telemetry.toolOpened("responsive"); - // Touch events support - this.touchEnableBefore = false; - this.touchEventHandler = new TouchEventHandler(this.browser); - - this.browser.addEventListener("load", this.bound_onPageLoad, true); - this.browser.addEventListener("unload", this.bound_onPageUnload, true); - - if (this.browser.contentWindow.document && - this.browser.contentWindow.document.readyState == "complete") { - this.onPageLoad(); + if (!this.e10s) { + // Touch events support + this.touchEnableBefore = false; + this.touchEventHandler = new TouchEventHandler(this.browser); } - // E10S: We should be using target here. See bug 1028234 - ResponsiveUIManager.emit("on", { tab: this.tab }); - // Hook to display promotional Developer Edition doorhanger. Only displayed once. showDoorhanger({ window: this.mainWindow, @@ -239,45 +242,14 @@ ResponsiveUI.prototype = { } }, - /** - * Window onload / onunload - */ - onPageLoad: function() { - this.touchEventHandler = new TouchEventHandler(this.browser); - if (this.touchEnableBefore) { - this.enableTouch(); - } - }, - - onPageUnload: function(evt) { - // Ignore sub frames unload events - if (evt.target != this.browser.contentDocument) - return; - if (this.closing) - return; - if (this.touchEventHandler) { - this.touchEnableBefore = this.touchEventHandler.enabled; - this.disableTouch(); - delete this.touchEventHandler; - } - }, - /** * Destroy the nodes. Remove listeners. Reset the style. */ - close: function RUI_unload() { + close: function RUI_close() { if (this.closing) return; this.closing = true; - this.docShell.deviceSizeIsPageSize = this._deviceSizeWasPageSize; - - this.browser.removeEventListener("load", this.bound_onPageLoad, true); - this.browser.removeEventListener("unload", this.bound_onPageUnload, true); - - if (this._floatingScrollbars) - switchToNativeScrollbars(this.tab); - this.unCheckMenus(); // Reset style of the stack. let style = "max-width: none;" + @@ -296,10 +268,12 @@ ResponsiveUI.prototype = { this.tabContainer.removeEventListener("TabSelect", this); this.rotatebutton.removeEventListener("command", this.bound_rotate, true); this.screenshotbutton.removeEventListener("command", this.bound_screenshot, true); - this.touchbutton.removeEventListener("command", this.bound_touch, true); this.closebutton.removeEventListener("command", this.bound_close, true); this.addbutton.removeEventListener("command", this.bound_addPreset, true); this.removebutton.removeEventListener("command", this.bound_removePreset, true); + if (!this.e10s) { + this.touchbutton.removeEventListener("command", this.bound_touch, true); + } // Removed elements. this.container.removeChild(this.toolbar); @@ -317,13 +291,40 @@ ResponsiveUI.prototype = { this.container.removeAttribute("responsivemode"); this.stack.removeAttribute("responsivemode"); - delete this.docShell; - delete this.tab.__responsiveUI; - if (this.touchEventHandler) + ActiveTabs.delete(this.tab); + if (!this.e10s && this.touchEventHandler) { this.touchEventHandler.stop(); + } this._telemetry.toolClosed("responsive"); - // E10S: We should be using target here. See bug 1028234 - ResponsiveUIManager.emit("off", { tab: this.tab }); + let childOff = () => { + this.mm.removeMessageListener("ResponsiveMode:Stop:Done", childOff); + ResponsiveUIManager.emit("off", { tab: this.tab }); + } + this.mm.addMessageListener("ResponsiveMode:Stop:Done", childOff); + this.tab.linkedBrowser.messageManager.sendAsyncMessage("ResponsiveMode:Stop"); + }, + + /** + * Notify when the content has been resized. Only used in tests. + */ + _test_notifyOnResize: function() { + let deferred = promise.defer(); + let mm = this.mm; + + this.bound_onContentResize = this.onContentResize.bind(this); + + mm.addMessageListener("ResponsiveMode:OnContentResize", this.bound_onContentResize); + + mm.sendAsyncMessage("ResponsiveMode:NotifyOnResize"); + mm.addMessageListener("ResponsiveMode:NotifyOnResize:Done", function onListeningResize() { + mm.removeMessageListener("ResponsiveMode:NotifyOnResize:Done", onListeningResize); + deferred.resolve(); + }); + return deferred.promise; + }, + + onContentResize: function() { + ResponsiveUIManager.emit("contentResize", { tab: this.tab }); }, /** @@ -427,12 +428,6 @@ ResponsiveUI.prototype = { this.screenshotbutton.className = "devtools-responsiveui-toolbarbutton devtools-responsiveui-screenshot"; this.screenshotbutton.addEventListener("command", this.bound_screenshot, true); - this.touchbutton = this.chromeDoc.createElement("toolbarbutton"); - this.touchbutton.setAttribute("tabindex", "0"); - this.touchbutton.setAttribute("tooltiptext", this.strings.GetStringFromName("responsiveUI.touch")); - this.touchbutton.className = "devtools-responsiveui-toolbarbutton devtools-responsiveui-touch"; - this.touchbutton.addEventListener("command", this.bound_touch, true); - this.closebutton = this.chromeDoc.createElement("toolbarbutton"); this.closebutton.setAttribute("tabindex", "0"); this.closebutton.className = "devtools-responsiveui-toolbarbutton devtools-responsiveui-close"; @@ -442,7 +437,16 @@ ResponsiveUI.prototype = { this.toolbar.appendChild(this.closebutton); this.toolbar.appendChild(this.menulist); this.toolbar.appendChild(this.rotatebutton); - this.toolbar.appendChild(this.touchbutton); + + if (!this.e10s) { + this.touchbutton = this.chromeDoc.createElement("toolbarbutton"); + this.touchbutton.setAttribute("tabindex", "0"); + this.touchbutton.setAttribute("tooltiptext", this.strings.GetStringFromName("responsiveUI.touch")); + this.touchbutton.className = "devtools-responsiveui-toolbarbutton devtools-responsiveui-touch"; + this.touchbutton.addEventListener("command", this.bound_touch, true); + this.toolbar.appendChild(this.touchbutton); + } + this.toolbar.appendChild(this.screenshotbutton); // Resizers @@ -583,8 +587,9 @@ ResponsiveUI.prototype = { this.selectedItem = menuitem; } - if (preset.custom) + if (preset.custom) { this.customMenuitem = menuitem; + } this.setMenuLabel(menuitem, preset); fragment.appendChild(menuitem); @@ -662,9 +667,7 @@ ResponsiveUI.prototype = { if (!promptOk) { // Prompt has been cancelled - let menuitem = this.customMenuitem; - this.menulist.selectedItem = menuitem; - this.currentPresetKey = this.customPreset.key; + this.menulist.selectedItem = this.selectedItem; return; } @@ -762,21 +765,7 @@ ResponsiveUI.prototype = { * @param aFileName name of the screenshot file (used for tests). */ screenshot: function RUI_screenshot(aFileName) { - let window = this.browser.contentWindow; - let document = window.document; - let canvas = this.chromeDoc.createElementNS("http://www.w3.org/1999/xhtml", "canvas"); - - let width = window.innerWidth; - let height = window.innerHeight; - - canvas.width = width; - canvas.height = height; - - let ctx = canvas.getContext("2d"); - ctx.drawWindow(window, window.scrollX, window.scrollY, width, height, "#fff"); - let filename = aFileName; - if (!filename) { let date = new Date(); let month = ("0" + (date.getMonth() + 1)).substr(-2, 2); @@ -785,12 +774,15 @@ ResponsiveUI.prototype = { let timeString = date.toTimeString().replace(/:/g, ".").split(" ")[0]; filename = this.strings.formatStringFromName("responsiveUI.screenshotGeneratedFilename", [dateString, timeString], 2); } - - canvas.toBlob(blob => { - let chromeWindow = this.chromeDoc.defaultView; - let url = chromeWindow.URL.createObjectURL(blob); - chromeWindow.saveURL(url, filename + ".png", null, true, true, document.documentURIObject, document); - }); + let mm = this.tab.linkedBrowser.messageManager; + let chromeWindow = this.chromeDoc.defaultView; + let doc = chromeWindow.document; + function onScreenshot(aMessage) { + mm.removeMessageListener("ResponsiveMode:RequestScreenshot:Done", onScreenshot); + chromeWindow.saveURL(aMessage.data, filename + ".png", null, true, true, doc.documentURIObject, doc); + } + mm.addMessageListener("ResponsiveMode:RequestScreenshot:Done", onScreenshot); + mm.sendAsyncMessage("ResponsiveMode:RequestScreenshot"); }, /** diff --git a/browser/devtools/responsivedesign/test/browser.ini b/browser/devtools/responsivedesign/test/browser.ini index ced745f44b9e..2f4599186ad1 100644 --- a/browser/devtools/responsivedesign/test/browser.ini +++ b/browser/devtools/responsivedesign/test/browser.ini @@ -1,5 +1,4 @@ [DEFAULT] -skip-if = e10s # Bug ?????? - devtools tests disabled with e10s subsuite = devtools support-files = head.js @@ -7,8 +6,11 @@ support-files = [browser_responsive_cmd.js] [browser_responsivecomputedview.js] +skip-if = e10s # Bug ?????? [browser_responsiveruleview.js] +skip-if = e10s # Bug ?????? [browser_responsiveui.js] [browser_responsiveui_touch.js] +skip-if = e10s # Bug ?????? - [e10s] re-introduce touch feature in responsive mode [browser_responsiveuiaddcustompreset.js] [browser_responsive_devicewidth.js] diff --git a/browser/devtools/responsivedesign/test/browser_responsive_cmd.js b/browser/devtools/responsivedesign/test/browser_responsive_cmd.js index a8b471447de5..28e467c85a4e 100644 --- a/browser/devtools/responsivedesign/test/browser_responsive_cmd.js +++ b/browser/devtools/responsivedesign/test/browser_responsive_cmd.js @@ -10,10 +10,11 @@ thisTestLeaksUncaughtRejectionsAndShouldBeFixed("destroy"); function test() { function isOpen() { - return !!gBrowser.selectedTab.__responsiveUI; + return gBrowser.getBrowserContainer(gBrowser.selectedTab.linkedBrowser) + .hasAttribute("responsivemode"); } - helpers.addTabWithToolbar("about:blank", function(options) { + helpers.addTabWithToolbar("data:text/html;charset=utf-8,hi", function(options) { return helpers.audit(options, [ { setup: "resize toggle", diff --git a/browser/devtools/responsivedesign/test/browser_responsive_devicewidth.js b/browser/devtools/responsivedesign/test/browser_responsive_devicewidth.js index 5ece52cb0a59..e09301697e17 100644 --- a/browser/devtools/responsivedesign/test/browser_responsive_devicewidth.js +++ b/browser/devtools/responsivedesign/test/browser_responsive_devicewidth.js @@ -7,21 +7,19 @@ function test() { waitForExplicitFinish(); - gBrowser.selectedTab = gBrowser.addTab(); + gBrowser.selectedTab = gBrowser.addTab("about:logo"); gBrowser.selectedBrowser.addEventListener("load", function onload() { gBrowser.selectedBrowser.removeEventListener("load", onload, true); - waitForFocus(startTest, content); + startTest(); }, true); - content.location = "data:text/html,mop"; - function startTest() { mgr.once("on", function() {executeSoon(onUIOpen)}); document.getElementById("Tools:ResponsiveUI").doCommand(); } function onUIOpen() { - instance = gBrowser.selectedTab.__responsiveUI; + instance = mgr.getResponsiveUIForTab(gBrowser.selectedTab); instance.stack.setAttribute("notransition", "true"); ok(instance, "instance of the module is attached to the tab."); diff --git a/browser/devtools/responsivedesign/test/browser_responsivecomputedview.js b/browser/devtools/responsivedesign/test/browser_responsivecomputedview.js index 09fed0f2574e..57e3ca619175 100644 --- a/browser/devtools/responsivedesign/test/browser_responsivecomputedview.js +++ b/browser/devtools/responsivedesign/test/browser_responsivecomputedview.js @@ -8,11 +8,12 @@ function test() { let inspector; waitForExplicitFinish(); + let mgr = ResponsiveUI.ResponsiveUIManager; gBrowser.selectedTab = gBrowser.addTab(); gBrowser.selectedBrowser.addEventListener("load", function onload() { gBrowser.selectedBrowser.removeEventListener("load", onload, true); - waitForFocus(startTest, content); + startTest(); }, true); content.location = "data:text/html;charset=utf-8,