diff --git a/browser/base/content/browser.xul b/browser/base/content/browser.xul
index 428a9777495..177eddf056e 100644
--- a/browser/base/content/browser.xul
+++ b/browser/base/content/browser.xul
@@ -8,7 +8,7 @@
-
+
diff --git a/browser/locales/Makefile.in b/browser/locales/Makefile.in
index 6f75776caf6..f7e680767a8 100644
--- a/browser/locales/Makefile.in
+++ b/browser/locales/Makefile.in
@@ -189,7 +189,7 @@ ident:
merge-%:
ifdef LOCALE_MERGEDIR
$(RM) -rf $(LOCALE_MERGEDIR)
- MACOSX_DEPLOYMENT_TARGET= compare-locales -m $(LOCALE_MERGEDIR) $(srcdir)/l10n.ini $(L10NBASEDIR) $*
+ $(topsrcdir)/mach compare-locales --merge-dir $(LOCALE_MERGEDIR) $*
endif
@echo
diff --git a/browser/locales/en-US/chrome/browser/loop/loop.properties b/browser/locales/en-US/chrome/browser/loop/loop.properties
index 34906a9e830..ba9bbe2e088 100644
--- a/browser/locales/en-US/chrome/browser/loop/loop.properties
+++ b/browser/locales/en-US/chrome/browser/loop/loop.properties
@@ -12,7 +12,7 @@ clientSuperShortname=Hello
## LOCALIZATION_NOTE(loopMenuItem_label): Label of the menu item that is placed
## inside the browser 'Tools' menu. Use the unicode ellipsis char, \u2026, or
## use "..." if \u2026 doesn't suit traditions in your locale.
-loopMenuItem_label=Start a conversation…
+loopMenuItem_label=Start a Conversation…
loopMenuItem_accesskey=t
## LOCALIZATION_NOTE(sign_in_again_title_line_one, sign_in_again_title_line_two2):
diff --git a/devtools/bootstrap.js b/devtools/bootstrap.js
index 109d56a3f77..46c1fe3026d 100644
--- a/devtools/bootstrap.js
+++ b/devtools/bootstrap.js
@@ -80,6 +80,10 @@ function reload(event) {
// Ask the loader to update itself and reopen the toolbox if needed
const {devtools} = Cu.import("resource://devtools/shared/Loader.jsm", {});
devtools.reload(reloadToolbox);
+
+ // Also tells gDevTools to reload its dependencies
+ const {gDevTools} = Cu.import("resource://devtools/client/framework/gDevTools.jsm", {});
+ gDevTools.reload();
}
let listener;
diff --git a/devtools/client/debugger/test/mochitest/browser.ini b/devtools/client/debugger/test/mochitest/browser.ini
index 0b564dfad4f..011cfaa874f 100644
--- a/devtools/client/debugger/test/mochitest/browser.ini
+++ b/devtools/client/debugger/test/mochitest/browser.ini
@@ -326,6 +326,8 @@ skip-if = e10s && debug
skip-if = e10s && debug
[browser_dbg_parser-10.js]
skip-if = e10s && debug
+[browser_dbg_parser-11.js]
+skip-if = e10s && debug
[browser_dbg_pause-exceptions-01.js]
skip-if = e10s && debug
[browser_dbg_pause-exceptions-02.js]
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_parser-11.js b/devtools/client/debugger/test/mochitest/browser_dbg_parser-11.js
new file mode 100644
index 00000000000..428cab8e070
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_parser-11.js
@@ -0,0 +1,39 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+/**
+ * Checks if self-closing tags are parsed by Parser.jsm
+ */
+
+function test() {
+ let { Parser } = Cu.import("resource://devtools/shared/Parser.jsm", {});
+
+ let source = [
+ '',
+ '',
+ '',
+ '"hello third"',
+ '',
+ ].join("\n");
+ let parser = new Parser();
+ let parsed = parser.get(source);
+
+ is(parser.errors.length, 0,
+ "There should be no errors logged when parsing.");
+ is(parsed.scriptCount, 5,
+ "There should be 5 scripts parsed in the parent HTML source.");
+
+ is(parsed.getScriptInfo(source.indexOf("foo.js\"/>") + 1).toSource(), "({start:-1, length:-1, index:-1})",
+ "the first script is empty");
+ is(parsed.getScriptInfo(source.indexOf("baz.js\"/>") + 1).toSource(), "({start:-1, length:-1, index:-1})",
+ "the second script is empty");
+ is(parsed.getScriptInfo(source.indexOf("foobar.js\"/>") + 1).toSource(), "({start:-1, length:-1, index:-1})",
+ "the third script is empty");
+
+ is(parsed.getScriptInfo(source.indexOf("hello third!")).toSource(), "({start:-1, length:-1, index:-1})",
+ "Inline script on self-closing tag not considered a script");
+ is(parsed.getScriptInfo(source.indexOf("hello fourth")).toSource(), "({start:267, length:14, index:4})",
+ "The fourth script was located correctly.");
+
+ finish();
+}
diff --git a/devtools/client/eyedropper/eyedropper.xul b/devtools/client/eyedropper/eyedropper.xul
index b7c70e3b91e..7a5d1fe2f15 100644
--- a/devtools/client/eyedropper/eyedropper.xul
+++ b/devtools/client/eyedropper/eyedropper.xul
@@ -9,7 +9,10 @@
-
+
+
diff --git a/devtools/client/framework/gDevTools.jsm b/devtools/client/framework/gDevTools.jsm
index d90030d132a..8014d65930f 100644
--- a/devtools/client/framework/gDevTools.jsm
+++ b/devtools/client/framework/gDevTools.jsm
@@ -10,21 +10,34 @@ const { classes: Cc, interfaces: Ci, utils: Cu } = Components;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
-const { require, loader } = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const promise = require("promise");
-// Load target and toolbox lazily as they need gDevTools to be fully initialized
-loader.lazyRequireGetter(this, "TargetFactory", "devtools/client/framework/target", true);
-loader.lazyRequireGetter(this, "Toolbox", "devtools/client/framework/toolbox", true);
-XPCOMUtils.defineLazyModuleGetter(this, "console",
- "resource://gre/modules/Console.jsm");
-XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
- "resource:///modules/CustomizableUI.jsm");
-loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
-loader.lazyRequireGetter(this, "DebuggerClient", "devtools/shared/client/main", true);
+// Make most dependencies be reloadable so that the reload addon
+// can update all of them while keeping gDevTools.jsm as-is
+// Bug 1188405 is going to refactor this JSM into a commonjs module
+// so that it can be reloaded as other modules.
+let require, loader, promise, DefaultTools, DefaultThemes;
+let loadDependencies = () => {
+ let l = Cu.import("resource://devtools/shared/Loader.jsm", {});
+ require = l.require;
+ loader = l.loader;
+ promise = require("promise");
+ // Load target and toolbox lazily as they need gDevTools to be fully initialized
+ loader.lazyRequireGetter(this, "TargetFactory", "devtools/client/framework/target", true);
+ loader.lazyRequireGetter(this, "Toolbox", "devtools/client/framework/toolbox", true);
+
+ XPCOMUtils.defineLazyModuleGetter(this, "console",
+ "resource://gre/modules/Console.jsm");
+ XPCOMUtils.defineLazyModuleGetter(this, "CustomizableUI",
+ "resource:///modules/CustomizableUI.jsm");
+ loader.lazyRequireGetter(this, "DebuggerServer", "devtools/server/main", true);
+ loader.lazyRequireGetter(this, "DebuggerClient", "devtools/shared/client/main", true);
+
+ let d = require("devtools/client/definitions");
+ DefaultTools = d.defaultTools;
+ DefaultThemes = d.defaultThemes;
+};
+loadDependencies();
-const {defaultTools: DefaultTools, defaultThemes: DefaultThemes} =
- require("devtools/client/definitions");
const EventEmitter = require("devtools/shared/event-emitter");
const Telemetry = require("devtools/client/shared/telemetry");
const {JsonView} = require("devtools/client/jsonview/main");
@@ -511,6 +524,11 @@ DevTools.prototype = {
// Is taken care of by the gDevToolsBrowser.forgetBrowserWindow
},
+ // Force reloading dependencies if the loader happens to have reloaded
+ reload() {
+ loadDependencies();
+ },
+
/**
* Iterator that yields each of the toolboxes.
*/
diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js
index 8193982ca01..f98c0a1c796 100644
--- a/devtools/client/framework/toolbox.js
+++ b/devtools/client/framework/toolbox.js
@@ -356,7 +356,7 @@ Toolbox.prototype = {
iframe.setAttribute("src", this._URL);
iframe.setAttribute("aria-label", toolboxStrings("toolbox.label"));
let domHelper = new DOMHelpers(iframe.contentWindow);
- domHelper.onceDOMReady(() => domReady.resolve());
+ domHelper.onceDOMReady(() => domReady.resolve(), this._URL);
// Optimization: fire up a few other things before waiting on
// the iframe being ready (makes startup faster)
@@ -365,7 +365,6 @@ Toolbox.prototype = {
// Attach the thread
this._threadClient = yield attachThread(this);
-
yield domReady.promise;
this.isReady = true;
diff --git a/devtools/client/inspector/fonts/fonts.css b/devtools/client/inspector/fonts/fonts.css
deleted file mode 100644
index 87d6926169b..00000000000
--- a/devtools/client/inspector/fonts/fonts.css
+++ /dev/null
@@ -1,51 +0,0 @@
-/* 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/. */
-
-.dim > #root,
-.font:not(.has-code) .font-css-code,
-.font-is-local,
-.font-is-remote,
-.font.is-local .font-format-url,
-#template {
- display: none;
-}
-
-.font.is-remote .font-is-remote,
-.font.is-local .font-is-local {
- display: inline;
-}
-
-.font-format::before {
- content: "(";
-}
-
-.font-format::after {
- content: ")";
-}
-
-.preview-input-toolbar {
- display: flex;
- width: 100%;
-}
-
-.font-preview-container {
- overflow-x: auto;
-}
-
-#preview-text-input {
- font: inherit;
- margin-top: 1px;
- margin-bottom: 1px;
- padding-top: 0;
- padding-bottom: 0;
- flex: 1;
-}
-
-:root {
- height: 100%;
-}
-
-#root {
- overflow: auto;
-}
diff --git a/devtools/client/inspector/fonts/fonts.xhtml b/devtools/client/inspector/fonts/fonts.xhtml
index 1aad0ccbb99..373c01a9072 100644
--- a/devtools/client/inspector/fonts/fonts.xhtml
+++ b/devtools/client/inspector/fonts/fonts.xhtml
@@ -11,7 +11,6 @@
&title;
-
diff --git a/devtools/client/inspector/rules/rules.css b/devtools/client/inspector/rules/rules.css
deleted file mode 100644
index 2ea3903ad8b..00000000000
--- a/devtools/client/inspector/rules/rules.css
+++ /dev/null
@@ -1,118 +0,0 @@
-/* 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/. */
-
-* {
- box-sizing: border-box;
-}
-
-:root {
- height: 100%;
-}
-
-body {
- margin: 0;
- display: flex;
- flex-direction: column;
- height: 100%;
-}
-
-#ruleview-container {
- -moz-user-select: text;
- overflow: auto;
- min-height: 0;
- flex: 1;
-}
-
-#ruleview-container.non-interactive {
- pointer-events: none;
- visibility: collapse;
- transition: visibility 0.25s;
-}
-
-.devtools-toolbar {
- width: 100%;
- display: flex;
-}
-
-#pseudo-class-panel {
- position: relative;
- margin-top: -1px;
- margin-bottom: -1px;
- overflow-y: hidden;
- max-height: 24px;
- outline: 0 !important;
- transition-property: max-height;
- transition-duration: 150ms;
- transition-timing-function: ease;
-}
-
-#pseudo-class-panel[hidden] {
- max-height: 0px;
-}
-
-#pseudo-class-panel > label {
- -moz-user-select: none;
- flex-grow: 1;
- display: flex;
- align-items: center;
-}
-
-.ruleview {
- overflow: auto;
- -moz-user-select: text;
-}
-
-.ruleview-code {
- direction: ltr;
-}
-
-.ruleview-property:not(:hover) > .ruleview-enableproperty {
- pointer-events: none;
-}
-
-.ruleview-namecontainer {
- cursor: text;
-}
-
-.ruleview-propertyvaluecontainer {
- cursor: text;
- padding-right: 5px;
-}
-
-.ruleview-propertyvaluecontainer a {
- cursor: pointer;
-}
-
-.ruleview-computedlist,
-.ruleview-overridden-rule-filter[hidden],
-.ruleview-warning[hidden] {
- display: none;
-}
-
-.ruleview-computedlist[user-open],
-.ruleview-computedlist[filter-open] {
- display: block;
-}
-
-.ruleview-expandable-container {
- display: none;
-}
-
-.show-expandable-container + .ruleview-expandable-container {
- display: block;
-}
-
-.ruleview .ruleview-expander {
- vertical-align: middle;
-}
-
-.ruleview-header {
- vertical-align: middle;
- min-height: 1.5em;
- line-height: 1.5em;
-}
-
-.ruleview-header.ruleview-expandable-header {
- cursor: pointer;
-}
diff --git a/devtools/client/inspector/rules/rules.xhtml b/devtools/client/inspector/rules/rules.xhtml
index f864c3eab40..7044916def1 100644
--- a/devtools/client/inspector/rules/rules.xhtml
+++ b/devtools/client/inspector/rules/rules.xhtml
@@ -17,7 +17,6 @@
&ruleViewTitle;
-