Bug 1435621 - Remove SMILE module from SeaMonkey. rs=bustage-fix
authorFrank-Rainer Grahl <frgrahl@gmx.net>
Mon, 05 Feb 2018 10:01:15 +0100
changeset 31046 629b9e240c8d042c3e0adb2403695caf0c3da5fb
parent 31045 87ca394913b168cc6141189cb440b9fb0ed200e7
child 31047 63f09d10244cd7100cb5955a17993160fa180937
push id383
push userclokep@gmail.com
push dateMon, 07 May 2018 21:52:48 +0000
reviewersbustage-fix
bugs1435621
Bug 1435621 - Remove SMILE module from SeaMonkey. rs=bustage-fix
suite/installer/package-manifest.in
suite/installer/removed-files.in
suite/moz.build
suite/smile/exthelper/extApplication.js
suite/smile/exthelper/extIApplication.idl
suite/smile/exthelper/moz.build
suite/smile/moz.build
suite/smile/public/moz.build
suite/smile/public/smileIApplication.idl
suite/smile/src/moz.build
suite/smile/src/smileApplication.js
suite/smile/src/smileApplication.manifest
suite/smile/test/ContentA.html
suite/smile/test/ContentB.html
suite/smile/test/ContentWithFrames.html
suite/smile/test/browser_Application.js
suite/smile/test/browser_ApplicationPrefs.js
suite/smile/test/browser_ApplicationQuitting.js
suite/smile/test/browser_ApplicationStorage.js
suite/smile/test/browser_Bookmarks.js
suite/smile/test/browser_Browser.js
suite/smile/test/smile.ini
--- a/suite/installer/package-manifest.in
+++ b/suite/installer/package-manifest.in
@@ -224,17 +224,16 @@
 @RESPATH@/components/dom_xhr.xpt
 @RESPATH@/components/dom_xpath.xpt
 @RESPATH@/components/dom_xul.xpt
 @RESPATH@/components/downloads.xpt
 @RESPATH@/components/editor.xpt
 @RESPATH@/components/extensions.xpt
 @RESPATH@/components/extensions.manifest
 @RESPATH@/components/exthandler.xpt
-@RESPATH@/components/exthelper.xpt
 @RESPATH@/components/fastfind.xpt
 @RESPATH@/components/feeds.xpt
 @RESPATH@/components/gfx.xpt
 @RESPATH@/components/html5.xpt
 @RESPATH@/components/htmlparser.xpt
 @RESPATH@/components/imglib2.xpt
 @RESPATH@/components/inspector.xpt
 @RESPATH@/components/intl.xpt
@@ -288,17 +287,16 @@
 @RESPATH@/components/rdf.xpt
 @RESPATH@/components/reputationservice.xpt
 @RESPATH@/components/satchel.xpt
 @RESPATH@/components/satchel.manifest
 @RESPATH@/components/saxparser.xpt
 @RESPATH@/components/services-crypto-component.xpt
 @RESPATH@/components/shellservice.xpt
 @RESPATH@/components/shistory.xpt
-@RESPATH@/components/smile.xpt
 @RESPATH@/components/spellchecker.xpt
 @RESPATH@/components/storage.xpt
 @RESPATH@/components/SuiteBrowser.manifest
 @RESPATH@/components/suitecommon.xpt
 @RESPATH@/components/SuiteCommon.manifest
 @RESPATH@/components/suitefeeds.xpt
 @RESPATH@/components/SuiteFeeds.manifest
 @RESPATH@/components/suitemigration.xpt
@@ -484,18 +482,16 @@
 @RESPATH@/components/PushComponents.js
 @RESPATH@/components/recording-cmdline.js
 @RESPATH@/components/recording-cmdline.manifest
 @RESPATH@/components/servicesComponents.manifest
 @RESPATH@/components/ProcessSelector.js
 @RESPATH@/components/ProcessSelector.manifest
 @RESPATH@/components/SlowScriptDebug.js
 @RESPATH@/components/SlowScriptDebug.manifest
-@RESPATH@/components/smileApplication.js
-@RESPATH@/components/smileApplication.manifest
 @RESPATH@/components/storage-json.js
 @RESPATH@/components/SuiteProfileMigrator.js
 @RESPATH@/components/SuiteProfileMigrator.manifest
 #if defined(ENABLE_TESTS) && defined(MOZ_DEBUG)
 @RESPATH@/components/TestInterfaceJS.js
 @RESPATH@/components/TestInterfaceJS.manifest
 @RESPATH@/components/TestInterfaceJSMaplike.js
 #endif
--- a/suite/installer/removed-files.in
+++ b/suite/installer/removed-files.in
@@ -696,17 +696,16 @@ Throbber-small.gif
   @DIR_MACOS@components/nsUpdateServiceStub.js
   @DIR_MACOS@components/nsUpdateTimerManager.js
   @DIR_MACOS@components/nsURLFormatter.js
   @DIR_MACOS@components/nsWebHandlerApp.js
   @DIR_MACOS@components/offlineStartup.js
   @DIR_MACOS@components/PlacesCategoriesStarter.js
   @DIR_MACOS@components/SettingsManager.js
   @DIR_MACOS@components/SiteSpecificUserAgent.js
-  @DIR_MACOS@components/smileApplication.js
   @DIR_MACOS@components/smime-service.js
   @DIR_MACOS@components/storage-Legacy.js
   @DIR_MACOS@components/storage-mozStorage.js
   @DIR_MACOS@components/TCPSocket.js
   @DIR_MACOS@components/txEXSLTRegExFunctions.js
   @DIR_MACOS@components/Weave.js
   @DIR_MACOS@components/WebContentConverter.js
   @DIR_MACOS@components/browser.xpt
@@ -1348,17 +1347,16 @@ components/xpautoc.dll
 @DIR_MACOS@components/profile.xpt
 @DIR_MACOS@components/proxyObjInst.xpt
 @DIR_MACOS@components/proxyObject.xpt
 @DIR_MACOS@components/rdf.xpt
 @DIR_MACOS@components/satchel.xpt
 @DIR_MACOS@components/saxparser.xpt
 @DIR_MACOS@components/shellservice.xpt
 @DIR_MACOS@components/shistory.xpt
-@DIR_MACOS@components/smile.xpt
 @DIR_MACOS@components/spellchecker.xpt
 @DIR_MACOS@components/storage.xpt
 @DIR_MACOS@components/suitebrowser.xpt
 @DIR_MACOS@components/suitecommon.xpt
 @DIR_MACOS@components/suitefeeds.xpt
 @DIR_MACOS@components/suitemigration.xpt
 @DIR_MACOS@components/toolkitprofile.xpt
 @DIR_MACOS@components/txmgr.xpt
--- a/suite/moz.build
+++ b/suite/moz.build
@@ -15,17 +15,16 @@ DIRS += [
     'mailnews',
     'modules',
     'themes/classic',
     'themes/modern',
     'profile',
     'security',
     'shell/public',
     'shell/src',
-    'smile',
     '../common/src',
 ]
 
 if CONFIG['MAKENSISU']:
     DIRS += ['installer/windows']
 
 if CONFIG['MOZ_BUNDLED_FONTS']:
     DIRS += ['/%s/browser/fonts' % CONFIG['mozreltopsrcdir']]
