diff --git a/browser/components/loop/content/js/conversationViews.js b/browser/components/loop/content/js/conversationViews.js index a0e038ef824..947eb730512 100644 --- a/browser/components/loop/content/js/conversationViews.js +++ b/browser/components/loop/content/js/conversationViews.js @@ -330,6 +330,7 @@ loop.conversationViews = (function(mozL10n) { var errorString; switch (this.props.failureReason) { + case FAILURE_DETAILS.NO_MEDIA: case FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA: errorString = mozL10n.get("no_media_failure_message"); break; diff --git a/browser/components/loop/content/js/conversationViews.jsx b/browser/components/loop/content/js/conversationViews.jsx index e5a4be3163d..9f8dd046b10 100644 --- a/browser/components/loop/content/js/conversationViews.jsx +++ b/browser/components/loop/content/js/conversationViews.jsx @@ -330,6 +330,7 @@ loop.conversationViews = (function(mozL10n) { var errorString; switch (this.props.failureReason) { + case FAILURE_DETAILS.NO_MEDIA: case FAILURE_DETAILS.UNABLE_TO_PUBLISH_MEDIA: errorString = mozL10n.get("no_media_failure_message"); break; diff --git a/browser/components/loop/content/shared/js/otSdkDriver.js b/browser/components/loop/content/shared/js/otSdkDriver.js index fc725f44159..f7db5325f21 100644 --- a/browser/components/loop/content/shared/js/otSdkDriver.js +++ b/browser/components/loop/content/shared/js/otSdkDriver.js @@ -978,7 +978,7 @@ loop.OTSdkDriver = (function() { var bucket = this.mozLoop.SHARING_STATE_CHANGE[type.toUpperCase() + "_" + (enabled ? "ENABLED" : "DISABLED")]; - if (!bucket) { + if (typeof bucket === "undefined") { console.error("No sharing state bucket found for '" + type + "'"); return; } diff --git a/browser/components/loop/modules/LoopRooms.jsm b/browser/components/loop/modules/LoopRooms.jsm index 67848107732..22efbb5d63a 100644 --- a/browser/components/loop/modules/LoopRooms.jsm +++ b/browser/components/loop/modules/LoopRooms.jsm @@ -241,7 +241,7 @@ let LoopRoomsInternal = { * @param {String} roomToken The token for the room that needs encrypting. */ queueForEncryption: function(roomToken) { - if (!this.encryptionQueue.queue.includes(roomToken)) { + if (this.encryptionQueue.queue.indexOf(roomToken) == -1) { this.encryptionQueue.queue.push(roomToken); } diff --git a/browser/components/loop/test/desktop-local/conversationViews_test.js b/browser/components/loop/test/desktop-local/conversationViews_test.js index 6f12a5785b4..2dde856da29 100644 --- a/browser/components/loop/test/desktop-local/conversationViews_test.js +++ b/browser/components/loop/test/desktop-local/conversationViews_test.js @@ -939,6 +939,15 @@ describe("loop.conversationViews", function () { expect(view.getDOMNode().querySelector("h2").textContent).eql("no_media_failure_message"); }); + it("should show 'no media' for FAILURE_DETAILS.NO_MEDIA reason", function() { + view = mountTestComponent({ + cancelCall: function() {}, + failureReason: FAILURE_DETAILS.NO_MEDIA + }); + + expect(view.getDOMNode().querySelector("h2").textContent).eql("no_media_failure_message"); + }); + it("should show 'generic_failure_title' when no reason is specified", function() { view = mountTestComponent({cancelCall: function() {}}); diff --git a/browser/components/loop/test/shared/otSdkDriver_test.js b/browser/components/loop/test/shared/otSdkDriver_test.js index 50f60e0b6f0..b6bd1fa6e28 100644 --- a/browser/components/loop/test/shared/otSdkDriver_test.js +++ b/browser/components/loop/test/shared/otSdkDriver_test.js @@ -78,16 +78,16 @@ describe("loop.OTSdkDriver", function () { mozLoop = { telemetryAddValue: sinon.stub(), TWO_WAY_MEDIA_CONN_LENGTH: { - SHORTER_THAN_10S: "SHORTER_THAN_10S", - BETWEEN_10S_AND_30S: "BETWEEN_10S_AND_30S", - BETWEEN_30S_AND_5M: "BETWEEN_30S_AND_5M", - MORE_THAN_5M: "MORE_THAN_5M" + SHORTER_THAN_10S: 0, + BETWEEN_10S_AND_30S: 1, + BETWEEN_30S_AND_5M: 2, + MORE_THAN_5M: 3 }, SHARING_STATE_CHANGE: { - WINDOW_ENABLED: "WINDOW_ENABLED", - WINDOW_DISABLED: "WINDOW_DISABLED", - BROWSER_ENABLED: "BROWSER_ENABLED", - BROWSER_DISABLED: "BROWSER_DISABLED" + WINDOW_ENABLED: 0, + WINDOW_DISABLED: 1, + BROWSER_ENABLED: 2, + BROWSER_DISABLED: 3 } }; diff --git a/browser/devtools/canvasdebugger/canvasdebugger.js b/browser/devtools/canvasdebugger/canvasdebugger.js index ab769c643c8..7518b6d3bb0 100644 --- a/browser/devtools/canvasdebugger/canvasdebugger.js +++ b/browser/devtools/canvasdebugger/canvasdebugger.js @@ -190,8 +190,8 @@ EventEmitter.decorate(this); /** * DOM query helpers. */ -function $(selector, target = document) target.querySelector(selector); -function $all(selector, target = document) target.querySelectorAll(selector); +let $ = (selector, target = document) => target.querySelector(selector); +let $all = (selector, target = document) => target.querySelectorAll(selector); /** * Helper for getting an nsIURL instance out of a string. diff --git a/browser/devtools/canvasdebugger/panel.js b/browser/devtools/canvasdebugger/panel.js index 8061a9552f2..b90d4d89815 100644 --- a/browser/devtools/canvasdebugger/panel.js +++ b/browser/devtools/canvasdebugger/panel.js @@ -57,7 +57,9 @@ CanvasDebuggerPanel.prototype = { // DevToolPanel API - get target() this._toolbox.target, + get target() { + return this._toolbox.target; + }, destroy: function() { // Make sure this panel is not already destroyed. diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-01.js index 032d5e53956..9b6ee4e4fc7 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-01.js @@ -6,7 +6,7 @@ * You can also use this initialization format as a template for other tests. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCallWatcherBackend(SIMPLE_CANVAS_URL); ok(target, "Should have a target available."); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-02.js index 8a98c19cc45..bb3f00d8b67 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-02.js @@ -6,7 +6,7 @@ * and that their stack is successfully retrieved. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCallWatcherBackend(SIMPLE_CANVAS_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-03.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-03.js index 32d94d59dae..ee29b98df75 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-03.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-03.js @@ -6,7 +6,7 @@ * for a canvas context. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SIMPLE_CANVAS_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-04.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-04.js index 0684e2e714d..d3c7d766194 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-04.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-04.js @@ -6,7 +6,7 @@ * the correct thumbnails. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SIMPLE_CANVAS_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-05.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-05.js index 3e475ec2bb5..e13dab9a411 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-05.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-05.js @@ -6,7 +6,7 @@ * the correct "end result" screenshot. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SIMPLE_CANVAS_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-06.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-06.js index 9a279a4d56d..511db666786 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-06.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-06.js @@ -5,7 +5,7 @@ * Tests if screenshots for arbitrary draw calls are generated properly. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SIMPLE_CANVAS_TRANSPARENT_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-07.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-07.js index b54913b57ec..deadd817596 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-07.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-07.js @@ -6,7 +6,7 @@ * by deferring the the most recent previous draw-call. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SIMPLE_CANVAS_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-08.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-08.js index de40f2d1b13..f3aeda1a9a5 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-08.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-08.js @@ -6,7 +6,7 @@ * forms if the method's signature does not expect an enum. Bug 999687. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SIMPLE_BITMASKS_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-09.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-09.js index 68321c8c996..d123e3319f7 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-09.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-09.js @@ -6,7 +6,7 @@ * forms if the method's signature does not expect an enum. Bug 999687. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(WEBGL_ENUM_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-10.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-10.js index 9761b4bac7f..672ef966276 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-10.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-10.js @@ -6,7 +6,7 @@ * after generating screenshots using the actor. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(WEBGL_BINDINGS_URL); loadFrameScripts(); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-11.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-11.js index ac862a49065..a202b5d8cae 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-11.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-11.js @@ -6,7 +6,7 @@ * for a canvas context, and that the generated screenshots are correct. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(SET_TIMEOUT_URL); let navigated = once(target, "navigate"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-12.js b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-12.js index 498abb25c34..86e51931ea8 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-12.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-actor-test-12.js @@ -6,7 +6,7 @@ * in the event no rAF loop is found. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, front } = yield initCanvasDebuggerBackend(NO_CANVAS_URL); loadFrameScripts(); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-highlight.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-highlight.js index 230c9d005d9..2270f0ccf7a 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-highlight.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-highlight.js @@ -5,7 +5,7 @@ * Tests if certain function calls are properly highlighted in the UI. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-list.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-list.js index f661199c1d0..013830224f0 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-list.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-list.js @@ -6,7 +6,7 @@ * are properly displayed in the UI. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-search.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-search.js index 4c7ee90200b..de2105bb827 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-search.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-search.js @@ -5,7 +5,7 @@ * Tests if filtering the items in the call list works properly. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; let searchbox = $("#calls-searchbox"); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js index 8254fe4e397..92ca163e573 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-01.js @@ -5,7 +5,7 @@ * Tests if the a function call's stack is properly displayed in the UI. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_DEEP_STACK_URL); let { window, $, $all, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js index ee85fee4c79..bc3be3e169b 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-02.js @@ -6,7 +6,7 @@ * and jumping to source in the debugger for the topmost call item works. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_DEEP_STACK_URL); let { window, $, $all, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js index 70b392608b3..796e329123c 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-call-stack-03.js @@ -6,7 +6,7 @@ * on a function call item. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_DEEP_STACK_URL); let { window, $, $all, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-clear.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-clear.js index 4dbc72fd777..c800820465b 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-clear.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-clear.js @@ -5,7 +5,7 @@ * Tests if clearing the snapshots list works as expected. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, EVENTS, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js index 193becb4940..e96543e10ed 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-screenshots.js @@ -5,7 +5,7 @@ * Tests if screenshots are properly displayed in the UI. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js index 4d0df626883..41e8f7383a4 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-01.js @@ -5,7 +5,7 @@ * Tests if thumbnails are properly displayed in the UI. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, $all, EVENTS, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js index e5e56dac5df..798bc090bd7 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-img-thumbnails-02.js @@ -6,7 +6,7 @@ * function call items and their respective screenshots. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, $all, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-open.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-open.js index 20b06dbae93..59c4d4cfb71 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-open.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-open.js @@ -5,7 +5,7 @@ * Tests that the frontend UI is properly configured when opening the tool. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { $ } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-01.js index 1b317127aa5..cd0358d3c6e 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-01.js @@ -5,7 +5,7 @@ * Tests whether the frontend behaves correctly while reording a snapshot. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, EVENTS, $, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-02.js index f25988d25d8..aee63a5746a 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-02.js @@ -5,7 +5,7 @@ * Tests whether the frontend displays a placeholder snapshot while recording. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, EVENTS, L10N, $, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-03.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-03.js index 456d992bc51..c3638610ee1 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-03.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-03.js @@ -6,7 +6,7 @@ * after finishing recording. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, EVENTS, $, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-04.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-04.js index 9bf921887a3..0ff9ed67f5f 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-04.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-record-04.js @@ -8,7 +8,7 @@ * of its loop, when the recording starts before the rAFs start. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(RAF_BEGIN_URL); let { window, EVENTS, gFront, SnapshotsListView } = panel.panelWin; loadFrameScripts(); diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-01.js index 9ebea8d9687..cf353aa2729 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-01.js @@ -5,7 +5,7 @@ * Tests that the frontend UI is properly reconfigured after reloading. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-02.js index 46c67295778..2747fd13f9d 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-reload-02.js @@ -5,7 +5,7 @@ * Tests that the frontend UI is properly reconfigured after reloading. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, $all, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-01.js index adc39c238bb..cdce00bd1d3 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-01.js @@ -5,7 +5,7 @@ * Tests if the slider in the calls list view works as advertised. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-02.js index 974083fc076..5074ab206a0 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-slider-02.js @@ -5,7 +5,7 @@ * Tests if the slider in the calls list view works as advertised. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, gFront, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js index 13e4ed70c26..135f3b0e4f7 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-01.js @@ -6,7 +6,7 @@ * respective to their recorded animation frame. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js index cceb8a56889..27a03fb517d 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-snapshot-select-02.js @@ -6,7 +6,7 @@ * respective to their recorded animation frame. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stepping.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stepping.js index 8eecea1db77..d76449b91ef 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stepping.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stepping.js @@ -5,7 +5,7 @@ * Tests if the stepping buttons in the call list toolbar work as advertised. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(SIMPLE_CANVAS_URL); let { window, $, EVENTS, SnapshotsListView, CallsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-01.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-01.js index 6eddbaaefad..3a74e4b44ed 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-01.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-01.js @@ -5,7 +5,7 @@ * Tests that you can stop a recording that does not have a rAF cycle. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(NO_CANVAS_URL); let { window, EVENTS, $, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-02.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-02.js index 1c5ec718bbb..b062fbc5e39 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-02.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-02.js @@ -5,7 +5,7 @@ * Tests that a recording that does not have a rAF cycle fails after timeout. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(NO_CANVAS_URL); let { window, EVENTS, $, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-03.js b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-03.js index cdc4115ace0..70948311dd7 100644 --- a/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-03.js +++ b/browser/devtools/canvasdebugger/test/browser_canvas-frontend-stop-03.js @@ -6,7 +6,7 @@ * after timeout. */ -function ifTestingSupported() { +function* ifTestingSupported() { let { target, panel } = yield initCanvasDebuggerFrontend(RAF_NO_CANVAS_URL); let { window, EVENTS, $, SnapshotsListView } = panel.panelWin; diff --git a/browser/devtools/shared/test/browser.ini b/browser/devtools/shared/test/browser.ini index 12899fc2415..02dfc15580b 100644 --- a/browser/devtools/shared/test/browser.ini +++ b/browser/devtools/shared/test/browser.ini @@ -66,6 +66,7 @@ support-files = [browser_graphs-09f.js] [browser_graphs-10a.js] [browser_graphs-10b.js] +[browser_graphs-10c.js] [browser_graphs-11a.js] [browser_graphs-11b.js] [browser_graphs-12.js] diff --git a/browser/devtools/shared/test/browser_graphs-10c.js b/browser/devtools/shared/test/browser_graphs-10c.js new file mode 100644 index 00000000000..e802f6c1462 --- /dev/null +++ b/browser/devtools/shared/test/browser_graphs-10c.js @@ -0,0 +1,86 @@ + +// Tests that graphs properly handle resizing. + +const TEST_DATA = [{ delta: 112, value: 48 }, { delta: 213, value: 59 }, { delta: 313, value: 60 }, { delta: 413, value: 59 }, { delta: 530, value: 59 }, { delta: 646, value: 58 }, { delta: 747, value: 60 }, { delta: 863, value: 48 }, { delta: 980, value: 37 }, { delta: 1097, value: 30 }, { delta: 1213, value: 29 }, { delta: 1330, value: 23 }, { delta: 1430, value: 10 }, { delta: 1534, value: 17 }, { delta: 1645, value: 20 }, { delta: 1746, value: 22 }, { delta: 1846, value: 39 }, { delta: 1963, value: 26 }, { delta: 2080, value: 27 }, { delta: 2197, value: 35 }, { delta: 2312, value: 47 }, { delta: 2412, value: 53 }, { delta: 2514, value: 60 }, { delta: 2630, value: 37 }, { delta: 2730, value: 36 }, { delta: 2830, value: 37 }, { delta: 2946, value: 36 }, { delta: 3046, value: 40 }, { delta: 3163, value: 47 }, { delta: 3280, value: 41 }, { delta: 3380, value: 35 }, { delta: 3480, value: 27 }, { delta: 3580, value: 39 }, { delta: 3680, value: 42 }, { delta: 3780, value: 49 }, { delta: 3880, value: 55 }, { delta: 3980, value: 60 }, { delta: 4080, value: 60 }, { delta: 4180, value: 60 }]; +let {LineGraphWidget} = Cu.import("resource:///modules/devtools/Graphs.jsm", {}); +let {Promise} = devtools.require("resource://gre/modules/Promise.jsm"); + +add_task(function*() { + yield promiseTab("about:blank"); + yield performTest(); + gBrowser.removeCurrentTab(); +}); + +function* performTest() { + let [host, win, doc] = yield createHost("window"); + doc.body.setAttribute("style", "position: fixed; width: 100%; height: 100%; margin: 0;"); + + let graph = new LineGraphWidget(doc.body, "fps"); + yield graph.once("ready"); + + let refreshCount = 0; + graph.on("refresh", () => refreshCount++); + + yield testGraph(host, graph); + + is(refreshCount, 2, "The graph should've been refreshed 2 times."); + + yield graph.destroy(); + host.destroy(); +} + +function* testGraph(host, graph) { + graph.setData(TEST_DATA); + + host._window.resizeTo(500, 500); + yield graph.once("refresh"); + let oldBounds = host.frame.getBoundingClientRect(); + + is (graph._width, oldBounds.width * window.devicePixelRatio, + "The window was properly resized (1)."); + is (graph._height, oldBounds.height * window.devicePixelRatio, + "The window was properly resized (1)."); + + dragStart(graph, 100); + dragStop(graph, 400); + + is(graph.getSelection().start, 100, + "The current selection start value is correct (1)."); + is(graph.getSelection().end, 400, + "The current selection end value is correct (1)."); + + info("Making sure the selection updates when the window is resized"); + + host._window.resizeTo(250, 250); + yield graph.once("refresh"); + let newBounds = host.frame.getBoundingClientRect(); + + is (graph._width, newBounds.width * window.devicePixelRatio, + "The window was properly resized (2)."); + is (graph._height, newBounds.height * window.devicePixelRatio, + "The window was properly resized (2)."); + + let ratio = oldBounds.width / newBounds.width; + info("The window resize ratio is: " + ratio); + + is(graph.getSelection().start, Math.round(100 / ratio), + "The current selection start value is correct (2)."); + is(graph.getSelection().end, Math.round(400 / ratio), + "The current selection end value is correct (2)."); +} + +// EventUtils just doesn't work! + +function dragStart(graph, x, y = 1) { + x /= window.devicePixelRatio; + y /= window.devicePixelRatio; + graph._onMouseMove({ testX: x, testY: y }); + graph._onMouseDown({ testX: x, testY: y }); +} + +function dragStop(graph, x, y = 1) { + x /= window.devicePixelRatio; + y /= window.devicePixelRatio; + graph._onMouseMove({ testX: x, testY: y }); + graph._onMouseUp({ testX: x, testY: y }); +} diff --git a/browser/devtools/shared/widgets/Graphs.jsm b/browser/devtools/shared/widgets/Graphs.jsm index b109a491709..4be2bcf28cc 100644 --- a/browser/devtools/shared/widgets/Graphs.jsm +++ b/browser/devtools/shared/widgets/Graphs.jsm @@ -684,6 +684,13 @@ AbstractCanvasGraph.prototype = { return; } + // Handle a changed size by mapping the old selection to the new width + if (this._width && newWidth && this.hasSelection()) { + let ratio = this._width / (newWidth * this._pixelRatio); + this._selection.start = Math.round(this._selection.start / ratio); + this._selection.end = Math.round(this._selection.end / ratio); + } + bounds.width = newWidth; bounds.height = newHeight; this._iframe.setAttribute("width", bounds.width); diff --git a/browser/devtools/styleinspector/computed-view.js b/browser/devtools/styleinspector/computed-view.js index b73fdd84ecc..e52d385dafd 100644 --- a/browser/devtools/styleinspector/computed-view.js +++ b/browser/devtools/styleinspector/computed-view.js @@ -151,6 +151,7 @@ function CssHtmlTree(aStyleInspector, aPageStyle) this._onClick = this._onClick.bind(this); this._onCopy = this._onCopy.bind(this); this._onCopyColor = this._onCopyColor.bind(this); + this._onCopyImageDataUrl = this._onCopyImageDataUrl.bind(this); this._onFilterStyles = this._onFilterStyles.bind(this); this._onFilterKeyPress = this._onFilterKeyPress.bind(this); this._onClearSearch = this._onClearSearch.bind(this); @@ -328,7 +329,7 @@ CssHtmlTree.prototype = { * - type {String} One of the VIEW_NODE_XXX_TYPE const in * style-inspector-overlays * - value {Object} Depends on the type of the node - * returns null of the node isn't anything we care about + * returns null if the node isn't anything we care about */ getNodeInfo: function(node) { if (!node) { @@ -351,7 +352,7 @@ CssHtmlTree.prototype = { return { type: overlays.VIEW_NODE_SELECTOR_TYPE, value: selectorText.trim() - } + }; } // Walk up the nodes to find out where node is @@ -715,6 +716,13 @@ CssHtmlTree.prototype = { command: this._onCopyColor }); + // Copy data URI + this.menuitemCopyImageDataUrl = createMenuItem(this._contextmenu, { + label: "styleinspector.contextmenu.copyImageDataUrl", + accesskey: "styleinspector.contextmenu.copyImageDataUrl.accessKey", + command: this._onCopyImageDataUrl + }); + // Show Original Sources this.menuitemSources= createMenuItem(this._contextmenu, { label: "ruleView.contextmenu.showOrigSources", @@ -745,6 +753,7 @@ CssHtmlTree.prototype = { this.menuitemSources.setAttribute("checked", showOrig); this.menuitemCopyColor.hidden = !this._isColorPopup(); + this.menuitemCopyImageDataUrl.hidden = !this._isImageUrlPopup(); }, /** @@ -757,14 +766,12 @@ CssHtmlTree.prototype = { _isColorPopup: function () { this._colorToCopy = ""; - let trigger = this.popupNode; - if (!trigger) { + + let container = this._getPopupNodeContainer(); + if (!container) { return false; } - let container = (trigger.nodeType == trigger.TEXT_NODE) ? - trigger.parentElement : trigger; - let isColorNode = el => el.dataset && "color" in el.dataset; while (!isColorNode(container)) { @@ -778,6 +785,52 @@ CssHtmlTree.prototype = { return true; }, + /** + * Check if the context menu popup was opened with a click on an image link + * If true, save the image url to this._imageUrlToCopy + */ + _isImageUrlPopup: function () { + this._imageUrlToCopy = ""; + + let container = this._getPopupNodeContainer(); + let isImageUrlNode = this._isImageUrlNode(container); + if (isImageUrlNode) { + this._imageUrlToCopy = container.href; + } + + return isImageUrlNode; + }, + + /** + * Check if a node is an image url + * @param {DOMNode} node The node which we want information about + * @return {Boolean} true if the node is an image url + */ + _isImageUrlNode: function (node) { + let nodeInfo = this.getNodeInfo(node); + if (!nodeInfo) { + return false + } + return nodeInfo.type == overlays.VIEW_NODE_IMAGE_URL_TYPE; + }, + + /** + * Get the DOM Node container for the current popupNode. + * If popupNode is a textNode, return the parent node, otherwise return popupNode itself. + * @return {DOMNode} + */ + _getPopupNodeContainer: function () { + let container = null; + let node = this.popupNode; + + if (node) { + let isTextNode = node.nodeType == node.TEXT_NODE; + container = isTextNode ? node.parentElement : node; + } + + return container; + }, + /** * Context menu handler. */ @@ -821,6 +874,22 @@ CssHtmlTree.prototype = { clipboardHelper.copyString(this._colorToCopy); }, + /** + * Retrieve the image data for the selected image url and copy it to the clipboard + */ + _onCopyImageDataUrl: Task.async(function*() { + let message; + try { + let inspectorFront = this.inspector.inspector; + let data = yield inspectorFront.getImageDataFromURL(this._imageUrlToCopy); + message = yield data.data.string(); + } catch (e) { + message = CssHtmlTree.l10n("styleinspector.copyImageDataUrlError"); + } + + clipboardHelper.copyString(message); + }), + /** * Copy selected text. * @@ -910,6 +979,10 @@ CssHtmlTree.prototype = { this.menuitemCopyColor.removeEventListener("command", this._onCopyColor); this.menuitemCopyColor = null; + // Destroy Copy Data URI menuitem. + this.menuitemCopyImageDataUrl.removeEventListener("command", this._onCopyImageDataUrl); + this.menuitemCopyImageDataUrl = null; + // Destroy the context menu. this._contextmenu.removeEventListener("popupshowing", this._contextMenuUpdate); this._contextmenu.parentNode.removeChild(this._contextmenu); diff --git a/browser/devtools/styleinspector/rule-view.js b/browser/devtools/styleinspector/rule-view.js index 3debeeacd86..b8193624aeb 100644 --- a/browser/devtools/styleinspector/rule-view.js +++ b/browser/devtools/styleinspector/rule-view.js @@ -1123,6 +1123,7 @@ function CssRuleView(aInspector, aDoc, aStore, aPageStyle) { this._onSelectAll = this._onSelectAll.bind(this); this._onCopy = this._onCopy.bind(this); this._onCopyColor = this._onCopyColor.bind(this); + this._onCopyImageDataUrl = this._onCopyImageDataUrl.bind(this); this._onToggleOrigSources = this._onToggleOrigSources.bind(this); this._onShowMdnDocs = this._onShowMdnDocs.bind(this); this._onFilterStyles = this._onFilterStyles.bind(this); @@ -1214,6 +1215,11 @@ CssRuleView.prototype = { accesskey: "ruleView.contextmenu.copyColor.accessKey", command: this._onCopyColor }); + this.menuitemCopyImageDataUrl = createMenuItem(this._contextmenu, { + label: "styleinspector.contextmenu.copyImageDataUrl", + accesskey: "styleinspector.contextmenu.copyImageDataUrl.accessKey", + command: this._onCopyImageDataUrl + }); this.menuitemSources = createMenuItem(this._contextmenu, { label: "ruleView.contextmenu.showOrigSources", accesskey: "ruleView.contextmenu.showOrigSources.accessKey", @@ -1348,6 +1354,7 @@ CssRuleView.prototype = { } this.menuitemCopyColor.hidden = !this._isColorPopup(); + this.menuitemCopyImageDataUrl.hidden = !this._isImageUrlPopup(); this.menuitemCopy.disabled = !copy; var showOrig = Services.prefs.getBoolPref(PREF_ORIG_SOURCES); @@ -1398,7 +1405,7 @@ CssRuleView.prototype = { pseudoElement: prop.rule.pseudoElement, sheetHref: prop.rule.domRule.href }; - } else if (classes.contains("theme-link") && prop) { + } else if (classes.contains("theme-link") && !classes.contains("ruleview-rule-source") && prop) { type = overlays.VIEW_NODE_IMAGE_URL_TYPE; value = { property: getPropertyNameAndValue(node).name, @@ -1430,14 +1437,11 @@ CssRuleView.prototype = { _isColorPopup: function () { this._colorToCopy = ""; - let trigger = this.doc.popupNode; - if (!trigger) { + let container = this._getPopupNodeContainer(); + if (!container) { return false; } - let container = (trigger.nodeType == trigger.TEXT_NODE) ? - trigger.parentElement : trigger; - let isColorNode = el => el.dataset && "color" in el.dataset; while (!isColorNode(container)) { @@ -1451,6 +1455,52 @@ CssRuleView.prototype = { return true; }, + /** + * Check if the context menu popup was opened with a click on an image link + * If true, save the image url to this._imageUrlToCopy + */ + _isImageUrlPopup: function () { + this._imageUrlToCopy = ""; + + let container = this._getPopupNodeContainer(); + let isImageUrlNode = this._isImageUrlNode(container); + if (isImageUrlNode) { + this._imageUrlToCopy = container.href; + } + + return isImageUrlNode; + }, + + /** + * Check if a node is an image url + * @param {DOMNode} node The node which we want information about + * @return {Boolean} true if the node is an image url + */ + _isImageUrlNode: function (node) { + let nodeInfo = this.getNodeInfo(node); + if (!nodeInfo) { + return false + } + return nodeInfo.type == overlays.VIEW_NODE_IMAGE_URL_TYPE; + }, + + /** + * Get the DOM Node container for the current popupNode. + * If popupNode is a textNode, return the parent node, otherwise return popupNode itself. + * @return {DOMNode} + */ + _getPopupNodeContainer: function () { + let container = null; + let node = this.doc.popupNode; + + if (node) { + let isTextNode = node.nodeType == node.TEXT_NODE; + container = isTextNode ? node.parentElement : node; + } + + return container; + }, + /** * Context menu handler. */ @@ -1525,6 +1575,22 @@ CssRuleView.prototype = { clipboardHelper.copyString(this._colorToCopy); }, + /** + * Retrieve the image data for the selected image url and copy it to the clipboard + */ + _onCopyImageDataUrl: Task.async(function*() { + let message; + try { + let inspectorFront = this.inspector.inspector; + let data = yield inspectorFront.getImageDataFromURL(this._imageUrlToCopy); + message = yield data.data.string(); + } catch (e) { + message = _strings.GetStringFromName("styleinspector.copyImageDataUrlError"); + } + + clipboardHelper.copyString(message); + }), + /** * Toggle the original sources pref. */ @@ -1729,6 +1795,10 @@ CssRuleView.prototype = { this.menuitemCopyColor.removeEventListener("command", this._onCopyColor); this.menuitemCopyColor = null; + // Destroy Copy Data URI menuitem. + this.menuitemCopyImageDataUrl.removeEventListener("command", this._onCopyImageDataUrl); + this.menuitemCopyImageDataUrl = null; + this.menuitemSources.removeEventListener("command", this._onToggleOrigSources); this.menuitemSources = null; diff --git a/browser/devtools/styleinspector/style-inspector-overlays.js b/browser/devtools/styleinspector/style-inspector-overlays.js index 6f3def550b7..c2e2d0ffa13 100644 --- a/browser/devtools/styleinspector/style-inspector-overlays.js +++ b/browser/devtools/styleinspector/style-inspector-overlays.js @@ -21,6 +21,7 @@ const { SwatchFilterTooltip } = require("devtools/shared/widgets/Tooltip"); const {CssLogic} = require("devtools/styleinspector/css-logic"); +const EventEmitter = require("devtools/toolkit/event-emitter"); const {Promise:promise} = Cu.import("resource://gre/modules/Promise.jsm", {}); Cu.import("resource://gre/modules/Task.jsm"); Cu.import("resource://gre/modules/Services.jsm"); @@ -59,6 +60,8 @@ function HighlightersOverlay(view) { // Only initialize the overlay if at least one of the highlighter types is // supported this.supportsHighlighters = this.highlighterUtils.supportsCustomHighlighters(); + + EventEmitter.decorate(this); } exports.HighlightersOverlay = HighlightersOverlay; @@ -124,9 +127,13 @@ HighlightersOverlay.prototype = { if (type) { this.highlighterShown = type; let node = this.view.inspector.selection.nodeFront; - this._getHighlighter(type).then(highlighter => { - highlighter.show(node); - }); + this._getHighlighter(type) + .then(highlighter => highlighter.show(node)) + .then(shown => { + if (shown) { + this.emit("highlighter-shown"); + } + }); } }, @@ -176,6 +183,7 @@ HighlightersOverlay.prototype = { promise.then(null, Cu.reportError); } this.highlighterShown = null; + this.emit("highlighter-hidden"); }); } }, diff --git a/browser/devtools/styleinspector/test/browser.ini b/browser/devtools/styleinspector/test/browser.ini index 8747e503f7f..1bfc4fdc3ea 100644 --- a/browser/devtools/styleinspector/test/browser.ini +++ b/browser/devtools/styleinspector/test/browser.ini @@ -151,6 +151,7 @@ skip-if = e10s # bug 1040670 Cannot open inline styles in viewSourceUtils [browser_ruleview_user-property-reset.js] [browser_styleinspector_context-menu-copy-color_01.js] [browser_styleinspector_context-menu-copy-color_02.js] +[browser_styleinspector_context-menu-copy-data-uri.js] [browser_styleinspector_csslogic-content-stylesheets.js] [browser_styleinspector_output-parser.js] [browser_styleinspector_refresh_when_active.js] diff --git a/browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-data-uri.js b/browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-data-uri.js new file mode 100644 index 00000000000..95f3523ed33 --- /dev/null +++ b/browser/devtools/styleinspector/test/browser_styleinspector_context-menu-copy-data-uri.js @@ -0,0 +1,99 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +const PROPERTIES_URL = "chrome://global/locale/devtools/styleinspector.properties"; +const TEST_DATA_URI = "data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACwAAAAAAQABAAACAkQBADs="; + +// invalid URL still needs to be reachable otherwise getImageDataUrl will timeout. +// Reusing the properties bundle URL as a workaround +const INVALID_IMAGE_URI = PROPERTIES_URL; + +const ERROR_MESSAGE = Services.strings + .createBundle(PROPERTIES_URL) + .GetStringFromName("styleinspector.copyImageDataUrlError"); + +add_task(function*() { + const PAGE_CONTENT = [ + "", + "