☠☠ backed out by cd24da528bf3 ☠ ☠ | |
author | Blair McBride <bmcbride@mozilla.com> |
Thu, 19 Dec 2013 12:36:29 +1300 | |
changeset 161201 | be2eafebfb4d2816c22c5b1c171f9c5b2e4a0456 |
parent 161200 | 72a80fc289f2fd128132fdd799c3c36f85eeea1a |
child 161202 | 1cc2d61ff1a8ada8da7506b3946b3f3653ec2b3b |
push id | 25871 |
push user | cbook@mozilla.com |
push date | Thu, 19 Dec 2013 09:34:02 +0000 |
treeherder | mozilla-central@5c7fa2bfea8b [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | MattN |
bugs | 935815 |
milestone | 29.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/browser/base/content/browser.xul +++ b/browser/base/content/browser.xul @@ -197,18 +197,26 @@ <panel id="UITourTooltip" type="arrow" hidden="true" noautofocus="true" noautohide="true" align="start" orient="vertical" role="alert"> - <label id="UITourTooltipTitle" flex="1"/> - <description id="UITourTooltipDescription" flex="1"/> + <hbox> + <vbox> + <image id="UITourTooltipIcon"/> + </vbox> + <vbox flex="1"> + <label id="UITourTooltipTitle" flex="1"/> + <description id="UITourTooltipDescription" flex="1"/> + <hbox id="UITourTooltipButtons" flex="1" align="end"/> + </vbox> + </hbox> </panel> <panel id="UITourHighlightContainer" hidden="true" noautofocus="true" noautohide="true" consumeoutsideclicks="false"> <box id="UITourHighlight"></box> </panel>
--- a/browser/modules/UITour.jsm +++ b/browser/modules/UITour.jsm @@ -17,16 +17,17 @@ XPCOMUtils.defineLazyModuleGetter(this, XPCOMUtils.defineLazyModuleGetter(this, "PermissionsUtils", "resource://gre/modules/PermissionsUtils.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI", "resource:///modules/CustomizableUI.jsm"); const UITOUR_PERMISSION = "uitour"; const PREF_PERM_BRANCH = "browser.uitour."; +const MAX_BUTTONS = 4; this.UITour = { originTabs: new WeakMap(), pinnedTabs: new WeakMap(), urlbarCapture: new WeakMap(), appMenuOpenForAnnotation: new Set(), @@ -120,17 +121,44 @@ this.UITour = { case "showInfo": { let targetPromise = this.getTarget(window, data.target, true); targetPromise.then(target => { if (!target.node) { Cu.reportError("UITour: Target could not be resolved: " + data.target); return; } - this.showInfo(target, data.title, data.text); + + let iconURL = null; + if (typeof data.icon == "string") + iconURL = this.resolveURL(contentDocument, data.icon); + + let buttons = []; + if (Array.isArray(data.buttons) && data.buttons.length > 0) { + for (let buttonData of data.buttons) { + if (typeof buttonData == "object" && + typeof buttonData.label == "string" && + typeof buttonData.callbackID == "string") { + let button = { + label: buttonData.label, + callbackID: buttonData.callbackID, + }; + + if (typeof buttonData.icon == "string") + button.iconURL = this.resolveURL(contentDocument, buttonData.icon); + + buttons.push(button); + + if (buttons.length == MAX_BUTTONS) + break; + } + } + } + + this.showInfo(contentDocument, target, data.title, data.text, iconURL, buttons); }).then(null, Cu.reportError); break; } case "hideInfo": { this.hideInfo(window); break; } @@ -298,28 +326,68 @@ this.UITour = { if (aDocument.defaultView.top != aDocument.defaultView) return false; let uri = aDocument.documentURIObject; if (uri.schemeIs("chrome")) return true; - let allowedSchemes = new Set(["https"]); - if (!Services.prefs.getBoolPref("browser.uitour.requireSecure")) - allowedSchemes.add("http"); - - if (!allowedSchemes.has(uri.scheme)) + if (!this.isSafeScheme(uri)) return false; this.importPermissions(); let permission = Services.perms.testPermission(uri, UITOUR_PERMISSION); return permission == Services.perms.ALLOW_ACTION; }, + isSafeScheme: function(aURI) { + let allowedSchemes = new Set(["https"]); + if (!Services.prefs.getBoolPref("browser.uitour.requireSecure")) + allowedSchemes.add("http"); + + if (!allowedSchemes.has(aURI.scheme)) + return false; + + return true; + }, + + resolveURL: function(aDocument, aURL) { + try { + let uri = Services.io.newURI(aURL, null, aDocument.documentURIObject); + + if (!this.isSafeScheme(uri)) + return null; + + return uri.spec; + } catch (e) {} + + return null; + }, + + sendPageCallback: function(aDocument, aCallbackID, aData = {}) { + let detail = Cu.createObjectIn(aDocument.defaultView); + detail.data = Cu.createObjectIn(detail); + + for (let key of Object.keys(aData)) + detail.data[key] = aData[key]; + + Cu.makeObjectPropsNormal(detail.data); + Cu.makeObjectPropsNormal(detail); + + detail.callbackID = aCallbackID; + + let event = new aDocument.defaultView.CustomEvent("mozUITourResponse", { + bubbles: true, + detail: detail + }); + + aDocument.dispatchEvent(event); + }, + getTarget: function(aWindow, aTargetName, aSticky = false) { let deferred = Promise.defer(); if (typeof aTargetName != "string" || !aTargetName) { deferred.reject("Invalid target name specified"); return deferred.promise; } if (aTargetName == "pinnedTab") { @@ -501,46 +569,76 @@ this.UITour = { let highlighter = aWindow.document.getElementById("UITourHighlight"); highlighter.parentElement.hidePopup(); highlighter.removeAttribute("active"); this._setAppMenuStateForAnnotation(aWindow, "highlight", false); }, - showInfo: function(aAnchor, aTitle, aDescription) { + showInfo: function(aContentDocument, aAnchor, aTitle = "", aDescription = "", aIconURL = "", aButtons = []) { function showInfoPanel(aAnchorEl) { aAnchorEl.focus(); let document = aAnchorEl.ownerDocument; let tooltip = document.getElementById("UITourTooltip"); let tooltipTitle = document.getElementById("UITourTooltipTitle"); let tooltipDesc = document.getElementById("UITourTooltipDescription"); + let tooltipIcon = document.getElementById("UITourTooltipIcon"); + let tooltipButtons = document.getElementById("UITourTooltipButtons"); if (tooltip.state == "open") { tooltip.hidePopup(); } tooltipTitle.textContent = aTitle; tooltipDesc.textContent = aDescription; + tooltipIcon.src = aIconURL; + tooltipIcon.hidden = !aIconURL; + + while (tooltipButtons.firstChild) + tooltipButtons.firstChild.remove(); + + for (let button of aButtons) { + let el = document.createElement("button"); + el.setAttribute("label", button.label); + if (button.iconURL) + el.setAttribute("image", button.iconURL); + + let callbackID = button.callbackID; + el.addEventListener("command", event => { + tooltip.hidePopup(); + this.sendPageCallback(aContentDocument, callbackID); + }); + + tooltipButtons.appendChild(el); + } + + tooltipButtons.hidden = !aButtons.length; tooltip.hidden = false; let alignment = "bottomcenter topright"; tooltip.openPopup(aAnchorEl, alignment); } this._setAppMenuStateForAnnotation(aAnchor.node.ownerDocument.defaultView, "info", this.targetIsInAppMenu(aAnchor), showInfoPanel.bind(this, aAnchor.node)); }, hideInfo: function(aWindow) { - let tooltip = aWindow.document.getElementById("UITourTooltip"); + let document = aWindow.document; + + let tooltip = document.getElementById("UITourTooltip"); tooltip.hidePopup(); this._setAppMenuStateForAnnotation(aWindow, "info", false); + + let tooltipButtons = document.getElementById("UITourTooltipButtons"); + while (tooltipButtons.firstChild) + tooltipButtons.firstChild.remove(); }, showMenu: function(aWindow, aMenuName, aOpenCallback = null) { function openMenuButton(aId) { let menuBtn = aWindow.document.getElementById(aId); if (!menuBtn || !menuBtn.boxObject) { aOpenCallback(); return;
--- a/browser/modules/test/browser.ini +++ b/browser/modules/test/browser.ini @@ -1,10 +1,10 @@ [DEFAULT] support-files = head.js [browser_NetworkPrioritizer.js] [browser_SignInToWebsite.js] [browser_UITour.js] -support-files = uitour.* +support-files = uitour.* image.png [browser_taskbar_preview.js] run-if = os == "win"
--- a/browser/modules/test/browser_UITour.js +++ b/browser/modules/test/browser_UITour.js @@ -1,14 +1,15 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; let gTestTab; +let gContentWindow; let gContentAPI; Components.utils.import("resource:///modules/UITour.jsm"); function is_hidden(element) { var style = element.ownerDocument.defaultView.getComputedStyle(element, ""); if (style.display == "none") return true; @@ -61,32 +62,33 @@ function loadTestPage(callback, host = " url = url.replace("chrome://mochitests/content/", host); gTestTab = gBrowser.addTab(url); gBrowser.selectedTab = gTestTab; gTestTab.linkedBrowser.addEventListener("load", function onLoad() { gTestTab.linkedBrowser.removeEventListener("load", onLoad); - let contentWindow = Components.utils.waiveXrays(gTestTab.linkedBrowser.contentDocument.defaultView); - gContentAPI = contentWindow.Mozilla.UITour; + gContentWindow = Components.utils.waiveXrays(gTestTab.linkedBrowser.contentDocument.defaultView); + gContentAPI = gContentWindow.Mozilla.UITour; - waitForFocus(callback, contentWindow); + waitForFocus(callback, gContentWindow); }, true); } function test() { Services.prefs.setBoolPref("browser.uitour.enabled", true); let testUri = Services.io.newURI("http://example.com", null, null); Services.perms.add(testUri, "uitour", Services.perms.ALLOW_ACTION); waitForExplicitFinish(); registerCleanupFunction(function() { delete window.UITour; + delete window.gContentWindow; delete window.gContentAPI; if (gTestTab) gBrowser.removeTab(gTestTab); delete window.gTestTab; Services.prefs.clearUserPref("browser.uitour.enabled", true); Services.perms.remove("example.com", "uitour"); }); @@ -280,21 +282,26 @@ let tests = [ gContentAPI.showHighlight("urlbar", "__UNSUPPORTED__"); waitForElementToBeVisible(highlight, checkUnsupportedEffect, "Highlight should be shown after showHighlight()"); }, function test_info_1(done) { let popup = document.getElementById("UITourTooltip"); let title = document.getElementById("UITourTooltipTitle"); let desc = document.getElementById("UITourTooltipDescription"); + let icon = document.getElementById("UITourTooltipIcon"); + let buttons = document.getElementById("UITourTooltipButtons"); + popup.addEventListener("popupshown", function onPopupShown() { popup.removeEventListener("popupshown", onPopupShown); is(popup.popupBoxObject.anchorNode, document.getElementById("urlbar"), "Popup should be anchored to the urlbar"); is(title.textContent, "test title", "Popup should have correct title"); is(desc.textContent, "test text", "Popup should have correct description text"); + is(icon.src, "", "Popup should have no icon"); + is(buttons.hasChildNodes(), false, "Popup should have no buttons"); popup.addEventListener("popuphidden", function onPopupHidden() { popup.removeEventListener("popuphidden", onPopupHidden); popup.addEventListener("popupshown", function onPopupShown() { popup.removeEventListener("popupshown", onPopupShown); done(); }); @@ -306,21 +313,26 @@ let tests = [ }); gContentAPI.showInfo("urlbar", "test title", "test text"); }, function test_info_2(done) { let popup = document.getElementById("UITourTooltip"); let title = document.getElementById("UITourTooltipTitle"); let desc = document.getElementById("UITourTooltipDescription"); + let icon = document.getElementById("UITourTooltipIcon"); + let buttons = document.getElementById("UITourTooltipButtons"); + popup.addEventListener("popupshown", function onPopupShown() { popup.removeEventListener("popupshown", onPopupShown); is(popup.popupBoxObject.anchorNode, document.getElementById("urlbar"), "Popup should be anchored to the urlbar"); is(title.textContent, "urlbar title", "Popup should have correct title"); is(desc.textContent, "urlbar text", "Popup should have correct description text"); + is(icon.src, "", "Popup should have no icon"); + is(buttons.hasChildNodes(), false, "Popup should have no buttons"); gContentAPI.showInfo("search", "search title", "search text"); executeSoon(function() { is(popup.popupBoxObject.anchorNode, document.getElementById("searchbar"), "Popup should be anchored to the searchbar"); is(title.textContent, "search title", "Popup should have correct title"); is(desc.textContent, "search text", "Popup should have correct description text"); done(); @@ -372,16 +384,124 @@ let tests = [ gContentAPI.hideMenu("appMenu"); ok(!PanelUI.panel.hasAttribute("noautohide"), "@noautohide on the menu panel should have been cleaned up on close"); done(); }, "Info should move to the appMenu button"); }); }, "Info should be shown after showInfo() for fixed menu panel items"); }); }, + function test_info_icon(done) { + let popup = document.getElementById("UITourTooltip"); + let title = document.getElementById("UITourTooltipTitle"); + let desc = document.getElementById("UITourTooltipDescription"); + let icon = document.getElementById("UITourTooltipIcon"); + let buttons = document.getElementById("UITourTooltipButtons"); + + popup.addEventListener("popupshown", function onPopupShown() { + popup.removeEventListener("popupshown", onPopupShown); + + is(title.textContent, "a title", "Popup should have correct title"); + is(desc.textContent, "some text", "Popup should have correct description text"); + + let imageURL = getRootDirectory(gTestPath) + "image.png"; + imageURL = imageURL.replace("chrome://mochitests/content/", "https://example.com/"); + is(icon.src, imageURL, "Popup should have correct icon shown"); + + is(buttons.hasChildNodes(), false, "Popup should have no buttons"); + + done(); + }); + + gContentAPI.showInfo("urlbar", "a title", "some text", "image.png"); + }, + function test_info_buttons_1(done) { + let popup = document.getElementById("UITourTooltip"); + let title = document.getElementById("UITourTooltipTitle"); + let desc = document.getElementById("UITourTooltipDescription"); + let icon = document.getElementById("UITourTooltipIcon"); + + popup.addEventListener("popupshown", function onPopupShown() { + popup.removeEventListener("popupshown", onPopupShown); + + is(title.textContent, "another title", "Popup should have correct title"); + is(desc.textContent, "moar text", "Popup should have correct description text"); + + let imageURL = getRootDirectory(gTestPath) + "image.png"; + imageURL = imageURL.replace("chrome://mochitests/content/", "https://example.com/"); + is(icon.src, imageURL, "Popup should have correct icon shown"); + + let buttons = document.getElementById("UITourTooltipButtons"); + is(buttons.childElementCount, 2, "Popup should have two buttons"); + + is(buttons.childNodes[0].getAttribute("label"), "Button 1", "First button should have correct label"); + is(buttons.childNodes[0].getAttribute("image"), "", "First button should have no image"); + + is(buttons.childNodes[1].getAttribute("label"), "Button 2", "Second button should have correct label"); + is(buttons.childNodes[1].getAttribute("image"), imageURL, "Second button should have correct image"); + + popup.addEventListener("popuphidden", function onPopupHidden() { + popup.removeEventListener("popuphidden", onPopupHidden); + ok(true, "Popup should close automatically"); + + executeSoon(function() { + is(gContentWindow.callbackResult, "button1", "Correct callback should have been called"); + + done(); + }); + }); + + EventUtils.synthesizeMouseAtCenter(buttons.childNodes[0], {}, window); + }); + + let buttons = gContentWindow.makeButtons(); + gContentAPI.showInfo("urlbar", "another title", "moar text", "./image.png", buttons); + }, + function test_info_buttons_2(done) { + let popup = document.getElementById("UITourTooltip"); + let title = document.getElementById("UITourTooltipTitle"); + let desc = document.getElementById("UITourTooltipDescription"); + let icon = document.getElementById("UITourTooltipIcon"); + + popup.addEventListener("popupshown", function onPopupShown() { + popup.removeEventListener("popupshown", onPopupShown); + + is(title.textContent, "another title", "Popup should have correct title"); + is(desc.textContent, "moar text", "Popup should have correct description text"); + + let imageURL = getRootDirectory(gTestPath) + "image.png"; + imageURL = imageURL.replace("chrome://mochitests/content/", "https://example.com/"); + is(icon.src, imageURL, "Popup should have correct icon shown"); + + let buttons = document.getElementById("UITourTooltipButtons"); + is(buttons.childElementCount, 2, "Popup should have two buttons"); + + is(buttons.childNodes[0].getAttribute("label"), "Button 1", "First button should have correct label"); + is(buttons.childNodes[0].getAttribute("image"), "", "First button should have no image"); + + is(buttons.childNodes[1].getAttribute("label"), "Button 2", "Second button should have correct label"); + is(buttons.childNodes[1].getAttribute("image"), imageURL, "Second button should have correct image"); + + popup.addEventListener("popuphidden", function onPopupHidden() { + popup.removeEventListener("popuphidden", onPopupHidden); + ok(true, "Popup should close automatically"); + + executeSoon(function() { + is(gContentWindow.callbackResult, "button2", "Correct callback should have been called"); + + done(); + }); + }); + + EventUtils.synthesizeMouseAtCenter(buttons.childNodes[1], {}, window); + }); + + let buttons = gContentWindow.makeButtons(); + gContentAPI.showInfo("urlbar", "another title", "moar text", "./image.png", buttons); + }, function test_pinnedTab(done) { is(UITour.pinnedTabs.get(window), null, "Should not already have a pinned tab"); gContentAPI.addPinnedTab(); let tabInfo = UITour.pinnedTabs.get(window); isnot(tabInfo, null, "Should have recorded data about a pinned tab after addPinnedTab()"); isnot(tabInfo.tab, null, "Should have added a pinned tab after addPinnedTab()"); is(tabInfo.tab.pinned, true, "Tab should be marked as pinned");
new file mode 100644 index 0000000000000000000000000000000000000000..597c7fd2cbd328857894d0d4aefcdafcb9feea36 GIT binary patch literal 56060 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 Pj&Y1*9OD@OKjVJ@Kf`l$
--- a/browser/modules/test/uitour.html +++ b/browser/modules/test/uitour.html @@ -1,15 +1,31 @@ <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>UITour test</title> <script type="application/javascript" src="uitour.js"> </script> + <script type="application/javascript"> + var callbackResult; + function makeCallback(name) { + return (function() { + callbackResult = name; + }); + } + + // Defined in content to avoid weird issues when crossing between chrome/content. + function makeButtons() { + return [ + {label: "Button 1", callback: makeCallback("button1")}, + {label: "Button 2", callback: makeCallback("button2"), icon: "image.png"} + ]; + } + </script> </head> <body> <h1>UITour tests</h1> <p>Because Firefox is...</p> <p>Never gonna let you down</p> <p>Never gonna give you up</p> </body> </html>
--- a/browser/modules/test/uitour.js +++ b/browser/modules/test/uitour.js @@ -20,47 +20,80 @@ if (typeof Mozilla == 'undefined') { var themeIntervalId = null; function _stopCyclingThemes() { if (themeIntervalId) { clearInterval(themeIntervalId); themeIntervalId = null; } } - function _sendEvent(action, data) { var event = new CustomEvent('mozUITour', { bubbles: true, detail: { action: action, data: data || {} } }); - console.log("Sending mozUITour event: ", event); + document.dispatchEvent(event); } + function _generateCallbackID() { + return Math.random().toString(36).replace(/[^a-z]+/g, ''); + } + + function _waitForCallback(callback) { + var id = _generateCallbackID(); + + function listener(event) { + if (typeof event.detail != "object") + return; + if (event.detail.callbackID != id) + return; + + document.removeEventListener("mozUITourResponse", listener); + callback(event.detail.data); + } + document.addEventListener("mozUITourResponse", listener); + + return id; + } + Mozilla.UITour.DEFAULT_THEME_CYCLE_DELAY = 10 * 1000; Mozilla.UITour.showHighlight = function(target, effect) { _sendEvent('showHighlight', { target: target, effect: effect }); }; Mozilla.UITour.hideHighlight = function() { _sendEvent('hideHighlight'); }; - Mozilla.UITour.showInfo = function(target, title, text) { + Mozilla.UITour.showInfo = function(target, title, text, icon, buttons) { + var buttonData = []; + if (Array.isArray(buttons)) { + for (var i = 0; i < buttons.length; i++) { + buttonData.push({ + label: buttons[i].label, + icon: buttons[i].icon, + callbackID: _waitForCallback(buttons[i].callback) + }); + } + } + _sendEvent('showInfo', { target: target, title: title, - text: text + text: text, + icon: icon, + buttons: buttonData }); }; Mozilla.UITour.hideInfo = function() { _sendEvent('hideInfo'); }; Mozilla.UITour.previewTheme = function(theme) {
--- a/browser/themes/shared/UITour.inc.css +++ b/browser/themes/shared/UITour.inc.css @@ -17,21 +17,33 @@ background-image: radial-gradient(50% 100%, rgba(0,149,220,0.4) 50%, rgba(0,149,220,0.6) 100%); border-radius: 40px; border: 1px solid white; box-shadow: 0 0 3px 0 rgba(0,0,0,0.5); min-height: 32px; min-width: 32px; } -#UITourTooltip { - max-width: 20em; +#UITourTooltipIcon { + width: 48px; + height: 48px; + padding: 8px; } #UITourTooltipTitle { font-size: 130%; font-weight: bold; margin: 0 0 5px 0; } #UITourTooltipDescription { max-width: 20em; } + +#UITourTooltipButtons { + height: 5em; +} + +#UITourTooltipButtons > button[image] > .button-box > .button-icon { + width: 16px; + height: 16px; + -moz-margin-end: 5px; +}