deleted file mode 100644
--- a/suite/smile/exthelper/extApplication.js
+++ /dev/null
@@ -1,713 +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/. */
-
-// This file expects these globals to be declared before it is included.
-/* global Ci, Cc */
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.import("resource://gre/modules/AddonManager.jsm");
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-// =================================================
-// Console constructor
-function Console() {
-  this._console = Components.classes["@mozilla.org/consoleservice;1"]
-                            .getService(Ci.nsIConsoleService);
-}
-
-// =================================================
-// Console implementation
-Console.prototype = {
-  log: function cs_log(aMsg) {
-    this._console.logStringMessage(aMsg);
-  },
-
-  open: function cs_open() {
-    var console = Services.wm.getMostRecentWindow("global:console");
-    if (!console) {
-      Services.ww.openWindow(null, "chrome://global/content/console.xul",
-                             "_blank", "chrome,dialog=no,all", null);
-    } else {
-      // console was already open
-      console.focus();
-    }
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIConsole])
-};
-
-
-// =================================================
-// EventItem constructor
-function EventItem(aType, aData) {
-  this._type = aType;
-  this._data = aData;
-}
-
-// =================================================
-// EventItem implementation
-EventItem.prototype = {
-  _cancel: false,
-
-  get type() {
-    return this._type;
-  },
-
-  get data() {
-    return this._data;
-  },
-
-  preventDefault: function ei_pd() {
-    this._cancel = true;
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIEventItem])
-};
-
-
-// =================================================
-// Events constructor
-function Events(notifier) {
-  this._listeners = [];
-  this._notifier = notifier;
-}
-
-// =================================================
-// Events implementation
-Events.prototype = {
-  addListener: function evts_al(aEvent, aListener) {
-    function hasFilter(element) {
-      return element.event == aEvent && element.listener == aListener;
-    }
-
-    if (this._listeners.some(hasFilter))
-      return;
-
-    this._listeners.push({
-      event: aEvent,
-      listener: aListener
-    });
-
-    if (this._notifier) {
-      this._notifier(aEvent, aListener);
-    }
-  },
-
-  removeListener: function evts_rl(aEvent, aListener) {
-    function hasFilter(element) {
-      return (element.event != aEvent) || (element.listener != aListener);
-    }
-
-    this._listeners = this._listeners.filter(hasFilter);
-  },
-
-  dispatch: function evts_dispatch(aEvent, aEventItem) {
-    var eventItem = new EventItem(aEvent, aEventItem);
-
-    this._listeners.forEach(function(key) {
-      if (key.event == aEvent) {
-        key.listener.handleEvent ?
-          key.listener.handleEvent(eventItem) :
-          key.listener(eventItem);
-      }
-    });
-
-    return !eventItem._cancel;
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
-};
-
-// =================================================
-// PreferenceObserver (internal class)
-//
-// PreferenceObserver is a global singleton which watches the browser's
-// preferences and sends you events when things change.
-
-function PreferenceObserver() {
-  this._observersDict = {};
-}
-
-PreferenceObserver.prototype = {
-  /**
-   * Add a preference observer.
-   *
-   * @param aPrefs the nsIPrefBranch onto which we'll install our listener.
-   * @param aDomain the domain our listener will watch (a string).
-   * @param aEvent the event to listen to (you probably want "change").
-   * @param aListener the function to call back when the event fires.  This
-   *                  function will receive an EventData argument.
-   */
-  addListener: function po_al(aPrefs, aDomain, aEvent, aListener) {
-    var root = aPrefs.root;
-    if (!this._observersDict[root]) {
-      this._observersDict[root] = {};
-    }
-    var observer = this._observersDict[root][aDomain];
-
-    if (!observer) {
-      observer = {
-        events: new Events(),
-        observe: function po_observer_obs(aSubject, aTopic, aData) {
-          this.events.dispatch("change", aData);
-        },
-        QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver,
-                                               Ci.nsISupportsWeakReference])
-      };
-      observer.prefBranch = aPrefs;
-      observer.prefBranch.addObserver(aDomain, observer, /* ownsWeak = */ true);
-
-      // Notice that the prefBranch keeps a weak reference to the observer;
-      // it's this._observersDict which keeps the observer alive.
-      this._observersDict[root][aDomain] = observer;
-    }
-    observer.events.addListener(aEvent, aListener);
-  },
-
-  /**
-   * Remove a preference observer.
-   *
-   * This function's parameters are identical to addListener's.
-   */
-  removeListener: function po_rl(aPrefs, aDomain, aEvent, aListener) {
-    var root = aPrefs.root;
-    if (!this._observersDict[root] ||
-        !this._observersDict[root][aDomain]) {
-      return;
-    }
-    var observer = this._observersDict[root][aDomain];
-    observer.events.removeListener(aEvent, aListener);
-
-    if (observer.events._listeners.length == 0) {
-      // nsIPrefBranch objects are not singletons -- we can have two
-      // nsIPrefBranch'es for the same branch.  There's no guarantee that
-      // aPrefs is the same object as observer.prefBranch, so we have to call
-      // removeObserver on observer.prefBranch.
-      observer.prefBranch.removeObserver(aDomain, observer);
-      delete this._observersDict[root][aDomain];
-      if (Object.keys(this._observersDict[root]).length == 0) {
-        delete this._observersDict[root];
-      }
-    }
-  }
-};
-
-// =================================================
-// PreferenceBranch constructor
-function PreferenceBranch(aBranch) {
-  if (!aBranch)
-    aBranch = "";
-
-  this._root = aBranch;
-  this._prefs = Components.classes["@mozilla.org/preferences-service;1"]
-                          .getService(Ci.nsIPrefService)
-                          .QueryInterface(Ci.nsIPrefBranch);
-
-  if (aBranch)
-    this._prefs = this._prefs.getBranch(aBranch);
-
-  let prefs = this._prefs;
-  this._events = {
-    addListener: function pb_al(aEvent, aListener) {
-      gPreferenceObserver.addListener(prefs, "", aEvent, aListener);
-    },
-    removeListener: function pb_rl(aEvent, aListener) {
-      gPreferenceObserver.removeListener(prefs, "", aEvent, aListener);
-    },
-    QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
-  };
-}
-
-// =================================================
-// PreferenceBranch implementation
-PreferenceBranch.prototype = {
-  get root() {
-    return this._root;
-  },
-
-  get all() {
-    return this.find({});
-  },
-
-  get events() {
-    return this._events;
-  },
-
-  // XXX: Disabled until we can figure out the wrapped object issues
-  // name: "name" or /name/
-  // path: "foo.bar." or "" or /fo+\.bar/
-  // type: Boolean, Number, String (getPrefType)
-  // locked: true, false (prefIsLocked)
-  // modified: true, false (prefHasUserValue)
-  find: function prefs_find(aOptions) {
-    var retVal = [];
-    var items = this._prefs.getChildList("");
-
-    for (var i = 0; i < items.length; i++) {
-      retVal.push(new Preference(items[i], this));
-    }
-
-    return retVal;
-  },
-
-  has: function prefs_has(aName) {
-    return (this._prefs.getPrefType(aName) != Ci.nsIPrefBranch.PREF_INVALID);
-  },
-
-  get: function prefs_get(aName) {
-    return this.has(aName) ? new Preference(aName, this) : null;
-  },
-
-  getValue: function prefs_gv(aName, aValue) {
-    var type = this._prefs.getPrefType(aName);
-
-    switch (type) {
-      case Ci.nsIPrefBranch.PREF_STRING:
-        aValue = this._prefs.getStringPref(aName);
-        break;
-      case Ci.nsIPrefBranch.PREF_BOOL:
-        aValue = this._prefs.getBoolPref(aName);
-        break;
-      case Ci.nsIPrefBranch.PREF_INT:
-        aValue = this._prefs.getIntPref(aName);
-        break;
-    }
-
-    return aValue;
-  },
-
-  setValue: function prefs_sv(aName, aValue) {
-    var type = aValue != null ? aValue.constructor.name : "";
-
-    switch (type) {
-      case "String":
-        this._prefs.setStringPref(aName, aValue);
-        break;
-      case "Boolean":
-        this._prefs.setBoolPref(aName, aValue);
-        break;
-      case "Number":
-        this._prefs.setIntPref(aName, aValue);
-        break;
-      default:
-        throw ("Unknown preference value specified.");
-    }
-  },
-
-  reset: function prefs_reset() {
-    this._prefs.resetBranch("");
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIPreferenceBranch])
-};
-
-
-// =================================================
-// Preference constructor
-function Preference(aName, aBranch) {
-  this._name = aName;
-  this._branch = aBranch;
-
-  var self = this;
-  this._events = {
-    addListener: function pref_al(aEvent, aListener) {
-      gPreferenceObserver.addListener(self._branch._prefs, self._name, aEvent, aListener);
-    },
-    removeListener: function pref_rl(aEvent, aListener) {
-      gPreferenceObserver.removeListener(self._branch._prefs, self._name, aEvent, aListener);
-    },
-    QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
-  };
-}
-
-// =================================================
-// Preference implementation
-Preference.prototype = {
-  get name() {
-    return this._name;
-  },
-
-  get type() {
-    var value = "";
-    var type = this.branch._prefs.getPrefType(this._name);
-
-    switch (type) {
-      case Ci.nsIPrefBranch.PREF_STRING:
-        value = "String";
-        break;
-      case Ci.nsIPrefBranch.PREF_BOOL:
-        value = "Boolean";
-        break;
-      case Ci.nsIPrefBranch.PREF_INT:
-        value = "Number";
-        break;
-    }
-
-    return value;
-  },
-
-  get value() {
-    return this.branch.getValue(this._name, null);
-  },
-
-  set value(aValue) {
-    return this.branch.setValue(this._name, aValue);
-  },
-
-  get locked() {
-    return this.branch._prefs.prefIsLocked(this.name);
-  },
-
-  set locked(aValue) {
-    this.branch._prefs[aValue ? "lockPref" : "unlockPref"](this.name);
-  },
-
-  get modified() {
-    return this.branch._prefs.prefHasUserValue(this.name);
-  },
-
-  get branch() {
-    return this._branch;
-  },
-
-  get events() {
-    return this._events;
-  },
-
-  reset: function pref_reset() {
-    this.branch._prefs.clearUserPref(this.name);
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIPreference])
-};
-
-
-// =================================================
-// SessionStorage constructor
-function SessionStorage() {
-  this._storage = {};
-  this._events = new Events();
-}
-
-// =================================================
-// SessionStorage implementation
-SessionStorage.prototype = {
-  get events() {
-    return this._events;
-  },
-
-  has: function ss_has(aName) {
-    return this._storage.hasOwnProperty(aName);
-  },
-
-  set: function ss_set(aName, aValue) {
-    this._storage[aName] = aValue;
-    this._events.dispatch("change", aName);
-  },
-
-  get: function ss_get(aName, aDefaultValue) {
-    return this.has(aName) ? this._storage[aName] : aDefaultValue;
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extISessionStorage])
-};
-
-// =================================================
-// ExtensionObserver constructor (internal class)
-//
-// ExtensionObserver is a global singleton which watches the browser's
-// extensions and sends you events when things change.
-
-function ExtensionObserver() {
-  this._eventsDict = {};
-
-  AddonManager.addAddonListener(this);
-  AddonManager.addInstallListener(this);
-}
-
-// =================================================
-// ExtensionObserver implementation (internal class)
-ExtensionObserver.prototype = {
-  onDisabling: function eo_onDisabling(addon, needsRestart) {
-    this._dispatchEvent(addon.id, "disable");
-  },
-
-  onEnabling: function eo_onEnabling(addon, needsRestart) {
-    this._dispatchEvent(addon.id, "enable");
-  },
-
-  onUninstalling: function eo_onUninstalling(addon, needsRestart) {
-    this._dispatchEvent(addon.id, "uninstall");
-  },
-
-  onOperationCancelled: function eo_onOperationCancelled(addon) {
-    this._dispatchEvent(addon.id, "cancel");
-  },
-
-  onInstallEnded: function eo_onInstallEnded(install, addon) {
-    this._dispatchEvent(addon.id, "upgrade");
-  },
-
-  addListener: function eo_al(aId, aEvent, aListener) {
-    var events = this._eventsDict[aId];
-    if (!events) {
-      events = new Events();
-      this._eventsDict[aId] = events;
-    }
-    events.addListener(aEvent, aListener);
-  },
-
-  removeListener: function eo_rl(aId, aEvent, aListener) {
-    var events = this._eventsDict[aId];
-    if (!events) {
-      return;
-    }
-    events.removeListener(aEvent, aListener);
-    if (events._listeners.length == 0) {
-      delete this._eventsDict[aId];
-    }
-  },
-
-  _dispatchEvent: function eo_dispatchEvent(aId, aEvent) {
-    var events = this._eventsDict[aId];
-    if (events) {
-      events.dispatch(aEvent, aId);
-    }
-  }
-};
-
-// =================================================
-// Extension constructor
-function Extension(aItem) {
-  this._item = aItem;
-  this._firstRun = false;
-  this._prefs = new PreferenceBranch("extensions." + this.id + ".");
-  this._storage = new SessionStorage();
-
-  let id = this.id;
-  this._events = {
-    addListener: function ext_events_al(aEvent, aListener) {
-      gExtensionObserver.addListener(id, aEvent, aListener);
-    },
-    removeListener: function ext_events_rl(aEvent, aListener) {
-      gExtensionObserver.addListener(id, aEvent, aListener);
-    },
-    QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
-  };
-
-  var installPref = "install-event-fired";
-  if (!this._prefs.has(installPref)) {
-    this._prefs.setValue(installPref, true);
-    this._firstRun = true;
-  }
-}
-
-// =================================================
-// Extension implementation
-Extension.prototype = {
-  get id() {
-    return this._item.id;
-  },
-
-  get name() {
-    return this._item.name;
-  },
-
-  get enabled() {
-    return this._item.isActive;
-  },
-
-  get version() {
-    return this._item.version;
-  },
-
-  get firstRun() {
-    return this._firstRun;
-  },
-
-  get storage() {
-    return this._storage;
-  },
-
-  get prefs() {
-    return this._prefs;
-  },
-
-  get events() {
-    return this._events;
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIExtension])
-};
-
-
-// =================================================
-// Extensions constructor
-function Extensions(addons) {
-  this._cache = {};
-
-  addons.forEach(function(addon) {
-    this._cache[addon.id] = new Extension(addon);
-  }, this);
-}
-
-// =================================================
-// Extensions implementation
-Extensions.prototype = {
-  get all() {
-    return this.find({});
-  },
-
-  // XXX: Disabled until we can figure out the wrapped object issues
-  // id: "some@id" or /id/
-  // name: "name" or /name/
-  // version: "1.0.1"
-  // minVersion: "1.0"
-  // maxVersion: "2.0"
-  find: function exts_find(aOptions) {
-    return Object.keys(this._cache).map(id => this._cache[id]);
-  },
-
-  has: function exts_has(aId) {
-    return aId in this._cache;
-  },
-
-  get: function exts_get(aId) {
-    return this.has(aId) ? this._cache[aId] : null;
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIExtensions])
-};
-
-// =================================================
-// Application globals
-
-var gExtensionObserver = new ExtensionObserver();
-var gPreferenceObserver = new PreferenceObserver();
-
-// =================================================
-// extApplication constructor
-function extApplication() {
-}
-
-// =================================================
-// extApplication implementation
-extApplication.prototype = {
-  initToolkitHelpers: function extApp_initToolkitHelpers() {
-    XPCOMUtils.defineLazyServiceGetter(this, "_info",
-                                       "@mozilla.org/xre/app-info;1",
-                                       "nsIXULAppInfo");
-
-    this._obs = Cc["@mozilla.org/observer-service;1"].
-                getService(Ci.nsIObserverService);
-    this._obs.addObserver(this, "xpcom-shutdown", /* ownsWeak = */ true);
-    this._registered = {"unload": true};
-  },
-
-  classInfo: XPCOMUtils.generateCI({interfaces: [Ci.extIApplication,
-                                                 Ci.nsIObserver],
-                                    flags: Ci.nsIClassInfo.SINGLETON}),
-
-  // extIApplication
-  get id() {
-    return this._info.ID;
-  },
-
-  get name() {
-    return this._info.name;
-  },
-
-  get version() {
-    return this._info.version;
-  },
-
-  // for nsIObserver
-  observe: function app_observe(aSubject, aTopic, aData) {
-    if (aTopic == "app-startup") {
-      this.events.dispatch("load", "application");
-    } else if (aTopic == "final-ui-startup") {
-      this.events.dispatch("ready", "application");
-    } else if (aTopic == "quit-application-requested") {
-      // we can stop the quit by checking the return value
-      if (this.events.dispatch("quit", "application") == false)
-        aSubject.data = true;
-    } else if (aTopic == "xpcom-shutdown") {
-      this.events.dispatch("unload", "application");
-      gExtensionObserver = null;
-      gPreferenceObserver = null;
-    }
-  },
-
-  get console() {
-    let console = new Console();
-    this.__defineGetter__("console", () => console);
-    return this.console;
-  },
-
-  get storage() {
-    let storage = new SessionStorage();
-    this.__defineGetter__("storage", () => storage);
-    return this.storage;
-  },
-
-  get prefs() {
-    let prefs = new PreferenceBranch("");
-    this.__defineGetter__("prefs", () => prefs);
-    return this.prefs;
-  },
-
-  getExtensions(callback) {
-    AddonManager.getAddonsByTypes(["extension"], function(addons) {
-      callback.callback(new Extensions(addons));
-    });
-  },
-
-  get events() {
-
-    // This ensures that FUEL only registers for notifications as needed
-    // by callers. Note that the unload (xpcom-shutdown) event is listened
-    // for by default, as it's needed for cleanup purposes.
-    var self = this;
-    function registerCheck(aEvent) {
-      var rmap = { "load": "app-startup",
-                   "ready": "final-ui-startup",
-                   "quit": "quit-application-requested"};
-      if (!(aEvent in rmap) || aEvent in self._registered)
-        return;
-
-      self._obs.addObserver(self, rmap[aEvent], /* ownsWeak = */ true);
-      self._registered[aEvent] = true;
-    }
-
-    let events = new Events(registerCheck);
-    this.__defineGetter__("events", () => events);
-    return this.events;
-  },
-
-  // helper method for correct quitting/restarting
-  _quitWithFlags: function app__quitWithFlags(aFlags) {
-    let cancelQuit = Components.classes["@mozilla.org/supports-PRBool;1"]
-                               .createInstance(Components.interfaces.nsISupportsPRBool);
-    let quitType = aFlags & Components.interfaces.nsIAppStartup.eRestart ? "restart" : null;
-    this._obs.notifyObservers(cancelQuit, "quit-application-requested", quitType);
-    if (cancelQuit.data)
-      return false; // somebody canceled our quit request
-
-    let appStartup = Components.classes["@mozilla.org/toolkit/app-startup;1"]
-                               .getService(Components.interfaces.nsIAppStartup);
-    appStartup.quit(aFlags);
-    return true;
-  },
-
-  quit: function app_quit() {
-    return this._quitWithFlags(Components.interfaces.nsIAppStartup.eAttemptQuit);
-  },
-
-  restart: function app_restart() {
-    return this._quitWithFlags(Components.interfaces.nsIAppStartup.eAttemptQuit |
-                               Components.interfaces.nsIAppStartup.eRestart);
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.extIApplication, Ci.nsISupportsWeakReference])
-};
deleted file mode 100644
--- a/suite/smile/exthelper/extIApplication.idl
+++ /dev/null
@@ -1,416 +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/. */
-
-#include "nsISupports.idl"
-
-interface nsIVariant;
-interface extIPreference;
-interface extISessionStorage;
-
-
-/**
- * Interface that gives simplified access to the console
- */
-[scriptable, uuid(ae8482e0-aa5a-11db-abbd-0800200c9a66)]
-interface extIConsole : nsISupports
-{
-  /**
-   * Sends a given string to the console.
-   * @param   aMsg
-   *          The text to send to the console
-   */
-  void log(in AString aMsg);
-
-  /**
-   * Opens the error console window. The console window
-   * is focused if already open.
-   */
-  void open();
-};
-
-
-/**
- * Interface holds information about an event.
- */
-[scriptable, function, uuid(05281820-ab62-11db-abbd-0800200c9a66)]
-interface extIEventItem : nsISupports
-{
-  /**
-   * The name of the event
-   */
-  readonly attribute AString type;
-
-  /**
-   * Can hold extra details and data associated with the event. This
-   * is optional and event specific. If the event does not send extra
-   * details, this is null.
-   */
-  readonly attribute nsIVariant data;
-
-  /**
-   * Cancels the event if it is cancelable.
-   */
-  void preventDefault();
-}; 
-
-
-/**
- * Interface used as a callback for listening to events.
- */
-[scriptable, function, uuid(2dfe3a50-ab2f-11db-abbd-0800200c9a66)]
-interface extIEventListener : nsISupports
-{
-  /**
-   * This method is called whenever an event occurs of the type for which 
-   * the extIEventListener interface was registered.
-   *
-   * @param   aEvent
-   *          The extIEventItem associated with the event.
-   */
-  void handleEvent(in extIEventItem aEvent);
-}; 
-
-
-/**
- * Interface for supporting custom events.
- */
-[scriptable, uuid(3a8ec9d0-ab19-11db-abbd-0800200c9a66)]
-interface extIEvents : nsISupports
-{
-  /**
-   * Adds an event listener to the list. If multiple identical event listeners
-   * are registered on the same event target with the same parameters the
-   * duplicate instances are discarded. They do not cause the EventListener
-   * to be called twice and since they are discarded they do not need to be
-   * removed with the removeListener method.
-   *
-   * @param   aEvent
-   *          The name of an event
-   * @param   aListener
-   *          The reference to a listener
-   */
-  void addListener(in AString aEvent, in extIEventListener aListener);
-
-  /**
-   * Removes an event listener from the list. Calling remove
-   * with arguments which do not identify any currently registered
-   * event listener has no effect.
-   * @param   aEvent
-   *          The name of an event
-   * @param   aListener
-   *          The reference to a listener
-   */
-  void removeListener(in AString aEvent, in extIEventListener aListener);
-}; 
-
-
-/**
- * Interface for simplified access to preferences. The interface has a
- * predefined root preference branch. The root branch is set based on the
- * context of the owner. For example, an extension's preferences have a root
- * of "extensions.<extensionid>.", while the application level preferences
- * have an empty root. All preference "aName" parameters used in this interface
- * are relative to the root branch.
- */
-[scriptable, uuid(ce697d40-aa5a-11db-abbd-0800200c9a66)]
-interface extIPreferenceBranch : nsISupports
-{
-  /**
-   * The name of the branch root.
-   */
-  readonly attribute AString root;
-  
-  /**
-   * Array of extIPreference listing all preferences in this branch.
-   */
-  readonly attribute nsIVariant all;
-  
-  /**
-   * The events object for the preferences
-   * supports: "change"
-   */
-  readonly attribute extIEvents events;
-  
-  /**
-   * Check to see if a preference exists.
-   * @param   aName
-   *          The name of preference
-   * @returns true if the preference exists, false if not
-   */
-  boolean has(in AString aName);
-  
-  /**
-   * Gets an object representing a preference
-   * @param   aName
-   *          The name of preference
-   * @returns a preference object, or null if the preference does not exist
-   */
-  extIPreference get(in AString aName);
-  
-  /**
-   * Gets the value of a preference. Returns a default value if
-   * the preference does not exist.
-   * @param   aName
-   *          The name of preference
-   * @param   aDefaultValue
-   *          The value to return if preference does not exist
-   * @returns value of the preference or the given default value if preference
-   *          does not exists.
-   */
-  nsIVariant getValue(in AString aName, in nsIVariant aDefaultValue);
-
-  /**
-   * Sets the value of a storage item with the given name.
-   * @param   aName
-   *          The name of an item
-   * @param   aValue
-   *          The value to assign to the item
-   */
-  void setValue(in AString aName, in nsIVariant aValue);
-
-  /**
-   * Resets all preferences in a branch back to their default values.
-   */
-  void reset();
-};
-
-/**
- * Interface for accessing a single preference. The data is not cached.
- * All reads access the current state of the preference.
- */
-[scriptable, uuid(2C7462E2-72C2-4473-9007-0E6AE71E23CA)]
-interface extIPreference : nsISupports
-{
-  /**
-   * The name of the preference.
-   */
-  readonly attribute AString name;
-  
-  /**
-   * A string representing the type of preference (String, Boolean, or Number).
-   */
-  readonly attribute AString type;
-  
-  /**
-   * Get/Set the value of the preference.
-   */
-  attribute nsIVariant value;
-  
-  /**
-   * Get the locked state of the preference. Set to a boolean value to (un)lock it.
-   */
-  attribute boolean locked;
-  
-  /**
-   * Check if a preference has been modified by the user, or not.
-   */
-  readonly attribute boolean modified;
-  
-  /**
-   * The preference branch that contains this preference.
-   */
-  readonly attribute extIPreferenceBranch branch;
-  
-  /**
-   * The events object for this preference.
-   * supports: "change"
-   */
-  readonly attribute extIEvents events;
-  
-  /**
-   * Resets a preference back to its default values.
-   */
-  void reset();
-};
-
-
-/**
- * Interface representing an extension
- */
-[scriptable, uuid(10cee02c-f6e0-4d61-ab27-c16572b18c46)]
-interface extIExtension : nsISupports
-{
-  /**
-   * The id of the extension.
-   */
-  readonly attribute AString id;
-
-  /**
-   * The name of the extension.
-   */
-  readonly attribute AString name;
-  
-  /**
-   * Check if the extension is currently enabled, or not.
-   */
-  readonly attribute boolean enabled;
-  
-  /**
-   * The version number of the extension.
-   */
-  readonly attribute AString version;
-
-  /**
-   * Indicates whether this is the extension's first run after install
-   */
-  readonly attribute boolean firstRun;
-
-  /**
-   * The preferences object for the extension. Defaults to the
-   * "extensions.<extensionid>." branch.
-   */
-  readonly attribute extIPreferenceBranch prefs;
-
-  /**
-   * The storage object for the extension.
-   */
-  readonly attribute extISessionStorage storage;
-
-  /**
-   * The events object for the extension.
-   * supports: "uninstall"
-   */
-  readonly attribute extIEvents events;
-}; 
-
-/**
- * Interface representing a list of all installed extensions
- */
-[scriptable, uuid(de281930-aa5a-11db-abbd-0800200c9a66)]
-interface extIExtensions : nsISupports
-{
-  /**
-   * Array of extIExtension listing all extensions in the application.
-   */
-  readonly attribute nsIVariant all;
-
-  /**
-   * Determines if an extension exists with the given id.
-   * @param   aId
-   *          The id of an extension
-   * @returns true if an extension exists with the given id,
-   *          false otherwise.
-   */
-  boolean has(in AString aId);
-
-  /**
-   * Gets a extIExtension object for an extension.
-   * @param   aId
-   *          The id of an extension
-   * @returns An extension object or null if no extension exists
-   *          with the given id.
-   */
-  extIExtension get(in AString aId);
-}; 
-
-/**
- * Interface representing a callback that receives an array of extIExtensions
- */
-[scriptable, function, uuid(2571cbb5-550d-4400-8038-75df9b553f98)]
-interface extIExtensionsCallback : nsISupports
-{
-  void callback(in nsIVariant extensions);
-};
-
-/**
- * Interface representing a simple storage system
- */
-[scriptable, uuid(0787ac44-29b9-4889-b97f-13573aec6971)]
-interface extISessionStorage : nsISupports
-{
-  /**
-   * The events object for the storage
-   * supports: "change"
-   */
-  readonly attribute extIEvents events;
-
-  /**
-   * Determines if a storage item exists with the given name.
-   * @param   aName
-   *          The name of an item
-   * @returns true if an item exists with the given name,
-   *          false otherwise.
-   */
-  boolean has(in AString aName);
-
-  /**
-   * Sets the value of a storage item with the given name.
-   * @param   aName
-   *          The name of an item
-   * @param   aValue
-   *          The value to assign to the item
-   */
-  void set(in AString aName, in nsIVariant aValue);
-
-  /**
-   * Gets the value of a storage item with the given name. Returns a
-   * default value if the item does not exist.
-   * @param   aName
-   *          The name of an item
-   * @param   aDefaultValue
-   *          The value to return if no item exists with the given name
-   * @returns value of the item or the given default value if no item
-   *          exists with the given name.
-   */
-  nsIVariant get(in AString aName, in nsIVariant aDefaultValue);
-}; 
-
-[scriptable, uuid(2be87909-0817-4292-acfa-fc39be53be3f)]
-interface extIApplication : nsISupports
-{
-  /**
-   * The id of the application.
-   */
-  readonly attribute AString id;
-
-  /**
-   * The name of the application.
-   */
-  readonly attribute AString name;
-  
-  /**
-   * The version number of the application.
-   */
-  readonly attribute AString version;
-  
-  /**
-   * The console object for the application.
-   */
-  readonly attribute extIConsole console;
-
-  /**
-   * The extensions object for the application. Contains a list
-   * of all installed extensions.
-   */
-  void getExtensions(in extIExtensionsCallback aCallback);
-
-  /**
-   * The preferences object for the application. Defaults to an empty
-   * root branch.
-   */
-  readonly attribute extIPreferenceBranch prefs;
-
-  /**
-   * The storage object for the application.
-   */
-  readonly attribute extISessionStorage storage;
-
-  /**
-   * The events object for the application.
-   * supports: "load", "ready", "quit", "unload"
-   */
-  readonly attribute extIEvents events;
-
-  /**
-   * Quits the application (if nobody objects to quit-application-requested).
-   * @returns whether quitting will proceed
-   */
-  boolean quit();
-
-  /**
-   * Restarts the application (if nobody objects to quit-application-requested).
-   * @returns whether restarting will proceed
-   */
-  boolean restart();
-};
deleted file mode 100644
--- a/suite/smile/exthelper/moz.build
+++ /dev/null
@@ -1,15 +0,0 @@
-# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
-# vim: set filetype=python:
-# 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/.
-
-with Files('**'):
-    BUG_COMPONENT = ('SeaMonkey', 'General')
-
-XPIDL_SOURCES += [
-    'extIApplication.idl',
-]
-
-XPIDL_MODULE = 'exthelper'
-
deleted file mode 100644
--- a/suite/smile/moz.build
+++ /dev/null
@@ -1,12 +0,0 @@
-# vim: set filetype=python:
-# 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/.
-
-DIRS += [
-    'exthelper',
-    'public',
-    'src',
-]
-
-BROWSER_CHROME_MANIFESTS += ['test/smile.ini']
deleted file mode 100644
--- a/suite/smile/public/moz.build
+++ /dev/null
@@ -1,11 +0,0 @@
-# vim: set filetype=python:
-# 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/.
-
-XPIDL_SOURCES += [
-    'smileIApplication.idl',
-]
-
-XPIDL_MODULE = 'smile'
-
deleted file mode 100644
--- a/suite/smile/public/smileIApplication.idl
+++ /dev/null
@@ -1,356 +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/. */
-
-#include "nsISupports.idl"
-#include "extIApplication.idl"
-
-interface nsIVariant;
-interface nsIURI;
-interface nsIDOMHTMLDocument;
-
-interface smileIBookmarkFolder;
-interface smileIBrowserTab;
-
-/**
- * Interface representing a collection of annotations associated
- * with a bookmark or bookmark folder.
- */
-[scriptable, uuid(335c9292-91a1-4ca0-ad0b-07d5f63ed6cd)]
-interface smileIAnnotations : nsISupports
-{
-  /**
-   * Array of the annotation names associated with the owning item
-   */
-  readonly attribute nsIVariant names;
-
-  /**
-   * Determines if an annotation exists with the given name.
-   * @param   aName
-   *          The name of the annotation
-   * @returns true if an annotation exists with the given name,
-   *          false otherwise.
-   */
-  boolean has(in AString aName);
-
-  /**
-   * Gets the value of an annotation with the given name.
-   * @param   aName
-   *          The name of the annotation
-   * @returns A variant containing the value of the annotation. Supports
-   *          string, boolean and number.
-   */
-  nsIVariant get(in AString aName);
-
-  /**
-   * Sets the value of an annotation with the given name.
-   * @param   aName
-   *          The name of the annotation
-   * @param   aValue
-   *          The new value of the annotation. Supports string, boolean
-   *          and number
-   * @param   aExpiration
-   *          The expiration policy for the annotation.
-   *          See nsIAnnotationService.
-   */
-  void set(in AString aName, in nsIVariant aValue, in int32_t aExpiration);
-
-  /**
-   * Removes the named annotation from the owner item.
-   * @param   aName
-   *          The name of annotation.
-   */
-  void remove(in AString aName);
-};
-
-
-/**
- * Interface representing a bookmark item.
- */
-[scriptable, uuid(a27f8945-9333-45d3-8ee1-24cbcb3366f9)]
-interface smileIBookmark : nsISupports
-{
-  /**
-   * The id of the bookmark.
-   */
-  readonly attribute long long id;
-
-  /**
-   * The title of the bookmark.
-   */
-  attribute AString title;
-
-  /**
-   * The uri of the bookmark.
-   */
-  attribute nsIURI uri;
-
-  /**
-   * The description of the bookmark.
-   */
-  attribute AString description;
-
-  /**
-   * The keyword associated with the bookmark.
-   */
-  attribute AString keyword;
-
-  /**
-   * The type of the bookmark.
-   * values: "bookmark", "separator"
-   */
-  readonly attribute AString type;
-
-  /**
-   * The parent folder of the bookmark.
-   */
-  attribute smileIBookmarkFolder parent;
-
-  /**
-   * The annotations object for the bookmark.
-   */
-  readonly attribute smileIAnnotations annotations;
-
-  /**
-   * The events object for the bookmark.
-   * supports: "remove", "change", "visit", "move"
-   */
-  readonly attribute extIEvents events;
-
-  /**
-   * Removes the item from the parent folder. Used to
-   * delete a bookmark or separator
-   */
-  void remove();
-};
-
-
-/**
- * Interface representing a bookmark folder. Folders
- * can hold bookmarks, separators and other folders.
- */
-[scriptable, uuid(03227226-d6eb-4654-9578-710c2222eb81)]
-interface smileIBookmarkFolder : nsISupports
-{
-  /**
-   * The id of the folder.
-   */
-  readonly attribute long long id;
-
-  /**
-   * The title of the folder.
-   */
-  attribute AString title;
-
-  /**
-   * The description of the folder.
-   */
-  attribute AString description;
-
-  /**
-   * The type of the folder.
-   * values: "folder"
-   */
-  readonly attribute AString type;
-
-  /**
-   * The parent folder of the folder.
-   */
-  attribute smileIBookmarkFolder parent;
-
-  /**
-   * The annotations object for the folder.
-   */
-  readonly attribute smileIAnnotations annotations;
-
-  /**
-   * The events object for the folder.
-   * supports: "add", "addchild", "remove", "removechild", "change", "move"
-   */
-  readonly attribute extIEvents events;
-
-  /**
-   * Array of all bookmarks, separators and folders contained
-   * in this folder.
-   */
-  readonly attribute nsIVariant children;
-
-  /**
-   * Adds a new child bookmark to this folder.
-   * @param   aTitle
-   *          The title of bookmark.
-   * @param   aURI
-   *          The uri of bookmark.
-   */
-  smileIBookmark addBookmark(in AString aTitle, in nsIURI aURI);
-
-  /**
-   * Adds a new child separator to this folder.
-   */
-  smileIBookmark addSeparator();
-
-  /**
-   * Adds a new child folder to this folder.
-   * @param   aTitle
-   *          The title of folder.
-   */
-  smileIBookmarkFolder addFolder(in AString aTitle);
-
-  /**
-   * Removes the folder from the parent folder.
-   */
-  void remove();
-};
-
-/**
- * Interface representing a container for bookmark roots. Roots
- * are the top level parents for the various types of bookmarks in the system.
- */
-[scriptable, uuid(1102eec4-f66b-4082-abad-c967ad7d5f76)]
-interface smileIBookmarkRoots : nsISupports
-{
-  /**
-   * The folder for the 'bookmarks menu' root.
-   */
-  readonly attribute smileIBookmarkFolder menu;
-
-  /**
-   * The folder for the 'personal toolbar' root.
-   */
-  readonly attribute smileIBookmarkFolder toolbar;
-
-  /**
-   * The folder for the 'tags' root.
-   */
-  readonly attribute smileIBookmarkFolder tags;
-
-  /**
-   * The folder for the 'unfiled bookmarks' root.
-   */
-  readonly attribute smileIBookmarkFolder unfiled;
-};
-
-
-/**
- * Interface representing a browser window.
- */
-[scriptable, uuid(1c3002ec-5aaf-4232-ab7d-835a348133fd)]
-interface smileIWindow : nsISupports
-{
-  /**
-   * A collection of browser tabs within the browser window.
-   */
-  readonly attribute nsIVariant tabs;
-
-  /**
-   * The currently-active tab within the browser window.
-   */
-  readonly attribute smileIBrowserTab activeTab;
-
-  /**
-   * Open a new browser tab, pointing to the specified URI.
-   * @param   aURI
-   *          The uri to open the browser tab to
-   */
-  smileIBrowserTab open(in nsIURI aURI);
-
-  /**
-   * The events object for the browser window.
-   * supports: "TabOpen", "TabClose", "TabMove", "TabSelect"
-   */
-  readonly attribute extIEvents events;
-};
-
-/**
- * Interface representing a browser tab.
- */
-[scriptable, uuid(9b06c55e-5377-4c71-8bda-8e8750c5a02a)]
-interface smileIBrowserTab : nsISupports
-{
-  /**
-   * The current uri of this tab.
-   */
-  readonly attribute nsIURI uri;
-
-  /**
-   * The current index of this tab in the browser window.
-   */
-  readonly attribute int32_t index;
-
-  /**
-   * The browser window that is holding the tab.
-   */
-  readonly attribute smileIWindow window;
-
-  /**
-   * The content document of the browser tab.
-   */
-  readonly attribute nsIDOMHTMLDocument document;
-
-  /**
-   * The events object for the browser tab.
-   * supports: "load"
-   */
-  readonly attribute extIEvents events;
-
-  /**
-   * Load a new URI into this browser tab.
-   * @param   aURI
-   *          The uri to load into the browser tab
-   */
-  void load(in nsIURI aURI);
-
-  /**
-   * Give focus to this browser tab, and bring it to the front.
-   */
-  void focus();
-
-  /**
-   * Close the browser tab. This may not actually close the tab
-   * as script may abort the close operation.
-   */
-  void close();
-
-  /**
-   * Moves this browser tab before another browser tab within the window.
-   * @param   aBefore
-   *          The tab before which the target tab will be moved
-   */
-  void moveBefore(in smileIBrowserTab aBefore);
-
-  /**
-   * Move this browser tab to the last tab within the window.
-   */
-  void moveToEnd();
-};
-
-/**
- * Interface for managing and accessing the applications systems
- */
-[scriptable, uuid(0b8e2ed6-70d9-45a0-a745-a2b874d6b5fd)]
-interface smileIApplication : extIApplication
-{
-  /**
-   * The root bookmarks object for the application.
-   * Contains all the bookmark roots in the system.
-   */
-  readonly attribute smileIBookmarkRoots bookmarks;
-
-  /**
-   * An array of browser windows within the application.
-   */
-  readonly attribute nsIVariant windows;
-
-  /**
-   * The currently active browser window.
-   */
-  readonly attribute smileIWindow activeWindow;
-
-  /**
-   * Returns true if the application is running on a Mac OS X. This is intended
-   * for situations where Mac does things differently, e.g. The application
-   * doesn't support print preview on Mac because Mac provides a preview option
-   * in the print dialog.
-   */
-  readonly attribute boolean platformIsMac;
-};
deleted file mode 100644
--- a/suite/smile/src/moz.build
+++ /dev/null
@@ -1,13 +0,0 @@
-# vim: set filetype=python:
-# 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_COMPONENTS += [
-    'smileApplication.manifest',
-]
-
-EXTRA_PP_COMPONENTS += [
-    'smileApplication.js',
-]
-
deleted file mode 100644
--- a/suite/smile/src/smileApplication.js
+++ /dev/null
@@ -1,800 +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 Ci = Components.interfaces;
-const Cc = Components.classes;
-
-ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-const APPLICATION_CID = Components.ID("{c9ba8f65-c936-4ac6-a859-8936832b0c12}");
-const APPLICATION_CONTRACTID = "@mozilla.org/smile/application;1";
-
-//=================================================
-// Singleton that holds services and utilities
-var Utilities = {
-  get bookmarks() {
-    let bookmarks =
-      Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
-                .getService(Components.interfaces.nsINavBookmarksService);
-    this.__defineGetter__("bookmarks", () => bookmarks);
-    return this.bookmarks;
-  },
-
-  get bookmarksObserver() {
-    let bookmarksObserver = new BookmarksObserver();
-    this.__defineGetter__("bookmarksObserver", () => bookmarksObserver);
-    return this.bookmarksObserver;
-  },
-
-  get annotations() {
-    let annotations =
-      Components.classes["@mozilla.org/browser/annotation-service;1"]
-                .getService(Components.interfaces.nsIAnnotationService);
-    this.__defineGetter__("annotations", () => annotations);
-    return this.annotations;
-  },
-
-  get history() {
-    let history =
-      Components.classes["@mozilla.org/browser/nav-history-service;1"]
-                .getService(Components.interfaces.nsINavHistoryService);
-    this.__defineGetter__("history", () => history);
-    return this.history;
-  },
-
-  get windowMediator() {
-    let windowMediator = Services.wm;
-    this.__defineGetter__("windowMediator", () => windowMediator);
-    return this.windowMediator;
-  },
-
-  makeURI: function smileutil_makeURI(aSpec) {
-    if (!aSpec)
-      return null;
-    var ios = Components.classes["@mozilla.org/network/io-service;1"]
-                        .getService(Components.interfaces.nsIIOService);
-    return ios.newURI(aSpec);
-  },
-
-  free: function smileutil_free() {
-    delete this.bookmarks;
-    delete this.bookmarksObserver;
-    delete this.annotations;
-    delete this.history;
-    delete this.windowMediator;
-  }
-};
-
-
-//=================================================
-// Window implementation
-
-var smileWindowMap = new WeakMap();
-
-function getWindow(aWindow) {
-  let smileWindow = smileWindowMap.get(aWindow);
-  if (!smileWindow) {
-    smileWindow = new Window(aWindow);
-    smileWindowMap.set(aWindow, smileWindow);
-  }
-  return smileWindow;
-}
-
-// Don't call new Window() directly; use getWindow instead.
-function Window(aWindow) {
-  this._window = aWindow;
-  this._events = new Events();
-
-  this._watch("TabOpen");
-  this._watch("TabMove");
-  this._watch("TabClose");
-  this._watch("TabSelect");
-}
-
-Window.prototype = {
-  get events() {
-    return this._events;
-  },
-
-  get _tabbrowser() {
-    return this._window.getBrowser();
-  },
-
-  /*
-   * Helper used to setup event handlers on the XBL element. Note that the events
-   * are actually dispatched to tabs, so we capture them.
-   */
-  _watch: function win_watch(aType) {
-    this._tabbrowser.addEventListener(aType, this, true);
-  },
-
-  handleEvent: function win_handleEvent(aEvent) {
-    this._events.dispatch(aEvent.type, getBrowserTab(this, aEvent.originalTarget));
-  },
-
-  get tabs() {
-    var tabs = [];
-    var tabNodes = this._tabbrowser.tabs;
-    for (var i = 0; i < tabNodes.length; i++)
-      tabs.push(getBrowserTab(this, tabNodes[i]));
-    return tabs;
-  },
-
-  get activeTab() {
-    return getBrowserTab(this, this._tabbrowser.selectedTab);
-  },
-
-  open: function win_open(aURI) {
-    return getBrowserTab(this, this._tabbrowser.addTab(aURI.spec));
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Components.interfaces.smileIWindow])
-};
-
-
-//=================================================
-// BrowserTab implementation
-// SMILE deals with tabs whereas FUEL deals with browsers.
-
-var smileBrowserTabMap = new WeakMap();
-
-function getBrowserTab(aSMILEWindow, aTab) {
-  let smileBrowserTab = smileBrowserTabMap.get(aTab);
-  if (!smileBrowserTab) {
-    smileBrowserTab = new BrowserTab(aSMILEWindow, aTab);
-    smileBrowserTabMap.set(aTab, smileBrowserTab);
-  }
-  return smileBrowserTab;
-}
-
-// Don't call new BrowserTab() directly; call getBrowserTab instead.
-function BrowserTab(aSMILEWindow, aTab) {
-  this._window = aSMILEWindow;
-  this._browser = aTab.linkedBrowser;
-  this._tab = aTab;
-  this._events = new Events();
-
-  this._watch("load");
-}
-
-BrowserTab.prototype = {
-  get _tabbrowser() {
-    return this._window._tabbrowser;
-  },
-
-  get uri() {
-    return this._browser.currentURI;
-  },
-
-  get index() {
-    try {
-      return this._tabbrowser.getTabIndex(this._tab);
-    }
-    catch (e) {
-      return -1;
-    }
-  },
-
-  get events() {
-    return this._events;
-  },
-
-  get window() {
-    return this._window;
-  },
-
-  get document() {
-    return this._browser.contentDocument;
-  },
-
-  /*
-   * Helper used to setup event handlers on the XBL element
-   */
-  _watch: function bt_watch(aType) {
-    this._browser.addEventListener(aType, this, true);
-  },
-
-  handleEvent: function bt_handleEvent(aEvent) {
-    if (aEvent.type == "load") {
-      if (!(aEvent.originalTarget instanceof Components.interfaces.nsIDOMDocument))
-        return;
-
-      if (aEvent.originalTarget.defaultView instanceof Components.interfaces.nsIDOMWindow &&
-          aEvent.originalTarget.defaultView.frameElement)
-        return;
-    }
-
-    this._events.dispatch(aEvent.type, this);
-  },
-
-  load: function bt_load(aURI) {
-    this._browser.loadURI(aURI.spec, null, null);
-  },
-
-  focus: function bt_focus() {
-    this._tabbrowser.selectedTab = this._tab;
-    this._tabbrowser.focus();
-  },
-
-  close: function bt_close() {
-    this._tabbrowser.removeTab(this._tab);
-  },
-
-  moveBefore: function bt_movebefore(aBefore) {
-    this._tabbrowser.moveTabTo(this._tab, aBefore.index);
-  },
-
-  moveToEnd: function bt_moveend() {
-    this._tabbrowser.moveTabTo(this._tab, this._tabbrowser.browsers.length);
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Components.interfaces.smileIBrowserTab])
-};
-
-
-//=================================================
-// Annotations implementation
-function Annotations(aId) {
-  this._id = aId;
-}
-
-Annotations.prototype = {
-  get names() {
-    return Utilities.annotations.getItemAnnotationNames(this._id);
-  },
-
-  has: function ann_has(aName) {
-    return Utilities.annotations.itemHasAnnotation(this._id, aName);
-  },
-
-  get: function ann_get(aName) {
-    if (this.has(aName))
-      return Utilities.annotations.getItemAnnotation(this._id, aName);
-
-    return null;
-  },
-
-  set: function ann_set(aName, aValue, aExpiration) {
-    Utilities.annotations.setItemAnnotation(this._id, aName, aValue, 0, aExpiration);
-  },
-
-  remove: function ann_remove(aName) {
-    if (aName)
-      Utilities.annotations.removeItemAnnotation(this._id, aName);
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Components.interfaces.smileIAnnotations])
-};
-
-
-//=================================================
-// BookmarksObserver implementation (internal class)
-//
-// BookmarksObserver is a global singleton which watches the browser's
-// bookmarks and sends you events when things change.
-//
-// You can register three different kinds of event listeners on
-// BookmarksObserver, using addListener, addFolderListener, and
-// addRootlistener.
-//
-//  - addListener(aId, aEvent, aListener) lets you listen to a specific
-//    bookmark.  You can listen to the "change", "move", and "remove" events.
-//
-//  - addFolderListener(aId, aEvent, aListener) lets you listen to a specific
-//    bookmark folder.  You can listen to "addchild" and "removechild".
-//
-//  - addRootListener(aEvent, aListener) lets you listen to the root bookmark
-//    node.  This lets you hear "add", "remove", and "change" events on all
-//    bookmarks.
-//
-
-function BookmarksObserver() {
-  this._eventsDict = {};
-  this._folderEventsDict = {};
-  this._rootEvents = new Events();
-  Utilities.bookmarks.addObserver(this, /* ownsWeak = */ true);
-}
-
-BookmarksObserver.prototype = {
-  onBeginUpdateBatch: function () {},
-  onEndUpdateBatch: function () {},
-  onItemVisited: function () {},
-
-  onItemAdded: function bo_onItemAdded(aId, aFolder, aIndex, aItemType, aURI) {
-    this._rootEvents.dispatch("add", aId);
-    this._dispatchToEvents("addchild", aId, this._folderEventsDict[aFolder]);
-  },
-
-  onItemRemoved: function bo_onItemRemoved(aId, aFolder, aIndex) {
-    this._rootEvents.dispatch("remove", aId);
-    this._dispatchToEvents("remove", aId, this._eventsDict[aId]);
-    this._dispatchToEvents("removechild", aId, this._folderEventsDict[aFolder]);
-  },
-
-  onItemChanged: function bo_onItemChanged(aId, aProperty, aIsAnnotationProperty, aValue) {
-    this._rootEvents.dispatch("change", aProperty);
-    this._dispatchToEvents("change", aProperty, this._eventsDict[aId]);
-  },
-
-  onItemMoved: function bo_onItemMoved(aId, aOldParent, aOldIndex, aNewParent, aNewIndex) {
-    this._dispatchToEvents("move", aId, this._eventsDict[aId]);
-  },
-
-  _dispatchToEvents: function bo_dispatchToEvents(aEvent, aData, aEvents) {
-    if (aEvents) {
-      aEvents.dispatch(aEvent, aData);
-    }
-  },
-
-  _addListenerToDict: function bo_addListenerToDict(aId, aEvent, aListener, aDict) {
-    var events = aDict[aId];
-    if (!events) {
-      events = new Events();
-      aDict[aId] = events;
-    }
-    events.addListener(aEvent, aListener);
-  },
-
-  _removeListenerFromDict: function bo_removeListenerFromDict(aId, aEvent, aListener, aDict) {
-    var events = aDict[aId];
-    if (!events) {
-      return;
-    }
-
-    events.removeListener(aEvent, aListener);
-    if (events._listeners.length == 0) {
-      delete aDict[aId];
-    }
-  },
-
-  addListener: function bo_addListener(aId, aEvent, aListener) {
-    this._addListenerToDict(aId, aEvent, aListener, this._eventsDict);
-  },
-
-  removeListener: function bo_removeListener(aId, aEvent, aListener) {
-    this._removeListenerFromDict(aId, aEvent, aListener, this._eventsDict);
-  },
-
-  addFolderListener: function bo_addFolderListener(aId, aEvent, aListener) {
-    this._addListenerToDict(aId, aEvent, aListener, this._folderEventsDict);
-  },
-
-  removeFolderListener: function bo_removeFolderListener(aId, aEvent, aListener) {
-    this._removeListenerFromDict(aId, aEvent, aListener, this._folderEventsDict);
-  },
-
-  addRootListener: function bo_addRootListener(aEvent, aListener) {
-    this._rootEvents.addListener(aEvent, aListener);
-  },
-
-  removeRootListener: function bo_removeRootListener(aEvent, aListener) {
-    this._rootEvents.removeListener(aEvent, aListener);
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsINavBookmarksObserver,
-                                         Ci.nsISupportsWeakReference])
-};
-
-//=================================================
-// Bookmark implementation
-//
-// Bookmark event listeners are stored in BookmarksObserver, not in the
-// Bookmark objects themselves.  Thus, you don't have to hold on to a Bookmark
-// object in order for your event listener to stay valid, and Bookmark objects
-// not kept alive by the extension can be GC'ed.
-//
-// A consequence of this is that if you have two different Bookmark objects x
-// and y for the same bookmark (i.e., x != y but x.id == y.id), and you do
-//
-//   x.addListener("foo", fun);
-//   y.removeListener("foo", fun);
-//
-// the second line will in fact remove the listener added in the first line.
-//
-
-function Bookmark(aId, aParent, aType) {
-  this._id = aId;
-  this._parent = aParent;
-  this._type = aType || "bookmark";
-  this._annotations = new Annotations(this._id);
-
-  // Our _events object forwards to bookmarksObserver.
-  var self = this;
-  this._events = {
-    addListener: function bookmarkevents_al(aEvent, aListener) {
-      Utilities.bookmarksObserver.addListener(self._id, aEvent, aListener);
-    },
-
-    removeListener: function bookmarkevents_rl(aEvent, aListener) {
-      Utilities.bookmarksObserver.removeListener(self._id, aEvent, aListener);
-    },
-
-    QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
-  };
-
-  // For our onItemMoved listener, which updates this._parent.
-  Utilities.bookmarks.addObserver(this, /* ownsWeak = */ true);
-}
-
-Bookmark.prototype = {
-  get id() {
-    return this._id;
-  },
-
-  get title() {
-    return Utilities.bookmarks.getItemTitle(this._id);
-  },
-
-  set title(aTitle) {
-    Utilities.bookmarks.setItemTitle(this._id, aTitle);
-  },
-
-  get uri() {
-    return Utilities.bookmarks.getBookmarkURI(this._id);
-  },
-
-  set uri(aURI) {
-    return Utilities.bookmarks.changeBookmarkURI(this._id, aURI);
-  },
-
-  get description() {
-    return this._annotations.get("bookmarkProperties/description");
-  },
-
-  set description(aDesc) {
-    this._annotations.set("bookmarkProperties/description", aDesc, Components.interfaces.nsIAnnotationService.EXPIRE_NEVER);
-  },
-
-  get keyword() {
-    return Utilities.bookmarks.getKeywordForBookmark(this._id);
-  },
-
-  set keyword(aKeyword) {
-    Utilities.bookmarks.setKeywordForBookmark(this._id, aKeyword);
-  },
-
-  get type() {
-    return this._type;
-  },
-
-  get parent() {
-    return this._parent;
-  },
-
-  set parent(aFolder) {
-    Utilities.bookmarks.moveItem(this._id, aFolder.id, Utilities.bookmarks.DEFAULT_INDEX);
-    // this._parent is updated in onItemMoved
-  },
-
-  get annotations() {
-    return this._annotations;
-  },
-
-  get events() {
-    return this._events;
-  },
-
-  remove: function bm_remove() {
-    Utilities.bookmarks.removeItem(this._id);
-  },
-
-  onBeginUpdateBatch: function () {},
-  onEndUpdateBatch: function () {},
-  onItemAdded: function () {},
-  onItemVisited: function () {},
-  onItemRemoved: function () {},
-  onItemChanged: function () {},
-
-  onItemMoved: function bm_onItemMoved(aId, aOldParent, aOldIndex, aNewParent, aNewIndex) {
-    if (aId == this._id) {
-      this._parent = new BookmarkFolder(aNewParent, Utilities.bookmarks.getFolderIdForItem(aNewParent));
-    }
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.smileIBookmark,
-                                         Ci.nsINavBookmarksObserver,
-                                         Ci.nsISupportsWeakReference])
-};
-
-
-//=================================================
-// BookmarkFolder implementation
-//
-// As with Bookmark, events on BookmarkFolder are handled by the
-// BookmarksObserver singleton.
-//
-
-function BookmarkFolder(aId, aParent) {
-  this._id = aId;
-  this._parent = aParent;
-  this._annotations = new Annotations(this._id);
-
-  // Our event listeners are handled by the BookmarksObserver singleton.  This
-  // is a bit complicated because there are three different kinds of events we
-  // might want to listen to here:
-  //
-  //  - If this._parent is null, we're the root bookmark folder, and all our
-  //    listeners should be root listeners.
-  //
-  //  - Otherwise, events ending with "child" (addchild, removechild) are
-  //    handled by a folder listener.
-  //
-  //  - Other events are handled by a vanilla bookmark listener.
-
-  var self = this;
-  this._events = {
-    addListener: function bmfevents_al(aEvent, aListener) {
-      if (self._parent) {
-        if (/child$/.test(aEvent)) {
-          Utilities.bookmarksObserver.addFolderListener(self._id, aEvent, aListener);
-        } else {
-          Utilities.bookmarksObserver.addListener(self._id, aEvent, aListener);
-        }
-      } else {
-        Utilities.bookmarksObserver.addRootListener(aEvent, aListener);
-      }
-    },
-
-    removeListener: function bmfevents_rl(aEvent, aListener) {
-      if (self._parent) {
-        if (/child$/.test(aEvent)) {
-          Utilities.bookmarksObserver.removeFolderListener(self._id, aEvent, aListener);
-        } else {
-          Utilities.bookmarksObserver.removeListener(self._id, aEvent, aListener);
-        }
-      } else {
-        Utilities.bookmarksObserver.removeRootListener(aEvent, aListener);
-      }
-    },
-
-    QueryInterface: XPCOMUtils.generateQI([Ci.extIEvents])
-  };
-
-  // For our onItemMoved listener, which updates this._parent.
-  Utilities.bookmarks.addObserver(this, /* ownsWeak = */ true);
-}
-
-BookmarkFolder.prototype = {
-  get id() {
-    return this._id;
-  },
-
-  get title() {
-    return Utilities.bookmarks.getItemTitle(this._id);
-  },
-
-  set title(aTitle) {
-    Utilities.bookmarks.setItemTitle(this._id, aTitle);
-  },
-
-  get description() {
-    return this._annotations.get("bookmarkProperties/description");
-  },
-
-  set description(aDesc) {
-    this._annotations.set("bookmarkProperties/description", aDesc, Components.interfaces.nsIAnnotationService.EXPIRE_NEVER);
-  },
-
-  get type() {
-    return "folder";
-  },
-
-  get parent() {
-    return this._parent;
-  },
-
-  set parent(aFolder) {
-    Utilities.bookmarks.moveItem(this._id, aFolder.id, Utilities.bookmarks.DEFAULT_INDEX);
-    // this._parent is updated in onItemMoved
-  },
-
-  get annotations() {
-    return this._annotations;
-  },
-
-  get events() {
-    return this._events;
-  },
-
-  get children() {
-    var items = [];
-
-    var options = Utilities.history.getNewQueryOptions();
-    var query = Utilities.history.getNewQuery();
-    query.setFolders([this._id], 1);
-    var result = Utilities.history.executeQuery(query, options);
-    var rootNode = result.root;
-    rootNode.containerOpen = true;
-    var cc = rootNode.childCount;
-    for (var i = 0; i < cc; ++i) {
-      var node = rootNode.getChild(i);
-      if (node.type == node.RESULT_TYPE_FOLDER) {
-        var folder = new BookmarkFolder(node.itemId, this._id);
-        items.push(folder);
-      }
-      else if (node.type == node.RESULT_TYPE_SEPARATOR) {
-        var separator = new Bookmark(node.itemId, this._id, "separator");
-        items.push(separator);
-      }
-      else {
-        var bookmark = new Bookmark(node.itemId, this._id, "bookmark");
-        items.push(bookmark);
-      }
-    }
-    rootNode.containerOpen = false;
-
-    return items;
-  },
-
-  addBookmark: function bmf_addbm(aTitle, aUri) {
-    var newBookmarkID = Utilities.bookmarks.insertBookmark(this._id, aUri, Utilities.bookmarks.DEFAULT_INDEX, aTitle);
-    var newBookmark = new Bookmark(newBookmarkID, this, "bookmark");
-    return newBookmark;
-  },
-
-  addSeparator: function bmf_addsep() {
-    var newBookmarkID = Utilities.bookmarks.insertSeparator(this._id, Utilities.bookmarks.DEFAULT_INDEX);
-    var newBookmark = new Bookmark(newBookmarkID, this, "separator");
-    return newBookmark;
-  },
-
-  addFolder: function bmf_addfolder(aTitle) {
-    var newFolderID = Utilities.bookmarks.createFolder(this._id, aTitle, Utilities.bookmarks.DEFAULT_INDEX);
-    var newFolder = new BookmarkFolder(newFolderID, this);
-    return newFolder;
-  },
-
-  remove: function bmf_remove() {
-    Utilities.bookmarks.removeItem(this._id);
-  },
-
-  // observer
-  onBeginUpdateBatch: function () {},
-  onEndUpdateBatch: function () {},
-  onItemAdded: function () {},
-  onItemRemoved: function () {},
-  onItemChanged: function () {},
-
-  onItemMoved: function bf_onItemMoved(aId, aOldParent, aOldIndex, aNewParent, aNewIndex) {
-    if (this._id == aId) {
-      this._parent = new BookmarkFolder(aNewParent, Utilities.bookmarks.getFolderIdForItem(aNewParent));
-    }
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Ci.smileIBookmarkFolder,
-                                         Ci.nsINavBookmarksObserver,
-                                         Ci.nsISupportsWeakReference])
-};
-
-
-//=================================================
-// BookmarkRoots implementation
-function BookmarkRoots() {
-}
-
-BookmarkRoots.prototype = {
-  get menu() {
-    if (!this._menu)
-      this._menu = new BookmarkFolder(Utilities.bookmarks.bookmarksMenuFolder, null);
-
-    return this._menu;
-  },
-
-  get toolbar() {
-    if (!this._toolbar)
-      this._toolbar = new BookmarkFolder(Utilities.bookmarks.toolbarFolder, null);
-
-    return this._toolbar;
-  },
-
-  get tags() {
-    if (!this._tags)
-      this._tags = new BookmarkFolder(Utilities.bookmarks.tagsFolder, null);
-
-    return this._tags;
-  },
-
-  get unfiled() {
-    if (!this._unfiled)
-      this._unfiled = new BookmarkFolder(Utilities.bookmarks.unfiledBookmarksFolder, null);
-
-    return this._unfiled;
-  },
-
-  QueryInterface: XPCOMUtils.generateQI([Components.interfaces.smileIBookmarkRoots])
-};
-
-
-//=================================================
-// Factory - Treat Application as a singleton
-// XXX This is required, because we're registered for the 'JavaScript global
-// privileged property' category, whose handler always calls createInstance.
-// See bug 386535.
-var gSingleton = null;
-var ApplicationFactory = {
-  createInstance: function af_ci(aOuter, aIID) {
-    if (aOuter != null)
-      throw Components.results.NS_ERROR_NO_AGGREGATION;
-
-    if (gSingleton == null) {
-      gSingleton = new Application();
-    }
-
-    return gSingleton.QueryInterface(aIID);
-  }
-};
-
-#include ../exthelper/extApplication.js
-
-//=================================================
-// Application constructor
-function Application() {
-  this.initToolkitHelpers();
-}
-
-//=================================================
-// Application implementation
-Application.prototype = {
-  // set the proto, defined in extApplication.js
-  __proto__: extApplication.prototype,
-
-  // for XPCOMUtils
-  classID: APPLICATION_CID,
-
-  // redefine the default factory for XPCOMUtils
-  _xpcom_factory: ApplicationFactory,
-
-  // for nsISupports
-  QueryInterface: XPCOMUtils.generateQI(
-                    [Components.interfaces.smileIApplication,
-                     Components.interfaces.extIApplication,
-                     Components.interfaces.nsIObserver,
-                     Components.interfaces.nsISupportsWeakReference]),
-
-  // for nsIClassInfo
-  classInfo: XPCOMUtils.generateCI({
-    classID: APPLICATION_CID,
-    contractID: APPLICATION_CONTRACTID,
-    interfaces: [Components.interfaces.smileIApplication,
-                 Components.interfaces.extIApplication,
-                 Components.interfaces.nsIObserver],
-    flags: Components.interfaces.nsIClassInfo.SINGLETON}),
-
-  // for nsIObserver
-  observe: function app_observe(aSubject, aTopic, aData) {
-    // Call the extApplication version of this function first
-    this.__proto__.__proto__.observe.call(this, aSubject, aTopic, aData);
-    if (aTopic == "xpcom-shutdown") {
-      this._obs.removeObserver(this, "xpcom-shutdown");
-      delete this.bookmarks;
-      Utilities.free();
-    }
-  },
-
-  get bookmarks() {
-    let bookmarks = new BookmarkRoots();
-    this.__defineGetter__("bookmarks", () => bookmarks);
-    return this.bookmarks;
-  },
-
-  get windows() {
-    var win = [];
-    var browserEnum = Services.wm.getEnumerator("navigator:browser");
-
-    while (browserEnum.hasMoreElements())
-      win.push(getWindow(browserEnum.getNext()));
-
-    return win;
-  },
-
-  get activeWindow() {
-    return getWindow(Services.wm.getMostRecentWindow("navigator:browser"));
-  },
-
-  // For steelIApplication compatibility.
-  platformIsMac: "nsILocalFileMac" in Components.interfaces
-};
-
-var NSGetFactory = XPCOMUtils.generateNSGetFactory([Application]);
deleted file mode 100644
--- a/suite/smile/src/smileApplication.manifest
+++ /dev/null
@@ -1,3 +0,0 @@
-component {c9ba8f65-c936-4ac6-a859-8936832b0c12} smileApplication.js
-contract @mozilla.org/smile/application;1 {c9ba8f65-c936-4ac6-a859-8936832b0c12}
-category JavaScript-global-privileged-property Application @mozilla.org/smile/application;1
deleted file mode 100644
--- a/suite/smile/test/ContentA.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" >
-<head>
-    <title>Content Page A</title>
-</head>
-<body>
-<h1>Content Page A</h1>
-<div id="desc">This is a simple content page used for testing SMILE Browser API</div>
-<div id="test1">A</div>
-<div id="test2">B</div>
-</body>
-</html>
deleted file mode 100644
--- a/suite/smile/test/ContentB.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" >
-<head>
-    <title>Content Page B</title>
-</head>
-<body>
-<h1>Content Page B</h1>
-<div id="desc">This is a simple content page used for testing SMILE Browser API</div>
-<div id="test1">1</div>
-<div id="test2">2</div>
-</body>
-</html>
deleted file mode 100644
--- a/suite/smile/test/ContentWithFrames.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" >
-<head>
-    <title>Content Page with Frames</title>
-</head>
-<body>
-<h1>Content Page with Frames</h1>
-<div id="desc">This is a simple framed content page used for testing SMILE Browser API</div>
-<iframe src="ContentA.html"></iframe>
-<iframe src="ContentB.html"></iframe>
-</body>
-</html>
deleted file mode 100644
--- a/suite/smile/test/browser_Application.js
+++ /dev/null
@@ -1,84 +0,0 @@
-const Ci = Components.interfaces;
-const Cc = Components.classes;
-const Cu = Components.utils;
-
-ChromeUtils.import("resource://gre/modules/Services.jsm");
-
-// This listens for the next opened window and checks it is of the right url.
-// opencallback is called when the new window is fully loaded
-// closecallback is called when the window is closed
-function WindowOpenListener(url, opencallback, closecallback) {
-  this.url = url;
-  this.opencallback = opencallback;
-  this.closecallback = closecallback;
-
-  Services.wm.addListener(this);
-}
-
-WindowOpenListener.prototype = {
-  url: null,
-  opencallback: null,
-  closecallback: null,
-  window: null,
-  domwindow: null,
-
-  handleEvent: function(event) {
-    is(this.domwindow.document.location.href, this.url, "Should have opened the correct window");
-
-    this.domwindow.removeEventListener("load", this);
-    // Allow any other load handlers to execute
-    var self = this;
-    executeSoon(function() { self.opencallback(self.domwindow); } );
-  },
-
-  onWindowTitleChange: function(window, title) {
-  },
-
-  onOpenWindow: function(window) {
-    if (this.window)
-      return;
-
-    this.window = window;
-    this.domwindow = window.QueryInterface(Ci.nsIInterfaceRequestor)
-                           .getInterface(Ci.nsIDOMWindow);
-    this.domwindow.addEventListener("load", this);
-  },
-
-  onCloseWindow: function(window) {
-    if (this.window != window)
-      return;
-
-    Services.wm.removeListener(this);
-    this.opencallback = null;
-    this.window = null;
-    this.domwindow = null;
-
-    // Let the window close complete
-    executeSoon(this.closecallback);
-    this.closecallback = null;
-  }
-};
-
-function test() {
-  ok(Application, "Check global access to Application");
-
-  // I'd test these against a specific value, but that is bound to flucuate
-  ok(Application.id, "Check to see if an ID exists for the Application");
-  ok(Application.name, "Check to see if a name exists for the Application");
-  ok(Application.version, "Check to see if a version exists for the Application");
-
-  var console = Services.wm.getMostRecentWindow("suite:console");
-  waitForExplicitFinish();
-  ok(!console, "Console should not already be open");
-
-  new WindowOpenListener("chrome://communicator/content/console/console.xul", consoleOpened, consoleClosed);
-  Application.console.open();
-}
-
-function consoleOpened(win) {
-  win.close();
-}
-
-function consoleClosed() {
-  finish();
-}
deleted file mode 100644
--- a/suite/smile/test/browser_ApplicationPrefs.js
+++ /dev/null
@@ -1,179 +0,0 @@
-// The various properties that we'll be testing
-var testdata = {
-  missing: "smile.smile-test-missing",
-  dummy: "smile.smile-test",
-  string: "browser.active_color",
-  integer: "permissions.default.image",
-  boolean: "browser.underline_anchors"
-};
-
-function test() {
-  // test getting nonexistent values
-  var itemValue = Application.prefs.getValue(testdata.missing, "default");
-  is(itemValue, "default", "Check 'Application.prefs.getValue' for nonexistent item");
-
-  is(Application.prefs.get(testdata.missing), null, "Check 'Application.prefs.get' for nonexistent item");
-
-  // test setting and getting a value
-  Application.prefs.setValue(testdata.dummy, "dummy");
-  itemValue = Application.prefs.getValue(testdata.dummy, "default");
-  is(itemValue, "dummy", "Check 'Application.prefs.getValue' for existing item");
-
-  // test for overwriting an existing value
-  Application.prefs.setValue(testdata.dummy, "smarty");
-  itemValue = Application.prefs.getValue(testdata.dummy, "default");
-  is(itemValue, "smarty", "Check 'Application.prefs.getValue' for overwritten item");
-
-  // test setting and getting a value
-  Application.prefs.get(testdata.dummy).value = "dummy2";
-  itemValue = Application.prefs.get(testdata.dummy).value;
-  is(itemValue, "dummy2", "Check 'Application.prefs.get().value' for existing item");
-
-  // test resetting a pref [since there is no default value, the pref should disappear]
-  Application.prefs.get(testdata.dummy).reset();
-  itemValue = Application.prefs.getValue(testdata.dummy, "default");
-  is(itemValue, "default", "Check 'Application.prefs.getValue' for reset pref");
-
-  // test to see if a non-existant property exists
-  ok(!Application.prefs.has(testdata.dummy), "Check non-existant property for existence");
-
-  // PREF: string browser.active_color == #EE0000
-
-  // test to see if an existing string property exists
-  ok(Application.prefs.has(testdata.string), "Check existing string property for existence");
-
-  // test accessing a non-existant string property
-  var val = Application.prefs.getValue(testdata.dummy, "default");
-  is(val, "default", "Check non-existant string property for expected value");
-
-  // test accessing an existing string property
-  var val = Application.prefs.getValue(testdata.string, "default");
-  is(val, "#EE0000", "Check existing string property for expected value");
-
-  // test manipulating an existing string property
-  Application.prefs.setValue(testdata.string, "#EF0000");
-  var val = Application.prefs.getValue(testdata.string, "default");
-  is(val, "#EF0000", "Set existing string property");
-
-  // test getting the type of an existing string property
-  var type = Application.prefs.get(testdata.string).type;
-  is(type, "String", "Check 'Application.prefs.get().type' for string pref");
-
-  // test resetting an existing string property
-  Application.prefs.get(testdata.string).reset();
-  var val = Application.prefs.getValue(testdata.string, "default");
-  is(val, "#EE0000", "Reset existing string property");
-
-  // PREF: integer permissions.default.image == 1
-
-  // test to see if an existing integer property exists
-  ok(Application.prefs.has(testdata.integer), "Check existing integer property for existence");
-
-  // test accessing a non-existant integer property
-  var val = Application.prefs.getValue(testdata.dummy, 0);
-  is(val, 0, "Check non-existant integer property for expected value");
-
-  // test accessing an existing integer property
-  var val = Application.prefs.getValue(testdata.integer, 0);
-  is(val, 1, "Check existing integer property for expected value");
-
-  // test manipulating an existing integer property
-  Application.prefs.setValue(testdata.integer, 0);
-  var val = Application.prefs.getValue(testdata.integer, 1);
-  is(val, 0, "Set existing integer property");
-
-  // test getting the type of an existing integer property
-  var type = Application.prefs.get(testdata.integer).type;
-  is(type, "Number", "Check 'Application.prefs.get().type' for integer pref");
-
-  // test resetting an existing integer property
-  Application.prefs.get(testdata.integer).reset();
-  var val = Application.prefs.getValue(testdata.integer, 0);
-  is(val, 1, "Reset existing integer property");
-
-  // PREF: boolean browser.underline_anchors == true
-
-  // test to see if an existing boolean property exists
-  ok(Application.prefs.has(testdata.boolean), "Check existing boolean property for existence");
-
-  // test accessing a non-existant boolean property
-  var val = Application.prefs.getValue(testdata.dummy, true);
-  ok(val, "Check non-existant boolean property for expected value");
-
-  // test accessing an existing boolean property
-  var val = Application.prefs.getValue(testdata.boolean, false);
-  ok(val, "Check existing boolean property for expected value");
-
-  // test manipulating an existing boolean property
-  Application.prefs.setValue(testdata.boolean, false);
-  var val = Application.prefs.getValue(testdata.boolean, true);
-  ok(!val, "Set existing boolean property");
-
-  // test getting the type of an existing boolean property
-  var type = Application.prefs.get(testdata.boolean).type;
-  is(type, "Boolean", "Check 'Application.prefs.get().type' for boolean pref");
-
-  // test resetting an existing boolean property
-  Application.prefs.get(testdata.boolean).reset();
-  var val = Application.prefs.getValue(testdata.boolean, false);
-  ok(val, "Reset existing string property for expected value");
-
-  // test getting all preferences
-  var allPrefs = Application.prefs.all;
-  ok(allPrefs.length >= 800, "Check 'Application.prefs.all' for the right number of preferences");
-  ok(allPrefs[0].name.length > 0, "Check 'Application.prefs.all' for a valid name in the starting preference");
-
-  // test the value of the preference root
-  is(Application.prefs.root, "", "Check the Application preference root");
-
-  // test for user changed preferences
-  ok(Application.prefs.get("browser.shell.checkDefaultBrowser").modified, "A single preference is marked as modified.");
-  ok(!Application.prefs.get(testdata.string).modified, "A single preference is marked as not modified.");
-
-  // test for a locked preference
-  var pref = Application.prefs.get(testdata.string);
-  ok(!pref.locked, "A single preference should not be locked.");
-
-  pref.locked = true;
-  ok(pref.locked, "A single preference should be locked.");
-
-  try {
-    prev.value = "test value";
-
-    ok(false, "A locked preference could be modified.");
-  } catch(e){
-    ok(true, "A locked preference should not be able to be modified.");
-  }
-
-  pref.locked = false;
-  ok(!pref.locked, "A single preference is unlocked.");
-
-  // check for change event when setting a value
-  waitForExplicitFinish();
-  Application.prefs.events.addListener("change", onPrefChange);
-  Application.prefs.setValue("smile.smile-test", "change event");
-}
-
-function onPrefChange(evt) {
-  is(evt.data, testdata.dummy, "Check 'Application.prefs.setValue' fired a change event");
-  Application.prefs.events.removeListener("change", onPrefChange);
-
-  // We are removing the old listener after adding the new listener so we can test that
-  // removing a listener does not remove all listeners
-  Application.prefs.get("smile.smile-test").events.addListener("change", onPrefChangeDummy);
-  Application.prefs.get("smile.smile-test").events.addListener("change", onPrefChange2);
-  Application.prefs.get("smile.smile-test").events.removeListener("change", onPrefChangeDummy);
-
-  Application.prefs.setValue("smile.smile-test", "change event2");
-}
-
-function onPrefChange2(evt) {
-  is(evt.data, testdata.dummy, "Check 'Application.prefs.setValue' fired a change event for a single preference");
-  Application.prefs.events.removeListener("change", onPrefChange2);
-
-  finish();
-}
-
-function onPrefChangeDummy(evt) {
-  ok(false, "onPrefChangeDummy shouldn't be invoked!");
-}
deleted file mode 100644
--- a/suite/smile/test/browser_ApplicationQuitting.js
+++ /dev/null
@@ -1,17 +0,0 @@
-function test() {
-  function quitRequestObserver(aSubject, aTopic, aData) {
-    ok(aTopic == "quit-application-requested" &&
-       aSubject instanceof Components.interfaces.nsISupportsPRBool,
-       "Received a quit request we're going to deny");
-    aSubject.data = true;
-  }
-
-  // ensure that we don't accidentally quit
-  Services.obs.addObserver(quitRequestObserver, "quit-application-requested");
-
-  ok(!Application.quit(),    "Tried to quit - and didn't succeed");
-  ok(!Application.restart(), "Tried to restart - and didn't succeed");
-
-  // clean up
-  Services.obs.removeObserver(quitRequestObserver, "quit-application-requested", false);
-}
deleted file mode 100644
--- a/suite/smile/test/browser_ApplicationStorage.js
+++ /dev/null
@@ -1,30 +0,0 @@
-function test() {
-  // test for existence of values
-  var hasItem = Application.storage.has("smile-test-missing");
-  is(hasItem, false, "Check 'Application.storage.has' for nonexistent item");
-  Application.storage.set("smile-test", "dummy");
-  hasItem = Application.storage.has("smile-test");
-  is(hasItem, true, "Check 'Application.storage.has' for existing item");
-
-  // test getting nonexistent and existing values
-  var itemValue = Application.storage.get("smile-test-missing", "default");
-  is(itemValue, "default", "Check 'Application.storage.get' for nonexistent item");
-  itemValue = Application.storage.get("smile-test", "default");
-  is(itemValue, "dummy", "Check 'Application.storage.get' for existing item");
-
-  // test for overwriting an existing value
-  Application.storage.set("smile-test", "smarty");
-  itemValue = Application.storage.get("smile-test", "default");
-  is(itemValue, "smarty", "Check 'Application.storage.get' for overwritten item");
-
-  // check for change event when setting a value
-  waitForExplicitFinish();
-  Application.storage.events.addListener("change", onStorageChange);
-  Application.storage.set("smile-test", "change event");
-}
-
-function onStorageChange(evt) {
-  is(evt.data, "smile-test", "Check 'Application.storage.set' fired a change event");
-  Application.storage.events.removeListener("change", onStorageChange);
-  finish();
-}
deleted file mode 100644
--- a/suite/smile/test/browser_Bookmarks.js
+++ /dev/null
@@ -1,253 +0,0 @@
-var gLastFolderAction = "";
-var gLastBookmarkAction = "";
-var gLastRootAction = "";
-
-function url(spec) {
-  return Services.io.newURI(spec);
-}
-
-function test() {
-  // Some very basic tests on the tags root
-  var tags = Application.bookmarks.tags;
-  ok(tags, "Check access to bookmark tags root");
-  ok(!tags.parent, "Check tags parent (should be null)");
-
-  //----------------------------------------------
-
-  // Some very basic tests on the unfiled root
-  var unfiled = Application.bookmarks.unfiled;
-  ok(unfiled, "Check access to bookmark unfiled root");
-  ok(!unfiled.parent, "Check unfiled parent (should be null)");
-
-  //----------------------------------------------
-
-  // Some basic tests on the toolbar root
-  var toolbar = Application.bookmarks.toolbar;
-  ok(toolbar, "Check access to bookmark toolbar root");
-  ok(!toolbar.parent, "Check toolbar parent (should be null)");
-
-  var toolbarKidCount = toolbar.children.length;
-
-  // test adding folders
-  var testFolderToolbar = toolbar.addFolder("SMILE in Toolbar");
-  ok(testFolderToolbar, "Check folder creation");
-  is(testFolderToolbar.type, "folder", "Check 'folder.type' after creation");
-  ok(testFolderToolbar.parent, "Check parent after folder creation");
-
-  toolbarKidCount++;
-  is(toolbar.children.length, toolbarKidCount, "Check toolbar folder child count after adding a child folder");
-
-  //----------------------------------------------
-
-  // Main testing is done on the bookmarks menu root
-  var root = Application.bookmarks.menu;
-  ok(root, "Check access to bookmark root");
-  ok(!root.parent, "Check root parent (should be null)");
-
-  var rootKidCount = root.children.length;
-
-  // test adding folders
-  var testFolder = root.addFolder("SMILE");
-  ok(testFolder, "Check folder creation");
-  is(testFolder.type, "folder", "Check 'folder.type' after creation");
-  ok(testFolder.parent, "Check parent after folder creation");
-
-  rootKidCount++;
-  is(root.children.length, rootKidCount, "Check root folder child count after adding a child folder");
-
-  // test modifying a folder
-  testFolder.events.addListener("change", onFolderChange);
-  testFolder.description = "SMILE folder";
-  is(testFolder.description, "SMILE folder", "Check setting 'folder.description'");
-  is(gLastFolderAction, "bookmarkProperties/description", "Check event handler for setting 'folder.description'");
-
-  testFolder.title = "smile-is-cool";
-  is(testFolder.title, "smile-is-cool", "Check setting 'folder.title'");
-  is(gLastFolderAction, "title", "Check event handler for setting 'folder.title'");
-
-  testFolder.annotations.set("testing/folder", "annotate-this", 0);
-  ok(testFolder.annotations.has("testing/folder"), "Checking existence of added annotation");
-  is(gLastFolderAction, "testing/folder", "Check event handler for setting annotation");
-  gLastFolderAction = "";
-  is(testFolder.annotations.get("testing/folder"), "annotate-this", "Checking existence of added annotation");
-  testFolder.annotations.remove("testing/folder");
-  ok(!testFolder.annotations.has("testing/folder"), "Checking existence of removed annotation");
-  is(gLastFolderAction, "testing/folder", "Check event handler for removing annotation");
-
-  testFolder.events.addListener("addchild", onFolderAddChild);
-  testFolder.events.addListener("removechild", onFolderRemoveChild);
-
-  // test adding a bookmark
-  var testBookmark = testFolder.addBookmark("Mozilla", url("http://www.mozilla.com/"));
-  ok(testBookmark, "Check bookmark creation");
-  ok(testBookmark.parent, "Check parent after bookmark creation");
-  is(gLastFolderAction, "addchild", "Check event handler for adding a child to a folder");
-  is(testBookmark.type, "bookmark", "Check 'bookmark.type' after creation");
-  is(testBookmark.title, "Mozilla", "Check 'bookmark.title' after creation");
-  is(testBookmark.uri.spec, "http://www.mozilla.com/", "Check 'bookmark.uri' after creation");
-
-  is(testFolder.children.length, 1, "Check test folder child count after adding a child bookmark");
-
-  // test modifying a bookmark
-  testBookmark.events.addListener("change", onBookmarkChange);
-  testBookmark.description = "mozcorp";
-  is(testBookmark.description, "mozcorp", "Check setting 'bookmark.description'");
-  is(gLastBookmarkAction, "bookmarkProperties/description", "Check event handler for setting 'bookmark.description'");
-
-  testBookmark.keyword = "moz"
-  is(testBookmark.keyword, "moz", "Check setting 'bookmark.keyword'");
-  is(gLastBookmarkAction, "keyword", "Check event handler for setting 'bookmark.keyword'");
-
-  testBookmark.title = "MozCorp"
-  is(testBookmark.title, "MozCorp", "Check setting 'bookmark.title'");
-  is(gLastBookmarkAction, "title", "Check event handler for setting 'bookmark.title'");
-
-  testBookmark.uri = url("http://www.mozilla.org/");
-  is(testBookmark.uri.spec, "http://www.mozilla.org/", "Check setting 'bookmark.uri'");
-  is(gLastBookmarkAction, "uri", "Check event handler for setting 'bookmark.uri'");
-
-  // test adding and removing a bookmark annotation
-  testBookmark.annotations.set("testing/bookmark", "annotate-this", 0);
-  ok(testBookmark.annotations.has("testing/bookmark"), "Checking existence of added annotation");
-  is(gLastBookmarkAction, "testing/bookmark", "Check event handler for setting annotation");
-  gLastBookmarkAction = "";
-  is(testBookmark.annotations.get("testing/bookmark"), "annotate-this", "Checking existence of added annotation");
-  testBookmark.annotations.remove("testing/bookmark");
-  ok(!testBookmark.annotations.has("testing/bookmark"), "Checking existence of removed annotation");
-  is(gLastBookmarkAction, "testing/bookmark", "Check event handler for removing annotation");
-  is(testBookmark.annotations.get("testing/bookmark"), null, "Check existence of a missing annotation");
-
-  // quick annotation type tests
-  testBookmark.annotations.set("testing/bookmark/string", "annotate-this", 0);
-  ok(testBookmark.annotations.has("testing/bookmark/string"), "Checking existence of added string annotation");
-  is(testBookmark.annotations.get("testing/bookmark/string"), "annotate-this", "Checking value of added string annotation");
-  is(gLastBookmarkAction, "testing/bookmark/string", "Check event handler for setting annotation");
-  gLastBookmarkAction = "";
-  testBookmark.annotations.set("testing/bookmark/int", 100, 0);
-  ok(testBookmark.annotations.has("testing/bookmark/int"), "Checking existence of added integer annotation");
-  is(testBookmark.annotations.get("testing/bookmark/int"), 100, "Checking value of added integer annotation");
-  is(gLastBookmarkAction, "testing/bookmark/int", "Check event handler for setting annotation");
-  gLastBookmarkAction = "";
-  testBookmark.annotations.set("testing/bookmark/double", 3.333, 0);
-  ok(testBookmark.annotations.has("testing/bookmark/double"), "Checking existence of added double annotation");
-  is(testBookmark.annotations.get("testing/bookmark/double"), 3.333, "Checking value of added double annotation");
-  is(gLastBookmarkAction, "testing/bookmark/double", "Check event handler for setting annotation");
-  gLastBookmarkAction = "";
-
-  // test names array - NOTE: "bookmarkProperties/description" is an annotation too
-  var names = testBookmark.annotations.names;
-  ok(names.some(f => f == "bookmarkProperties/description"), "Checking for description annotation");
-  ok(names.some(f => f == "testing/bookmark/string"), "Checking for string test annotation");
-  ok(names.some(f => f == "testing/bookmark/int"), "Checking for int test annotation");
-  ok(names.some(f => f == "testing/bookmark/double"), "Checking for double test annotation");
-
-  // test adding a separator
-  var testSeparator = testFolder.addSeparator();
-  ok(testSeparator, "Check bookmark creation");
-  ok(testSeparator.parent, "Check parent after separator creation");
-  is(gLastFolderAction, "addchild", "Check event handler for adding a child separator to a folder");
-  is(testSeparator.type, "separator", "Check 'bookmark.type' after separator creation");
-
-  is(testFolder.children.length, 2, "Check test folder child count after adding a child separator");
-
-  // test removing separator
-  testSeparator.events.addListener("remove", onBookmarkRemove);
-  testSeparator.remove();
-  is(gLastBookmarkAction, "remove", "Check event handler for removing separator");
-  is(gLastFolderAction, "removechild", "Check event handler for removing a child separator from a folder");
-  is(testFolder.children.length, 1, "Check test folder child count after removing a child separator");
-
-  // test removing bookmark
-  testBookmark.events.addListener("remove", onBookmarkRemove);
-  testBookmark.remove();
-  is(gLastBookmarkAction, "remove", "Check event handler for removing bookmark");
-  is(gLastFolderAction, "removechild", "Check event handler for removing a child from a folder");
-  is(testFolder.children.length, 0, "Check test folder child count after removing a child bookmark");
-
-  // test removing a folder
-  testFolder.events.addListener("remove", onFolderRemove);
-  testFolder.remove();
-  is(gLastFolderAction, "remove", "Check event handler for removing child folder");
-  rootKidCount--;
-  is(root.children.length, rootKidCount, "Check root folder child count after removing a child folder");
-
-  // test moving between folders
-  var testFolderA = root.addFolder("folder-a");
-  var testFolderB = root.addFolder("folder-b");
-
-  var testMove = testFolderA.addBookmark("Mozilla", url("http://www.mozilla.com/"));
-  testMove.events.addListener("move", onBookmarkMove);
-  is(testMove.parent.title, "folder-a", "Checking for new parent before moving bookmark");
-
-  testMove.parent = testFolderB;
-  is(testMove.parent.title, "folder-b", "Checking for new parent after moving bookmark");
-  is(gLastBookmarkAction, "move", "Checking for event handler after moving bookmark");
-
-  // test moving a folder
-  testFolderA.events.addListener("move", onFolderMove);
-  testFolderA.parent = testFolderB;
-  is(testFolderA.parent.title, "folder-b", "Checking for new parent after moving folder");
-  is(gLastFolderAction, "move", "Checking for event handler after moving folder");
-
-  // test events on the root
-  root.events.addListener("add", onRootAdd);
-  root.events.addListener("remove", onRootRemove);
-  root.events.addListener("change", onRootChange);
-  var testFolderC = root.addFolder("folder-c");
-  is(gLastRootAction, "add");
-
-  root.events.removeListener("add", onRootAdd);
-  gLastRootAction = "";
-  var testFolderD = root.addFolder("folder-d");
-  is(gLastRootAction, "");
-
-  testFolderC.remove();
-  is(gLastRootAction, "remove");
-
-  testFolderD.description = "Foo";
-  is(gLastRootAction, "bookmarkProperties/description");
-}
-
-function onFolderChange(evt) {
-  gLastFolderAction = evt.data;
-}
-
-function onFolderRemove(evt) {
-  gLastFolderAction = evt.type;
-}
-
-function onFolderAddChild(evt) {
-  gLastFolderAction = evt.type;
-}
-
-function onFolderRemoveChild(evt) {
-  gLastFolderAction = evt.type;
-}
-
-function onFolderMove(evt) {
-  gLastFolderAction = evt.type;
-}
-
-function onBookmarkChange(evt) {
-  gLastBookmarkAction = evt.data;
-}
-
-function onBookmarkRemove(evt) {
-  gLastBookmarkAction = evt.type;
-}
-
-function onBookmarkMove(evt) {
-  gLastBookmarkAction = evt.type;
-}
-
-function onRootAdd(evt) {
-  gLastRootAction = evt.type;
-}
-
-function onRootRemove(evt) {
-  gLastRootAction = evt.type;
-}
-
-function onRootChange(evt) {
-  gLastRootAction = evt.data;
-}
deleted file mode 100644
--- a/suite/smile/test/browser_Browser.js
+++ /dev/null
@@ -1,149 +0,0 @@
-const CHROMEROOT = getRootDirectory(gTestPath);
-
-var gPageA = null;
-var gPageB = null;
-
-// cached data from events
-var gTabOpenPageA = null;
-var gTabOpenPageB = null;
-var gTabOpenCount = 0;
-var gTabCloseCount = 0;
-var gTabMoveCount = 0;
-var gPageLoadCount = 0;
-
-function test() {
-  waitForExplicitFinish();
-
-  var windows = Application.windows;
-  ok(windows, "Check access to browser windows");
-  is(windows.length, 1, "There should be one browser window open");
-
-  var activeWin = Application.activeWindow;
-  activeWin.events.addListener("TabOpen", onTabOpen);
-  activeWin.events.addListener("TabClose", onTabClose);
-  activeWin.events.addListener("TabMove", onTabMove);
-
-  gPageA = activeWin.open(makeURI(CHROMEROOT + "ContentA.html"));
-  gPageA.events.addListener("load", onPageAFirstLoad);
-
-  is(activeWin.tabs.length, 2, "Checking length of 'Browser.tabs' after opening 1 additional tab");
-
-  function onPageAFirstLoad(event) {
-    gPageA.events.removeListener("load", onPageAFirstLoad);
-    is(gPageA.uri.spec, event.data.uri.spec, "Checking event browser tab is equal to page A");
-
-    gPageB = activeWin.open(makeURI(CHROMEROOT + "ContentB.html"));
-    gPageB.events.addListener("load", delayAfterOpen);
-    gPageB.focus();
-
-    is(activeWin.tabs.length, 3, "Checking length of 'Browser.tabs' after opening a second additional tab");
-    is(activeWin.activeTab.index, gPageB.index, "Checking 'Browser.activeTab' after setting focus");
-  }
-
-  function delayAfterOpen() {
-    executeSoon(afterOpen);
-  }
-
-  // need to wait for the url's to be refreshed during the load
-  function afterOpen(event) {
-    gPageB.events.removeListener("load", delayAfterOpen);
-    // check actuals
-    is(gPageA.uri.spec, CHROMEROOT + "ContentA.html", "Checking 'BrowserTab.uri' after opening");
-    is(gPageB.uri.spec, CHROMEROOT + "ContentB.html", "Checking 'BrowserTab.uri' after opening");
-
-    // check event
-    is(gTabOpenCount, 2, "Checking event handler for tab open");
-    // check cached values from TabOpen event
-    is(gPageA.uri.spec, gTabOpenPageA.uri.spec, "Checking first browser tab open is equal to page A");
-    is(gPageB.uri.spec, gTabOpenPageB.uri.spec, "Checking second browser tab open is equal to page B");
-
-    // test document access
-    var test1 = gPageA.document.getElementById("test1");
-    ok(test1, "Checking existence of element in content DOM");
-    is(test1.innerHTML, "A", "Checking content of element in content DOM");
-
-    // test moving tab
-    is(gTabMoveCount, 0, "Checking initial tab move count");
-
-    // move the tab
-    gPageA.moveToEnd();
-    is(gPageA.index, 2, "Checking index after moving tab");
-
-    // check event
-    is(gTabMoveCount, 1, "Checking event handler for tab move");
-
-    gBrowser.addProgressListener({
-      onStateChange: function (webProgress, request, stateFlags, status) {
-        info("onStateChange: " + stateFlags);
-
-        const complete = Ci.nsIWebProgressListener.STATE_IS_WINDOW +
-                         Ci.nsIWebProgressListener.STATE_IS_NETWORK +
-                         Ci.nsIWebProgressListener.STATE_STOP;
-        if ((stateFlags & complete) == complete) {
-          gBrowser.removeProgressListener(this);
-          onPageBLoadComplete();
-        }
-      },
-      onLocationChange: function() {},
-      onProgressChange: function() {},
-      onStatusChange: function() {},
-      onSecurityChange: function() {}
-    });
-
-    // test loading new content with a frame into a tab
-    // the event will be checked in onPageBLoadComplete
-    gPageB.events.addListener("load", onPageBLoadWithFrames);
-    gPageB.load(makeURI(CHROMEROOT + "ContentWithFrames.html"));
-  }
-
-  function onPageBLoadWithFrames(event) {
-    gPageLoadCount++;
-    info("onPageBLoadWithFrames: " + gPageLoadCount);
-  }
-
-  function onPageBLoadComplete() {
-    gPageB.events.removeListener("load", onPageBLoadWithFrames);
-    // check page load with frame event
-    is(gPageLoadCount, 1, "Checking load count after loading new content with a frame");
-
-    // test loading new content into a tab
-    // the event will be checked in onPageASecondLoad
-    gPageA.events.addListener("load", onPageASecondLoad);
-    gPageA.load(makeURI(CHROMEROOT + "ContentB.html"));
-  }
-
-  function onPageASecondLoad(event) {
-    gPageA.events.removeListener("load", onPageASecondLoad);
-    is(gPageA.uri.spec, CHROMEROOT + "ContentB.html", "Checking 'BrowserTab.uri' after loading new content");
-
-    // start testing closing tabs
-    // the event will be checked in afterClose
-    // use executeSoon so the onPageASecondLoad
-    // has a chance to finish first
-    gPageA.close();
-    gPageB.close();
-
-    is(gTabCloseCount, 2, "Checking that tabs closed");
-    is(activeWin.tabs.length, 1, "Checking length of 'Browser.tabs' after closing 2 tabs");
-    finish();
-  }
-}
-
-function onTabOpen(event) {
-  gTabOpenCount++;
-
-  // cache these values so we can check them later (after loading completes)
-  if (gTabOpenCount == 1)
-    gTabOpenPageA = event.data;
-
-  if (gTabOpenCount == 2)
-    gTabOpenPageB = event.data;
-}
-
-function onTabClose(event) {
-  gTabCloseCount++;
-}
-
-function onTabMove(event) {
-  gTabMoveCount++;
-}
deleted file mode 100644
--- a/suite/smile/test/smile.ini
+++ /dev/null
@@ -1,13 +0,0 @@
-[DEFAULT]
-
-support-files =
-  ContentA.html
-  ContentB.html
-  ContentWithFrames.html
-
-[browser_Application.js]
-[browser_ApplicationPrefs.js]
-[browser_ApplicationQuitting.js]
-[browser_ApplicationStorage.js]
-[browser_Bookmarks.js]
-[browser_Browser.js]