Bug 1353656 - Remove WebIDE build step for local apps. r=jryans
authorAlexandre Poirot <poirot.alex@gmail.com>
Mon, 24 Jul 2017 18:50:26 +0200
changeset 419849 df6fd4e616d9c09d2e8667ac8943397a5f774a6d
parent 419848 42801a80bc6c56509f385993bfee224edbf055d6
child 419850 8954e1ad4d825d361e5c65df9b61f90ba0b33354
push id7566
push usermtabara@mozilla.com
push dateWed, 02 Aug 2017 08:25:16 +0000
treeherdermozilla-beta@86913f512c3c [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersjryans
bugs1353656
milestone56.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 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;
-}