diff --git a/browser/base/content/browser-development-helpers.js b/browser/base/content/browser-development-helpers.js
new file mode 100644
index 000000000000..4656cfc2b818
--- /dev/null
+++ b/browser/base/content/browser-development-helpers.js
@@ -0,0 +1,48 @@
+/* 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/. */
+
+/**
+ * Extra features for local development. This file isn't loaded in
+ * non-local builds.
+ */
+
+var DevelopmentHelpers = {
+ init() {
+ this.quickRestart = this.quickRestart.bind(this);
+ this.addRestartShortcut();
+ },
+
+ quickRestart() {
+ Services.obs.notifyObservers(null, "startupcache-invalidate");
+
+ let env = Cc["@mozilla.org/process/environment;1"].
+ getService(Components.interfaces.nsIEnvironment);
+ env.set("MOZ_DISABLE_SAFE_MODE_KEY", "1");
+
+ Services.startup.quit(Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
+ },
+
+ addRestartShortcut() {
+ let command = document.createElement("command");
+ command.setAttribute("id", "cmd_quickRestart");
+ command.addEventListener("command", this.quickRestart, true);
+ command.setAttribute("oncommand", "void 0;"); // Needed - bug 371900
+ document.getElementById("mainCommandSet").prepend(command);
+
+ let key = document.createElement("key");
+ key.setAttribute("id", "key_quickRestart");
+ key.setAttribute("key", "r");
+ key.setAttribute("modifiers", "accel,alt");
+ key.setAttribute("command", "cmd_quickRestart");
+ key.setAttribute("oncommand", "void 0;"); // Needed - bug 371900
+ document.getElementById("mainKeyset").prepend(key);
+
+ let menuitem = document.createElement("menuitem");
+ menuitem.setAttribute("id", "menu_FileRestartItem");
+ menuitem.setAttribute("key", "key_quickRestart");
+ menuitem.setAttribute("label", "Restart (Developer)");
+ menuitem.addEventListener("command", this.quickRestart, true);
+ document.getElementById("menu_FilePopup").appendChild(menuitem);
+ },
+};
diff --git a/browser/base/content/browser.js b/browser/base/content/browser.js
index 370e464b6ba0..1ee76286fced 100755
--- a/browser/base/content/browser.js
+++ b/browser/base/content/browser.js
@@ -1688,6 +1688,9 @@ var gBrowserInit = {
if (AppConstants.MOZ_DATA_REPORTING)
gDataNotificationInfoBar.init();
+ if (!AppConstants.MOZILLA_OFFICIAL)
+ DevelopmentHelpers.init();
+
requestIdleCallback(() => {
// setup simple gestures support
gGestureSupport.init(true);
diff --git a/browser/base/content/global-scripts.inc b/browser/base/content/global-scripts.inc
index 5ede9c24d9b4..fd43dd8b88bf 100755
--- a/browser/base/content/global-scripts.inc
+++ b/browser/base/content/global-scripts.inc
@@ -23,3 +23,7 @@
#ifdef MOZ_DATA_REPORTING
#endif
+
+#ifndef MOZILLA_OFFICIAL
+
+#endif
diff --git a/browser/base/jar.mn b/browser/base/jar.mn
index ef8dc5e388f6..9d3e0af362af 100644
--- a/browser/base/jar.mn
+++ b/browser/base/jar.mn
@@ -69,6 +69,9 @@ browser.jar:
content/browser/browser-customization.js (content/browser-customization.js)
content/browser/browser-data-submission-info-bar.js (content/browser-data-submission-info-bar.js)
content/browser/browser-compacttheme.js (content/browser-compacttheme.js)
+#ifndef MOZILLA_OFFICIAL
+ content/browser/browser-development-helpers.js (content/browser-development-helpers.js)
+#endif
content/browser/browser-feeds.js (content/browser-feeds.js)
content/browser/browser-fullScreenAndPointerLock.js (content/browser-fullScreenAndPointerLock.js)
content/browser/browser-fullZoom.js (content/browser-fullZoom.js)