diff -r 000000000000 -r 6474c204b198 toolkit/devtools/gcli/commands/paintflashing.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/toolkit/devtools/gcli/commands/paintflashing.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,129 @@ +/* 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/. */ + +"use strict"; + +const { Cc, Ci, Cu } = require("chrome"); +const TargetFactory = require("resource://gre/modules/devtools/Loader.jsm").devtools.TargetFactory; + +const Telemetry = require("devtools/shared/telemetry"); +const telemetry = new Telemetry(); + +const EventEmitter = require("devtools/toolkit/event-emitter"); +const eventEmitter = new EventEmitter(); + +const gcli = require("gcli/index"); + +function onPaintFlashingChanged(context) { + let tab = context.environment.chromeWindow.gBrowser.selectedTab; + eventEmitter.emit("changed", tab); + function fireChange() { + eventEmitter.emit("changed", tab); + } + let target = TargetFactory.forTab(tab); + target.off("navigate", fireChange); + target.once("navigate", fireChange); + + let window = context.environment.window; + let wUtils = window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowUtils); + if (wUtils.paintFlashing) { + telemetry.toolOpened("paintflashing"); + } else { + telemetry.toolClosed("paintflashing"); + } +} + +exports.items = [ + { + name: "paintflashing", + description: gcli.lookup("paintflashingDesc") + }, + { + name: "paintflashing on", + description: gcli.lookup("paintflashingOnDesc"), + manual: gcli.lookup("paintflashingManual"), + params: [{ + group: "options", + params: [ + { + type: "boolean", + name: "chrome", + get hidden() gcli.hiddenByChromePref(), + description: gcli.lookup("paintflashingChromeDesc"), + } + ] + }], + exec: function(args, context) { + let window = args.chrome ? + context.environment.chromeWindow : + context.environment.window; + + window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowUtils) + .paintFlashing = true; + onPaintFlashingChanged(context); + } + }, + { + name: "paintflashing off", + description: gcli.lookup("paintflashingOffDesc"), + manual: gcli.lookup("paintflashingManual"), + params: [{ + group: "options", + params: [ + { + type: "boolean", + name: "chrome", + get hidden() gcli.hiddenByChromePref(), + description: gcli.lookup("paintflashingChromeDesc"), + } + ] + }], + exec: function(args, context) { + let window = args.chrome ? + context.environment.chromeWindow : + context.environment.window; + + window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIDOMWindowUtils) + .paintFlashing = false; + onPaintFlashingChanged(context); + } + }, + { + name: "paintflashing toggle", + hidden: true, + buttonId: "command-button-paintflashing", + buttonClass: "command-button command-button-invertable", + state: { + isChecked: function(aTarget) { + if (aTarget.isLocalTab) { + let window = aTarget.tab.linkedBrowser.contentWindow; + let wUtils = window.QueryInterface(Ci.nsIInterfaceRequestor). + getInterface(Ci.nsIDOMWindowUtils); + return wUtils.paintFlashing; + } else { + throw new Error("Unsupported target"); + } + }, + onChange: function(aTarget, aChangeHandler) { + eventEmitter.on("changed", aChangeHandler); + }, + offChange: function(aTarget, aChangeHandler) { + eventEmitter.off("changed", aChangeHandler); + }, + }, + tooltipText: gcli.lookup("paintflashingTooltip"), + description: gcli.lookup("paintflashingToggleDesc"), + manual: gcli.lookup("paintflashingManual"), + exec: function(args, context) { + let window = context.environment.window; + let wUtils = window.QueryInterface(Ci.nsIInterfaceRequestor). + getInterface(Ci.nsIDOMWindowUtils); + wUtils.paintFlashing = !wUtils.paintFlashing; + onPaintFlashingChanged(context); + } + } +];