Bug 1353656 - Remove WebIDE build step for local apps. r=jryans draft
authorAlexandre Poirot <poirot.alex@gmail.com>
Mon, 24 Jul 2017 18:50:26 +0200
changeset 616172 977091e8a575f79f25855f3f91fb4ec7383bb7a0
parent 616171 a1d20d14a167201d79fda735bdf9a094bbd214f1
child 639412 4a0d6c46a848b114ed24e1ac63972e8a11b1c621
push id70619
push userbmo:poirot.alex@gmail.com
push dateWed, 26 Jul 2017 20:27:55 +0000
reviewersjryans
bugs1353656
milestone56.0a1
Bug 1353656 - Remove WebIDE build step for local apps. r=jryans MozReview-Commit-ID: 2YA2tBynD7g
devtools/client/locales/en-US/webide.dtd
devtools/client/webide/content/details.js
devtools/client/webide/content/details.xhtml
devtools/client/webide/content/jar.mn
devtools/client/webide/content/logs.js
devtools/client/webide/content/webide.js
devtools/client/webide/content/webide.xul
devtools/client/webide/modules/app-manager.js
devtools/client/webide/modules/build.js
devtools/client/webide/modules/moz.build
devtools/client/webide/test/chrome.ini
devtools/client/webide/test/test_build.html
devtools/client/webide/themes/jar.mn
devtools/client/webide/themes/logs.css
--- a/devtools/client/locales/en-US/webide.dtd
+++ b/devtools/client/locales/en-US/webide.dtd
@@ -85,17 +85,16 @@
 <!-- Lense -->
 <!ENTITY details_valid_header "valid">
 <!ENTITY details_warning_header "warnings">
 <!ENTITY details_error_header "errors">
 <!ENTITY details_description "Description">
 <!ENTITY details_location "Location">
 <!ENTITY details_manifestURL "App ID">
 <!ENTITY details_removeProject_button "Remove Project">
-<!ENTITY details_showPrepackageLog_button "Show Pre-package Log">
 
 <!-- New App -->
 <!ENTITY newAppWindowTitle "New App">
 <!ENTITY newAppHeader "Select template">
 <!ENTITY newAppLoadingTemplate "Loading templates…">
 <!ENTITY newAppProjectName "Project Name:">
 
 
