Bug 1361311 - Remove project editor from WebIDE. r=pbro
authorJ. Ryan Stinnett <jryans@gmail.com>
Wed, 07 Jun 2017 15:25:52 -0500
changeset 411136 f7248d3f0d8a54c54df4ea2b9819a2e2730ad1a8
parent 411135 dcdff55098560d60df1ec0a7d26e8e1303b1c6e8
child 411137 3568cd107bf40d1442539d7905de3ca353d70c31
push id7391
push usermtabara@mozilla.com
push dateMon, 12 Jun 2017 13:08:53 +0000
treeherdermozilla-beta@2191d7f87e2e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerspbro
bugs1361311
milestone55.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1361311 - Remove project editor from WebIDE. r=pbro MozReview-Commit-ID: CKo4EruNTe4
devtools/client/locales/en-US/webide.dtd
devtools/client/shared/telemetry.js
devtools/client/webide/content/prefs.xhtml
devtools/client/webide/content/webide.js
devtools/client/webide/content/webide.xul
devtools/client/webide/modules/build.js
devtools/client/webide/webide-prefs.js
toolkit/components/telemetry/Histograms.json
--- a/devtools/client/locales/en-US/webide.dtd
+++ b/devtools/client/locales/en-US/webide.dtd
@@ -40,18 +40,16 @@
 <!ENTITY runtimeMenu_showMonitor_accesskey "M">
 <!ENTITY runtimeMenu_showDevicePrefs_label "Device Preferences">
 <!ENTITY runtimeMenu_showDevicePrefs_accesskey "D">
 <!ENTITY runtimeMenu_showSettings_label "Device Settings">
 <!ENTITY runtimeMenu_showSettings_accesskey "s">
 
 <!ENTITY viewMenu_label "View">
 <!ENTITY viewMenu_accesskey "V">
-<!ENTITY viewMenu_toggleEditor_label "Toggle Editor">
-<!ENTITY viewMenu_toggleEditor_accesskey "E">
 <!ENTITY viewMenu_zoomin_label "Zoom In">
 <!ENTITY viewMenu_zoomin_accesskey "I">
 <!ENTITY viewMenu_zoomout_label "Zoom Out">
 <!ENTITY viewMenu_zoomout_accesskey "O">
 <!ENTITY viewMenu_resetzoom_label "Reset Zoom">
 <!ENTITY viewMenu_resetzoom_accesskey "R">
 
 <!ENTITY projectButton_label "Open App">
@@ -61,18 +59,16 @@
 <!-- quit app -->
 <!ENTITY key_quit "W">
 <!-- open menu -->
 <!ENTITY key_showProjectPanel "O">
 <!-- reload app -->
 <!ENTITY key_play "R">
 <!-- show toolbox -->
 <!ENTITY key_toggleToolbox "VK_F12">
-<!-- toggle sidebar -->
-<!ENTITY key_toggleEditor "B">
 <!-- zoom -->
 <!ENTITY key_zoomin "+">
 <!ENTITY key_zoomin2 "=">
 <!ENTITY key_zoomout "-">
 <!ENTITY key_resetzoom "0">
 
 <!ENTITY projectPanel_myProjects "My Projects">
 <!ENTITY projectPanel_runtimeApps "Runtime Apps">
@@ -118,31 +114,16 @@
 <!ENTITY prefs_restore "Restore Defaults">
 <!ENTITY prefs_manage_components "Manage Extra Components">
 <!ENTITY prefs_options_autoconnectruntime "Reconnect to previous runtime">
 <!ENTITY prefs_options_autoconnectruntime_tooltip "Reconnect to previous runtime when WebIDE starts">
 <!ENTITY prefs_options_rememberlastproject "Remember last project">
 <!ENTITY prefs_options_rememberlastproject_tooltip "Restore previous project when WebIDE starts">
 <!ENTITY prefs_options_templatesurl "Templates URL">
 <!ENTITY prefs_options_templatesurl_tooltip "Index of available templates">
