From 466e2d486669e2d94c5b120afdebcd3b687dc4b7 Mon Sep 17 00:00:00 2001 From: Dave Camp Date: Thu, 11 Apr 2013 13:59:08 -0700 Subject: [PATCH] Bug 855914 - Start using the jetpack loader in devtools. r=jwalker, f=ochameau --HG-- rename : browser/devtools/framework/Sidebar.jsm => browser/devtools/framework/sidebar.js rename : browser/devtools/framework/Target.jsm => browser/devtools/framework/target.js rename : browser/devtools/framework/ToolboxHosts.jsm => browser/devtools/framework/toolbox-hosts.js rename : browser/devtools/framework/Toolbox.jsm => browser/devtools/framework/toolbox.js rename : browser/devtools/inspector/Breadcrumbs.jsm => browser/devtools/inspector/breadcrumbs.js rename : browser/devtools/inspector/Highlighter.jsm => browser/devtools/inspector/highlighter.js rename : browser/devtools/inspector/InspectorPanel.jsm => browser/devtools/inspector/inspector-panel.js rename : browser/devtools/inspector/Selection.jsm => browser/devtools/inspector/selection.js rename : browser/devtools/inspector/SelectorSearch.jsm => browser/devtools/inspector/selector-search.js rename : browser/devtools/framework/ToolDefinitions.jsm => browser/devtools/main.js rename : browser/devtools/markupview/MarkupView.jsm => browser/devtools/markupview/markup-view.js rename : browser/devtools/shared/EventEmitter.jsm => browser/devtools/shared/event-emitter.js rename : browser/devtools/shared/InplaceEditor.jsm => browser/devtools/shared/inplace-editor.js rename : browser/devtools/shared/Undo.jsm => browser/devtools/shared/undo.js rename : browser/devtools/styleinspector/CssHtmlTree.jsm => browser/devtools/styleinspector/computed-view.js rename : browser/devtools/styleinspector/CssLogic.jsm => browser/devtools/styleinspector/css-logic.js rename : browser/devtools/styleinspector/CssRuleView.jsm => browser/devtools/styleinspector/rule-view.js rename : browser/devtools/styleinspector/StyleInspector.jsm => browser/devtools/styleinspector/style-inspector.js rename : browser/devtools/tilt/TiltGL.jsm => browser/devtools/tilt/tilt-gl.js rename : browser/devtools/tilt/TiltMath.jsm => browser/devtools/tilt/tilt-math.js rename : browser/devtools/tilt/TiltUtils.jsm => browser/devtools/tilt/tilt-utils.js rename : browser/devtools/tilt/TiltVisualizerStyle.jsm => browser/devtools/tilt/tilt-visualizer-style.js rename : browser/devtools/tilt/TiltVisualizer.jsm => browser/devtools/tilt/tilt-visualizer.js rename : browser/devtools/tilt/Tilt.jsm => browser/devtools/tilt/tilt.js --- browser/base/content/nsContextMenu.js | 5 +- browser/devtools/Makefile.in | 15 ++ .../devtools/commandline/BuiltinCommands.jsm | 90 ++++++- browser/devtools/commandline/test/helpers.js | 3 +- browser/devtools/debugger/DebuggerPanel.jsm | 2 +- browser/devtools/debugger/test/head.js | 4 +- browser/devtools/debugger/test/helpers.js | 3 +- .../test/browser_fontinspector.js | 4 +- browser/devtools/framework/Makefile.in | 1 + browser/devtools/framework/gDevTools.jsm | 225 ++++++++++++++++-- .../framework/{Sidebar.jsm => sidebar.js} | 12 +- .../framework/{Target.jsm => target.js} | 15 +- .../framework/test/browser_devtools_api.js | 4 +- .../test/browser_new_activation_workflow.js | 2 - .../framework/test/browser_target_events.js | 4 - .../browser_toolbox_dynamic_registration.js | 4 - .../framework/test/browser_toolbox_hosts.js | 6 +- .../framework/test/browser_toolbox_ready.js | 4 - .../framework/test/browser_toolbox_sidebar.js | 6 +- .../test/browser_toolbox_window_shortcuts.js | 5 +- .../browser_toolbox_window_title_changes.js | 10 +- browser/devtools/framework/test/head.js | 7 +- .../{ToolboxHosts.jsm => toolbox-hosts.js} | 11 +- .../framework/{Toolbox.jsm => toolbox.js} | 88 +------ browser/devtools/inspector/CmdInspect.jsm | 6 +- browser/devtools/inspector/Makefile.in | 1 + .../{Breadcrumbs.jsm => breadcrumbs.js} | 10 +- .../{Highlighter.jsm => highlighter.js} | 11 +- ...{InspectorPanel.jsm => inspector-panel.js} | 40 ++-- .../inspector/{Selection.jsm => selection.js} | 12 +- ...{SelectorSearch.jsm => selector-search.js} | 16 +- ...tor_bug_840156_destroy_after_navigation.js | 13 +- .../test/browser_inspector_initialization.js | 4 - .../browser_inspector_pseudoclass_lock.js | 4 - .../test/browser_inspector_sidebarstate.js | 4 - browser/devtools/inspector/test/head.js | 7 +- browser/devtools/inspector/test/helpers.js | 3 +- .../layoutview/test/browser_layoutview.js | 5 +- browser/devtools/layoutview/view.js | 3 +- .../ToolDefinitions.jsm => main.js} | 129 +++++----- browser/devtools/markupview/Makefile.in | 2 +- .../{MarkupView.jsm => markup-view.js} | 23 +- .../test/browser_inspector_markup_edit.js | 2 +- browser/devtools/markupview/test/head.js | 7 +- .../devtools/netmonitor/NetMonitorPanel.jsm | 2 +- .../netmonitor/netmonitor-controller.js | 2 +- browser/devtools/netmonitor/test/head.js | 4 +- browser/devtools/profiler/ProfilerPanel.jsm | 2 +- browser/devtools/profiler/test/head.js | 4 +- .../responsivedesign/responsivedesign.jsm | 3 +- .../devtools/responsivedesign/test/head.js | 5 +- .../devtools/responsivedesign/test/helpers.js | 3 +- browser/devtools/scratchpad/scratchpad.js | 3 +- browser/devtools/shared/DeveloperToolbar.jsm | 6 +- browser/devtools/shared/Makefile.in | 1 + .../{EventEmitter.jsm => event-emitter.js} | 13 +- .../{InplaceEditor.jsm => inplace-editor.js} | 20 +- .../shared/test/browser_eventemitter_basic.js | 2 +- browser/devtools/shared/test/head.js | 3 +- browser/devtools/shared/{Undo.jsm => undo.js} | 7 +- .../devtools/styleeditor/StyleEditorPanel.jsm | 2 +- ...styleeditor_bug_826982_location_changed.js | 4 - .../test/browser_styleeditor_reopen.js | 4 - browser/devtools/styleeditor/test/head.js | 4 +- browser/devtools/styleeditor/test/helpers.js | 3 +- browser/devtools/styleinspector/Makefile.in | 2 +- .../{CssHtmlTree.jsm => computed-view.js} | 32 +-- .../styleinspector/computedview.xhtml | 5 +- .../{CssLogic.jsm => css-logic.js} | 15 +- .../devtools/styleinspector/cssruleview.xhtml | 5 +- .../{CssRuleView.jsm => rule-view.js} | 24 +- ...{StyleInspector.jsm => style-inspector.js} | 47 ++-- .../styleinspector/test/browser_bug683672.js | 4 +- ...browser_bug705707_is_content_stylesheet.js | 5 +- ...owser_bug722196_rule_view_media_queries.js | 3 - .../browser_bug722691_rule_view_increment.js | 5 - .../test/browser_bug_592743_specificity.js | 4 - .../test/browser_csslogic_inherited.js | 4 - .../test/browser_ruleview_editor.js | 5 - .../browser_ruleview_editor_changedvalues.js | 5 - .../test/browser_ruleview_inherit.js | 5 - .../test/browser_ruleview_manipulation.js | 5 - .../test/browser_ruleview_override.js | 5 - .../test/browser_ruleview_ui.js | 5 - .../test/browser_ruleview_update.js | 5 - browser/devtools/styleinspector/test/head.js | 14 +- browser/devtools/tilt/CmdTilt.jsm | 13 +- browser/devtools/tilt/Makefile.in | 2 +- browser/devtools/tilt/test/head.js | 22 +- .../devtools/tilt/{TiltGL.jsm => tilt-gl.js} | 17 +- .../tilt/{TiltMath.jsm => tilt-math.js} | 31 ++- .../tilt/{TiltUtils.jsm => tilt-utils.js} | 7 +- ...izerStyle.jsm => tilt-visualizer-style.js} | 9 +- ...{TiltVisualizer.jsm => tilt-visualizer.js} | 34 +-- browser/devtools/tilt/{Tilt.jsm => tilt.js} | 23 +- browser/devtools/webconsole/HUDService.jsm | 31 ++- browser/devtools/webconsole/Makefile.in | 3 + .../devtools/webconsole/WebConsolePanel.jsm | 6 +- browser/devtools/webconsole/test/head.js | 3 +- browser/devtools/webconsole/webconsole.js | 20 +- .../browser/devtools/gclicommands.properties | 47 ++++ .../tests/unit/test_prefixset.js | 1 - .../devtools/webconsole/WebConsoleUtils.jsm | 7 +- 103 files changed, 776 insertions(+), 633 deletions(-) create mode 100644 browser/devtools/Makefile.in rename browser/devtools/framework/{Sidebar.jsm => sidebar.js} (94%) rename browser/devtools/framework/{Target.jsm => target.js} (97%) rename browser/devtools/framework/{ToolboxHosts.jsm => toolbox-hosts.js} (97%) rename browser/devtools/framework/{Toolbox.jsm => toolbox.js} (86%) rename browser/devtools/inspector/{Breadcrumbs.jsm => breadcrumbs.js} (98%) rename browser/devtools/inspector/{Highlighter.jsm => highlighter.js} (98%) rename browser/devtools/inspector/{InspectorPanel.jsm => inspector-panel.js} (93%) rename browser/devtools/inspector/{Selection.jsm => selection.js} (95%) rename browser/devtools/inspector/{SelectorSearch.jsm => selector-search.js} (95%) rename browser/devtools/{framework/ToolDefinitions.jsm => main.js} (66%) rename browser/devtools/markupview/{MarkupView.jsm => markup-view.js} (98%) rename browser/devtools/shared/{EventEmitter.jsm => event-emitter.js} (93%) rename browser/devtools/shared/{InplaceEditor.jsm => inplace-editor.js} (98%) rename browser/devtools/shared/{Undo.jsm => undo.js} (97%) rename browser/devtools/styleinspector/{CssHtmlTree.jsm => computed-view.js} (97%) rename browser/devtools/styleinspector/{CssLogic.jsm => css-logic.js} (99%) rename browser/devtools/styleinspector/{CssRuleView.jsm => rule-view.js} (99%) rename browser/devtools/styleinspector/{StyleInspector.jsm => style-inspector.js} (85%) rename browser/devtools/tilt/{TiltGL.jsm => tilt-gl.js} (99%) rename browser/devtools/tilt/{TiltMath.jsm => tilt-math.js} (99%) rename browser/devtools/tilt/{TiltUtils.jsm => tilt-utils.js} (99%) rename browser/devtools/tilt/{TiltVisualizerStyle.jsm => tilt-visualizer-style.js} (87%) rename browser/devtools/tilt/{TiltVisualizer.jsm => tilt-visualizer.js} (98%) rename browser/devtools/tilt/{Tilt.jsm => tilt.js} (95%) diff --git a/browser/base/content/nsContextMenu.js b/browser/base/content/nsContextMenu.js index 655c258a7224..e8a1a88bcade 100644 --- a/browser/base/content/nsContextMenu.js +++ b/browser/base/content/nsContextMenu.js @@ -437,10 +437,9 @@ nsContextMenu.prototype = { }, inspectNode: function CM_inspectNode() { + let {devtools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); let gBrowser = this.browser.ownerDocument.defaultView.gBrowser; - let imported = {}; - Cu.import("resource:///modules/devtools/Target.jsm", imported); - let tt = imported.TargetFactory.forTab(gBrowser.selectedTab); + let tt = devtools.TargetFactory.forTab(gBrowser.selectedTab); return gDevTools.showToolbox(tt, "inspector").then(function(toolbox) { let inspector = toolbox.getCurrentPanel(); inspector.selection.setNode(this.target, "browser-context-menu"); diff --git a/browser/devtools/Makefile.in b/browser/devtools/Makefile.in new file mode 100644 index 000000000000..5f0adb705338 --- /dev/null +++ b/browser/devtools/Makefile.in @@ -0,0 +1,15 @@ +# 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/. + +DEPTH = @DEPTH@ +topsrcdir = @top_srcdir@ +srcdir = @srcdir@ +VPATH = @srcdir@ + +include $(topsrcdir)/config/config.mk + +include $(topsrcdir)/config/rules.mk + +libs:: + $(NSINSTALL) $(srcdir)/main.js $(FINAL_TARGET)/modules/devtools diff --git a/browser/devtools/commandline/BuiltinCommands.jsm b/browser/devtools/commandline/BuiltinCommands.jsm index abc955663df5..c10e2e3624ab 100644 --- a/browser/devtools/commandline/BuiltinCommands.jsm +++ b/browser/devtools/commandline/BuiltinCommands.jsm @@ -14,13 +14,13 @@ this.EXPORTED_SYMBOLS = [ "CmdAddonFlags", "CmdCommands" ]; Cu.import("resource:///modules/devtools/gcli.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/osfile.jsm") -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +Cu.import("resource://gre/modules/osfile.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", "resource:///modules/devtools/gDevTools.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", - "resource:///modules/devtools/Target.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "devtools", + "resource:///modules/devtools/gDevTools.jsm"); /* CmdAddon ---------------------------------------------------------------- */ @@ -325,9 +325,6 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", return global.Debugger; }); - XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", - "resource:///modules/devtools/Target.jsm"); - let debuggers = []; /** @@ -357,7 +354,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", debuggers.push(dbg); let gBrowser = context.environment.chromeDocument.defaultView.gBrowser; - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); gDevTools.showToolbox(target, "webconsole"); return gcli.lookup("calllogStartReply"); @@ -509,7 +506,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", }.bind(this); let gBrowser = context.environment.chromeDocument.defaultView.gBrowser; - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); gDevTools.showToolbox(target, "webconsole"); return gcli.lookup("calllogChromeStartReply"); @@ -755,7 +752,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", description: gcli.lookup("consolecloseDesc"), exec: function Command_consoleClose(args, context) { let gBrowser = context.environment.chromeDocument.defaultView.gBrowser; - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); return gDevTools.closeToolbox(target); } }); @@ -768,7 +765,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", description: gcli.lookup("consoleopenDesc"), exec: function Command_consoleOpen(args, context) { let gBrowser = context.environment.chromeDocument.defaultView.gBrowser; - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); return gDevTools.showToolbox(target, "webconsole"); } }); @@ -1519,6 +1516,75 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", } }(this)); +/* CmdTools -------------------------------------------------------------- */ + +(function(module) { + gcli.addCommand({ + name: "tools", + description: gcli.lookup("toolsDesc"), + manual: gcli.lookup("toolsManual"), + get hidden() gcli.hiddenByChromePref(), + }); + + gcli.addCommand({ + name: "tools srcdir", + description: gcli.lookup("toolsSrcdirDesc"), + manual: gcli.lookup("toolsSrcdirManual"), + get hidden() gcli.hiddenByChromePref(), + params: [ + { + name: "srcdir", + type: "string", + description: gcli.lookup("toolsSrcdirDir") + } + ], + returnType: "string", + exec: function(args, context) { + let promise = context.createPromise(); + let existsPromise = OS.File.exists(args.srcdir + "/CLOBBER"); + existsPromise.then(function(exists) { + if (exists) { + var str = Cc["@mozilla.org/supports-string;1"] + .createInstance(Ci.nsISupportsString); + str.data = args.srcdir; + Services.prefs.setComplexValue("devtools.loader.srcdir", + Components.interfaces.nsISupportsString, str); + devtools.reload(); + promise.resolve(gcli.lookupFormat("toolsSrcdirReloaded", [args.srcdir])); + return; + } + promise.reject(gcli.lookupFormat("toolsSrcdirNotFound", [args.srcdir])); + }); + return promise; + } + }); + + gcli.addCommand({ + name: "tools builtin", + description: gcli.lookup("toolsBuiltinDesc"), + manual: gcli.lookup("toolsBuiltinManual"), + get hidden() gcli.hiddenByChromePref(), + returnType: "string", + exec: function(args, context) { + Services.prefs.clearUserPref("devtools.loader.srcdir"); + devtools.reload(); + return gcli.lookup("toolsBuiltinReloaded"); + } + }); + + gcli.addCommand({ + name: "tools reload", + description: gcli.lookup("toolsReloadDesc"), + get hidden() gcli.hiddenByChromePref() || !Services.prefs.prefHasUserValue("devtools.loader.srcdir"), + + returnType: "string", + exec: function(args, context) { + devtools.reload(); + return gcli.lookup("toolsReloaded"); + } + }); +}(this)); + /* CmdRestart -------------------------------------------------------------- */ (function(module) { @@ -1913,7 +1979,7 @@ XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", function fireChange() { eventEmitter.emit("changed", tab); } - var target = TargetFactory.forTab(tab); + var target = devtools.TargetFactory.forTab(tab); target.off("navigate", fireChange); target.once("navigate", fireChange); } diff --git a/browser/devtools/commandline/test/helpers.js b/browser/devtools/commandline/test/helpers.js index 3ff7f7935a0a..f1204d2b96dc 100644 --- a/browser/devtools/commandline/test/helpers.js +++ b/browser/devtools/commandline/test/helpers.js @@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req Components.utils.import("resource:///modules/devtools/gcli.jsm", {}); let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console; -let TargetFactory = (Cu.import("resource:///modules/devtools/Target.jsm", {})).TargetFactory; +let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools; +let TargetFactory = devtools.TargetFactory; let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise; let assert = { ok: ok, is: is, log: info }; diff --git a/browser/devtools/debugger/DebuggerPanel.jsm b/browser/devtools/debugger/DebuggerPanel.jsm index f43de5bf0a98..478954645e0f 100644 --- a/browser/devtools/debugger/DebuggerPanel.jsm +++ b/browser/devtools/debugger/DebuggerPanel.jsm @@ -10,7 +10,7 @@ const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; this.EXPORTED_SYMBOLS = ["DebuggerPanel"]; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/commonjs/sdk/core/promise.js"); diff --git a/browser/devtools/debugger/test/head.js b/browser/devtools/debugger/test/head.js index fbe75385bcd4..d12cbd5fbde7 100644 --- a/browser/devtools/debugger/test/head.js +++ b/browser/devtools/debugger/test/head.js @@ -12,14 +12,14 @@ Cu.import("resource://gre/modules/devtools/dbg-server.jsm", tempScope); Cu.import("resource://gre/modules/devtools/dbg-client.jsm", tempScope); Cu.import("resource:///modules/source-editor.jsm", tempScope); Cu.import("resource:///modules/devtools/gDevTools.jsm", tempScope); -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); let Services = tempScope.Services; let SourceEditor = tempScope.SourceEditor; let DebuggerServer = tempScope.DebuggerServer; let DebuggerTransport = tempScope.DebuggerTransport; let DebuggerClient = tempScope.DebuggerClient; let gDevTools = tempScope.gDevTools; -let TargetFactory = tempScope.TargetFactory; +let devtools = tempScope.devtools; +let TargetFactory = devtools.TargetFactory; // Import the GCLI test helper let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/")); diff --git a/browser/devtools/debugger/test/helpers.js b/browser/devtools/debugger/test/helpers.js index 3ff7f7935a0a..f1204d2b96dc 100644 --- a/browser/devtools/debugger/test/helpers.js +++ b/browser/devtools/debugger/test/helpers.js @@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req Components.utils.import("resource:///modules/devtools/gcli.jsm", {}); let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console; -let TargetFactory = (Cu.import("resource:///modules/devtools/Target.jsm", {})).TargetFactory; +let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools; +let TargetFactory = devtools.TargetFactory; let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise; let assert = { ok: ok, is: is, log: info }; diff --git a/browser/devtools/fontinspector/test/browser_fontinspector.js b/browser/devtools/fontinspector/test/browser_fontinspector.js index a5d89438530a..0dfdc35273a7 100644 --- a/browser/devtools/fontinspector/test/browser_fontinspector.js +++ b/browser/devtools/fontinspector/test/browser_fontinspector.js @@ -2,8 +2,8 @@ http://creativecommons.org/publicdomain/zero/1.0/ */ let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; +let {devtools, gDevTools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); +let TargetFactory = devtools.TargetFactory; let DOMUtils = Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils); diff --git a/browser/devtools/framework/Makefile.in b/browser/devtools/framework/Makefile.in index fe75dad69a8f..5ea7a0c9665d 100644 --- a/browser/devtools/framework/Makefile.in +++ b/browser/devtools/framework/Makefile.in @@ -13,3 +13,4 @@ include $(topsrcdir)/config/rules.mk libs:: $(NSINSTALL) $(srcdir)/*.jsm $(FINAL_TARGET)/modules/devtools + $(NSINSTALL) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/framework diff --git a/browser/devtools/framework/gDevTools.jsm b/browser/devtools/framework/gDevTools.jsm index c5820d7431aa..e93652d6cb93 100644 --- a/browser/devtools/framework/gDevTools.jsm +++ b/browser/devtools/framework/gDevTools.jsm @@ -4,19 +4,192 @@ "use strict"; -this.EXPORTED_SYMBOLS = [ "gDevTools", "DevTools", "gDevToolsBrowser" ]; +this.EXPORTED_SYMBOLS = [ "gDevTools", "DevTools", "gDevToolsBrowser", "devtools" ]; const { classes: Cc, interfaces: Ci, utils: Cu } = Components; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); +Cu.import("resource://gre/modules/FileUtils.jsm"); +Cu.import("resource://gre/modules/NetUtil.jsm"); Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); -Cu.import("resource:///modules/devtools/ToolDefinitions.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Toolbox", - "resource:///modules/devtools/Toolbox.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", - "resource:///modules/devtools/Target.jsm"); + +XPCOMUtils.defineLazyModuleGetter(this, "OS", "resource://gre/modules/osfile.jsm"); + +let loader = Cu.import("resource://gre/modules/commonjs/toolkit/loader.js", {}).Loader; + +// Used when the tools should be loaded from the Firefox package itself (the default) + +var BuiltinProvider = { + load: function(done) { + this.loader = new loader.Loader({ + paths: { + "": "resource://gre/modules/commonjs/", + "main" : "resource:///modules/devtools/main", + "devtools": "resource:///modules/devtools", + "devtools/toolkit": "resource://gre/modules/devtools" + }, + globals: {}, + }); + this.main = loader.main(this.loader, "main"); + + return Promise.resolve(undefined); + }, + + unload: function(reason) { + loader.unload(this.loader, reason); + delete this.loader; + }, +}; + +var SrcdirProvider = { + load: function(done) { + let srcdir = Services.prefs.getComplexValue("devtools.loader.srcdir", + Ci.nsISupportsString); + srcdir = OS.Path.normalize(srcdir.data.trim()); + let devtoolsDir = OS.Path.join(srcdir, "browser/devtools"); + let toolkitDir = OS.Path.join(srcdir, "toolkit/devtools"); + + this.loader = new loader.Loader({ + paths: { + "": "resource://gre/modules/commonjs/", + "devtools/toolkit": "file://" + toolkitDir, + "devtools": "file://" + devtoolsDir, + "main": "file://" + devtoolsDir + "/main.js" + }, + globals: {} + }); + + this.main = loader.main(this.loader, "main"); + + return this._writeManifest(devtoolsDir).then((data) => { + this._writeManifest(toolkitDir); + }).then(null, Cu.reportError); + }, + + unload: function(reason) { + loader.unload(this.loader, reason); + delete this.loader; + }, + + _readFile: function(filename) { + let deferred = Promise.defer(); + let file = new FileUtils.File(filename); + NetUtil.asyncFetch(file, (inputStream, status) => { + if (!Components.isSuccessCode(status)) { + deferred.reject(new Error("Couldn't load manifest: " + filename + "\n")); + return; + } + var data = NetUtil.readInputStreamToString(inputStream, inputStream.available()); + deferred.resolve(data); + }); + return deferred.promise; + }, + + _writeFile: function(filename, data) { + let deferred = Promise.defer(); + let file = new FileUtils.File(filename); + + var ostream = FileUtils.openSafeFileOutputStream(file) + + var converter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]. + createInstance(Ci.nsIScriptableUnicodeConverter); + converter.charset = "UTF-8"; + var istream = converter.convertToInputStream(data); + NetUtil.asyncCopy(istream, ostream, (status) => { + if (!Components.isSuccessCode(status)) { + deferred.reject(new Error("Couldn't write manifest: " + filename + "\n")); + return; + } + + deferred.resolve(null); + }); + return deferred.promise; + }, + + _writeManifest: function(dir) { + return this._readFile(dir + "/jar.mn").then((data) => { + // The file data is contained within inputStream. + // You can read it into a string with + let entries = []; + let lines = data.split(/\n/); + let preprocessed = /^\s*\*/; + let contentEntry = new RegExp("^\\s+content/(\\w+)/(\\S+)\\s+\\((\\S+)\\)"); + for (let line of lines) { + if (preprocessed.test(line)) { + dump("Unable to override preprocessed file: " + line + "\n"); + continue; + } + let match = contentEntry.exec(line); + if (match) { + let entry = "override chrome://" + match[1] + "/content/" + match[2] + "\tfile://" + dir + "/" + match[3]; + entries.push(entry); + } + } + return this._writeFile(dir + "/chrome.manifest", entries.join("\n")); + }).then(() => { + Components.manager.addBootstrappedManifestLocation(new FileUtils.File(dir)); + }); + } +}; + +this.devtools = { + _provider: null, + + get main() this._provider.main, + + // This is a gross gross hack. In one place (computed-view.js) we use + // Iterator, but the addon-sdk loader takes Iterator off the global. + // Give computed-view.js a way to get back to the Iterator until we have + // a chance to fix that crap. + _Iterator: Iterator, + + setProvider: function(provider) { + if (provider === this._provider) { + return; + } + + if (this._provider) { + delete this.require; + this._provider.unload("newprovider"); + gDevTools._teardown(); + } + this._provider = provider; + this._provider.load(); + this.require = loader.Require(this._provider.loader, { id: "devtools" }) + + let exports = this._provider.main; + // Let clients find exports on this object. + for (let key of Object.getOwnPropertyNames(exports)) { + this[key] = exports[key]; + } + }, + + /** + * Choose a default tools provider based on the preferences. + */ + _chooseProvider: function() { + if (Services.prefs.prefHasUserValue("devtools.loader.srcdir")) { + this.setProvider(SrcdirProvider); + } else { + this.setProvider(BuiltinProvider); + } + }, + + /** + * Reload the current provider. + */ + reload: function() { + var events = devtools.require("sdk/system/events"); + events.emit("startupcache-invalidate", {}); + + this._provider.unload("reload"); + delete this._provider; + gDevTools._teardown(); + this._chooseProvider(); + }, +}; const FORBIDDEN_IDS = new Set(["toolbox", ""]); @@ -34,11 +207,6 @@ this.DevTools = function DevTools() { EventEmitter.decorate(this); Services.obs.addObserver(this.destroy, "quit-application", false); - - // Register the set of default tools - for (let definition of defaultTools) { - this.registerTool(definition); - } } DevTools.prototype = { @@ -189,7 +357,7 @@ DevTools.prototype = { } else { // No toolbox for target, create one - toolbox = new Toolbox(target, toolId, hostType); + toolbox = new devtools.Toolbox(target, toolId, hostType); this._toolboxes.set(target, toolbox); @@ -242,6 +410,15 @@ DevTools.prototype = { return toolbox.destroy(); }, + /** + * Called to tear down a tools provider. + */ + _teardown: function DT_teardown() { + for (let [target, toolbox] of this._toolboxes) { + toolbox.destroy(); + } + }, + /** * All browser windows have been closed, tidy up remaining objects. */ @@ -284,12 +461,20 @@ let gDevToolsBrowser = { * of there */ toggleToolboxCommand: function(gBrowser) { - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); let toolbox = gDevTools.getToolbox(target); toolbox ? toolbox.destroy() : gDevTools.showToolbox(target); }, + toggleBrowserToolboxCommand: function(gBrowser) { + let target = devtools.TargetFactory.forWindow(gBrowser.ownerDocument.defaultView); + let toolbox = gDevTools.getToolbox(target); + + toolbox ? toolbox.destroy() + : gDevTools.showToolbox(target, "inspector", Toolbox.HostType.WINDOW); + }, + /** * This function is for the benefit of Tools:{toolId} commands, * triggered from the WebDeveloper menu and keyboard shortcuts. @@ -305,11 +490,11 @@ let gDevToolsBrowser = { * and the host is a window, we raise the toolbox window */ selectToolCommand: function(gBrowser, toolId) { - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); let toolbox = gDevTools.getToolbox(target); if (toolbox && toolbox.currentToolId == toolId) { - if (toolbox.hostType == Toolbox.HostType.WINDOW) { + if (toolbox.hostType == devtools.Toolbox.HostType.WINDOW) { toolbox.raise(); } else { toolbox.destroy(); @@ -532,8 +717,8 @@ let gDevToolsBrowser = { for (let win of gDevToolsBrowser._trackedBrowserWindows) { let hasToolbox = false; - if (TargetFactory.isKnownTab(win.gBrowser.selectedTab)) { - let target = TargetFactory.forTab(win.gBrowser.selectedTab); + if (devtools.TargetFactory.isKnownTab(win.gBrowser.selectedTab)) { + let target = devtools.TargetFactory.forTab(win.gBrowser.selectedTab); if (gDevTools._toolboxes.has(target)) { hasToolbox = true; } @@ -639,3 +824,7 @@ gDevTools.on("toolbox-ready", gDevToolsBrowser._updateMenuCheckbox); gDevTools.on("toolbox-destroyed", gDevToolsBrowser._updateMenuCheckbox); Services.obs.addObserver(gDevToolsBrowser.destroy, "quit-application", false); + +// Now, load the tools. +devtools._chooseProvider(); + diff --git a/browser/devtools/framework/Sidebar.jsm b/browser/devtools/framework/sidebar.js similarity index 94% rename from browser/devtools/framework/Sidebar.jsm rename to browser/devtools/framework/sidebar.js index 14d14eb36da8..0e7cd2c8cc27 100644 --- a/browser/devtools/framework/Sidebar.jsm +++ b/browser/devtools/framework/sidebar.js @@ -4,12 +4,8 @@ * 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 { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; - -this.EXPORTED_SYMBOLS = ["ToolSidebar"]; - -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +var Promise = require("sdk/core/promise"); +var EventEmitter = require("devtools/shared/event-emitter"); const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; @@ -24,7 +20,7 @@ const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; * @param {Boolean} showTabstripe * Show the tabs. */ -this.ToolSidebar = function ToolSidebar(tabbox, panel, showTabstripe=true) +function ToolSidebar(tabbox, panel, showTabstripe=true) { EventEmitter.decorate(this); @@ -41,6 +37,8 @@ this.ToolSidebar = function ToolSidebar(tabbox, panel, showTabstripe=true) } } +exports.ToolSidebar = ToolSidebar; + ToolSidebar.prototype = { /** * Register a tab. A tab is a document. diff --git a/browser/devtools/framework/Target.jsm b/browser/devtools/framework/target.js similarity index 97% rename from browser/devtools/framework/Target.jsm rename to browser/devtools/framework/target.js index 94b8c0988f88..25fb3233c4a1 100644 --- a/browser/devtools/framework/Target.jsm +++ b/browser/devtools/framework/target.js @@ -4,17 +4,14 @@ "use strict"; -this.EXPORTED_SYMBOLS = [ "TargetFactory" ]; +const {Cc, Ci, Cu} = require("chrome"); -const { classes: Cc, interfaces: Ci, utils: Cu } = Components; +var Promise = require("sdk/core/promise"); +var EventEmitter = require("devtools/shared/event-emitter"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); - XPCOMUtils.defineLazyModuleGetter(this, "DebuggerServer", "resource://gre/modules/devtools/dbg-server.jsm"); - XPCOMUtils.defineLazyModuleGetter(this, "DebuggerClient", "resource://gre/modules/devtools/dbg-client.jsm"); @@ -24,7 +21,7 @@ const promiseTargets = new WeakMap(); /** * Functions for creating Targets */ -this.TargetFactory = { +exports.TargetFactory = { /** * Construct a Target * @param {XULTab} tab @@ -95,8 +92,8 @@ this.TargetFactory = { */ allTargets: function TF_allTargets() { let windows = []; - let wm = Components.classes["@mozilla.org/appshell/window-mediator;1"] - .getService(Components.interfaces.nsIWindowMediator); + let wm = Cc["@mozilla.org/appshell/window-mediator;1"] + .getService(Ci.nsIWindowMediator); let en = wm.getXULWindowEnumerator(null); while (en.hasMoreElements()) { windows.push(en.getNext()); diff --git a/browser/devtools/framework/test/browser_devtools_api.js b/browser/devtools/framework/test/browser_devtools_api.js index 1e3d3f701c16..64b948e09a6c 100644 --- a/browser/devtools/framework/test/browser_devtools_api.js +++ b/browser/devtools/framework/test/browser_devtools_api.js @@ -7,10 +7,8 @@ const Cu = Components.utils; const toolId = "test-tool"; let tempScope = {}; -Cu.import("resource:///modules/devtools/EventEmitter.jsm", tempScope); +Cu.import("resource:///modules/devtools/shared/event-emitter.js", tempScope); let EventEmitter = tempScope.EventEmitter; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; function test() { addTab("about:blank", function(aBrowser, aTab) { diff --git a/browser/devtools/framework/test/browser_new_activation_workflow.js b/browser/devtools/framework/test/browser_new_activation_workflow.js index 64ff2106513a..85b73e7c7838 100644 --- a/browser/devtools/framework/test/browser_new_activation_workflow.js +++ b/browser/devtools/framework/test/browser_new_activation_workflow.js @@ -8,8 +8,6 @@ const Cu = Components.utils; let toolbox, target; let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; function test() { addTab("about:blank", function(aBrowser, aTab) { diff --git a/browser/devtools/framework/test/browser_target_events.js b/browser/devtools/framework/test/browser_target_events.js index bd3b713836ba..a9e386f4be95 100644 --- a/browser/devtools/framework/test/browser_target_events.js +++ b/browser/devtools/framework/test/browser_target_events.js @@ -2,10 +2,6 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -var tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -var TargetFactory = tempScope.TargetFactory; - var target; function test() diff --git a/browser/devtools/framework/test/browser_toolbox_dynamic_registration.js b/browser/devtools/framework/test/browser_toolbox_dynamic_registration.js index 498da726408f..0dfc45faada4 100644 --- a/browser/devtools/framework/test/browser_toolbox_dynamic_registration.js +++ b/browser/devtools/framework/test/browser_toolbox_dynamic_registration.js @@ -4,10 +4,6 @@ let toolbox; -let temp = {}; -Cu.import("resource:///modules/devtools/Target.jsm", temp); -let TargetFactory = temp.TargetFactory; - function test() { waitForExplicitFinish(); diff --git a/browser/devtools/framework/test/browser_toolbox_hosts.js b/browser/devtools/framework/test/browser_toolbox_hosts.js index 10dc8d76d07e..1ba44699dadc 100644 --- a/browser/devtools/framework/test/browser_toolbox_hosts.js +++ b/browser/devtools/framework/test/browser_toolbox_hosts.js @@ -6,11 +6,7 @@ let temp = {} Cu.import("resource:///modules/devtools/gDevTools.jsm", temp); let DevTools = temp.DevTools; -Cu.import("resource:///modules/devtools/Toolbox.jsm", temp); -let Toolbox = temp.Toolbox; - -Cu.import("resource:///modules/devtools/Target.jsm", temp); -let TargetFactory = temp.TargetFactory; +let Toolbox = devtools.Toolbox; let toolbox, target; diff --git a/browser/devtools/framework/test/browser_toolbox_ready.js b/browser/devtools/framework/test/browser_toolbox_ready.js index 854c0b540cd0..29336406bfb9 100644 --- a/browser/devtools/framework/test/browser_toolbox_ready.js +++ b/browser/devtools/framework/test/browser_toolbox_ready.js @@ -2,10 +2,6 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; - function test() { waitForExplicitFinish(); diff --git a/browser/devtools/framework/test/browser_toolbox_sidebar.js b/browser/devtools/framework/test/browser_toolbox_sidebar.js index aacbc2734f1a..6c7adc405bc4 100644 --- a/browser/devtools/framework/test/browser_toolbox_sidebar.js +++ b/browser/devtools/framework/test/browser_toolbox_sidebar.js @@ -3,11 +3,7 @@ function test() { const Cu = Components.utils; - let tempScope = {}; - Cu.import("resource:///modules/devtools/gDevTools.jsm", tempScope); - Cu.import("resource:///modules/devtools/Target.jsm", tempScope); - Cu.import("resource:///modules/devtools/Sidebar.jsm", tempScope); - let {TargetFactory: TargetFactory, gDevTools: gDevTools, ToolSidebar: ToolSidebar} = tempScope; + let {ToolSidebar} = devtools.require("devtools/framework/sidebar"); const toolURL = "data:text/xml;charset=utf8," + "" + diff --git a/browser/devtools/framework/test/browser_toolbox_window_shortcuts.js b/browser/devtools/framework/test/browser_toolbox_window_shortcuts.js index b9dc43130b48..be40d55913d1 100644 --- a/browser/devtools/framework/test/browser_toolbox_window_shortcuts.js +++ b/browser/devtools/framework/test/browser_toolbox_window_shortcuts.js @@ -1,10 +1,7 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ -let temp = {}; -Cu.import("resource:///modules/devtools/Toolbox.jsm", temp); -let Toolbox = temp.Toolbox; -temp = null; +let Toolbox = devtools.Toolbox; let toolbox, toolIDs, idIndex; diff --git a/browser/devtools/framework/test/browser_toolbox_window_title_changes.js b/browser/devtools/framework/test/browser_toolbox_window_title_changes.js index a4bbe78111b7..b69b1155144f 100644 --- a/browser/devtools/framework/test/browser_toolbox_window_title_changes.js +++ b/browser/devtools/framework/test/browser_toolbox_window_title_changes.js @@ -1,16 +1,8 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ +let Toolbox = devtools.Toolbox; let temp = {}; -Cu.import("resource:///modules/devtools/Toolbox.jsm", temp); -let Toolbox = temp.Toolbox; -temp = {}; -Cu.import("resource:///modules/devtools/Target.jsm", temp); -let TargetFactory = temp.TargetFactory; -temp = {}; -Cu.import("resource:///modules/devtools/gDevTools.jsm", temp); -let gDevTools = temp.gDevTools; -temp = {}; Cu.import("resource://gre/modules/Services.jsm", temp); let Services = temp.Services; temp = null; diff --git a/browser/devtools/framework/test/head.js b/browser/devtools/framework/test/head.js index 66df4ab8f0e1..b54ef526afd6 100644 --- a/browser/devtools/framework/test/head.js +++ b/browser/devtools/framework/test/head.js @@ -2,14 +2,17 @@ * 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/. */ +let TargetFactory = gDevTools.TargetFactory; + let tempScope = {}; -Components.utils.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; Components.utils.import("resource://gre/modules/devtools/Console.jsm", tempScope); let console = tempScope.console; Components.utils.import("resource://gre/modules/commonjs/sdk/core/promise.js", tempScope); let Promise = tempScope.Promise; +let {devtools} = Components.utils.import("resource:///modules/devtools/gDevTools.jsm", {}); +let TargetFactory = devtools.TargetFactory; + /** * Open a new tab at a URL and call a callback on load */ diff --git a/browser/devtools/framework/ToolboxHosts.jsm b/browser/devtools/framework/toolbox-hosts.js similarity index 97% rename from browser/devtools/framework/ToolboxHosts.jsm rename to browser/devtools/framework/toolbox-hosts.js index e47ff240b5dd..c3c3556c8afb 100644 --- a/browser/devtools/framework/ToolboxHosts.jsm +++ b/browser/devtools/framework/toolbox-hosts.js @@ -4,13 +4,12 @@ "use strict"; -const Cu = Components.utils; +const {Cu} = require("chrome"); + +let Promise = require("sdk/core/promise"); +let EventEmitter = require("devtools/shared/event-emitter"); Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); - -this.EXPORTED_SYMBOLS = [ "Hosts" ]; /** * A toolbox host represents an object that contains a toolbox (e.g. the @@ -21,7 +20,7 @@ this.EXPORTED_SYMBOLS = [ "Hosts" ]; * destroy() - destroy the host's UI */ -this.Hosts = { +exports.Hosts = { "bottom": BottomHost, "side": SidebarHost, "window": WindowHost diff --git a/browser/devtools/framework/Toolbox.jsm b/browser/devtools/framework/toolbox.js similarity index 86% rename from browser/devtools/framework/Toolbox.jsm rename to browser/devtools/framework/toolbox.js index 0d2209b3ff20..586836ff8a8b 100644 --- a/browser/devtools/framework/Toolbox.jsm +++ b/browser/devtools/framework/toolbox.js @@ -4,16 +4,17 @@ "use strict"; -const { classes: Cc, interfaces: Ci, utils: Cu } = Components; +const {Cc, Ci, Cu} = require("chrome"); + +let Promise = require("sdk/core/promise"); +let EventEmitter = require("devtools/shared/event-emitter"); Cu.import('resource://gre/modules/XPCOMUtils.jsm'); Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); Cu.import("resource:///modules/devtools/gDevTools.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Hosts", - "resource:///modules/devtools/ToolboxHosts.jsm"); +loader.lazyGetter(this, "Hosts", () => require("devtools/framework/toolbox-hosts").Hosts); + XPCOMUtils.defineLazyModuleGetter(this, "CommandUtils", "resource:///modules/devtools/DeveloperToolbar.jsm"); @@ -34,78 +35,14 @@ XPCOMUtils.defineLazyGetter(this, "toolboxStrings", function() { }); XPCOMUtils.defineLazyGetter(this, "Requisition", function() { - Cu.import("resource://gre/modules/devtools/Require.jsm"); - Cu.import("resource:///modules/devtools/gcli.jsm"); + let scope = {}; + Cu.import("resource://gre/modules/devtools/Require.jsm", scope); + Cu.import("resource:///modules/devtools/gcli.jsm", scope); - return require('gcli/cli').Requisition; + let req = scope.require; + return req('gcli/cli').Requisition; }); -this.EXPORTED_SYMBOLS = [ "Toolbox" ]; - -// This isn't the best place for this, but I don't know what is right now - -/** - * Implementation of 'promised', while we wait for bug 790195 to be fixed. - * @see Consuming promises in https://addons.mozilla.org/en-US/developers/docs/sdk/latest/packages/api-utils/promise.html - * @see https://bugzilla.mozilla.org/show_bug.cgi?id=790195 - * @see https://github.com/mozilla/addon-sdk/blob/master/packages/api-utils/lib/promise.js#L179 - */ -Promise.promised = (function() { - // Note: Define shortcuts and utility functions here in order to avoid - // slower property accesses and unnecessary closure creations on each - // call of this popular function. - - var call = Function.call; - var concat = Array.prototype.concat; - - // Utility function that does following: - // execute([ f, self, args...]) => f.apply(self, args) - function execute(args) { return call.apply(call, args); } - - // Utility function that takes promise of `a` array and maybe promise `b` - // as arguments and returns promise for `a.concat(b)`. - function promisedConcat(promises, unknown) { - return promises.then(function(values) { - return Promise.resolve(unknown).then(function(value) { - return values.concat([ value ]); - }); - }); - } - - return function promised(f, prototype) { - /** - Returns a wrapped `f`, which when called returns a promise that resolves to - `f(...)` passing all the given arguments to it, which by the way may be - promises. Optionally second `prototype` argument may be provided to be used - a prototype for a returned promise. - - ## Example - - var promise = promised(Array)(1, promise(2), promise(3)) - promise.then(console.log) // => [ 1, 2, 3 ] - **/ - - return function promised() { - // create array of [ f, this, args... ] - return concat.apply([ f, this ], arguments). - // reduce it via `promisedConcat` to get promised array of fulfillments - reduce(promisedConcat, Promise.resolve([], prototype)). - // finally map that to promise of `f.apply(this, args...)` - then(execute); - }; - }; -})(); - -/** - * Convert an array of promises to a single promise, which is resolved (with an - * array containing resolved values) only when all the component promises are - * resolved. - */ -Promise.all = Promise.promised(Array); - - - - /** * A "Toolbox" is the component that holds all the tools for one specific * target. Visually, it's a document that includes the tools tabs and all @@ -118,7 +55,7 @@ Promise.all = Promise.promised(Array); * @param {Toolbox.HostType} hostType * Type of host that will host the toolbox (e.g. sidebar, window) */ -this.Toolbox = function Toolbox(target, selectedTool, hostType) { +function Toolbox(target, selectedTool, hostType) { this._target = target; this._toolPanels = new Map(); @@ -152,6 +89,7 @@ this.Toolbox = function Toolbox(target, selectedTool, hostType) { gDevTools.on("tool-registered", this._toolRegistered); gDevTools.on("tool-unregistered", this._toolUnregistered); } +exports.Toolbox = Toolbox; /** * The toolbox can be 'hosted' either embedded in a browser window diff --git a/browser/devtools/inspector/CmdInspect.jsm b/browser/devtools/inspector/CmdInspect.jsm index 46935fead968..2c6620f02871 100644 --- a/browser/devtools/inspector/CmdInspect.jsm +++ b/browser/devtools/inspector/CmdInspect.jsm @@ -10,8 +10,8 @@ Cu.import('resource://gre/modules/XPCOMUtils.jsm'); XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", "resource:///modules/devtools/gDevTools.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", - "resource:///modules/devtools/Target.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "devtools", + "resource:///modules/devtools/gDevTools.jsm"); /** * 'inspect' command @@ -30,7 +30,7 @@ gcli.addCommand({ ], exec: function Command_inspect(args, context) { let gBrowser = context.environment.chromeDocument.defaultView.gBrowser; - let target = TargetFactory.forTab(gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(gBrowser.selectedTab); return gDevTools.showToolbox(target, "inspector").then(function(toolbox) { toolbox.getCurrentPanel().selection.setNode(args.selector, "gcli"); diff --git a/browser/devtools/inspector/Makefile.in b/browser/devtools/inspector/Makefile.in index 85a21c63a04f..12ae09fda795 100644 --- a/browser/devtools/inspector/Makefile.in +++ b/browser/devtools/inspector/Makefile.in @@ -13,3 +13,4 @@ include $(topsrcdir)/config/rules.mk libs:: $(NSINSTALL) $(srcdir)/*.jsm $(FINAL_TARGET)/modules/devtools/ + $(NSINSTALL) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/inspector diff --git a/browser/devtools/inspector/Breadcrumbs.jsm b/browser/devtools/inspector/breadcrumbs.js similarity index 98% rename from browser/devtools/inspector/Breadcrumbs.jsm rename to browser/devtools/inspector/breadcrumbs.js index b196914839fb..820ff6b79738 100644 --- a/browser/devtools/inspector/Breadcrumbs.jsm +++ b/browser/devtools/inspector/breadcrumbs.js @@ -4,15 +4,11 @@ * 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 Cc = Components.classes; -const Cu = Components.utils; -const Ci = Components.interfaces; +const {Cc, Cu, Ci} = require("chrome"); const PSEUDO_CLASSES = [":hover", ":active", ":focus"]; const ENSURE_SELECTION_VISIBLE_DELAY = 50; // ms -this.EXPORTED_SYMBOLS = ["HTMLBreadcrumbs"]; - Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource:///modules/devtools/DOMHelpers.jsm"); Cu.import("resource:///modules/devtools/LayoutHelpers.jsm"); @@ -44,7 +40,7 @@ const LOW_PRIORITY_ELEMENTS = { * else select the node; * . If the selected node is the last node displayed, append its first (if any). */ -this.HTMLBreadcrumbs = function HTMLBreadcrumbs(aInspector) +function HTMLBreadcrumbs(aInspector) { this.inspector = aInspector; this.selection = this.inspector.selection; @@ -54,6 +50,8 @@ this.HTMLBreadcrumbs = function HTMLBreadcrumbs(aInspector) this._init(); } +exports.HTMLBreadcrumbs = HTMLBreadcrumbs; + HTMLBreadcrumbs.prototype = { _init: function BC__init() { diff --git a/browser/devtools/inspector/Highlighter.jsm b/browser/devtools/inspector/highlighter.js similarity index 98% rename from browser/devtools/inspector/Highlighter.jsm rename to browser/devtools/inspector/highlighter.js index 93a1c649982a..753c882ebba2 100644 --- a/browser/devtools/inspector/Highlighter.jsm +++ b/browser/devtools/inspector/highlighter.js @@ -4,16 +4,13 @@ * 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 Cu = Components.utils; -const Cc = Components.classes; -const Ci = Components.interfaces; +const {Cu, Cc, Ci} = require("chrome"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource:///modules/devtools/LayoutHelpers.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); -this.EXPORTED_SYMBOLS = ["Highlighter"]; +let EventEmitter = require("devtools/shared/event-emitter"); const PSEUDO_CLASSES = [":hover", ":active", ":focus"]; // add ":visited" and ":link" after bug 713106 is fixed @@ -74,7 +71,7 @@ const PSEUDO_CLASSES = [":hover", ":active", ":focus"]; * @param aInspector Inspector panel. * @param aToolbox The toolbox holding the inspector. */ -this.Highlighter = function Highlighter(aTarget, aInspector, aToolbox) +function Highlighter(aTarget, aInspector, aToolbox) { this.target = aTarget; this.tab = aTarget.tab; @@ -89,6 +86,8 @@ this.Highlighter = function Highlighter(aTarget, aInspector, aToolbox) this._init(); } +exports.Highlighter = Highlighter; + Highlighter.prototype = { get selection() { return this.inspector.selection; diff --git a/browser/devtools/inspector/InspectorPanel.jsm b/browser/devtools/inspector/inspector-panel.js similarity index 93% rename from browser/devtools/inspector/InspectorPanel.jsm rename to browser/devtools/inspector/inspector-panel.js index f0d46baba548..19d818cf9e56 100644 --- a/browser/devtools/inspector/InspectorPanel.jsm +++ b/browser/devtools/inspector/inspector-panel.js @@ -4,28 +4,20 @@ * 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 { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; +const {Cc, Ci, Cu, Cr} = require("chrome"); -this.EXPORTED_SYMBOLS = ["InspectorPanel"]; - -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); -Cu.import("resource:///modules/devtools/CssLogic.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "MarkupView", - "resource:///modules/devtools/MarkupView.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Selection", - "resource:///modules/devtools/Selection.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "HTMLBreadcrumbs", - "resource:///modules/devtools/Breadcrumbs.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "Highlighter", - "resource:///modules/devtools/Highlighter.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "ToolSidebar", - "resource:///modules/devtools/Sidebar.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "SelectorSearch", - "resource:///modules/devtools/SelectorSearch.jsm"); +let Promise = require("sdk/core/promise"); +let EventEmitter = require("devtools/shared/event-emitter"); +let {CssLogic} = require("devtools/styleinspector/css-logic"); + +loader.lazyGetter(this, "MarkupView", () => require("devtools/markupview/markup-view").MarkupView); +loader.lazyGetter(this, "Selection", () => require ("devtools/inspector/selection").Selection); +loader.lazyGetter(this, "HTMLBreadcrumbs", () => require("devtools/inspector/breadcrumbs").HTMLBreadcrumbs); +loader.lazyGetter(this, "Highlighter", () => require("devtools/inspector/highlighter").Highlighter); +loader.lazyGetter(this, "ToolSidebar", () => require("devtools/framework/sidebar").ToolSidebar); +loader.lazyGetter(this, "SelectorSearch", () => require("devtools/inspector/selector-search").SelectorSearch); const LAYOUT_CHANGE_TIMER = 250; @@ -35,7 +27,7 @@ const LAYOUT_CHANGE_TIMER = 250; * the markup view, and the sidebar (computed view, rule view * and layout view). */ -this.InspectorPanel = function InspectorPanel(iframeWindow, toolbox) { +function InspectorPanel(iframeWindow, toolbox) { this._toolbox = toolbox; this._target = toolbox._target; this.panelDoc = iframeWindow.document; @@ -45,6 +37,8 @@ this.InspectorPanel = function InspectorPanel(iframeWindow, toolbox) { EventEmitter.decorate(this); } +exports.InspectorPanel = InspectorPanel; + InspectorPanel.prototype = { /** * open is effectively an asynchronous constructor @@ -623,18 +617,18 @@ InspectorPanel.prototype = { ///////////////////////////////////////////////////////////////////////// //// Initializers -XPCOMUtils.defineLazyGetter(InspectorPanel.prototype, "strings", +loader.lazyGetter(InspectorPanel.prototype, "strings", function () { return Services.strings.createBundle( "chrome://browser/locale/devtools/inspector.properties"); }); -XPCOMUtils.defineLazyGetter(this, "clipboardHelper", function() { +loader.lazyGetter(this, "clipboardHelper", function() { return Cc["@mozilla.org/widget/clipboardhelper;1"]. getService(Ci.nsIClipboardHelper); }); -XPCOMUtils.defineLazyGetter(this, "DOMUtils", function () { +loader.lazyGetter(this, "DOMUtils", function () { return Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils); }); diff --git a/browser/devtools/inspector/Selection.jsm b/browser/devtools/inspector/selection.js similarity index 95% rename from browser/devtools/inspector/Selection.jsm rename to browser/devtools/inspector/selection.js index 451e1f513cf1..6963f6fe362b 100644 --- a/browser/devtools/inspector/Selection.jsm +++ b/browser/devtools/inspector/selection.js @@ -4,10 +4,8 @@ * 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 Cu = Components.utils; -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); - -this.EXPORTED_SYMBOLS = ["Selection"]; +const {Cu} = require("chrome"); +let EventEmitter = require("devtools/shared/event-emitter"); /** * API @@ -58,13 +56,15 @@ this.EXPORTED_SYMBOLS = ["Selection"]; * the ndoe change. * */ -this.Selection = function Selection(node=null, track={attributes:true,detached:true}) { +function Selection(node=null, track={attributes:true,detached:true}) { EventEmitter.decorate(this); this._onMutations = this._onMutations.bind(this); this.track = track; this.setNode(node); } +exports.Selection = Selection; + Selection.prototype = { _node: null, @@ -162,7 +162,7 @@ Selection.prototype = { isNode: function SN_isNode() { return (this.node && - !Components.utils.isDeadWrapper(this.node) && + !Cu.isDeadWrapper(this.node) && this.node.ownerDocument && this.node.ownerDocument.defaultView && this.node instanceof this.node.ownerDocument.defaultView.Node); diff --git a/browser/devtools/inspector/SelectorSearch.jsm b/browser/devtools/inspector/selector-search.js similarity index 95% rename from browser/devtools/inspector/SelectorSearch.jsm rename to browser/devtools/inspector/selector-search.js index c0d7fb820420..6e66d3643819 100644 --- a/browser/devtools/inspector/SelectorSearch.jsm +++ b/browser/devtools/inspector/selector-search.js @@ -4,13 +4,11 @@ "use strict"; -const Cu = Components.utils; +const {Cu} = require("chrome"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "AutocompletePopup", - "resource:///modules/devtools/AutocompletePopup.jsm"); -this.EXPORTED_SYMBOLS = ["SelectorSearch"]; +loader.lazyGetter(this, "AutocompletePopup", () => { + return Cu.import("resource:///modules/devtools/AutocompletePopup.jsm", {}).AutocompletePopup; +}); // Maximum number of selector suggestions shown in the panel. const MAX_SUGGESTIONS = 15; @@ -28,7 +26,7 @@ const MAX_SUGGESTIONS = 15; * The method to callback when a search is available. * This method is called with the matched node as the first argument. */ -this.SelectorSearch = function(aContentDocument, aInputNode, aCallback) { +function SelectorSearch(aContentDocument, aInputNode, aCallback) { this.doc = aContentDocument; this.callback = aCallback; this.searchBox = aInputNode; @@ -66,7 +64,9 @@ this.SelectorSearch = function(aContentDocument, aInputNode, aCallback) { this.searchBox.addEventListener("keypress", this._onSearchKeypress, true); } -this.SelectorSearch.prototype = { +exports.SelectorSearch = SelectorSearch; + +SelectorSearch.prototype = { // The possible states of the query. States: { diff --git a/browser/devtools/inspector/test/browser_inspector_bug_840156_destroy_after_navigation.js b/browser/devtools/inspector/test/browser_inspector_bug_840156_destroy_after_navigation.js index 01d1569da5e8..17072c7a620d 100644 --- a/browser/devtools/inspector/test/browser_inspector_bug_840156_destroy_after_navigation.js +++ b/browser/devtools/inspector/test/browser_inspector_bug_840156_destroy_after_navigation.js @@ -1,16 +1,9 @@ /* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ -let temp = {}; -Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", temp); -let Promise = temp.Promise; -temp = {}; -Cu.import("resource:///modules/devtools/Toolbox.jsm", temp); -let Toolbox = temp.Toolbox; -temp = {}; -Cu.import("resource:///modules/devtools/Target.jsm", temp); -let TargetFactory = temp.TargetFactory; -temp = null; +let Promise = devtools.require("sdk/core/promise"); +let Toolbox = devtools.Toolbox; +let TargetFactory = devtools.TargetFactory; function test() { waitForExplicitFinish(); diff --git a/browser/devtools/inspector/test/browser_inspector_initialization.js b/browser/devtools/inspector/test/browser_inspector_initialization.js index f99b782569db..56e6ec493c50 100644 --- a/browser/devtools/inspector/test/browser_inspector_initialization.js +++ b/browser/devtools/inspector/test/browser_inspector_initialization.js @@ -6,10 +6,6 @@ let doc; let salutation; -let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; - function createDocument() { doc.body.innerHTML = '
require("devtools/framework/toolbox").Toolbox); +loader.lazyGetter(exports, "TargetFactory", () => require("devtools/framework/target").TargetFactory); + +loader.lazyGetter(this, "osString", () => Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS); + +// Panels +loader.lazyGetter(this, "InspectorPanel", function() require("devtools/inspector/inspector-panel").InspectorPanel); +loader.lazyImporter(this, "WebConsolePanel", "resource:///modules/WebConsolePanel.jsm"); +loader.lazyImporter(this, "DebuggerPanel", "resource:///modules/devtools/DebuggerPanel.jsm"); +loader.lazyImporter(this, "StyleEditorPanel", "resource:///modules/devtools/StyleEditorPanel.jsm"); +loader.lazyImporter(this, "ProfilerPanel", "resource:///modules/devtools/ProfilerPanel.jsm"); +loader.lazyImporter(this, "NetMonitorPanel", "resource:///modules/devtools/NetMonitorPanel.jsm"); + +// Strings const inspectorProps = "chrome://browser/locale/devtools/inspector.properties"; const debuggerProps = "chrome://browser/locale/devtools/debugger.properties"; const styleEditorProps = "chrome://browser/locale/devtools/styleeditor.properties"; const webConsoleProps = "chrome://browser/locale/devtools/webconsole.properties"; const profilerProps = "chrome://browser/locale/devtools/profiler.properties"; const netMonitorProps = "chrome://browser/locale/devtools/netmonitor.properties"; +loader.lazyGetter(this, "webConsoleStrings", () => Services.strings.createBundle(webConsoleProps)); +loader.lazyGetter(this, "debuggerStrings", () => Services.strings.createBundle(debuggerProps)); +loader.lazyGetter(this, "styleEditorStrings", () => Services.strings.createBundle(styleEditorProps)); +loader.lazyGetter(this, "inspectorStrings", () => Services.strings.createBundle(inspectorProps)); +loader.lazyGetter(this, "profilerStrings",() => Services.strings.createBundle(profilerProps)); +loader.lazyGetter(this, "netMonitorStrings", () => Services.strings.createBundle(netMonitorProps)); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); - -XPCOMUtils.defineLazyGetter(this, "osString", - function() Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULRuntime).OS); - -// Panels -XPCOMUtils.defineLazyModuleGetter(this, "WebConsolePanel", - "resource:///modules/WebConsolePanel.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "DebuggerPanel", - "resource:///modules/devtools/DebuggerPanel.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "StyleEditorPanel", - "resource:///modules/devtools/StyleEditorPanel.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "InspectorPanel", - "resource:///modules/devtools/InspectorPanel.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "ProfilerPanel", - "resource:///modules/devtools/ProfilerPanel.jsm"); - -XPCOMUtils.defineLazyModuleGetter(this, "NetMonitorPanel", - "resource:///modules/devtools/NetMonitorPanel.jsm"); - -// Strings -XPCOMUtils.defineLazyGetter(this, "webConsoleStrings", - function() Services.strings.createBundle(webConsoleProps)); - -XPCOMUtils.defineLazyGetter(this, "debuggerStrings", - function() Services.strings.createBundle(debuggerProps)); - -XPCOMUtils.defineLazyGetter(this, "styleEditorStrings", - function() Services.strings.createBundle(styleEditorProps)); - -XPCOMUtils.defineLazyGetter(this, "inspectorStrings", - function() Services.strings.createBundle(inspectorProps)); - -XPCOMUtils.defineLazyGetter(this, "profilerStrings", - function() Services.strings.createBundle(profilerProps)); - -XPCOMUtils.defineLazyGetter(this, "netMonitorStrings", - function() Services.strings.createBundle(netMonitorProps)); +let Tools = {}; +exports.Tools = Tools; // Definitions -let webConsoleDefinition = { +Tools.webConsole = { id: "webconsole", key: l10n("cmd.commandkey", webConsoleStrings), accesskey: l10n("webConsoleCmd.accesskey", webConsoleStrings), @@ -88,7 +72,7 @@ let webConsoleDefinition = { } }; -let debuggerDefinition = { +Tools.jsdebugger = { id: "jsdebugger", key: l10n("open.commandkey", debuggerStrings), accesskey: l10n("debuggerMenu.accesskey", debuggerStrings), @@ -110,7 +94,7 @@ let debuggerDefinition = { } }; -let inspectorDefinition = { +Tools.inspector = { id: "inspector", accesskey: l10n("inspector.accesskey", inspectorStrings), key: l10n("inspector.commandkey", inspectorStrings), @@ -131,7 +115,7 @@ let inspectorDefinition = { } }; -let styleEditorDefinition = { +Tools.styleEditor = { id: "styleeditor", key: l10n("open.commandkey", styleEditorStrings), ordinal: 3, @@ -152,7 +136,7 @@ let styleEditorDefinition = { } }; -let profilerDefinition = { +Tools.jsprofiler = { id: "jsprofiler", accesskey: l10n("profiler.accesskey", profilerStrings), key: l10n("profiler2.commandkey", profilerStrings), @@ -174,7 +158,7 @@ let profilerDefinition = { } }; -let netMonitorDefinition = { +Tools.netMonitor = { id: "netmonitor", accesskey: l10n("netmonitor.accesskey", netMonitorStrings), key: l10n("netmonitor.commandkey", netMonitorStrings), @@ -196,18 +180,31 @@ let netMonitorDefinition = { } }; -this.defaultTools = [ - styleEditorDefinition, - webConsoleDefinition, - debuggerDefinition, - inspectorDefinition, - netMonitorDefinition +let defaultTools = [ + Tools.styleEditor, + Tools.webConsole, + Tools.jsdebugger, + Tools.inspector, + Tools.netMonitor ]; if (Services.prefs.getBoolPref("devtools.profiler.enabled")) { - defaultTools.push(profilerDefinition); + defaultTools.push(Tools.jsprofiler); } +for (let definition of defaultTools) { + gDevTools.registerTool(definition); +} + +systemEvents.on("sdk:loader:destroy", function onunload({subject, data: reason}) { + if (subject.wrappedJSObject === require("@loader/unload")) { + systemEvents.off("sdk:loader:destroy", onunload); + for (let definition of defaultTools) { + gDevTools.unregisterTool(definition.id); + } + } +}, true); + /** * Lookup l10n string from a string bundle. * diff --git a/browser/devtools/markupview/Makefile.in b/browser/devtools/markupview/Makefile.in index c4046ffbf3dc..83e6e11a1866 100644 --- a/browser/devtools/markupview/Makefile.in +++ b/browser/devtools/markupview/Makefile.in @@ -11,6 +11,6 @@ VPATH = @srcdir@ include $(DEPTH)/config/autoconf.mk libs:: - $(NSINSTALL) $(srcdir)/*.jsm $(FINAL_TARGET)/modules/devtools + $(NSINSTALL) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/markupview include $(topsrcdir)/config/rules.mk diff --git a/browser/devtools/markupview/MarkupView.jsm b/browser/devtools/markupview/markup-view.js similarity index 98% rename from browser/devtools/markupview/MarkupView.jsm rename to browser/devtools/markupview/markup-view.js index eb843b77cf6d..d5394e64873c 100644 --- a/browser/devtools/markupview/MarkupView.jsm +++ b/browser/devtools/markupview/markup-view.js @@ -4,9 +4,7 @@ * 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 Cc = Components.classes; -const Cu = Components.utils; -const Ci = Components.interfaces; +const {Cc, Cu, Ci} = require("chrome"); // Page size for pageup/pagedown const PAGE_SIZE = 10; @@ -14,15 +12,13 @@ const PAGE_SIZE = 10; const PREVIEW_AREA = 700; const DEFAULT_MAX_CHILDREN = 100; -this.EXPORTED_SYMBOLS = ["MarkupView"]; +let {UndoStack} = require("devtools/shared/undo"); +let EventEmitter = require("devtools/shared/event-emitter"); +let {editableField, InplaceEditor} = require("devtools/shared/inplace-editor"); Cu.import("resource:///modules/devtools/LayoutHelpers.jsm"); -Cu.import("resource:///modules/devtools/CssRuleView.jsm"); -Cu.import("resource:///modules/devtools/InplaceEditor.jsm"); Cu.import("resource:///modules/devtools/Templater.jsm"); -Cu.import("resource:///modules/devtools/Undo.jsm"); Cu.import("resource://gre/modules/Services.jsm"); -Cu.import("resource://gre/modules/XPCOMUtils.jsm"); /** * Vocabulary for the purposes of this file: @@ -42,7 +38,7 @@ Cu.import("resource://gre/modules/XPCOMUtils.jsm"); * @param iframe aFrame * An iframe in which the caller has kindly loaded markup-view.xhtml. */ -this.MarkupView = function MarkupView(aInspector, aFrame, aControllerWindow) +function MarkupView(aInspector, aFrame, aControllerWindow) { this._inspector = aInspector; this._frame = aFrame; @@ -75,6 +71,8 @@ this.MarkupView = function MarkupView(aInspector, aFrame, aControllerWindow) this._initPreview(); } +exports.MarkupView = MarkupView; + MarkupView.prototype = { _selectedContainer: null, @@ -1526,7 +1524,6 @@ function whitespaceTextFilter(aNode) } } -XPCOMUtils.defineLazyGetter(MarkupView.prototype, "strings", function () { - return Services.strings.createBundle( - "chrome://browser/locale/devtools/inspector.properties"); -}); +loader.lazyGetter(MarkupView.prototype, "strings", () => Services.strings.createBundle( + "chrome://browser/locale/devtools/inspector.properties" +)); diff --git a/browser/devtools/markupview/test/browser_inspector_markup_edit.js b/browser/devtools/markupview/test/browser_inspector_markup_edit.js index a5eb0dcf39b9..24e66d98dbc9 100644 --- a/browser/devtools/markupview/test/browser_inspector_markup_edit.js +++ b/browser/devtools/markupview/test/browser_inspector_markup_edit.js @@ -20,7 +20,7 @@ function test() { let inspector; let { getInplaceEditorForSpan: inplaceEditor - } = Cu.import("resource:///modules/devtools/InplaceEditor.jsm", {}); + } = devtools.require("devtools/shared/inplace-editor"); waitForExplicitFinish(); diff --git a/browser/devtools/markupview/test/head.js b/browser/devtools/markupview/test/head.js index 61cc04274100..7e920ce195b4 100644 --- a/browser/devtools/markupview/test/head.js +++ b/browser/devtools/markupview/test/head.js @@ -4,11 +4,8 @@ const Cu = Components.utils; -let TargetFactory = (function() { - let tempScope = {}; - Components.utils.import("resource:///modules/devtools/Target.jsm", tempScope); - return tempScope.TargetFactory; -})(); +let {devtools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); +let TargetFactory = devtools.TargetFactory; // Clear preferences that may be set during the course of tests. function clearUserPrefs() diff --git a/browser/devtools/netmonitor/NetMonitorPanel.jsm b/browser/devtools/netmonitor/NetMonitorPanel.jsm index 2887c08e34fa..f86211849ec2 100644 --- a/browser/devtools/netmonitor/NetMonitorPanel.jsm +++ b/browser/devtools/netmonitor/NetMonitorPanel.jsm @@ -10,7 +10,7 @@ const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; this.EXPORTED_SYMBOLS = ["NetMonitorPanel"]; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); XPCOMUtils.defineLazyModuleGetter(this, "Promise", "resource://gre/modules/commonjs/sdk/core/promise.js"); diff --git a/browser/devtools/netmonitor/netmonitor-controller.js b/browser/devtools/netmonitor/netmonitor-controller.js index 1912fbf62d30..964a13e02378 100644 --- a/browser/devtools/netmonitor/netmonitor-controller.js +++ b/browser/devtools/netmonitor/netmonitor-controller.js @@ -13,7 +13,7 @@ Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); Cu.import("resource:///modules/source-editor.jsm"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); Cu.import("resource:///modules/devtools/SideMenuWidget.jsm"); Cu.import("resource:///modules/devtools/VariablesView.jsm"); Cu.import("resource:///modules/devtools/ViewHelpers.jsm"); diff --git a/browser/devtools/netmonitor/test/head.js b/browser/devtools/netmonitor/test/head.js index b52477d0a14b..79e387b088d2 100644 --- a/browser/devtools/netmonitor/test/head.js +++ b/browser/devtools/netmonitor/test/head.js @@ -6,8 +6,8 @@ const { classes: Cc, interfaces: Ci, utils: Cu, results: Cr } = Components; let { Services } = Cu.import("resource://gre/modules/Services.jsm", {}); let { Promise } = Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {}); -let { TargetFactory } = Cu.import("resource:///modules/devtools/Target.jsm", {}); -let { gDevTools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); +let { gDevTools, devtools } = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); +let TargetFactory = devtools.TargetFactory; const EXAMPLE_URL = "http://example.com/browser/browser/devtools/netmonitor/test/"; diff --git a/browser/devtools/profiler/ProfilerPanel.jsm b/browser/devtools/profiler/ProfilerPanel.jsm index 754b3f69755a..8be267425738 100644 --- a/browser/devtools/profiler/ProfilerPanel.jsm +++ b/browser/devtools/profiler/ProfilerPanel.jsm @@ -9,7 +9,7 @@ const Cu = Components.utils; Cu.import("resource:///modules/devtools/gDevTools.jsm"); Cu.import("resource:///modules/devtools/ProfilerController.jsm"); Cu.import("resource:///modules/devtools/ProfilerHelpers.jsm"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); this.EXPORTED_SYMBOLS = ["ProfilerPanel"]; diff --git a/browser/devtools/profiler/test/head.js b/browser/devtools/profiler/test/head.js index a1e2499d75ff..02231b92ebd0 100644 --- a/browser/devtools/profiler/test/head.js +++ b/browser/devtools/profiler/test/head.js @@ -5,11 +5,9 @@ let temp = {}; const PROFILER_ENABLED = "devtools.profiler.enabled"; const REMOTE_ENABLED = "devtools.debugger.remote-enabled"; -Cu.import("resource:///modules/devtools/Target.jsm", temp); -let TargetFactory = temp.TargetFactory; - Cu.import("resource:///modules/devtools/gDevTools.jsm", temp); let gDevTools = temp.gDevTools; +let TargetFactory = temp.TargetFactory; Cu.import("resource://gre/modules/devtools/dbg-server.jsm", temp); let DebuggerServer = temp.DebuggerServer; diff --git a/browser/devtools/responsivedesign/responsivedesign.jsm b/browser/devtools/responsivedesign/responsivedesign.jsm index 81d0c19c9348..a5e2c91a0986 100644 --- a/browser/devtools/responsivedesign/responsivedesign.jsm +++ b/browser/devtools/responsivedesign/responsivedesign.jsm @@ -11,8 +11,7 @@ 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:///modules/devtools/EventEmitter.jsm"); -Cu.import("resource:///modules/devtools/Target.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); this.EXPORTED_SYMBOLS = ["ResponsiveUIManager"]; diff --git a/browser/devtools/responsivedesign/test/head.js b/browser/devtools/responsivedesign/test/head.js index 89d1042fe7bb..e9aa9265f6f6 100644 --- a/browser/devtools/responsivedesign/test/head.js +++ b/browser/devtools/responsivedesign/test/head.js @@ -3,9 +3,8 @@ "use strict"; -let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; +let {devtools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); +let TargetFactory = devtools.TargetFactory; // Import the GCLI test helper let testDir = gTestPath.substr(0, gTestPath.lastIndexOf("/")); diff --git a/browser/devtools/responsivedesign/test/helpers.js b/browser/devtools/responsivedesign/test/helpers.js index 3ff7f7935a0a..f1204d2b96dc 100644 --- a/browser/devtools/responsivedesign/test/helpers.js +++ b/browser/devtools/responsivedesign/test/helpers.js @@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req Components.utils.import("resource:///modules/devtools/gcli.jsm", {}); let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console; -let TargetFactory = (Cu.import("resource:///modules/devtools/Target.jsm", {})).TargetFactory; +let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools; +let TargetFactory = devtools.TargetFactory; let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise; let assert = { ok: ok, is: is, log: info }; diff --git a/browser/devtools/scratchpad/scratchpad.js b/browser/devtools/scratchpad/scratchpad.js index 62d954848b52..68b22c2c77b4 100644 --- a/browser/devtools/scratchpad/scratchpad.js +++ b/browser/devtools/scratchpad/scratchpad.js @@ -27,7 +27,6 @@ Cu.import("resource:///modules/devtools/LayoutHelpers.jsm"); Cu.import("resource:///modules/devtools/scratchpad-manager.jsm"); Cu.import("resource://gre/modules/jsdebugger.jsm"); Cu.import("resource:///modules/devtools/gDevTools.jsm"); -Cu.import("resource:///modules/devtools/Target.jsm"); Cu.import("resource://gre/modules/osfile.jsm"); Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); @@ -1095,7 +1094,7 @@ var Scratchpad = { */ openWebConsole: function SP_openWebConsole() { - let target = TargetFactory.forTab(this.gBrowser.selectedTab); + let target = devtools.TargetFactory.forTab(this.gBrowser.selectedTab); gDevTools.showToolbox(target, "webconsole"); this.browserWindow.focus(); }, diff --git a/browser/devtools/shared/DeveloperToolbar.jsm b/browser/devtools/shared/DeveloperToolbar.jsm index 55accdf4be37..f9e347838f2d 100644 --- a/browser/devtools/shared/DeveloperToolbar.jsm +++ b/browser/devtools/shared/DeveloperToolbar.jsm @@ -30,8 +30,8 @@ XPCOMUtils.defineLazyModuleGetter(this, "PageErrorListener", XPCOMUtils.defineLazyModuleGetter(this, "PluralForm", "resource://gre/modules/PluralForm.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "TargetFactory", - "resource:///modules/devtools/Target.jsm"); +XPCOMUtils.defineLazyModuleGetter(this, "devtools", + "resource:///modules/devtools/gDevTools.jsm"); XPCOMUtils.defineLazyModuleGetter(this, "require", "resource://gre/modules/devtools/Require.jsm"); @@ -162,7 +162,7 @@ let CommandUtils = { Object.defineProperty(environment, "target", { get: function() { let tab = chromeDocument.defaultView.getBrowser().selectedTab; - return TargetFactory.forTab(tab); + return devtools.TargetFactory.forTab(tab); }, enumerable: true }); diff --git a/browser/devtools/shared/Makefile.in b/browser/devtools/shared/Makefile.in index 65b307f13f88..94eba0663b98 100644 --- a/browser/devtools/shared/Makefile.in +++ b/browser/devtools/shared/Makefile.in @@ -15,3 +15,4 @@ include $(topsrcdir)/config/rules.mk libs:: $(NSINSTALL) $(srcdir)/*.jsm $(FINAL_TARGET)/modules/devtools $(NSINSTALL) $(srcdir)/widgets/*.jsm $(FINAL_TARGET)/modules/devtools + $(NSINSTALL) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/shared diff --git a/browser/devtools/shared/EventEmitter.jsm b/browser/devtools/shared/event-emitter.js similarity index 93% rename from browser/devtools/shared/EventEmitter.jsm rename to browser/devtools/shared/event-emitter.js index 58eafbf209a9..44f5fd5e3c71 100644 --- a/browser/devtools/shared/EventEmitter.jsm +++ b/browser/devtools/shared/event-emitter.js @@ -2,13 +2,20 @@ * 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/. */ -this.EXPORTED_SYMBOLS = ["EventEmitter"]; - /** * EventEmitter. */ + this.EventEmitter = function EventEmitter() {}; +if (typeof(require) === "function") { + module.exports = EventEmitter; + var {Cu} = require("chrome"); +} else { + var EXPORTED_SYMBOLS = ["EventEmitter"]; + var Cu = this["Components"].utils; +} + /** * Decorate an object with event emitter functionality. * @@ -102,7 +109,7 @@ EventEmitter.prototype = { catch (ex) { // Prevent a bad listener from interfering with the others. let msg = ex + ": " + ex.stack; - Components.utils.reportError(msg); + Cu.reportError(msg); dump(msg + "\n"); } } diff --git a/browser/devtools/shared/InplaceEditor.jsm b/browser/devtools/shared/inplace-editor.js similarity index 98% rename from browser/devtools/shared/InplaceEditor.jsm rename to browser/devtools/shared/inplace-editor.js index bc2796ada018..cc5d28038045 100644 --- a/browser/devtools/shared/InplaceEditor.jsm +++ b/browser/devtools/shared/inplace-editor.js @@ -24,8 +24,7 @@ "use strict"; -const Ci = Components.interfaces; -const Cu = Components.utils; +const {Ci, Cu} = require("chrome"); const HTML_NS = "http://www.w3.org/1999/xhtml"; @@ -35,11 +34,6 @@ const FOCUS_BACKWARD = Ci.nsIFocusManager.MOVEFOCUS_BACKWARD; Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -this.EXPORTED_SYMBOLS = ["editableItem", - "editableField", - "getInplaceEditorForSpan", - "InplaceEditor"]; - /** * Mark a span editable. |editableField| will listen for the span to * be focused and create an InlineEditor to handle text input. @@ -81,6 +75,8 @@ function editableField(aOptions) }); } +exports.editableField = editableField; + /** * Handle events for an element that should respond to * clicks and sit in the editing tab order, and call @@ -94,7 +90,7 @@ function editableField(aOptions) * @param {function} aCallback * Called when the editor is activated. */ -this.editableItem = function editableItem(aOptions, aCallback) +function editableItem(aOptions, aCallback) { let trigger = aOptions.trigger || "click" let element = aOptions.element; @@ -136,16 +132,20 @@ this.editableItem = function editableItem(aOptions, aCallback) element._editable = true; } +exports.editableItem = this.editableItem; + /* * Various API consumers (especially tests) sometimes want to grab the * inplaceEditor expando off span elements. However, when each global has its * own compartment, those expandos live on Xray wrappers that are only visible * within this JSM. So we provide a little workaround here. */ -this.getInplaceEditorForSpan = function getInplaceEditorForSpan(aSpan) + +function getInplaceEditorForSpan(aSpan) { return aSpan.inplaceEditor; }; +exports.getInplaceEditorForSpan = getInplaceEditorForSpan; function InplaceEditor(aOptions, aEvent) { @@ -206,6 +206,8 @@ function InplaceEditor(aOptions, aEvent) } } +exports.InplaceEditor = InplaceEditor; + InplaceEditor.prototype = { _createInput: function InplaceEditor_createEditor() { diff --git a/browser/devtools/shared/test/browser_eventemitter_basic.js b/browser/devtools/shared/test/browser_eventemitter_basic.js index b868a7438902..7e9cccae345c 100644 --- a/browser/devtools/shared/test/browser_eventemitter_basic.js +++ b/browser/devtools/shared/test/browser_eventemitter_basic.js @@ -8,7 +8,7 @@ function test() { function testEmitter(aObject) { - Cu.import("resource:///modules/devtools/EventEmitter.jsm", this); + Cu.import("resource:///modules/devtools/shared/event-emitter.js", this); let emitter; diff --git a/browser/devtools/shared/test/head.js b/browser/devtools/shared/test/head.js index ebc7b12d2e68..85173b0d5a32 100644 --- a/browser/devtools/shared/test/head.js +++ b/browser/devtools/shared/test/head.js @@ -2,7 +2,8 @@ * 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/. */ -let TargetFactory = (Cu.import("resource:///modules/devtools/Target.jsm", {})).TargetFactory; +let {devtools} = Cu.import("resource:///modules/devtools/gDevTools.jsm", {}); +let TargetFactory = devtools.TargetFactory; /** * Open a new tab at a URL and call a callback on load diff --git a/browser/devtools/shared/Undo.jsm b/browser/devtools/shared/undo.js similarity index 97% rename from browser/devtools/shared/Undo.jsm rename to browser/devtools/shared/undo.js index 5312d6249f21..ca825329a043 100644 --- a/browser/devtools/shared/Undo.jsm +++ b/browser/devtools/shared/undo.js @@ -3,9 +3,6 @@ /* 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 Cu = Components.utils; - -this.EXPORTED_SYMBOLS = ["UndoStack"]; /** * A simple undo stack manager. @@ -19,12 +16,14 @@ this.EXPORTED_SYMBOLS = ["UndoStack"]; * @param integer aMaxUndo Maximum number of undo steps. * defaults to 50. */ -this.UndoStack = function UndoStack(aMaxUndo) +function UndoStack(aMaxUndo) { this.maxUndo = aMaxUndo || 50; this._stack = []; } +exports.UndoStack = UndoStack; + UndoStack.prototype = { // Current index into the undo stack. Is positioned after the last // currently-applied change. diff --git a/browser/devtools/styleeditor/StyleEditorPanel.jsm b/browser/devtools/styleeditor/StyleEditorPanel.jsm index df730ae5ef7e..39ea92a072ae 100644 --- a/browser/devtools/styleeditor/StyleEditorPanel.jsm +++ b/browser/devtools/styleeditor/StyleEditorPanel.jsm @@ -11,7 +11,7 @@ this.EXPORTED_SYMBOLS = ["StyleEditorPanel"]; Cu.import("resource://gre/modules/XPCOMUtils.jsm"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js"); -Cu.import("resource:///modules/devtools/EventEmitter.jsm"); +Cu.import("resource:///modules/devtools/shared/event-emitter.js"); XPCOMUtils.defineLazyModuleGetter(this, "StyleEditorChrome", "resource:///modules/devtools/StyleEditorChrome.jsm"); diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_bug_826982_location_changed.js b/browser/devtools/styleeditor/test/browser_styleeditor_bug_826982_location_changed.js index 6763a6c72401..c248e96b092f 100644 --- a/browser/devtools/styleeditor/test/browser_styleeditor_bug_826982_location_changed.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_bug_826982_location_changed.js @@ -1,10 +1,6 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; - function test() { let notificationBox, styleEditor; let alertActive1_called = false; diff --git a/browser/devtools/styleeditor/test/browser_styleeditor_reopen.js b/browser/devtools/styleeditor/test/browser_styleeditor_reopen.js index 6de11e1ef25f..b3d8e4b7887c 100644 --- a/browser/devtools/styleeditor/test/browser_styleeditor_reopen.js +++ b/browser/devtools/styleeditor/test/browser_styleeditor_reopen.js @@ -2,10 +2,6 @@ /* Any copyright is dedicated to the Public Domain. http://creativecommons.org/publicdomain/zero/1.0/ */ -let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; - function test() { // http rather than chrome to improve coverage diff --git a/browser/devtools/styleeditor/test/head.js b/browser/devtools/styleeditor/test/head.js index 4a81ade6d81f..27cd56eaeca9 100644 --- a/browser/devtools/styleeditor/test/head.js +++ b/browser/devtools/styleeditor/test/head.js @@ -7,8 +7,8 @@ const TEST_BASE_HTTPS = "https://example.com/browser/browser/devtools/styleedito const TEST_HOST = 'mochi.test:8888'; let tempScope = {}; -Cu.import("resource:///modules/devtools/Target.jsm", tempScope); -let TargetFactory = tempScope.TargetFactory; +Cu.import("resource:///modules/devtools/gDevTools.jsm", tempScope); +let TargetFactory = tempScope.devtools.TargetFactory; Components.utils.import("resource://gre/modules/devtools/Console.jsm", tempScope); let console = tempScope.console; diff --git a/browser/devtools/styleeditor/test/helpers.js b/browser/devtools/styleeditor/test/helpers.js index 3ff7f7935a0a..f1204d2b96dc 100644 --- a/browser/devtools/styleeditor/test/helpers.js +++ b/browser/devtools/styleeditor/test/helpers.js @@ -24,7 +24,8 @@ let require = (Cu.import("resource://gre/modules/devtools/Require.jsm", {})).req Components.utils.import("resource:///modules/devtools/gcli.jsm", {}); let console = (Cu.import("resource://gre/modules/devtools/Console.jsm", {})).console; -let TargetFactory = (Cu.import("resource:///modules/devtools/Target.jsm", {})).TargetFactory; +let devtools = (Cu.import("resource:///modules/devtools/gDevTools.jsm", {})).devtools; +let TargetFactory = devtools.TargetFactory; let Promise = (Cu.import("resource://gre/modules/commonjs/sdk/core/promise.js", {})).Promise; let assert = { ok: ok, is: is, log: info }; diff --git a/browser/devtools/styleinspector/Makefile.in b/browser/devtools/styleinspector/Makefile.in index 8890154f78a5..1599859b79ab 100644 --- a/browser/devtools/styleinspector/Makefile.in +++ b/browser/devtools/styleinspector/Makefile.in @@ -13,4 +13,4 @@ include $(DEPTH)/config/autoconf.mk include $(topsrcdir)/config/rules.mk libs:: - $(NSINSTALL) $(srcdir)/*.jsm $(FINAL_TARGET)/modules/devtools + $(NSINSTALL) $(srcdir)/*.js $(FINAL_TARGET)/modules/devtools/styleinspector diff --git a/browser/devtools/styleinspector/CssHtmlTree.jsm b/browser/devtools/styleinspector/computed-view.js similarity index 97% rename from browser/devtools/styleinspector/CssHtmlTree.jsm rename to browser/devtools/styleinspector/computed-view.js index c7c7c7c9ce72..8e3d9d76d3a6 100644 --- a/browser/devtools/styleinspector/CssHtmlTree.jsm +++ b/browser/devtools/styleinspector/computed-view.js @@ -4,25 +4,22 @@ * 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 Cc = Components.classes; -const Cu = Components.utils; -const FILTER_CHANGED_TIMEOUT = 300; +const {Cc, Ci, Cu} = require("chrome"); -const HTML_NS = "http://www.w3.org/1999/xhtml"; -const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; +let ToolDefinitions = require("main").Tools; +let {CssLogic} = require("devtools/styleinspector/css-logic"); Cu.import("resource://gre/modules/Services.jsm"); Cu.import("resource://gre/modules/PluralForm.jsm"); Cu.import("resource://gre/modules/XPCOMUtils.jsm"); -Cu.import("resource:///modules/devtools/CssLogic.jsm"); Cu.import("resource:///modules/devtools/Templater.jsm"); -Cu.import("resource:///modules/devtools/ToolDefinitions.jsm"); -XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", - "resource:///modules/devtools/gDevTools.jsm"); +Cu.import("resource:///modules/devtools/gDevTools.jsm"); -this.EXPORTED_SYMBOLS = ["CssHtmlTree", "PropertyView"]; +const FILTER_CHANGED_TIMEOUT = 300; + +const HTML_NS = "http://www.w3.org/1999/xhtml"; +const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; /** * Helper for long-running processes that should yield occasionally to @@ -46,7 +43,7 @@ this.EXPORTED_SYMBOLS = ["CssHtmlTree", "PropertyView"]; function UpdateProcess(aWin, aGenerator, aOptions) { this.win = aWin; - this.iter = Iterator(aGenerator); + this.iter = devtools._Iterator(aGenerator); this.onItem = aOptions.onItem || function() {}; this.onBatch = aOptions.onBatch || function () {}; this.onDone = aOptions.onDone || function() {}; @@ -120,7 +117,7 @@ UpdateProcess.prototype = { * @params {StyleInspector} aStyleInspector The owner of this CssHtmlTree * @constructor */ -this.CssHtmlTree = function CssHtmlTree(aStyleInspector) +function CssHtmlTree(aStyleInspector) { this.styleWindow = aStyleInspector.window; this.styleDocument = aStyleInspector.window.document; @@ -533,7 +530,7 @@ CssHtmlTree.prototype = { * @param {string} aName the CSS property name for which this PropertyView * instance will render the rules. */ -this.PropertyView = function PropertyView(aTree, aName) +function PropertyView(aTree, aName) { this.tree = aTree; this.name = aName; @@ -826,7 +823,7 @@ SelectorView.prototype = { * * These statuses are localized inside the styleinspector.properties string * bundle. - * @see CssLogic.jsm - the CssLogic.STATUS array. + * @see css-logic.js - the CssLogic.STATUS array. * * @return {void} */ @@ -935,7 +932,7 @@ SelectorView.prototype = { if (contentSheet) { let target = inspector.target; - if (styleEditorDefinition.isTargetSupported(target)) { + if (ToolDefinitions.styleEditor.isTargetSupported(target)) { gDevTools.showToolbox(target, "styleeditor").then(function(toolbox) { toolbox.getCurrentPanel().selectStyleSheet(styleSheet, line); }); @@ -951,3 +948,6 @@ SelectorView.prototype = { } }, }; + +exports.CssHtmlTree = CssHtmlTree; +exports.PropertyView = PropertyView; \ No newline at end of file diff --git a/browser/devtools/styleinspector/computedview.xhtml b/browser/devtools/styleinspector/computedview.xhtml index ce08b8ac006b..f459c0a45034 100644 --- a/browser/devtools/styleinspector/computedview.xhtml +++ b/browser/devtools/styleinspector/computedview.xhtml @@ -35,8 +35,9 @@