--- a/devtools/client/webide/content/details.js
+++ b/devtools/client/webide/content/details.js
@@ -1,17 +1,16 @@
 /* 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 Cu = Components.utils;
 const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
 const Services = require("Services");
 const {AppManager} = require("devtools/client/webide/modules/app-manager");
-const {ProjectBuilding} = require("devtools/client/webide/modules/build");
 
 window.addEventListener("load", function () {
   document.addEventListener("visibilitychange", updateUI, true);
   AppManager.on("app-manager-update", onAppManagerUpdate);
   updateUI();
 }, {capture: true, once: true});
 
 window.addEventListener("unload", function () {
@@ -35,18 +34,16 @@ function resetUI() {
   document.body.className = "";
   document.querySelector("#icon").src = "";
   document.querySelector("h1").textContent = "";
   document.querySelector("#description").textContent = "";
   document.querySelector("#type").textContent = "";
   document.querySelector("#manifestURL").textContent = "";
   document.querySelector("#location").textContent = "";
 
-  document.querySelector("#prePackageLog").hidden = true;
-
   document.querySelector("#errorslist").innerHTML = "";
   document.querySelector("#warningslist").innerHTML = "";
 
 }
 
 function updateUI() {
   resetUI();
 
@@ -95,22 +92,16 @@ function updateUI() {
       let manifestURL = AppManager.getProjectManifestURL(project);
       if (manifestURL) {
         document.querySelector("#manifestURLHeader").classList.remove("hidden");
         document.querySelector("#manifestURL").textContent = manifestURL;
       }
     }
   }
 
-  if (project.type != "runtimeApp" && project.type != "mainProcess") {
-    ProjectBuilding.hasPrepackage(project).then(hasPrepackage => {
-      document.querySelector("#prePackageLog").hidden = !hasPrepackage;
-    });
-  }
-
   let errorsNode = document.querySelector("#errorslist");
   let warningsNode = document.querySelector("#warningslist");
 
   if (project.errors) {
     for (let e of project.errors) {
       let li = document.createElement("li");
       li.textContent = e;
       errorsNode.appendChild(li);
@@ -123,15 +114,11 @@ function updateUI() {
       li.textContent = w;
       warningsNode.appendChild(li);
     }
   }
 
   AppManager.update("details");
 }
 
-function showPrepackageLog() {
-  window.top.UI.selectDeckPanel("logs");
-}
-
 function removeProject() {
   AppManager.removeSelectedProject();
 }
--- a/devtools/client/webide/content/details.xhtml
+++ b/devtools/client/webide/content/details.xhtml
@@ -38,17 +38,15 @@
       <h3 id="descriptionHeader">&details_description;</h3>
       <p id="description"></p>
 
       <h3 id="locationHeader">&details_location;</h3>
       <p id="location"></p>
 
       <h3 id="manifestURLHeader">&details_manifestURL;</h3>
       <p id="manifestURL"></p>
-
-      <button id="prePackageLog" onclick="showPrepackageLog()" hidden="true">&details_showPrepackageLog_button;</button>
     </main>
 
     <ul class="validation_messages" id="errorslist"></ul>
     <ul class="validation_messages" id="warningslist"></ul>
 
   </body>
 </html>
--- a/devtools/client/webide/content/jar.mn
+++ b/devtools/client/webide/content/jar.mn
@@ -17,18 +17,16 @@ webide.jar:
     content/prefs.js                  (prefs.js)
     content/prefs.xhtml               (prefs.xhtml)
     content/monitor.xhtml             (monitor.xhtml)
     content/monitor.js                (monitor.js)
     content/devicepreferences.js      (devicepreferences.js)
     content/devicepreferences.xhtml   (devicepreferences.xhtml)
     content/wifi-auth.js              (wifi-auth.js)
     content/wifi-auth.xhtml           (wifi-auth.xhtml)
-    content/logs.xhtml                (logs.xhtml)
-    content/logs.js                   (logs.js)
     content/project-listing.xhtml     (project-listing.xhtml)
     content/project-listing.js        (project-listing.js)
     content/project-panel.js          (project-panel.js)
     content/runtime-panel.js          (runtime-panel.js)
     content/runtime-listing.xhtml     (runtime-listing.xhtml)
     content/runtime-listing.js        (runtime-listing.js)
     content/simulator.js              (simulator.js)
     content/simulator.xhtml           (simulator.xhtml)
deleted file mode 100644
--- a/devtools/client/webide/content/logs.js
+++ /dev/null
@@ -1,66 +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/. */
-
-var Cu = Components.utils;
-const {require} = Cu.import("resource://devtools/shared/Loader.jsm", {});
-const {AppManager} = require("devtools/client/webide/modules/app-manager");
-
-window.addEventListener("load", function () {
-  Logs.init();
-}, {once: true});
-
-window.addEventListener("unload", function () {
-  Logs.uninit();
-}, {once: true});
-
-const Logs = {
-  init: function () {
-    this.list = document.getElementById("logs");
-
-    Logs.onAppManagerUpdate = Logs.onAppManagerUpdate.bind(this);
-    AppManager.on("app-manager-update", Logs.onAppManagerUpdate);
-
-    document.getElementById("close").onclick = Logs.close.bind(this);
-  },
-
-  uninit: function () {
-    AppManager.off("app-manager-update", Logs.onAppManagerUpdate);
-  },
-
-  onAppManagerUpdate: function (event, what, details) {
-    switch (what) {
-      case "pre-package":
-        this.prePackageLog(details);
-        break;
-    }
-  },
-
-  close: function () {
-    window.parent.UI.openProject();
-  },
-
-  prePackageLog: function (msg, details) {
-    if (msg == "start") {
-      this.clear();
-    } else if (msg == "succeed") {
-      setTimeout(function () {
-        Logs.close();
-      }, 1000);
-    } else if (msg == "failed") {
-      this.log(details);
-    } else {
-      this.log(msg);
-    }
-  },
-
-  clear: function () {
-    this.list.innerHTML = "";
-  },
-
-  log: function (msg) {
-    let line = document.createElement("li");
-    line.textContent = msg;
-    this.list.appendChild(line);
-  }
-};
--- a/devtools/client/webide/content/webide.js
+++ b/devtools/client/webide/content/webide.js
@@ -196,19 +196,16 @@ var UI = {
         this.updateCommands();
         break;
       case "install-progress":
         this.updateProgress(Math.round(100 * details.bytesSent / details.totalBytes));
         break;
       case "runtime-targets":
         this.autoSelectProject();
         break;
-      case "pre-package":
-        this.prePackageLog(details);
-        break;
     }
     this._updatePromise = promise.resolve();
   },
 
   configureSimulator: function (event, simulator) {
     UI.selectDeckPanel("simulator");
   },
 