-<!ENTITY prefs_options_showeditor "Show editor">
-<!ENTITY prefs_options_showeditor_tooltip "Show internal editor">
-<!ENTITY prefs_options_tabsize "Tab size">
-<!ENTITY prefs_options_expandtab "Soft tabs">
-<!ENTITY prefs_options_expandtab_tooltip "Use spaces instead of the tab character">
-<!ENTITY prefs_options_detectindentation "Autoindent">
-<!ENTITY prefs_options_detectindentation_tooltip "Guess indentation based on source content">
-<!ENTITY prefs_options_autocomplete "Autocomplete">
-<!ENTITY prefs_options_autocomplete_tooltip "Enable code autocompletion">
-<!ENTITY prefs_options_autoclosebrackets "Autoclose brackets">
-<!ENTITY prefs_options_autoclosebrackets_tooltip "Automatically insert closing brackets">
-<!ENTITY prefs_options_keybindings "Keybindings">
-<!ENTITY prefs_options_keybindings_default "Default">
-<!ENTITY prefs_options_autosavefiles "Autosave files">
-<!ENTITY prefs_options_autosavefiles_tooltip "Automatically save edited files before running project">
 
 <!-- Runtime Details -->
 <!ENTITY runtimedetails_title "Runtime Info">
 <!ENTITY runtimedetails_adbIsRoot "ADB is root: ">
 <!ENTITY runtimedetails_summonADBRoot "root device">
 <!ENTITY runtimedetails_ADBRootWarning "(requires unlocked bootloader)">
 <!ENTITY runtimedetails_unrestrictedPrivileges "Unrestricted DevTools privileges: ">
 <!ENTITY runtimedetails_requestPrivileges "request higher privileges">
--- a/devtools/client/shared/telemetry.js
+++ b/devtools/client/shared/telemetry.js
@@ -153,23 +153,16 @@ Telemetry.prototype = {
     aboutdebugging: {
       histogram: "DEVTOOLS_ABOUTDEBUGGING_OPENED_COUNT",
       timerHistogram: "DEVTOOLS_ABOUTDEBUGGING_TIME_ACTIVE_SECONDS"
     },
     webide: {
       histogram: "DEVTOOLS_WEBIDE_OPENED_COUNT",
       timerHistogram: "DEVTOOLS_WEBIDE_TIME_ACTIVE_SECONDS"
     },
-    webideProjectEditor: {
-      histogram: "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_COUNT",
-      timerHistogram: "DEVTOOLS_WEBIDE_PROJECT_EDITOR_TIME_ACTIVE_SECONDS"
-    },
-    webideProjectEditorSave: {
-      histogram: "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_COUNT",
-    },
     webideNewProject: {
       histogram: "DEVTOOLS_WEBIDE_NEW_PROJECT_COUNT",
     },
     webideImportProject: {
       histogram: "DEVTOOLS_WEBIDE_IMPORT_PROJECT_COUNT",
     },
     custom: {
       histogram: "DEVTOOLS_CUSTOM_OPENED_COUNT",
--- a/devtools/client/webide/content/prefs.xhtml
+++ b/devtools/client/webide/content/prefs.xhtml
@@ -24,22 +24,16 @@
     </div>
 
     <h1>&prefs_title;</h1>
 
     <h2>&prefs_general_title;</h2>
 
     <ul>
       <li>
-        <label title="&prefs_options_showeditor_tooltip;">
-          <input type="checkbox" data-pref="devtools.webide.showProjectEditor"/>
-          <span>&prefs_options_showeditor;</span>
-        </label>
-      </li>
-      <li>
         <label title="&prefs_options_rememberlastproject_tooltip;">
           <input type="checkbox" data-pref="devtools.webide.restoreLastProject"/>
           <span>&prefs_options_rememberlastproject;</span>
         </label>
       </li>
       <li>
         <label title="&prefs_options_autoconnectruntime_tooltip;">
           <input type="checkbox" data-pref="devtools.webide.autoConnectRuntime"/>
@@ -49,64 +43,10 @@
       <li>
         <label class="text-input" title="&prefs_options_templatesurl_tooltip;">
           <span>&prefs_options_templatesurl;</span>
           <input data-pref="devtools.webide.templatesURL"/>
         </label>
       </li>
     </ul>
 
-    <h2>&prefs_editor_title;</h2>
-
-    <ul>
-      <li>
-        <label><span>&prefs_options_tabsize;</span>
-          <select data-pref="devtools.editor.tabsize">
-            <option value="2">2</option>
-            <option value="4">4</option>
-            <option value="8">8</option>
-          </select>
-        </label>
-      </li>
-      <li>
-        <label title="&prefs_options_expandtab_tooltip;">
-          <input type="checkbox" data-pref="devtools.editor.expandtab"/>
-          <span>&prefs_options_expandtab;</span>
-        </label>
-      </li>
-      <li>
-        <label title="&prefs_options_detectindentation_tooltip;">
-          <input type="checkbox" data-pref="devtools.editor.detectindentation"/>
-          <span>&prefs_options_detectindentation;</span>
-        </label>
-      </li>
-      <li>
-        <label title="&prefs_options_autocomplete_tooltip;">
-          <input type="checkbox" data-pref="devtools.editor.autocomplete"/>
-          <span>&prefs_options_autocomplete;</span>
-        </label>
-      </li>
-      <li>
-        <label title="&prefs_options_autoclosebrackets_tooltip;">
-          <input type="checkbox" data-pref="devtools.editor.autoclosebrackets"/>
-          <span>&prefs_options_autoclosebrackets;</span>
-        </label>
-      </li>
-      <li>
-        <label title="&prefs_options_autosavefiles_tooltip;">
-          <input type="checkbox" data-pref="devtools.webide.autosaveFiles"/>
-          <span>&prefs_options_autosavefiles;</span>
-        </label>
-      </li>
-      <li>
-        <label><span>&prefs_options_keybindings;</span>
-          <select data-pref="devtools.editor.keymap">
-            <option value="default">&prefs_options_keybindings_default;</option>
-            <option value="vim">Vim</option>
-            <option value="emacs">Emacs</option>
-            <option value="sublime">Sublime</option>
-          </select>
-        </label>
-      </li>
-    </ul>
-
   </body>
 </html>
--- a/devtools/client/webide/content/webide.js
+++ b/devtools/client/webide/content/webide.js
@@ -1,27 +1,25 @@
 /* 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/. */
 
-var Cc = Components.classes;
 var Cu = Components.utils;
 var Ci = Components.interfaces;
 
 const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const {gDevTools} = require("devtools/client/framework/devtools");
 const {gDevToolsBrowser} = require("devtools/client/framework/devtools-browser");
 const {Toolbox} = require("devtools/client/framework/toolbox");
 const Services = require("Services");
 const {AppProjects} = require("devtools/client/webide/modules/app-projects");
 const {Connection} = require("devtools/shared/client/connection-manager");
 const {AppManager} = require("devtools/client/webide/modules/app-manager");
 const EventEmitter = require("devtools/shared/event-emitter");
 const promise = require("promise");
-const ProjectEditor = require("devtools/client/projecteditor/lib/projecteditor");
 const {GetAvailableAddons} = require("devtools/client/webide/modules/addons");
 const {getJSON} = require("devtools/client/shared/getjson");
 const utils = require("devtools/client/webide/modules/utils");
 const Telemetry = require("devtools/client/shared/telemetry");
 const {RuntimeScanners} = require("devtools/client/webide/modules/runtimes");
 const {showDoorhanger} = require("devtools/client/shared/doorhanger");
 const {Simulators} = require("devtools/client/webide/modules/simulators");
 const {Task} = require("devtools/shared/task");
@@ -122,27 +120,19 @@ var UI = {
 
   destroy: function () {
     window.removeEventListener("focus", this.onfocus, true);
     AppManager.off("app-manager-update", this.appManagerUpdate);
     AppManager.destroy();
     Simulators.off("configure", this.configureSimulator);
     this.updateConnectionTelemetry();
     this._telemetry.toolClosed("webide");
-    this._telemetry.toolClosed("webideProjectEditor");
     this._telemetry.destroy();
   },
 
-  canCloseProject: function () {
-    if (this.projecteditor) {
-      return this.projecteditor.confirmUnsaved();
-    }
-    return true;
-  },
-
   onfocus: function () {
     // Because we can't track the activity in the folder project,
     // we need to validate the project regularly. Let's assume that
     // if a modification happened, it happened when the window was
     // not focused.
     if (AppManager.selectedProject &&
         AppManager.selectedProject.type != "mainProcess" &&
         AppManager.selectedProject.type != "runtimeApp" &&
@@ -163,21 +153,16 @@ var UI = {
       case "runtime-list":
         this.autoConnectRuntime();
         break;
       case "connection":
         this.updateRuntimeButton();
         this.updateCommands();
         this.updateConnectionTelemetry();
         break;
-      case "before-project":
-        if (!this.canCloseProject()) {
-          details.cancel();
-        }
-        break;
       case "project":
         this._updatePromise = Task.spawn(function* () {
           UI.updateTitle();
           yield UI.destroyToolbox();
           UI.updateCommands();
           UI.openProject();
           yield UI.autoStartProject();
           UI.autoOpenToolbox();
@@ -204,17 +189,16 @@ var UI = {
         break;
       case "runtime":
         this.updateRuntimeButton();
         this.saveLastConnectedRuntime();
         break;
       case "project-validated":
         this.updateTitle();
         this.updateCommands();
-        this.updateProjectEditorHeader();
         break;
       case "install-progress":
         this.updateProgress(Math.round(100 * details.bytesSent / details.totalBytes));
         break;
       case "runtime-targets":
         this.autoSelectProject();
         break;
       case "pre-package":
@@ -599,114 +583,25 @@ var UI = {
   logActionState: function (action, state) {
     let histogramId = "DEVTOOLS_WEBIDE_CONNECTION_" +
                       action.toUpperCase() + "_USED";
     this._telemetry.log(histogramId, state);
   },
 
   /** ******** PROJECTS **********/
 
-  // ProjectEditor & details screen
-
-  destroyProjectEditor: function () {
-    if (this.projecteditor) {
-      this.projecteditor.destroy();
-      this.projecteditor = null;
-    }
-  },
-
-  /**
-   * Called when selecting or deselecting the project editor panel.
-   */
-  onChangeProjectEditorSelected: function () {
-    if (this.projecteditor) {
-      let panel = document.querySelector("#deck").selectedPanel;
-      if (panel && panel.id == "deck-panel-projecteditor") {
-        this.projecteditor.menuEnabled = true;
-        this._telemetry.toolOpened("webideProjectEditor");
-      } else {
-        this.projecteditor.menuEnabled = false;
-        this._telemetry.toolClosed("webideProjectEditor");
-      }
-    }
-  },
-
-  getProjectEditor: function () {
-    if (this.projecteditor) {
-      return this.projecteditor.loaded;
-    }
-
-    let projecteditorIframe = document.querySelector("#deck-panel-projecteditor");
-    this.projecteditor = ProjectEditor.ProjectEditor(projecteditorIframe, {
-      menubar: document.querySelector("#main-menubar"),
-      menuindex: 1
-    });
-    this.projecteditor.on("onEditorSave", () => {
-      AppManager.validateAndUpdateProject(AppManager.selectedProject);
-      this._telemetry.actionOccurred("webideProjectEditorSave");
-    });
-    return this.projecteditor.loaded;
-  },
-
-  updateProjectEditorHeader: function () {
-    let project = AppManager.selectedProject;
-    if (!project || !this.projecteditor) {
-      return;
-    }
-    let status = project.validationStatus || "unknown";
-    if (status == "error warning") {
-      status = "error";
-    }
-    this.getProjectEditor().then((projecteditor) => {
-      projecteditor.setProjectToAppPath(project.location, {
-        name: project.name,
-        iconUrl: project.icon,
-        projectOverviewURL: "chrome://webide/content/details.xhtml",
-        validationStatus: status
-      }).then(null, console.error);
-    }, console.error);
-  },
-
-  isProjectEditorEnabled: function () {
-    return Services.prefs.getBoolPref("devtools.webide.showProjectEditor");
-  },
-
   openProject: function () {
     let project = AppManager.selectedProject;
 
-    // Nothing to show
-
     if (!project) {
       this.resetDeck();
       return;
     }
 
-    // Make sure the directory exist before we show Project Editor
-
-    let forceDetailsOnly = false;
-    if (project.type == "packaged") {
-      forceDetailsOnly = !utils.doesFileExist(project.location);
-    }
-
-    // Show only the details screen
-
-    if (project.type != "packaged" ||
-        !this.isProjectEditorEnabled() ||
-        forceDetailsOnly) {
-      this.selectDeckPanel("details");
-      return;
-    }
-
-    // Show ProjectEditor
-
-    this.getProjectEditor().then(() => {
-      this.updateProjectEditorHeader();
-    }, console.error);
-
-    this.selectDeckPanel("projecteditor");
+    this.selectDeckPanel("details");
   },
 
   autoStartProject: Task.async(function* () {
     let project = AppManager.selectedProject;
 
     if (!project) {
       return;
     }
@@ -864,24 +759,22 @@ var UI = {
     this.resetFocus();
     let panel = deck.querySelector("#deck-panel-" + id);
     let lazysrc = panel.getAttribute("lazysrc");
     if (lazysrc) {
       panel.removeAttribute("lazysrc");
       panel.setAttribute("src", lazysrc);
     }
     deck.selectedPanel = panel;
-    this.onChangeProjectEditorSelected();
   },
 
   resetDeck: function () {
     this.resetFocus();
     let deck = document.querySelector("#deck");
     deck.selectedPanel = null;
-    this.onChangeProjectEditorSelected();
   },
 
   buildIDToDate(buildID) {
     let fields = buildID.match(/(\d{4})(\d{2})(\d{2})/);
     // Date expects 0 - 11 for months
     return new Date(fields[1], Number.parseInt(fields[2]) - 1, fields[3]);
   },
 
@@ -995,19 +888,17 @@ var UI = {
     }
   }
 };
 
 EventEmitter.decorate(UI);
 
 var Cmds = {
   quit: function () {
-    if (UI.canCloseProject()) {
-      window.close();
-    }
+    window.close();
   },
 
   showProjectPanel: function () {
     ProjectPanel.toggleSidebar();
     return promise.resolve();
   },
 
   showRuntimePanel: function () {
@@ -1044,21 +935,16 @@ var Cmds = {
   showMonitor: function () {
     UI.selectDeckPanel("monitor");
   },
 
   play: Task.async(function* () {
     let busy;
     switch (AppManager.selectedProject.type) {
       case "packaged":
-        let autosave =
-          Services.prefs.getBoolPref("devtools.webide.autosaveFiles");
-        if (autosave && UI.projecteditor) {
-          yield UI.projecteditor.saveAllFiles();
-        }
         busy = UI.busyWithProgressUntil(AppManager.installAndRunProject(),
                                         "installing and running app");
         break;
       case "hosted":
         busy = UI.busyUntil(AppManager.installAndRunProject(),
                             "installing and running app");
         break;
       case "runtimeApp":
@@ -1088,25 +974,16 @@ var Cmds = {
       return UI.createToolbox();
     }
   },
 
   removeProject: function () {
     AppManager.removeSelectedProject();
   },
 
-  toggleEditors: function () {
-    let isNowEnabled = !UI.isProjectEditorEnabled();
-    Services.prefs.setBoolPref("devtools.webide.showProjectEditor", isNowEnabled);
-    if (!isNowEnabled) {
-      UI.destroyProjectEditor();
-    }
-    UI.openProject();
-  },
-
   showTroubleShooting: function () {
     UI.openInBrowser(HELP_URL);
   },
 
   showAddons: function () {
     UI.selectDeckPanel("addons");
   },
 
--- a/devtools/client/webide/content/webide.xul
+++ b/devtools/client/webide/content/webide.xul
@@ -42,17 +42,16 @@
       <command id="cmd_showSettings" label="&runtimeMenu_showSettings_label;" oncommand="Cmds.showSettings()"/>
       <command id="cmd_removeProject" oncommand="Cmds.removeProject()" label="&projectMenu_remove_label;"/>
       <command id="cmd_showProjectPanel" oncommand="Cmds.showProjectPanel()"/>
       <command id="cmd_showRuntimePanel" oncommand="Cmds.showRuntimePanel()"/>
       <command id="cmd_disconnectRuntime" oncommand="Cmds.disconnectRuntime()" label="&runtimeMenu_disconnect_label;"/>
       <command id="cmd_showMonitor" oncommand="Cmds.showMonitor()" label="&runtimeMenu_showMonitor_label;"/>
       <command id="cmd_showRuntimeDetails" oncommand="Cmds.showRuntimeDetails()" label="&runtimeMenu_showDetails_label;"/>
       <command id="cmd_takeScreenshot" oncommand="Cmds.takeScreenshot()" label="&runtimeMenu_takeScreenshot_label;"/>
-      <command id="cmd_toggleEditor" oncommand="Cmds.toggleEditors()" label="&viewMenu_toggleEditor_label;"/>
       <command id="cmd_showAddons" oncommand="Cmds.showAddons()"/>
       <command id="cmd_showPrefs" oncommand="Cmds.showPrefs()"/>
       <command id="cmd_showTroubleShooting" oncommand="Cmds.showTroubleShooting()"/>
       <command id="cmd_play" oncommand="Cmds.play()"/>
       <command id="cmd_stop" oncommand="Cmds.stop()" label="&projectMenu_stop_label;"/>
       <command id="cmd_toggleToolbox" oncommand="Cmds.toggleToolbox()"/>
       <command id="cmd_zoomin" label="&viewMenu_zoomin_label;" oncommand="Cmds.zoomIn()"/>
       <command id="cmd_zoomout" label="&viewMenu_zoomout_label;" oncommand="Cmds.zoomOut()"/>
@@ -88,31 +87,29 @@
         <menuitem command="cmd_showSettings" accesskey="&runtimeMenu_showSettings_accesskey;"/>
         <menuseparator/>
         <menuitem command="cmd_disconnectRuntime" accesskey="&runtimeMenu_disconnect_accesskey;"/>
       </menupopup>
     </menu>
 
     <menu id="menu-view" label="&viewMenu_label;" accesskey="&viewMenu_accesskey;">
       <menupopup id="menu-ViewPopup">
-        <menuitem command="cmd_toggleEditor" key="key_toggleEditor" accesskey="&viewMenu_toggleEditor_accesskey;"/>
         <menuseparator/>
         <menuitem command="cmd_zoomin" key="key_zoomin" accesskey="&viewMenu_zoomin_accesskey;"/>
         <menuitem command="cmd_zoomout" key="key_zoomout" accesskey="&viewMenu_zoomout_accesskey;"/>
         <menuitem command="cmd_resetzoom" key="key_resetzoom" accesskey="&viewMenu_resetzoom_accesskey;"/>
       </menupopup>
     </menu>
 
   </menubar>
 
   <keyset id="mainKeyset">
     <key key="&key_quit;" id="key_quit" command="cmd_quit" modifiers="accel"/>
     <key key="&key_showProjectPanel;" id="key_showProjectPanel" command="cmd_showProjectPanel" modifiers="accel"/>
     <key key="&key_play;" id="key_play" command="cmd_play" modifiers="accel"/>
-    <key key="&key_toggleEditor;" id="key_toggleEditor" command="cmd_toggleEditor" modifiers="accel"/>
     <key keycode="&key_toggleToolbox;" id="key_toggleToolbox" command="cmd_toggleToolbox"/>
     <key key="&key_zoomin;" id="key_zoomin" command="cmd_zoomin" modifiers="accel"/>
     <key key="&key_zoomin2;" id="key_zoomin2" command="cmd_zoomin" modifiers="accel"/>
     <key key="&key_zoomout;" id="key_zoomout" command="cmd_zoomout" modifiers="accel"/>
     <key key="&key_resetzoom;" id="key_resetzoom" command="cmd_resetzoom" modifiers="accel"/>
   </keyset>
 
   <tooltip id="aHTMLTooltip" page="true"/>
@@ -146,17 +143,16 @@
       <vbox id="project-listing-panel" class="project-listing panel-list" flex="1">
         <div id="project-listing-wrapper" class="panel-list-wrapper">
           <iframe id="project-listing-panel-details" flex="1" src="project-listing.xhtml" tooltip="aHTMLTooltip"/>
         </div>
       </vbox>
       <splitter class="devtools-side-splitter" id="project-listing-splitter"/>
       <deck flex="1" id="deck" selectedIndex="-1">
         <iframe id="deck-panel-details" flex="1" src="details.xhtml"/>
-        <iframe id="deck-panel-projecteditor" flex="1"/>
         <iframe id="deck-panel-addons" flex="1" src="addons.xhtml"/>
         <iframe id="deck-panel-prefs" flex="1" src="prefs.xhtml"/>
         <iframe id="deck-panel-runtimedetails" flex="1" lazysrc="runtimedetails.xhtml"/>
         <iframe id="deck-panel-monitor" flex="1" lazysrc="monitor.xhtml"/>
         <iframe id="deck-panel-devicepreferences" flex="1" lazysrc="devicepreferences.xhtml"/>
         <iframe id="deck-panel-logs" flex="1" src="logs.xhtml"/>
         <iframe id="deck-panel-simulator" flex="1" lazysrc="simulator.xhtml"/>
       </deck>
--- a/devtools/client/webide/modules/build.js
+++ b/devtools/client/webide/modules/build.js
@@ -39,17 +39,17 @@ const ProjectBuilding = exports.ProjectB
     // Cordova
     let cordovaConfigPath = OS.Path.join(project.location, "config.xml");
     let exists = yield OS.File.exists(cordovaConfigPath);
     if (!exists) {
       return;
     }
     let data = yield OS.File.read(cordovaConfigPath);
     data = new TextDecoder().decode(data);
-    if (data.contains("cordova.apache.org")) {
+    if (data.includes("cordova.apache.org")) {
       return {
         "webide": {
           "prepackage": "cordova prepare",
           "packageDir": "./platforms/firefoxos/www"
         }
       };
     }
   }),
--- a/devtools/client/webide/webide-prefs.js
+++ b/devtools/client/webide/webide-prefs.js
@@ -1,13 +1,12 @@
 /* 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/. */
 
-pref("devtools.webide.showProjectEditor", true);
 pref("devtools.webide.templatesURL", "https://code.cdn.mozilla.net/templates/list.json");
 pref("devtools.webide.autoinstallADBHelper", true);
 pref("devtools.webide.autoinstallFxdtAdapters", true);
 pref("devtools.webide.autoConnectRuntime", true);
 pref("devtools.webide.restoreLastProject", true);
 pref("devtools.webide.enableLocalRuntime", false);
 pref("devtools.webide.addonsURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/fxos-simulator/index.json");
 pref("devtools.webide.simulatorAddonsURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/fxos-simulator/#VERSION#/#OS#/fxos_#SLASHED_VERSION#_simulator-#OS#-latest.xpi");
@@ -18,9 +17,8 @@ pref("devtools.webide.adbAddonID", "adbh
 pref("devtools.webide.adaptersAddonURL", "https://ftp.mozilla.org/pub/mozilla.org/labs/valence/#OS#/valence-#OS#-latest.xpi");
 pref("devtools.webide.adaptersAddonID", "fxdevtools-adapters@mozilla.org");
 pref("devtools.webide.monitorWebSocketURL", "ws://localhost:9000");
 pref("devtools.webide.lastConnectedRuntime", "");
 pref("devtools.webide.lastSelectedProject", "");
 pref("devtools.webide.logSimulatorOutput", false);
 pref("devtools.webide.zoom", "1");
 pref("devtools.webide.busyTimeout", 10000);
-pref("devtools.webide.autosaveFiles", true);
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -9449,34 +9449,16 @@
     "record_in_processes": ["main", "content"],
     "alert_emails": ["dev-developer-tools@lists.mozilla.org"],
     "expires_in_version": "never",
     "kind": "count",
     "bug_numbers": [1247985],
     "description": "Number of times the DevTools WebIDE has been opened.",
     "releaseChannelCollection": "opt-out"
   },
-  "DEVTOOLS_WEBIDE_PROJECT_EDITOR_OPENED_COUNT": {
-    "record_in_processes": ["main", "content"],
-    "alert_emails": ["dev-developer-tools@lists.mozilla.org"],
-    "expires_in_version": "never",
-    "kind": "count",
-    "bug_numbers": [1247985],
-    "description": "Number of times the DevTools WebIDE project editor has been opened.",
-    "releaseChannelCollection": "opt-out"
-  },
-  "DEVTOOLS_WEBIDE_PROJECT_EDITOR_SAVE_COUNT": {
-    "record_in_processes": ["main", "content"],
-    "alert_emails": ["dev-developer-tools@lists.mozilla.org"],
-    "expires_in_version": "never",
-    "kind": "count",
-    "bug_numbers": [1247985],
-    "description": "Number of times a file has been saved in the DevTools WebIDE project editor.",
-    "releaseChannelCollection": "opt-out"
-  },
   "DEVTOOLS_WEBIDE_NEW_PROJECT_COUNT": {
     "record_in_processes": ["main", "content"],
     "alert_emails": ["dev-developer-tools@lists.mozilla.org"],
     "expires_in_version": "never",
     "kind": "count",
     "bug_numbers": [1247985],
     "description": "Number of times a new project has been created in the DevTools WebIDE.",
     "releaseChannelCollection": "opt-out"
@@ -9741,24 +9723,16 @@
   "DEVTOOLS_WEBIDE_TIME_ACTIVE_SECONDS": {
     "record_in_processes": ["main", "content"],
     "expires_in_version": "never",
     "kind": "exponential",
     "high": 10000000,
     "n_buckets": 100,
     "description": "How long has WebIDE been active (seconds)"
   },
-  "DEVTOOLS_WEBIDE_PROJECT_EDITOR_TIME_ACTIVE_SECONDS": {
-    "record_in_processes": ["main", "content"],
-    "expires_in_version": "never",
-    "kind": "exponential",
-    "high": 10000000,
-    "n_buckets": 100,
-    "description": "How long has WebIDE's project editor been active (seconds)"
-  },
   "DEVTOOLS_CUSTOM_TIME_ACTIVE_SECONDS": {
     "record_in_processes": ["main", "content"],
     "expires_in_version": "never",
     "kind": "exponential",
     "high": 10000000,
     "n_buckets": 100,
     "description": "How long has a custom developer tool been active (seconds)"
   },