@@ -876,22 +873,16 @@ var UI = {
     document.querySelector("notificationbox").insertBefore(iframe, splitter.nextSibling);
     let host = Toolbox.HostType.CUSTOM;
     let options = { customIframe: iframe, zoom: false, uid: iframe.uid };
 
     document.querySelector("#action-button-debug").setAttribute("active", "true");
 
     return gDevTools.showToolbox(target, null, host, options);
   },
-
-  prePackageLog: function (msg) {
-    if (msg == "start") {
-      UI.selectDeckPanel("logs");
-    }
-  }
 };
 
 EventEmitter.decorate(UI);
 
 var Cmds = {
   quit: function () {
     window.close();
   },
--- a/devtools/client/webide/content/webide.xul
+++ b/devtools/client/webide/content/webide.xul
@@ -148,17 +148,16 @@
       <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-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>
       <splitter class="devtools-side-splitter" id="runtime-listing-splitter"/>
       <vbox id="runtime-listing-panel" class="runtime-listing panel-list" flex="1">
         <div id="runtime-listing-wrapper" class="panel-list-wrapper">
           <iframe id="runtime-listing-panel-details" flex="1" src="runtime-listing.xhtml" tooltip="aHTMLTooltip"/>
         </div>
       </vbox>
--- a/devtools/client/webide/modules/app-manager.js
+++ b/devtools/client/webide/modules/app-manager.js
@@ -15,17 +15,16 @@ const {AppValidator} = require("devtools
 const {ConnectionManager, Connection} = require("devtools/shared/client/connection-manager");
 const {AppActorFront} = require("devtools/shared/apps/app-actor-front");
 const {getDeviceFront} = require("devtools/shared/fronts/device");
 const {getPreferenceFront} = require("devtools/shared/fronts/preference");
 const {Task} = require("devtools/shared/task");
 const {RuntimeScanners, RuntimeTypes} = require("devtools/client/webide/modules/runtimes");
 const {NetUtil} = Cu.import("resource://gre/modules/NetUtil.jsm", {});
 const Telemetry = require("devtools/client/shared/telemetry");
-const {ProjectBuilding} = require("./build");
 
 const Strings = Services.strings.createBundle("chrome://devtools/locale/webide.properties");
 
 var AppManager = exports.AppManager = {
 
   DEFAULT_PROJECT_ICON: "chrome://webide/skin/default-app-icon.png",
   DEFAULT_PROJECT_NAME: "--",
 
@@ -421,29 +420,16 @@ var AppManager = exports.AppManager = {
     if (AppManager.selectedProject != null) {
       return;
     }
 
     yield AppProjects.remove(location);
     AppManager.update("project-removed");
   }),
 
-  packageProject: Task.async(function* (project) {
-    if (!project) {
-      return;
-    }
-    if (project.type == "packaged" ||
-        project.type == "hosted") {
-      yield ProjectBuilding.build({
-        project: project,
-        logger: this.update.bind(this, "pre-package")
-      });
-    }
-  }),
-
   _selectedRuntime: null,
   set selectedRuntime(value) {
     this._selectedRuntime = value;
     if (!value && this.selectedProject &&
         (this.selectedProject.type == "mainProcess" ||
          this.selectedProject.type == "runtimeApp" ||
          this.selectedProject.type == "tab")) {
       this.selectedProject = null;
@@ -618,34 +604,33 @@ var AppManager = exports.AppManager = {
     if (!this._appsFront) {
       console.error("Runtime doesn't have a webappsActor");
       return Promise.reject("Can't install");
     }
 
     return Task.spawn(function* () {
       let self = AppManager;
 
-      // Package and validate project
-      yield self.packageProject(project);
+      // Validate project
       yield self.validateAndUpdateProject(project);
 
       if (project.errorsCount > 0) {
         self.reportError("error_cantInstallValidationErrors");
         return;
       }
 
       let installPromise;
 
       if (project.type != "packaged" && project.type != "hosted") {
         return Promise.reject("Don't know how to install project");
       }
 
       let response;
       if (project.type == "packaged") {
-        let packageDir = yield ProjectBuilding.getPackageDir(project);
+        let packageDir = project.location;
         console.log("Installing app from " + packageDir);
 
         response = yield self._appsFront.installPackaged(packageDir,
                                                          project.packagedAppOrigin);
 
         // If the packaged app specified a custom origin override,
         // we need to update the local project origin
         project.packagedAppOrigin = response.appId;
@@ -699,17 +684,17 @@ var AppManager = exports.AppManager = {
 
   validateAndUpdateProject: function (project) {
     if (!project) {
       return Promise.reject();
     }
 
     return Task.spawn(function* () {
 
-      let packageDir = yield ProjectBuilding.getPackageDir(project);
+      let packageDir = project.location;
       let validation = new AppValidator({
         type: project.type,
         // Build process may place the manifest in a non-root directory
         location: packageDir
       });
 
       yield validation.validate();
 
deleted file mode 100644
--- a/devtools/client/webide/modules/build.js
+++ /dev/null
@@ -1,197 +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/. */
-
-const {Cu, Cc, Ci} = require("chrome");
-
-const { Task } = require("devtools/shared/task");
-const { OS } = Cu.import("resource://gre/modules/osfile.jsm", {});
-const Subprocess = require("sdk/system/child_process/subprocess");
-
-const ProjectBuilding = exports.ProjectBuilding = {
-  fetchPackageManifest: Task.async(function* (project) {
-    let manifestPath = OS.Path.join(project.location, "package.json");
-    let exists = yield OS.File.exists(manifestPath);
-    if (!exists) {
-      // No explicit manifest, try to generate one if possible
-      return this.generatePackageManifest(project);
-    }
-
-    let data = yield OS.File.read(manifestPath);
-    data = new TextDecoder().decode(data);
-    let manifest;
-    try {
-      manifest = JSON.parse(data);
-    } catch (e) {
-      throw new Error("Error while reading WebIDE manifest at: '" + manifestPath +
-                      "', invalid JSON: " + e.message);
-    }
-    return manifest;
-  }),
-
-  /**
-   * For common frameworks in the community, attempt to detect the build
-   * settings if none are defined.  This makes it much easier to get started
-   * with WebIDE.  Later on, perhaps an add-on could define such things for
-   * different frameworks.
-   */
-  generatePackageManifest: Task.async(function* (project) {
-    // 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.includes("cordova.apache.org")) {
-      return {
-        "webide": {
-          "prepackage": "cordova prepare",
-          "packageDir": "./platforms/firefoxos/www"
-        }
-      };
-    }
-  }),
-
-  hasPrepackage: Task.async(function* (project) {
-    let manifest = yield ProjectBuilding.fetchPackageManifest(project);
-    return manifest && manifest.webide && "prepackage" in manifest.webide;
-  }),
-
-  // If the app depends on some build step, run it before pushing the app
-  build: Task.async(function* ({ project, logger }) {
-    if (!(yield this.hasPrepackage(project))) {
-      return;
-    }
-
-    let manifest = yield ProjectBuilding.fetchPackageManifest(project);
-
-    logger("start");
-    try {
-      yield this._build(project, manifest, logger);
-      logger("succeed");
-    } catch (e) {
-      logger("failed", e);
-    }
-  }),
-
-  _build: Task.async(function* (project, manifest, logger) {
-    // Look for `webide` property
-    manifest = manifest.webide;
-
-    let command, cwd, args = [], env = [];
-
-    // Copy frequently used env vars
-    let envService = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment);
-    ["HOME", "PATH"].forEach(key => {
-      let value = envService.get(key);
-      if (value) {
-        env.push(key + "=" + value);
-      }
-    });
-
-    if (typeof (manifest.prepackage) === "string") {
-      command = manifest.prepackage.replace(/%project%/g, project.location);
-    } else if (manifest.prepackage.command) {
-      command = manifest.prepackage.command;
-
-      args = manifest.prepackage.args || [];
-      args = args.map(a => a.replace(/%project%/g, project.location));
-
-      env = env.concat(manifest.prepackage.env || []);
-      env = env.map(a => a.replace(/%project%/g, project.location));
-
-      if (manifest.prepackage.cwd) {
-        // Normalize path for Windows support (converts / to \)
-        let path = OS.Path.normalize(manifest.prepackage.cwd);
-        // Note that Path.join also support absolute path and argument.
-        // So that if cwd is absolute, it will return cwd.
-        let rel = OS.Path.join(project.location, path);
-        let exists = yield OS.File.exists(rel);
-        if (exists) {
-          cwd = rel;
-        }
-      }
-    } else {
-      throw new Error("pre-package manifest is invalid, missing or invalid " +
-                      "`prepackage` attribute");
-    }
-
-    if (!cwd) {
-      cwd = project.location;
-    }
-
-    logger("Running pre-package hook '" + command + "' " +
-           args.join(" ") +
-           " with ENV=[" + env.join(", ") + "]" +
-           " at " + cwd);
-
-    // Run the command through a shell command in order to support non absolute
-    // paths.
-    // On Windows `ComSpec` env variable is going to refer to cmd.exe,
-    // Otherwise, on Linux and Mac, SHELL env variable should refer to
-    // the user chosen shell program.
-    // (We do not check for OS, as on windows, with cygwin, ComSpec isn't set)
-    let shell = envService.get("ComSpec") || envService.get("SHELL");
-    args.unshift(command);
-
-    // For cmd.exe, we have to pass the `/C` option,
-    // but for unix shells we need -c.
-    // That to interpret next argument as a shell command.
-    if (envService.exists("ComSpec")) {
-      args.unshift("/C");
-    } else {
-      args.unshift("-c");
-    }
-
-    // Subprocess changes CWD, we have to save and restore it.
-    let originalCwd = yield OS.File.getCurrentDirectory();
-    try {
-      yield new Promise((resolve, reject) => {
-        Subprocess.call({
-          command: shell,
-          arguments: args,
-          environment: env,
-          workdir: cwd,
-
-          stdout: data =>
-            logger(data),
-          stderr: data =>
-            logger(data),
-
-          done: result => {
-            logger("Terminated with error code: " + result.exitCode);
-            if (result.exitCode == 0) {
-              resolve();
-            } else {
-              reject("pre-package command failed with error code " + result.exitCode);
-            }
-          }
-        });
-      }).then(() => {
-        OS.File.setCurrentDirectory(originalCwd);
-      });
-    } catch (e) {
-      throw new Error("Unable to run pre-package command '" + command + "' " +
-                      args.join(" ") + ":\n" + (e.message || e));
-    }
-  }),
-
-  getPackageDir: Task.async(function* (project) {
-    let manifest = yield ProjectBuilding.fetchPackageManifest(project);
-    if (!manifest || !manifest.webide || !manifest.webide.packageDir) {
-      return project.location;
-    }
-    manifest = manifest.webide;
-
-    let packageDir = OS.Path.join(project.location, manifest.packageDir);
-    // On Windows, replace / by \\
-    packageDir = OS.Path.normalize(packageDir);
-    let exists = yield OS.File.exists(packageDir);
-    if (exists) {
-      return packageDir;
-    }
-    throw new Error("Unable to resolve application package directory: '" + manifest.packageDir + "'");
-  })
-};
--- a/devtools/client/webide/modules/moz.build
+++ b/devtools/client/webide/modules/moz.build
@@ -4,17 +4,16 @@
 # 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/.
 
 DevToolsModules(
     'addons.js',
     'app-manager.js',
     'app-projects.js',
     'app-validator.js',
-    'build.js',
     'config-view.js',
     'project-list.js',
     'runtime-list.js',
     'runtimes.js',
     'simulator-process.js',
     'simulators.js',
     'tab-store.js',
     'utils.js'
--- a/devtools/client/webide/test/chrome.ini
+++ b/devtools/client/webide/test/chrome.ini
@@ -55,13 +55,12 @@ skip-if = (os == "linux") # Bug 1024734
 [test_addons.html]
 skip-if = true # Bug 1201392 - Update add-ons after migration
 [test_device_runtime.html]
 [test_autoconnect_runtime.html]
 [test_autoselect_project.html]
 [test_device_preferences.html]
 [test_fullscreenToolbox.html]
 [test_zoom.html]
-[test_build.html]
 [test_simulators.html]
 skip-if = true # Bug 1281138 - intermittent failures
 [test_toolbox.html]
 [test_app_validator.html]
deleted file mode 100644
--- a/devtools/client/webide/test/test_build.html
+++ /dev/null
@@ -1,128 +0,0 @@
-<!DOCTYPE html>
-
-<html>
-
-  <head>
-    <meta charset="utf8">
-    <title></title>
-
-    <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-    <script type="application/javascript" src="chrome://mochikit/content/chrome-harness.js"></script>
-    <script type="application/javascript" src="head.js"></script>
-    <link rel="stylesheet" type="text/css" href="chrome://mochikit/content/tests/SimpleTest/test.css">
-  </head>
-
-  <body>
-
-    <script type="application/javascript">
-      window.onload = function() {
-        SimpleTest.waitForExplicitFinish();
-
-        let {OS} = Cu.import("resource://gre/modules/osfile.jsm", {});
-        let {ProjectBuilding} = require("devtools/client/webide/modules/build");
-
-        Task.spawn(function* () {
-            let win = yield openWebIDE();
-            let winProject = getProjectWindow(win);
-            let AppManager = win.AppManager;
-
-            function isProjectMarkedAsValid() {
-              let details = win.frames[0];
-              return !details.document.body.classList.contains("error");
-            }
-
-            // # Test first package.json like this: `{webide: {prepackage: "command line string"}}`
-            let platform = Services.appShell.hiddenDOMWindow.navigator.platform;
-            let testSuffix = "";
-            if (platform.indexOf("Win") != -1) {
-              testSuffix = "_windows";
-            }
-
-            let packagedAppLocation = getTestFilePath("build_app" + testSuffix + "1");
-
-            let onValidated = waitForUpdate(win, "project-validated");
-            let onDetails = waitForUpdate(win, "details");
-            yield winProject.projectList.importPackagedApp(packagedAppLocation);
-            yield onValidated;
-            yield onDetails;
-
-            let project = win.AppManager.selectedProject;
-
-            ok(!project.manifest, "manifest includes name");
-            is(project.name, "--", "Display name uses manifest name");
-
-            let loggedMessages = [];
-            let logger = function (msg) {
-              loggedMessages.push(msg);
-            }
-
-            yield ProjectBuilding.build({
-              project,
-              logger
-            });
-            let packageDir = yield ProjectBuilding.getPackageDir(project);
-            is(packageDir, packagedAppLocation, "no custom packagedir");
-            is(loggedMessages[0], "start", "log messages are correct");
-            ok(loggedMessages[1].indexOf("Running pre-package hook") != -1, "log messages are correct");
-            is(loggedMessages[2], "Terminated with error code: 0", "log messages are correct");
-            is(loggedMessages[3], "succeed", "log messages are correct");
-
-            // Trigger validation
-            yield AppManager.validateAndUpdateProject(AppManager.selectedProject);
-            yield nextTick();
-
-            ok("name" in project.manifest, "manifest includes name");
-            is(project.name, "hello", "Display name uses manifest name");
-            is(project.manifest.name, project.name, "Display name uses manifest name");
-
-            yield OS.File.remove(OS.Path.join(packagedAppLocation, "manifest.webapp"));
-
-            // # Now test a full featured package.json
-            packagedAppLocation = getTestFilePath("build_app" + testSuffix + "2");
-
-            onValidated = waitForUpdate(win, "project-validated");
-            onDetails = waitForUpdate(win, "details");
-            yield winProject.projectList.importPackagedApp(packagedAppLocation);
-            yield onValidated;
-            yield onDetails;
-
-            project = win.AppManager.selectedProject;
-
-            loggedMessages = [];
-            yield ProjectBuilding.build({
-              project,
-              logger
-            });
-            packageDir = yield ProjectBuilding.getPackageDir(project);
-            is(OS.Path.normalize(packageDir),
-               OS.Path.join(packagedAppLocation, "stage"), "custom packagedir");
-            is(loggedMessages[0], "start", "log messages are correct");
-            ok(loggedMessages[1].indexOf("Running pre-package hook") != -1, "log messages are correct");
-            is(loggedMessages[2], "Terminated with error code: 0", "log messages are correct");
-            is(loggedMessages[3], "succeed", "log messages are correct");
-
-            // Switch to the package dir in order to verify the generated webapp.manifest
-            onValidated = waitForUpdate(win, "project-validated");
-            onDetails = waitForUpdate(win, "details");
-            yield winProject.projectList.importPackagedApp(packageDir);
-            yield onValidated;
-            yield onDetails;
-
-            project = win.AppManager.selectedProject;
-
-            ok("name" in project.manifest, "manifest includes name");
-            is(project.name, "world", "Display name uses manifest name");
-            is(project.manifest.name, project.name, "Display name uses manifest name");
-
-            yield closeWebIDE(win);
-
-            yield removeAllProjects();
-
-            SimpleTest.finish();
-        });
-      }
-
-
-    </script>
-  </body>
-</html>
--- a/devtools/client/webide/themes/jar.mn
+++ b/devtools/client/webide/themes/jar.mn
@@ -10,14 +10,13 @@ webide.jar:
   skin/newapp.css              (newapp.css)
   skin/throbber.svg            (throbber.svg)
   skin/deck.css                (deck.css)
   skin/addons.css              (addons.css)
   skin/runtimedetails.css      (runtimedetails.css)
   skin/monitor.css             (monitor.css)
   skin/config-view.css         (config-view.css)
   skin/wifi-auth.css           (wifi-auth.css)
-  skin/logs.css                (logs.css)
   skin/panel-listing.css       (panel-listing.css)
   skin/simulator.css           (simulator.css)
   skin/rocket.svg              (rocket.svg)
   skin/noise.png               (noise.png)
   skin/default-app-icon.png    (default-app-icon.png)
deleted file mode 100644
--- a/devtools/client/webide/themes/logs.css
+++ /dev/null
@@ -1,18 +0,0 @@
-html, body {
-  background: var(--theme-body-background);
-  color: var(--theme-body-color);
-}
-
-h1 {
-  font-size: 1.2em;
-}
-
-ul {
-  padding: 0;
-  font-size: 1em;
-}
-
-li {
-  list-style: none;
-  margin: 0;
-}