Backed out changeset 39a3044823b0 because of bad interaction with maple.
authorBenoit Girard <b56girard@gmail.com>
Fri, 02 Mar 2012 18:32:46 -0500
changeset 89290 5c3d11c465f1b029e7fbbfffe6af13d0b094a28d
parent 89289 39a3044823b01608c231a281d106018e6687a10f
child 89291 bad6d022d16d26159d5e0ecfe92fd2f4a82eba78
push id22242
push userkgupta@mozilla.com
push dateWed, 14 Mar 2012 15:19:09 +0000
treeherdermozilla-central@936ef50fa498 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone13.0a1
backs out39a3044823b01608c231a281d106018e6687a10f
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out changeset 39a3044823b0 because of bad interaction with maple.
b2g/chrome/content/commandUtil.js
b2g/chrome/content/shell.js
b2g/chrome/content/shell.xul
b2g/chrome/jar.mn
browser/app/profile/firefox.js
browser/base/content/sync/progress.xhtml
browser/base/content/test/Makefile.in
browser/base/content/test/browser_contentAreaClick.js
browser/base/content/test/browser_locationBarCommand.js
browser/base/content/utilityOverlay.js
browser/devtools/debugger/debugger-view.js
browser/devtools/debugger/debugger.css
browser/devtools/debugger/debugger.js
browser/devtools/debugger/test/browser_dbg_clean-exit.js
browser/devtools/debugger/test/browser_dbg_debuggerstatement.js
browser/devtools/debugger/test/browser_dbg_propertyview-01.js
browser/devtools/debugger/test/browser_dbg_propertyview-07.js
browser/devtools/debugger/test/browser_dbg_propertyview-08.js
browser/devtools/debugger/test/browser_dbg_script-switching.js
browser/devtools/debugger/test/browser_dbg_select-line.js
browser/devtools/debugger/test/browser_dbg_update-editor-mode.js
browser/devtools/debugger/test/head.js
browser/devtools/highlighter/inspector.html
browser/devtools/highlighter/inspector.jsm
browser/devtools/styleinspector/CssLogic.jsm
browser/devtools/styleinspector/CssRuleView.jsm
browser/devtools/styleinspector/StyleInspector.jsm
browser/devtools/styleinspector/test/Makefile.in
browser/devtools/styleinspector/test/browser_bug_592743_specificity.js
browser/devtools/styleinspector/test/browser_ruleview_editor_changedvalues.js
browser/locales/en-US/chrome/browser/devtools/gclicommands.properties
browser/locales/en-US/chrome/browser/devtools/styleinspector.properties
browser/themes/gnomestripe/devtools/alerticon-warning.png
browser/themes/gnomestripe/devtools/csshtmltree.css
browser/themes/gnomestripe/devtools/debugger.css
browser/themes/gnomestripe/devtools/htmlpanel.css
browser/themes/gnomestripe/inspector.css
browser/themes/gnomestripe/jar.mn
browser/themes/pinstripe/devtools/alerticon-warning.png
browser/themes/pinstripe/devtools/csshtmltree.css
browser/themes/pinstripe/devtools/debugger.css
browser/themes/pinstripe/devtools/htmlpanel.css
browser/themes/pinstripe/inspector.css
browser/themes/pinstripe/jar.mn
browser/themes/winstripe/Toolbar-inverted.png
browser/themes/winstripe/Toolbar.png
browser/themes/winstripe/devtools/alerticon-warning.png
browser/themes/winstripe/devtools/csshtmltree.css
browser/themes/winstripe/devtools/debugger.css
browser/themes/winstripe/devtools/htmlpanel.css
browser/themes/winstripe/inspector.css
browser/themes/winstripe/jar.mn
browser/themes/winstripe/tabbrowser/newtab.png
browser/themes/winstripe/tabview/tabview.png
config/system-headers
configure.in
content/base/public/Element.h
content/base/public/nsContentUtils.h
content/base/public/nsIContent.h
content/base/public/nsIDocument.h
content/base/public/nsINode.h
content/base/src/Makefile.in
content/base/src/nsAttrAndChildArray.cpp
content/base/src/nsAttrAndChildArray.h
content/base/src/nsAttrValue.cpp
content/base/src/nsAttrValue.h
content/base/src/nsCommentNode.cpp
content/base/src/nsContentUtils.cpp
content/base/src/nsDocument.cpp
content/base/src/nsDocument.h
content/base/src/nsGenericDOMDataNode.cpp
content/base/src/nsGenericDOMDataNode.h
content/base/src/nsGenericElement.cpp
content/base/src/nsGenericElement.h
content/base/src/nsLineBreaker.cpp
content/base/src/nsMappedAttributeElement.h
content/base/src/nsMappedAttributes.cpp
content/base/src/nsMappedAttributes.h
content/base/src/nsStyledElement.h
content/base/src/nsTextFragment.cpp
content/base/src/nsTextFragment.h
content/base/src/nsTextNode.h
content/events/src/nsEventListenerManager.cpp
content/events/src/nsEventListenerManager.h
content/html/content/src/nsFormSubmission.cpp
content/html/content/src/nsGenericHTMLElement.h
content/html/content/src/nsGenericHTMLFrameElement.cpp
content/html/content/src/nsGenericHTMLFrameElement.h
content/html/content/src/nsHTMLAnchorElement.cpp
content/html/content/src/nsHTMLAreaElement.cpp
content/html/content/src/nsHTMLDivElement.cpp
content/html/content/src/nsHTMLLinkElement.cpp
content/html/content/src/nsHTMLSpanElement.cpp
content/html/content/test/Makefile.in
content/html/content/test/test_bug615595.html
content/html/document/src/nsHTMLDocument.cpp
content/html/document/src/nsHTMLDocument.h
content/xml/content/src/nsXMLCDATASection.cpp
content/xml/content/src/nsXMLProcessingInstruction.h
content/xml/document/src/nsXMLDocument.cpp
content/xml/document/src/nsXMLDocument.h
dom/base/Navigator.cpp
dom/base/Navigator.h
dom/base/nsDOMMemoryReporter.cpp
dom/base/nsDOMMemoryReporter.h
dom/base/nsGlobalWindow.cpp
dom/base/nsGlobalWindow.h
dom/base/nsIJSEventListener.h
dom/contacts/Makefile.in
dom/plugins/base/npapi.h
dom/plugins/base/npfunctions.h
dom/plugins/base/nsIPluginInstanceOwner.idl
dom/plugins/base/nsJSNPRuntime.cpp
dom/plugins/base/nsNPAPIPlugin.cpp
dom/plugins/base/nsNPAPIPlugin.h
dom/plugins/base/nsNPAPIPluginInstance.cpp
dom/plugins/base/nsNPAPIPluginInstance.h
dom/plugins/base/nsPluginInstanceOwner.cpp
dom/plugins/base/nsPluginInstanceOwner.h
dom/plugins/base/nsPluginNativeWindowGtk2.cpp
dom/plugins/ipc/PPluginInstance.ipdl
dom/plugins/ipc/PPluginModule.ipdl
dom/plugins/ipc/PluginInstanceChild.cpp
dom/plugins/ipc/PluginInstanceChild.h
dom/plugins/ipc/PluginInstanceParent.cpp
dom/plugins/ipc/PluginInstanceParent.h
dom/plugins/ipc/PluginMessageUtils.h
dom/plugins/ipc/PluginModuleChild.cpp
dom/plugins/ipc/PluginModuleChild.h
dom/plugins/ipc/PluginModuleParent.cpp
dom/plugins/test/reftest/plugin-async-update-ref.html
dom/plugins/test/reftest/plugin-asyncbitmap-sanity.html
dom/plugins/test/reftest/plugin-asyncbitmap-update.html
dom/plugins/test/reftest/reftest.list
dom/plugins/test/testplugin/nptest.cpp
dom/plugins/test/testplugin/nptest.h
dom/plugins/test/testplugin/nptest_droid.cpp
dom/plugins/test/testplugin/nptest_gtk2.cpp
dom/plugins/test/testplugin/nptest_macosx.mm
dom/plugins/test/testplugin/nptest_os2.cpp
dom/plugins/test/testplugin/nptest_platform.h
dom/plugins/test/testplugin/nptest_qt.cpp
dom/plugins/test/testplugin/nptest_windows.cpp
dom/src/events/nsJSEventListener.h
gfx/gl/GLContext.cpp
gfx/gl/GLContext.h
gfx/gl/GLContextSymbols.h
gfx/layers/ImageLayers.cpp
gfx/layers/ImageLayers.h
gfx/layers/Layers.cpp
gfx/layers/Layers.h
gfx/layers/basic/BasicLayers.cpp
gfx/layers/d3d10/ImageLayerD3D10.cpp
gfx/layers/d3d10/ImageLayerD3D10.h
gfx/layers/d3d9/ImageLayerD3D9.cpp
gfx/layers/d3d9/ImageLayerD3D9.h
gfx/layers/opengl/ContainerLayerOGL.cpp
gfx/layers/opengl/ImageLayerOGL.cpp
gfx/layers/opengl/LayerManagerOGL.cpp
gfx/layers/opengl/LayerManagerOGL.h
gfx/layers/opengl/ThebesLayerOGL.cpp
gfx/thebes/gfxASurface.cpp
gfx/thebes/gfxASurface.h
gfx/thebes/gfxUtils.cpp
gfx/thebes/gfxUtils.h
image/src/imgLoader.cpp
ipc/glue/CrossProcessMutex.h
ipc/glue/CrossProcessMutex_unimplemented.cpp
ipc/glue/CrossProcessMutex_windows.cpp
ipc/glue/Makefile.in
ipc/testshell/XPCShellEnvironment.cpp
js/jsd/jsd_xpc.cpp
js/public/HashTable.h
js/public/Utility.h
js/src/builtin/MapObject.cpp
js/src/builtin/MapObject.h
js/src/builtin/RegExp.cpp
js/src/config/system-headers
js/src/jit-test/tests/basic/bug730888.js
js/src/jit-test/tests/basic/bug732087.js
js/src/jit-test/tests/collections/Map-constructor-1.js
js/src/jit-test/tests/collections/Map-constructor-2.js
js/src/jit-test/tests/collections/Map-constructor-3.js
js/src/jit-test/tests/collections/Map-constructor-4.js
js/src/jit-test/tests/collections/Map-constructor-5.js
js/src/jit-test/tests/collections/Map-constructor-duplicates.js
js/src/jit-test/tests/collections/Map-constructor-generator-1.js
js/src/jit-test/tests/collections/Map-constructor-generator-2.js
js/src/jit-test/tests/collections/Map-constructor-generator-3.js
js/src/jit-test/tests/collections/Map-constructor-generator-exception.js
js/src/jit-test/tests/collections/Map-delete-size.js
js/src/jit-test/tests/collections/Map-set-size.js
js/src/jit-test/tests/collections/Map-size.js
js/src/jit-test/tests/collections/Map-surfaces-1.js
js/src/jit-test/tests/collections/Map-surfaces-2.js
js/src/jit-test/tests/collections/Set-add-size.js
js/src/jit-test/tests/collections/Set-constructor-1.js
js/src/jit-test/tests/collections/Set-constructor-2.js
js/src/jit-test/tests/collections/Set-constructor-3.js
js/src/jit-test/tests/collections/Set-constructor-generator-1.js
js/src/jit-test/tests/collections/Set-constructor-generator-2.js
js/src/jit-test/tests/collections/Set-delete-size.js
js/src/jit-test/tests/collections/Set-size.js
js/src/jit-test/tests/collections/Set-surfaces-1.js
js/src/jit-test/tests/for-of/array-holes-2.js
js/src/jit-test/tests/for-of/array-holes-3.js
js/src/jit-test/tests/for-of/array-holes-4.js
js/src/jit-test/tests/for-of/array-holes-5.js
js/src/jit-test/tests/for-of/array-holes-6.js
js/src/jit-test/tests/for-of/array-holes-7.js
js/src/jit-test/tests/for-of/array-holes-slow.js
js/src/jsanalyze.cpp
js/src/jsanalyze.h
js/src/jsapi-tests/testIntern.cpp
js/src/jsapi.cpp
js/src/jsapi.h
js/src/jsarray.cpp
js/src/jscntxt.h
js/src/jscompartment.cpp
js/src/jscompartment.h
js/src/jsexn.cpp
js/src/jsfriendapi.cpp
js/src/jsfriendapi.h
js/src/jsgc.cpp
js/src/jsgc.h
js/src/jsiter.cpp
js/src/jsiter.h
js/src/jsnum.cpp
js/src/jsobj.cpp
js/src/jsproxy.cpp
js/src/jspubtd.h
js/src/jsreflect.cpp
js/src/jsstr.cpp
js/src/shell/js.cpp
js/src/shell/jsheaptools.cpp
js/src/tests/js1_8_5/extensions/jstests.list
js/src/tests/js1_8_5/extensions/reflect-parse.js
js/src/tests/js1_8_5/extensions/regress-604781-1.js
js/src/tests/js1_8_5/extensions/regress-604781-2.js
js/src/tests/js1_8_5/extensions/shell.js
js/src/vm/Stack.cpp
js/src/vm/Stack.h
js/xpconnect/shell/xpcshell.cpp
js/xpconnect/src/XPCJSRuntime.cpp
js/xpconnect/src/nsXPConnect.cpp
js/xpconnect/src/xpcprivate.h
layout/base/FrameLayerBuilder.cpp
layout/base/FrameLayerBuilder.h
layout/base/crashtests/727601.html
layout/base/crashtests/crashtests.list
layout/base/nsBidiPresUtils.cpp
layout/base/nsCSSFrameConstructor.cpp
layout/base/nsDisplayList.cpp
layout/base/nsDisplayList.h
layout/base/nsDocumentViewer.cpp
layout/base/nsLayoutDebugger.cpp
layout/base/nsLayoutUtils.cpp
layout/base/nsPresContext.cpp
layout/base/nsPresShell.cpp
layout/build/nsLayoutModule.cpp
layout/build/nsLayoutStatics.cpp
layout/forms/nsComboboxControlFrame.cpp
layout/forms/nsFileControlFrame.cpp
layout/forms/nsGfxCheckboxControlFrame.cpp
layout/forms/nsListControlFrame.cpp
layout/forms/nsTextControlFrame.cpp
layout/generic/TextOverflow.cpp
layout/generic/nsAbsoluteContainingBlock.cpp
layout/generic/nsContainerFrame.cpp
layout/generic/nsFrame.h
layout/generic/nsFrameSetFrame.cpp
layout/generic/nsGfxScrollFrame.cpp
layout/generic/nsImageFrame.cpp
layout/generic/nsImageMap.cpp
layout/generic/nsObjectFrame.cpp
layout/generic/nsSelection.cpp
layout/generic/nsSimplePageSequence.cpp
layout/generic/nsTextFrameThebes.cpp
layout/generic/nsVideoFrame.cpp
layout/generic/punct_marks.x-ccmap
layout/printing/nsPrintEngine.cpp
layout/reftests/svg/smil/sort/sort-additive-1.svg
layout/style/nsCSSRuleProcessor.cpp
layout/style/nsHTMLStyleSheet.cpp
layout/style/nsHTMLStyleSheet.h
layout/style/nsRuleNode.cpp
layout/tables/nsTableCellFrame.cpp
layout/tables/nsTableFrame.cpp
layout/xul/base/src/nsBoxFrame.cpp
layout/xul/base/src/nsBoxObject.cpp
layout/xul/base/src/nsImageBoxFrame.cpp
layout/xul/base/src/nsMenuPopupFrame.cpp
layout/xul/base/src/nsSprocketLayout.cpp
layout/xul/base/src/nsXULPopupManager.cpp
layout/xul/base/src/tree/src/nsTreeBodyFrame.cpp
mfbt/Likely.h
mobile/android/base/DoorHangerPopup.java
mobile/android/base/GeckoApp.java
mobile/android/base/GeckoAppShell.java
mobile/android/chrome/content/SelectHelper.js
mobile/android/chrome/content/aboutAddons.js
mobile/android/chrome/content/bindings.xml
mobile/android/chrome/content/browser.js
mobile/android/chrome/jar.mn
mobile/android/themes/core/content.css
mobile/xul/chrome/content/about.xhtml
modules/libpref/src/init/all.js
security/manager/ssl/public/Makefile.in
security/manager/ssl/public/nsINSSVersion.idl
security/manager/ssl/src/Makefile.in
security/manager/ssl/src/nsNSSIOLayer.h
security/manager/ssl/src/nsNSSModule.cpp
security/manager/ssl/src/nsNSSVersion.cpp
security/manager/ssl/src/nsNSSVersion.h
storage/src/mozStorageConnection.cpp
testing/peptest/tests/firefox/test_contextMenu.js
testing/talos/talos.json
toolkit/components/aboutmemory/tests/Makefile.in
toolkit/components/aboutmemory/tests/test_aboutcompartments.xul
toolkit/components/aboutmemory/tests/test_aboutmemory.xul
toolkit/components/aboutmemory/tests/test_aboutmemory2.xul
toolkit/components/aboutmemory/tests/test_memoryReporters.xul
toolkit/components/autocomplete/nsAutoCompleteController.cpp
toolkit/components/autocomplete/nsAutoCompleteController.h
toolkit/components/autocomplete/nsIAutoCompleteSearch.idl
toolkit/components/autocomplete/tests/unit/test_immediate_search.js
toolkit/components/autocomplete/tests/unit/xpcshell.ini
toolkit/components/places/Database.cpp
toolkit/components/places/nsPlacesAutoComplete.js
toolkit/components/telemetry/TelemetryPing.js
toolkit/xre/nsWindowsDllBlocklist.cpp
widget/gonk/nsAppShell.cpp
widget/gonk/nsLookAndFeel.cpp
widget/gonk/nsLookAndFeel.h
xpcom/glue/Mutex.h
xpcom/glue/nsTObserverArray.h
xulrunner/stub/Makefile.in
new file mode 100644
--- /dev/null
+++ b/b2g/chrome/content/commandUtil.js
@@ -0,0 +1,165 @@
+/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
+/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
+/* 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/. */
+
+/**
+ * Command Updater
+ */
+let CommandUpdater = {
+  /**
+   * Gets a controller that can handle a particular command.
+   * @param {string} command
+   *        A command to locate a controller for, preferring controllers that
+   *        show the command as enabled.
+   * @return {object} In this order of precedence:
+   *            - the first controller supporting the specified command
+   *              associated with the focused element that advertises the
+   *              command as ENABLED.
+   *            - the first controller supporting the specified command
+   *              associated with the global window that advertises the
+   *              command as ENABLED.
+   *            - the first controller supporting the specified command
+   *              associated with the focused element.
+   *            - the first controller supporting the specified command
+   *              associated with the global window.
+   */
+  _getControllerForCommand: function(command) {
+    try {
+      let commandDispatcher = top.document.commandDispatcher;
+      let controller = commandDispatcher.getControllerForCommand(command);
+      if (controller && controller.isCommandEnabled(command))
+        return controller;
+    }
+    catch (e) { }
+
+    let controllerCount = window.controllers.getControllerCount();
+    for (let i = 0; i < controllerCount; ++i) {
+      let current = window.controllers.getControllerAt(i);
+      try {
+        if (current.supportsCommand(command) &&
+            current.isCommandEnabled(command))
+          return current;
+      }
+      catch (e) { }
+    }
+    return controller || window.controllers.getControllerForCommand(command);
+  },
+
+  /**
+   * Updates the state of a XUL <command> element for the specified command
+   * depending on its state.
+   * @param {string} command
+   *        The name of the command to update the XUL <command> element for.
+   */
+  updateCommand: function(command) {
+    let enabled = false;
+    try {
+      let controller = this._getControllerForCommand(command);
+      if (controller) {
+        enabled = controller.isCommandEnabled(command);
+      }
+    }
+    catch (ex) { }
+
+    this.enableCommand(command, enabled);
+  },
+
+  /**
+   * Updates the state of a XUL <command> element for the specified command
+   * depending on its state.
+   * @param {string} command
+   *        The name of the command to update the XUL <command> element for.
+   */
+  updateCommands: function(_commands) {
+    let commands = _commands.split(',');
+    for (let command in commands) {
+      this.updateCommand(commands[command]);
+    }
+  },
+
+  /**
+   * Enables or disables a XUL <command> element.
+   * @param {string} command
+   *          The name of the command to enable or disable.
+   * @param {bool} enabled
+   *          true if the command should be enabled, false otherwise.
+   */
+  enableCommand: function(command, enabled) {
+    let element = document.getElementById(command);
+    if (!element)
+      return;
+
+    if (enabled)
+      element.removeAttribute('disabled');
+    else
+      element.setAttribute('disabled', 'true');
+  },
+
+  /**
+   * Performs the action associated with a specified command using the most
+   * relevant controller.
+   * @param {string} command
+   *          The command to perform.
+   */
+  doCommand: function(command) {
+    let controller = this._getControllerForCommand(command);
+    if (!controller)
+      return;
+    controller.doCommand(command);
+  },
+
+  /**
+   * Changes the label attribute for the specified command.
+   * @param {string} command
+   *          The command to update.
+   * @param {string} labelAttribute
+   *          The label value to use.
+   */
+  setMenuValue: function(command, labelAttribute) {
+    let commandNode = top.document.getElementById(command);
+    if (commandNode) {
+      let label = commandNode.getAttribute(labelAttribute);
+      if (label)
+        commandNode.setAttribute('label', label);
+    }
+  },
+
+  /**
+   * Changes the accesskey attribute for the specified command.
+   * @param {string} command
+   *          The command to update.
+   * @param {string} valueAttribute
+   *          The value attribute to use.
+   */
+  setAccessKey: function(command, valueAttribute) {
+    let commandNode = top.document.getElementById(command);
+    if (commandNode) {
+      let value = commandNode.getAttribute(valueAttribute);
+      if (value)
+        commandNode.setAttribute('accesskey', value);
+    }
+  },
+
+  /**
+   * Inform all the controllers attached to a node that an event has occurred
+   * (e.g. the tree controllers need to be informed of blur events so that they
+   * can change some of the menu items back to their default values)
+   * @param  {node} node
+   *          The node receiving the event.
+   * @param  {event} event
+   *          The event.
+   */
+  onEvent: function(node, event) {
+    let numControllers = node.controllers.getControllerCount();
+    let controller;
+
+    for (let i = 0; i < numControllers; i++) {
+      controller = node.controllers.getControllerAt(i);
+      if (controller)
+        controller.onEvent(event);
+    }
+  }
+};
+
--- a/b2g/chrome/content/shell.js
+++ b/b2g/chrome/content/shell.js
@@ -28,25 +28,21 @@ XPCOMUtils.defineLazyGetter(Services, 's
            .getService(Ci.nsIStyleSheetService);
 });
 
 XPCOMUtils.defineLazyGetter(Services, 'idle', function() {
   return Cc['@mozilla.org/widget/idleservice;1']
            .getService(Ci.nsIIdleService);
 });
 
-XPCOMUtils.defineLazyGetter(Services, 'audioManager', function() {
-  return Cc['@mozilla.org/telephony/audiomanager;1']
-           .getService(Ci.nsIAudioManager);
+XPCOMUtils.defineLazyServiceGetter(Services, 'fm', function(){
+  return Cc['@mozilla.org/focus-managr;1']
+           .getService(Ci.nsFocusManager);
 });
 
-XPCOMUtils.defineLazyServiceGetter(Services, 'fm', function() {
-  return Cc['@mozilla.org/focus-manager;1']
-           .getService(Ci.nsFocusManager);
-});
 
 #ifndef MOZ_WIDGET_GONK
 // In order to use http:// scheme instead of file:// scheme
 // (that is much more restricted) the following code kick-off
 // a local http server listening on http://127.0.0.1:7777 and
 // http://localhost:7777.
 function startupHttpd(baseDir, port) {
   const httpdURL = 'chrome://browser/content/httpd.js';
@@ -73,16 +69,19 @@ function addPermissions(urls) {
 
     permissions.forEach(function(permission) {
       Services.perms.add(uri, permission, allow);
     });
   });
 }
 
 var shell = {
+  // FIXME/bug 678695: this should be a system setting
+  preferredScreenBrightness: 1.0,
+  
   isDebug: false,
 
   get contentBrowser() {
     delete this.contentBrowser;
     return this.contentBrowser = document.getElementById('homescreen');
   },
 
   get homeURL() {
@@ -107,33 +106,23 @@ var shell = {
 
   start: function shell_init() {
     let homeURL = this.homeURL;
     if (!homeURL) {
       let msg = 'Fatal error during startup: [No homescreen found]';
       return alert(msg);
     }
 
-    ['keydown', 'keypress', 'keyup'].forEach((function listenKey(type) {
-      window.addEventListener(type, this, false, true);
-      window.addEventListener(type, this, true, true);
-    }).bind(this));
-
+    window.controllers.appendController(this);
+    window.addEventListener('keypress', this);
     window.addEventListener('MozApplicationManifest', this);
+    window.addEventListener("AppCommand", this);
     window.addEventListener('mozfullscreenchange', this);
     this.contentBrowser.addEventListener('load', this, true);
 
-    // Until the volume can be set from the content side, set it to a
-    // a specific value when the device starts. This way the front-end
-    // can display a notification when the volume change and show a volume
-    // level modified from this point.
-    try {
-      Services.audioManager.masterVolume = 0.5;
-    } catch(e) {}
-
     try {
       Services.io.offline = false;
 
       let fileScheme = 'file://';
       if (homeURL.substring(0, fileScheme.length) == fileScheme) {
 #ifndef MOZ_WIDGET_GONK
         homeURL = homeURL.replace(fileScheme, '');
 
@@ -165,116 +154,128 @@ var shell = {
     }
 
     let browser = this.contentBrowser;
     browser.homePage = homeURL;
     browser.goHome();
   },
 
   stop: function shell_stop() {
+    window.controllers.removeController(this);
+    window.removeEventListener('keypress', this);
     window.removeEventListener('MozApplicationManifest', this);
-    window.removeEventListener('mozfullscreenchange', this);
+    window.removeEventListener('AppCommand', this);
+  },
+
+  supportsCommand: function shell_supportsCommand(cmd) {
+    let isSupported = false;
+    switch (cmd) {
+      case 'cmd_close':
+        isSupported = true;
+        break;
+      default:
+        isSupported = false;
+        break;
+    }
+    return isSupported;
+  },
+
+  isCommandEnabled: function shell_isCommandEnabled(cmd) {
+    return true;
+  },
+
+  doCommand: function shell_doCommand(cmd) {
+    switch (cmd) {
+      case 'cmd_close':
+        content.postMessage('appclose', '*');
+        break;
+    }
   },
 
   toggleDebug: function shell_toggleDebug() {
     this.isDebug = !this.isDebug;
 
     if (this.isDebug) {
       Services.prefs.setBoolPref("layers.acceleration.draw-fps", true);
       Services.prefs.setBoolPref("nglayout.debug.paint_flashing", true);
     } else {
       Services.prefs.setBoolPref("layers.acceleration.draw-fps", false);
       Services.prefs.setBoolPref("nglayout.debug.paint_flashing", false);
     }
   },
  
-  changeVolume: function shell_changeVolume(delta) {
+  changeVolume: function shell_changeVolume(aDelta) {
+    let audioManager = Cc["@mozilla.org/telephony/audiomanager;1"].getService(Ci.nsIAudioManager);
+
     let steps = 10;
     try {
       steps = Services.prefs.getIntPref("media.volume.steps");
       if (steps <= 0)
         steps = 1;
     } catch(e) {}
 
-    let audioManager = Services.audioManager;
-    if (!audioManager)
-      return;
-
-    let volume = audioManager.masterVolume + delta / steps;
+    let volume = audioManager.masterVolume + aDelta / steps;
     if (volume > 1)
       volume = 1;
     if (volume < 0)
       volume = 0;
     audioManager.masterVolume = volume;
   },
 
-  forwardKeyToHomescreen: function shell_forwardKeyToHomescreen(evt) {
-    let generatedEvent = content.document.createEvent('KeyboardEvent');
-    generatedEvent.initKeyEvent(evt.type, true, true, evt.view, evt.ctrlKey,
-                                evt.altKey, evt.shiftKey, evt.metaKey,
-                                evt.keyCode, evt.charCode);
-
-    content.dispatchEvent(generatedEvent);
-  },
-
   handleEvent: function shell_handleEvent(evt) {
     switch (evt.type) {
-      case 'keydown':
-      case 'keyup':
       case 'keypress':
-        // If the home key is pressed, always forward it to the homescreen
-        if (evt.eventPhase == evt.CAPTURING_PHASE) {
-          if (evt.keyCode == evt.VK_DOM_HOME) {
-            window.setTimeout(this.forwardKeyToHomescreen, 0, evt);
-            evt.preventDefault();
-            evt.stopPropagation();
-          } 
-          return;
-        }
-
-        // If one of the other keys is used in an application and is
-        // cancelled via preventDefault, do nothing.
-        let homescreen = (evt.target.ownerDocument.defaultView == content);
-        if (!homescreen && evt.defaultPrevented)
-          return;
+        switch (evt.keyCode) {
+          case evt.DOM_VK_HOME:
+            this.sendEvent(content, 'home');
+            break;
+          case evt.DOM_VK_SLEEP:
+            this.toggleScreen();
 
-        // If one of the other keys is used in an application and is
-        // not used forward it to the homescreen
-        if (!homescreen)
-          window.setTimeout(this.forwardKeyToHomescreen, 0, evt);
-
-        // For debug purposes and because some of the APIs are not yet exposed
-        // to the content, let's react on some of the keyup events.
-        if (evt.type == 'keyup') {
-          switch (evt.keyCode) {
-            case evt.DOM_VK_F5:
-              if (Services.prefs.getBoolPref('b2g.keys.search.enabled'))
-                this.toggleDebug();
-              break;
-  
-            case evt.DOM_VK_PAGE_DOWN:
-              this.changeVolume(-1);
-              break;
-  
-            case evt.DOM_VK_PAGE_UP:
-              this.changeVolume(1);
-              break;
-          }
+            let details = {
+              'enabled': screen.mozEnabled
+            };
+            this.sendEvent(content, 'sleep', details);
+            break;
+          case evt.DOM_VK_ESCAPE:
+            if (evt.defaultPrevented)
+              return;
+            this.doCommand('cmd_close');
+            break;
+        }
+        break;
+      case 'AppCommand':
+        switch (evt.command) {
+          case 'Menu':
+            if (Services.prefs.getBoolPref('b2g.keys.menu.enabled'))
+              this.sendEvent(content, 'menu');
+            break;
+          case 'Search':
+            if (Services.prefs.getBoolPref('b2g.keys.search.enabled'))
+              this.toggleDebug();
+            break;
+          case 'VolumeUp':
+            this.changeVolume(1);
+            break;
+          case 'VolumeDown':
+            this.changeVolume(-1);
+            break;
         }
         break;
 
       case 'mozfullscreenchange':
         // When the screen goes fullscreen make sure to set the focus to the
         // main window so noboby can prevent the ESC key to get out fullscreen
         // mode
         if (document.mozFullScreen)
           Services.fm.focusedWindow = window;
         break;
       case 'load':
         this.contentBrowser.removeEventListener('load', this, true);
+        this.turnScreenOn();
 
         let chromeWindow = window.QueryInterface(Ci.nsIDOMChromeWindow);
         chromeWindow.browserDOMWindow = new nsBrowserAccess();
 
         this.sendEvent(window, 'ContentStart');
         break;
       case 'MozApplicationManifest':
         try {
@@ -311,25 +312,39 @@ var shell = {
         }
         break;
     }
   },
   sendEvent: function shell_sendEvent(content, type, details) {
     let event = content.document.createEvent('CustomEvent');
     event.initCustomEvent(type, true, true, details ? details : {});
     content.dispatchEvent(event);
+  },
+  toggleScreen: function shell_toggleScreen() {
+    if (screen.mozEnabled)
+      this.turnScreenOff();
+    else
+      this.turnScreenOn();
+  },
+  turnScreenOff: function shell_turnScreenOff() {
+    screen.mozEnabled = false;
+    screen.mozBrightness = 0.0;
+  },
+  turnScreenOn: function shell_turnScreenOn() {
+    screen.mozEnabled = true;
+    screen.mozBrightness = this.preferredScreenBrightness;
   }
 };
 
 (function PowerManager() {
   let idleHandler = {
     observe: function(subject, topic, time) {
       if (topic === "idle") {
         // TODO: Check wakelock status. See bug 697132.
-        screen.mozEnabled = false;
+        shell.turnScreenOff();
       }
     },
   }
   let idleTimeout = Services.prefs.getIntPref("power.screen.timeout");
   if (idleTimeout) {
     Services.idle.addIdleObserver(idleHandler, idleTimeout);
   }
 })();
--- a/b2g/chrome/content/shell.xul
+++ b/b2g/chrome/content/shell.xul
@@ -10,23 +10,28 @@
         windowtype="navigator:browser"
 #ifdef ANDROID
         sizemode="fullscreen"
 #endif
         style="background: black; overflow: hidden;"
         onload="shell.start();"
         onunload="shell.stop();">
 
+  <script type="application/javascript" src="chrome://browser/content/commandUtil.js"/>
   <script type="application/javascript" src="chrome://browser/content/shell.js"/>
 #ifndef MOZ_TOUCH
   <script type="application/javascript" src="chrome://browser/content/touch.js"/>
 #endif
 #ifndef MOZ_WIDGET_GONK
   <script type="application/javascript" src="chrome://browser/content/httpd.js"/>
 #endif
 
+  <commandset id="mainCommandSet">
+    <command id="cmd_close" oncommand="CommandUpdater.doCommand(this.id);"/>
+  </commandset>
+
   <browser id="homescreen"
            type="content-primary"
            flex="1"
            style="overflow: hidden;"
            src="data:text/html,%3C!DOCTYPE html>%3Cbody style='background:black;'>"/>
 </window>
 
--- a/b2g/chrome/jar.mn
+++ b/b2g/chrome/jar.mn
@@ -4,21 +4,22 @@ chrome.jar:
 % content branding %content/branding/
 % content browser %content/
 
 * content/shell.xul                     (content/shell.xul)
 * content/shell.js                      (content/shell.js)
 #ifndef MOZ_TOUCH
   content/touch.js                      (content/touch.js)
 #endif
+  content/commandUtil.js                (content/commandUtil.js)
 #ifndef MOZ_WIDGET_GONK
   content/httpd.js                      (content/httpd.js)
 #endif
   content/webapi.js                     (content/webapi.js)
   content/content.css                   (content/content.css)
 
 % override chrome://global/content/netError.xhtml chrome://browser/content/netError.xhtml
 % override chrome://global/skin/netError.css chrome://browser/content/netError.css
   content/netError.xhtml                (content/netError.xhtml)
   content/netError.css                  (content/netError.css)
   content/images/errorpage-larry-black.png (content/images/errorpage-larry-black.png)
   content/images/errorpage-larry-white.png (content/images/errorpage-larry-white.png)
-  content/images/errorpage-warning.png (content/images/errorpage-warning.png)
+  content/images/errorpage-warning.png (content/images/errorpage-warning.png)
\ No newline at end of file
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -315,18 +315,16 @@ pref("browser.urlbar.match.url", "@");
 //          64: javascript, 128: tabs
 // E.g., 0 = show all results (no filtering), 1 = only visited pages in history,
 // 2 = only bookmarks, 3 = visited bookmarks, 1+16 = history matching in the url
 pref("browser.urlbar.default.behavior", 0);
 
 pref("browser.urlbar.formatting.enabled", true);
 pref("browser.urlbar.trimURLs", true);
 
-pref("browser.altClickSave", false);
-
 // Number of milliseconds to wait for the http headers (and thus
 // the Content-Disposition filename) before giving up and falling back to 
 // picking a filename without that info in hand so that the user sees some
 // feedback from their action.
 pref("browser.download.saveLinkAsFilenameTimeout", 4000);
 
 pref("browser.download.useDownloadDir", true);
 
--- a/browser/base/content/sync/progress.xhtml
+++ b/browser/base/content/sync/progress.xhtml
@@ -43,35 +43,32 @@
     "DTD/xhtml1-strict.dtd">
   %htmlDTD;
   <!ENTITY % syncProgressDTD
     SYSTEM "chrome://browser/locale/syncProgress.dtd">
     %syncProgressDTD;
   <!ENTITY % syncSetupDTD
     SYSTEM "chrome://browser/locale/syncSetup.dtd">
     %syncSetupDTD;
-  <!ENTITY % globalDTD 
-    SYSTEM "chrome://global/locale/global.dtd">
-    %globalDTD;
 ]>
 
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <title>&syncProgress.pageTitle;</title>
 
     <link rel="stylesheet" type="text/css" media="all"
           href="chrome://browser/skin/syncProgress.css"/>
 
     <link rel="icon" type="image/png" id="favicon"
           href="chrome://browser/skin/sync-16.png"/>
 
     <script type="text/javascript;version=1.8"
             src="chrome://browser/content/sync/progress.js"/>
   </head>
-  <body onload="onLoad(event)" onunload="onUnload(event)" dir="&locale.dir;">
+  <body onload="onLoad(event)" onunload="onUnload(event)">
     <title>&setup.successPage.title;</title>
     <div id="floatingBox" class="main-content">
       <div id="title">
         <h1>&setup.successPage.title;</h1>
       </div>
       <div id="successLogo">
         <img id="brandSyncLogo" src="chrome://browser/skin/sync-128.png" alt="&syncProgress.logoAltText;" />
       </div>
--- a/browser/base/content/test/Makefile.in
+++ b/browser/base/content/test/Makefile.in
@@ -88,16 +88,17 @@ endif
 #
 # browser_sanitizeDialog_treeView.js is disabled until the tree view is added
 # back to the clear recent history dialog (sanitize.xul), if it ever is (bug
 # 480169)
 
 # browser_drag.js is disabled, as it needs to be updated for the new behavior from bug 320638.
 
 # browser_bug321000.js is disabled because newline handling is shaky (bug 592528)
+# browser_urlbarAutoFillTrimURLs.js is disabled till bug 720792 is fixed
 
 _BROWSER_FILES = \
                  head.js \
                  browser_typeAheadFind.js \
                  browser_keywordSearch.js \
                  browser_allTabsPanel.js \
                  browser_alltabslistener.js \
                  browser_bug304198.js \
@@ -217,17 +218,16 @@ endif
                  browser_scope.js \
                  browser_selectTabAtIndex.js \
                  browser_tab_dragdrop.js \
                  browser_tab_dragdrop2.js \
                  browser_tab_dragdrop2_frame1.xul \
                  browser_tabfocus.js \
                  browser_tabs_isActive.js \
                  browser_tabs_owner.js \
-                 browser_urlbarAutoFillTrimURLs.js \
                  browser_urlbarCopying.js \
                  browser_urlbarEnter.js \
                  browser_urlbarRevert.js \
                  browser_urlbarTrimURLs.js \
                  browser_urlHighlight.js \
                  browser_visibleFindSelection.js \
                  browser_visibleTabs.js \
                  browser_visibleTabs_contextMenu.js \
--- a/browser/base/content/test/browser_contentAreaClick.js
+++ b/browser/base/content/test/browser_contentAreaClick.js
@@ -68,37 +68,29 @@ let gTests = [
     expectedInvokedMethods: [ "urlSecurityCheck", "openLinkIn" ],
     preventDefault: true,
   },
 
   // The next test was once handling feedService.forcePreview().  Now it should
   // just be like Alt click.
   {
     desc: "Shift+Alt left click",
-    setup: function() {
-      gPrefService.setBoolPref("browser.altClickSave", true);
-    },
-    clean: function() {
-      gPrefService.clearUserPref("browser.altClickSave"); 
-    },
+    setup: function() {},
+    clean: function() {},
     event: { shiftKey: true,
              altKey: true },
     targets: [ "commonlink", "maplink" ],
     expectedInvokedMethods: [ "gatherTextUnder", "saveURL" ],
     preventDefault: true,
   },
 
   {
     desc: "Shift+Alt left click on XLinks",
-    setup: function() {
-      gPrefService.setBoolPref("browser.altClickSave", true);
-    },
-    clean: function() {
-      gPrefService.clearUserPref("browser.altClickSave"); 
-    },
+    setup: function() {},
+    clean: function() {},
     event: { shiftKey: true,
              altKey: true },
     targets: [ "mathxlink", "svgxlink"],
     expectedInvokedMethods: [ "saveURL" ],
     preventDefault: true,
   },
 
   {
@@ -108,36 +100,28 @@ let gTests = [
     event: { shiftKey: true },
     targets: [ "commonlink", "mathxlink", "svgxlink", "maplink" ],
     expectedInvokedMethods: [ "urlSecurityCheck", "openLinkIn" ],
     preventDefault: true,
   },
 
   {
     desc: "Alt click",
-    setup: function() {
-      gPrefService.setBoolPref("browser.altClickSave", true);
-    },
-    clean: function() {
-      gPrefService.clearUserPref("browser.altClickSave"); 
-    },
+    setup: function() {},
+    clean: function() {},
     event: { altKey: true },
     targets: [ "commonlink", "maplink" ],
     expectedInvokedMethods: [ "gatherTextUnder", "saveURL" ],
     preventDefault: true,
   },
 
   {
     desc: "Alt click on XLinks",
-    setup: function() {
-      gPrefService.setBoolPref("browser.altClickSave", true);
-    },
-    clean: function() {
-      gPrefService.clearUserPref("browser.altClickSave"); 
-    },
+    setup: function() {},
+    clean: function() {},
     event: { altKey: true },
     targets: [ "mathxlink", "svgxlink" ],
     expectedInvokedMethods: [ "saveURL" ],
     preventDefault: true,
   },
 
   {
     desc: "Panel click",
@@ -160,33 +144,39 @@ let gTests = [
   },
 
   {
     desc: "Simple middle click openwin",
     setup: function() {
       gPrefService.setBoolPref("browser.tabs.opentabfor.middleclick", false);
     },
     clean: function() {
-      gPrefService.clearUserPref("browser.tabs.opentabfor.middleclick");
+      try {
+        gPrefService.clearUserPref("browser.tabs.opentabfor.middleclick");
+      } catch(ex) {}
     },
     event: { button: 1 },
     targets: [ "commonlink", "mathxlink", "svgxlink", "maplink" ],
     expectedInvokedMethods: [ "urlSecurityCheck", "openLinkIn" ],
     preventDefault: true,
   },
 
   {
     desc: "Middle mouse paste",
     setup: function() {
       gPrefService.setBoolPref("middlemouse.contentLoadURL", true);
       gPrefService.setBoolPref("general.autoScroll", false);
     },
     clean: function() {
-      gPrefService.clearUserPref("middlemouse.contentLoadURL");
-      gPrefService.clearUserPref("general.autoScroll");
+      try {
+        gPrefService.clearUserPref("middlemouse.contentLoadURL");
+      } catch(ex) {}
+      try {
+        gPrefService.clearUserPref("general.autoScroll");
+      } catch(ex) {}
     },
     event: { button: 1 },
     targets: [ "emptylink" ],
     expectedInvokedMethods: [ "middleMousePaste" ],
     preventDefault: true,
   },
 
 ];
--- a/browser/base/content/test/browser_locationBarCommand.js
+++ b/browser/base/content/test/browser_locationBarCommand.js
@@ -4,22 +4,16 @@
 const TEST_VALUE = "example.com";
 const START_VALUE = "example.org";
 
 let gFocusManager = Cc["@mozilla.org/focus-manager;1"].
                     getService(Ci.nsIFocusManager);
 
 function test() {
   waitForExplicitFinish();
-
-  registerCleanupFunction(function () {
-    Services.prefs.clearUserPref("browser.altClickSave");
-  });
-  Services.prefs.setBoolPref("browser.altClickSave", true);
-
   runAltLeftClickTest();
 }
 
 // Monkey patch saveURL to avoid dealing with file save code paths
 var oldSaveURL = saveURL;
 saveURL = function() {
   ok(true, "SaveURL was called");
   is(gURLBar.value, "", "Urlbar reverted to original value");
--- a/browser/base/content/utilityOverlay.js
+++ b/browser/base/content/utilityOverlay.js
@@ -142,17 +142,17 @@ function whereToOpenLink( e, ignoreButto
 
 #ifdef XP_MACOSX
   if (meta || (middle && middleUsesTabs))
 #else
   if (ctrl || (middle && middleUsesTabs))
 #endif
     return shift ? "tabshifted" : "tab";
 
-  if (alt && getBoolPref("browser.altClickSave", false))
+  if (alt)
     return "save";
 
   if (shift || (middle && !middleUsesTabs))
     return "window";
 
   return "current";
 }
 
--- a/browser/devtools/debugger/debugger-view.js
+++ b/browser/devtools/debugger/debugger-view.js
@@ -145,45 +145,45 @@ DebuggerView.Stackframes = {
 
   /**
    * Adds a frame to the stackframes container.
    * If the frame already exists (was previously added), null is returned.
    * Otherwise, the newly created element is returned.
    *
    * @param number aDepth
    *        The frame depth specified by the debugger.
+   * @param string aFrameIdText
+   *        The id to be displayed in the list.
    * @param string aFrameNameText
    *        The name to be displayed in the list.
-   * @param string aFrameDetailsText
-   *        The details to be displayed in the list.
    * @return object
    *         The newly created html node representing the added frame.
    */
-  addFrame: function DVF_addFrame(aDepth, aFrameNameText, aFrameDetailsText) {
+  addFrame: function DVF_addFrame(aDepth, aFrameIdText, aFrameNameText) {
     // make sure we don't duplicate anything
     if (document.getElementById("stackframe-" + aDepth)) {
       return null;
     }
 
     let frame = document.createElement("div");
+    let frameId = document.createElement("span");
     let frameName = document.createElement("span");
-    let frameDetails = document.createElement("span");
 
     // create a list item to be added to the stackframes container
     frame.id = "stackframe-" + aDepth;
     frame.className = "dbg-stackframe list-item";
 
-    // this list should display the name and details for the frame
+    // this list should display the id and name of the frame
+    frameId.className = "dbg-stackframe-id";
     frameName.className = "dbg-stackframe-name";
-    frameDetails.className = "dbg-stackframe-details";
+    frameId.appendChild(document.createTextNode(aFrameIdText));
     frameName.appendChild(document.createTextNode(aFrameNameText));
-    frameDetails.appendChild(document.createTextNode(aFrameDetailsText));
 
+    frame.appendChild(frameId);
     frame.appendChild(frameName);
-    frame.appendChild(frameDetails);
 
     this._frames.appendChild(frame);
 
     // return the element for later use if necessary
     return frame;
   },
 
   /**
@@ -1069,41 +1069,25 @@ DebuggerView.Scripts = {
   },
 
   /**
    * Checks whether the script with the specified URL is among the scripts
    * known to the debugger and shown in the list.
    *
    * @param string aUrl
    *        The script URL.
-   * @return boolean
    */
   contains: function DVS_contains(aUrl) {
     if (this._scripts.getElementsByAttribute("value", aUrl).length > 0) {
       return true;
     }
     return false;
   },
 
   /**
-   * Checks whether the script with the specified label is among the scripts
-   * known to the debugger and shown in the list.
-   *
-   * @param string aLabel
-   *        The script label.
-   * @return boolean
-   */
-  containsLabel: function DVS_containsLabel(aLabel) {
-    if (this._scripts.getElementsByAttribute("label", aLabel).length > 0) {
-      return true;
-    }
-    return false;
-  },
-
-  /**
    * Checks whether the script with the specified URL is selected in the list.
    *
    * @param string aUrl
    *        The script URL.
    */
   isSelected: function DVS_isSelected(aUrl) {
     if (this._scripts.selectedItem &&
         this._scripts.selectedItem.value == aUrl) {
@@ -1120,40 +1104,40 @@ DebuggerView.Scripts = {
    */
    selectScript: function DVS_selectScript(aUrl) {
     for (let i = 0; i < this._scripts.itemCount; i++) {
       if (this._scripts.getItemAtIndex(i).value == aUrl) {
         this._scripts.selectedIndex = i;
         break;
       }
     }
-  },
+   },
 
   /**
    * Adds a script to the scripts container.
    * If the script already exists (was previously added), null is returned.
    * Otherwise, the newly created element is returned.
    *
-   * @param string aLabel
-   *        The simplified script location to be shown.
+   * @param string aUrl
+   *        The script url.
    * @param string aScript
    *        The source script.
+   * @param string aScriptNameText
+   *        Optional, title displayed instead of url.
    * @return object
    *         The newly created html node representing the added script.
    */
-  addScript: function DVS_addScript(aLabel, aScript) {
+  addScript: function DVS_addScript(aUrl, aSource, aScriptNameText) {
     // make sure we don't duplicate anything
-    if (this.containsLabel(aLabel)) {
+    if (this.contains(aUrl)) {
       return null;
     }
 
-    let script = this._scripts.appendItem(aLabel, aScript.url);
-    script.setAttribute("tooltiptext", aScript.url);
-    script.setUserData("sourceScript", aScript, null);
-
+    let script = this._scripts.appendItem(aScriptNameText || aUrl, aUrl);
+    script.setUserData("sourceScript", aSource, null);
     this._scripts.selectedItem = script;
     return script;
   },
 
   /**
    * Returns the list of URIs for scripts in the page.
    */
   scriptLocations: function DVS_scriptLocations() {
--- a/browser/devtools/debugger/debugger.css
+++ b/browser/devtools/debugger/debugger.css
@@ -62,36 +62,16 @@
 #stack {
   width: 200px;
 }
 
 #stackframes {
   overflow: auto;
 }
 
-.dbg-stackframe {
-  display: block;
-}
-
-.dbg-stackframe-name {
-  float: left;
-}
-
-.dbg-stackframe-details {
-  float: right;
-}
-
-.dbg-stackframe-name:-moz-locale-dir(rtl) {
-  float: right;
-}
-
-.dbg-stackframe-details:-moz-locale-dir(rtl) {
-  float: left;
-}
-
 /**
  * Properties elements
  */
 
 #properties {
   width: 250px;
 }
 
--- a/browser/devtools/debugger/debugger.js
+++ b/browser/devtools/debugger/debugger.js
@@ -365,22 +365,20 @@ var StackFrames = {
   /**
    * Adds the specified stack frame to the list.
    *
    * @param Debugger.Frame aFrame
    *        The new frame to add.
    */
   _addFramePanel: function SF_addFramePanel(aFrame) {
     let depth = aFrame.depth;
-    let label = SourceScripts._getScriptLabel(aFrame.where.url);
+    let idText = "#" + aFrame.depth + " ";
+    let nameText = this._frameTitle(aFrame);
 
-    let startText = this._frameTitle(aFrame);
-    let endText = label + ":" + aFrame.where.line;
-
-    let panel = DebuggerView.Stackframes.addFrame(depth, startText, endText);
+    let panel = DebuggerView.Stackframes.addFrame(depth, idText, nameText);
 
     if (panel) {
       panel.stackFrame = aFrame;
     }
   },
 
   /**
    * Loads more stack frames from the debugger server cache.
@@ -394,17 +392,17 @@ var StackFrames = {
    * Create a textual representation for the stack frame specified, for
    * displaying in the stack frame list.
    *
    * @param Debugger.Frame aFrame
    *        The stack frame to label.
    */
   _frameTitle: function SF_frameTitle(aFrame) {
     if (aFrame.type == "call") {
-      return aFrame["calleeName"] ? aFrame["calleeName"] : "(anonymous)";
+      return aFrame["calleeName"] ? aFrame["calleeName"] + "()" : "(anonymous)";
     }
 
     return "(" + aFrame.type + ")";
   }
 };
 
 StackFrames.onPaused = StackFrames.onPaused.bind(StackFrames);
 StackFrames.onFrames = StackFrames.onFrames.bind(StackFrames);
@@ -413,33 +411,31 @@ StackFrames.onClick = StackFrames.onClic
 
 /**
  * Keeps the source script list up-to-date, using the thread client's
  * source script cache.
  */
 var SourceScripts = {
   pageSize: 25,
   activeThread: null,
-  _labelsCache: null,
 
   /**
    * Watch a given thread client.
    * @param object aThreadClient
    *        The thread client.
    * @param function aCallback
    *        The next function in the initialization sequence.
    */
   connect: function SS_connect(aThreadClient, aCallback) {
     DebuggerView.Scripts.addChangeListener(this.onChange);
 
     this.activeThread = aThreadClient;
     aThreadClient.addListener("paused", this.onPaused);
     aThreadClient.addListener("scriptsadded", this.onScripts);
     aThreadClient.addListener("scriptscleared", this.onScriptsCleared);
-    this.clearLabelsCache();
     this.onScriptsCleared();
     aCallback && aCallback();
   },
 
   /**
    * Disconnect from the client.
    */
   disconnect: function TS_disconnect() {
@@ -508,96 +504,36 @@ var SourceScripts = {
       if (/javascript/.test(aContentType)) {
         window.editor.setMode(SourceEditor.MODES.JAVASCRIPT);
       } else {
         window.editor.setMode(SourceEditor.MODES.HTML);
       }
       return;
     }
 
-    if (this._trimUrlQuery(aUrl).slice(-3) == ".js") {
+    let url = aUrl;
+    // Trim the query part.
+    let q = url.indexOf('?');
+    if (q > -1) {
+      url = url.slice(0, q);
+    }
+
+    if (url.slice(-3) == ".js") {
       window.editor.setMode(SourceEditor.MODES.JAVASCRIPT);
     } else {
       window.editor.setMode(SourceEditor.MODES.HTML);
     }
   },
 
   /**
-   * Trims the query part of a url string, if necessary.
-   *
-   * @param string aUrl
-   *        The script url.
-   * @return string
-   */
-  _trimUrlQuery: function SS_trimUrlQuery(aUrl) {
-    let q = aUrl.indexOf('?');
-    if (q > -1) {
-      return aUrl.slice(0, q);
-    }
-    return aUrl;
-  },
-
-  /**
-   * Gets a unique, simplified label from a script url.
-   * ex: a). ici://some.address.com/random/subrandom/
-   *     b). ni://another.address.org/random/subrandom/page.html
-   *     c). san://interesting.address.gro/random/script.js
-   *     d). si://interesting.address.moc/random/another/script.js
-   * =>
-   *     a). subrandom/
-   *     b). page.html
-   *     c). script.js
-   *     d). another/script.js
-   *
-   * @param string aUrl
-   *        The script url.
-   * @param string aHref
-   *        The content location href to be used. If unspecified, it will
-   *        defalult to debugged panrent window location.
-   * @return string
-   *         The simplified label.
-   */
-  _getScriptLabel: function SS_getScriptLabel(aUrl, aHref) {
-    let url = this._trimUrlQuery(aUrl);
-
-    if (this._labelsCache[url]) {
-      return this._labelsCache[url];
-    }
-
-    let href = aHref || window.parent.content.location.href;
-    let pathElements = url.split("/");
-    let label = pathElements.pop() || (pathElements.pop() + "/");
-
-    // if the label as a leaf name is alreay present in the scripts list
-    if (DebuggerView.Scripts.containsLabel(label)) {
-      label = url.replace(href.substring(0, href.lastIndexOf("/") + 1), "");
-
-      // if the path/to/script is exactly the same, we're in different domains
-      if (DebuggerView.Scripts.containsLabel(label)) {
-        label = url;
-      }
-    }
-
-    return this._labelsCache[url] = label;
-  },
-
-  /**
-   * Clears the labels cache, populated by SS_getScriptLabel().
-   * This should be done every time the content location changes.
-   */
-  clearLabelsCache: function SS_clearLabelsCache() {
-    this._labelsCache = {};
-  },
-
-  /**
    * Add the specified script to the list and display it in the editor if the
    * editor is empty.
    */
   _addScript: function SS_addScript(aScript) {
-    DebuggerView.Scripts.addScript(this._getScriptLabel(aScript.url), aScript);
+    DebuggerView.Scripts.addScript(aScript.url, aScript);
 
     if (window.editor.getCharCount() == 0) {
       this._showScript(aScript);
     }
   },
 
   /**
    * Load the editor with the script text if available, otherwise fire an event
--- a/browser/devtools/debugger/test/browser_dbg_clean-exit.js
+++ b/browser/devtools/debugger/test/browser_dbg_clean-exit.js
@@ -5,17 +5,19 @@
 
 // Test that closing a tab with the debugger in a paused state exits cleanly.
 
 var gPane = null;
 var gTab = null;
 var gDebuggee = null;
 var gDebugger = null;
 
-const DEBUGGER_TAB_URL = EXAMPLE_URL + "browser_dbg_debuggerstatement.html";
+const DEBUGGER_TAB_URL = "http://example.com/browser/browser/devtools/" +
+                         "debugger/test/" +
+                         "browser_dbg_debuggerstatement.html";
 
 function test() {
   debug_tab_pane(DEBUGGER_TAB_URL, function(aTab, aDebuggee, aPane) {
     gTab = aTab;
     gDebuggee = aDebuggee;
     gPane = aPane;
     gDebugger = gPane.debuggerWindow;
 
--- a/browser/devtools/debugger/test/browser_dbg_debuggerstatement.js
+++ b/browser/devtools/debugger/test/browser_dbg_debuggerstatement.js
@@ -3,17 +3,19 @@
  * Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
 // Tests the behavior of the debugger statement.
 
 var gClient = null;
 var gTab = null;
-const DEBUGGER_TAB_URL = EXAMPLE_URL + "browser_dbg_debuggerstatement.html";
+const DEBUGGER_TAB_URL = "http://example.com/browser/browser/devtools/" +
+                         "debugger/test/" +
+                         "browser_dbg_debuggerstatement.html";
 
 function test()
 {
   let transport = DebuggerServer.connectPipe();
   gClient = new DebuggerClient(transport);
   gClient.connect(function(aType, aTraits) {
     gTab = addTab(DEBUGGER_TAB_URL, function() {
       attach_tab_actor_for_url(gClient, DEBUGGER_TAB_URL, function(actor, response) {
--- a/browser/devtools/debugger/test/browser_dbg_propertyview-01.js
+++ b/browser/devtools/debugger/test/browser_dbg_propertyview-01.js
@@ -78,65 +78,12 @@ function testSimpleCall() {
     }}, 0);
   });
 
   gDebuggee.simpleCall();
 }
 
 function resumeAndFinish() {
   gDebugger.StackFrames.activeThread.resume(function() {
-    let vs = gDebugger.DebuggerView.Scripts;
-    let ss = gDebugger.SourceScripts;
-
-    is(ss._trimUrlQuery("a/b/c.d?test=1&random=4"), "a/b/c.d",
-      "Trimming the url query isn't done properly.");
-
-    let urls = [
-      { href: "ici://some.address.com/random/", leaf: "subrandom/" },
-      { href: "ni://another.address.org/random/subrandom/", leaf: "page.html" },
-      { href: "san://interesting.address.gro/random/", leaf: "script.js" },
-      { href: "si://interesting.address.moc/random/", leaf: "script.js" },
-      { href: "si://interesting.address.moc/random/", leaf: "x/script.js" },
-      { href: "si://interesting.address.moc/random/", leaf: "x/y/script.js?a=1" },
-      { href: "si://interesting.address.moc/random/x/", leaf: "y/script.js?a=1&b=2" },
-      { href: "si://interesting.address.moc/random/x/y/", leaf: "script.js?a=1&b=2&c=3" }
-    ];
-
-    vs._scripts.removeEventListener("select", vs._onScriptsChange, false);
-
-    urls.forEach(function(url) {
-      executeSoon(function() {
-        let loc = url.href + url.leaf;
-        vs.addScript(ss._getScriptLabel(loc, url.href), { url: loc });
-      });
-    });
-
-    executeSoon(function() {
-      for (let i = 0; i < vs._scripts.itemCount; i++) {
-        let lab = vs._scripts.getItemAtIndex(i).getAttribute("label");
-        let loc = urls[i].href + urls[i].leaf;
-
-        info("label: " + i + " " + lab);
-        ok(vs.contains(loc), "Script url is incorrect: " + loc);
-      }
-
-      ok(gDebugger.DebuggerView.Scripts.containsLabel("subrandom/"),
-        "Script (0) label is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.containsLabel("page.html"),
-        "Script (1) label is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.containsLabel("script.js"),
-        "Script (2) label is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.containsLabel("si://interesting.address.moc/random/script.js"),
-        "Script (3) label is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.containsLabel("x/script.js"),
-        "Script (4) label is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.containsLabel("x/y/script.js"),
-        "Script (5) label is incorrect.");
-
-      is(vs._scripts.itemCount, 6,
-        "Got too many script items in the list!");
-
-
-      removeTab(gTab);
-      finish();
-    });
+    removeTab(gTab);
+    finish();
   });
 }
--- a/browser/devtools/debugger/test/browser_dbg_propertyview-07.js
+++ b/browser/devtools/debugger/test/browser_dbg_propertyview-07.js
@@ -1,17 +1,18 @@
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Make sure that the property view displays function parameters.
  */
 
-const TAB_URL = EXAMPLE_URL + "browser_dbg_frame-parameters.html";
+const TAB_URL = "http://example.com/browser/browser/devtools/debugger/test/" +
+                "browser_dbg_frame-parameters.html";
 
 var gPane = null;
 var gTab = null;
 var gDebuggee = null;
 var gDebugger = null;
 
 function test()
 {
--- a/browser/devtools/debugger/test/browser_dbg_propertyview-08.js
+++ b/browser/devtools/debugger/test/browser_dbg_propertyview-08.js
@@ -1,17 +1,18 @@
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Make sure that the property view displays the properties of objects.
  */
 
-const TAB_URL = EXAMPLE_URL + "browser_dbg_frame-parameters.html";
+const TAB_URL = "http://example.com/browser/browser/devtools/debugger/test/" +
+                "browser_dbg_frame-parameters.html";
 
 var gPane = null;
 var gTab = null;
 var gDebuggee = null;
 var gDebugger = null;
 
 function test()
 {
--- a/browser/devtools/debugger/test/browser_dbg_script-switching.js
+++ b/browser/devtools/debugger/test/browser_dbg_script-switching.js
@@ -1,18 +1,18 @@
 /* vim:set ts=2 sw=2 sts=2 et: */
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Make sure that switching the displayed script in the UI works as advertised.
  */
 
-const TAB_URL = EXAMPLE_URL + "browser_dbg_script-switching.html";
-
+const TAB_URL = "http://example.com/browser/browser/devtools/debugger/" +
+                "test/browser_dbg_script-switching.html";
 let tempScope = {};
 Cu.import("resource:///modules/source-editor.jsm", tempScope);
 let SourceEditor = tempScope.SourceEditor;
 
 var gPane = null;
 var gTab = null;
 var gDebuggee = null;
 var gDebugger = null;
@@ -35,34 +35,16 @@ function testScriptsDisplay() {
     Services.tm.currentThread.dispatch({ run: function() {
       gScripts = gDebugger.DebuggerView.Scripts._scripts;
 
       is(gDebugger.StackFrames.activeThread.state, "paused",
         "Should only be getting stack frames while paused.");
 
       is(gScripts.itemCount, 2, "Found the expected number of scripts.");
 
-      for (let i = 0; i < gScripts.itemCount; i++) {
-        info("label: " + i + " " + gScripts.getItemAtIndex(i).getAttribute("label"));
-      }
-
-      let label1 = "test-script-switching-01.js";
-      let label2 = "test-script-switching-02.js";
-
-      ok(gDebugger.DebuggerView.Scripts.contains(EXAMPLE_URL +
-        label1), "First script url is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.contains(EXAMPLE_URL +
-        label2), "Second script url is incorrect.");
-
-      ok(gDebugger.DebuggerView.Scripts.containsLabel(
-        label1), "First script label is incorrect.");
-      ok(gDebugger.DebuggerView.Scripts.containsLabel(
-        label2), "Second script label is incorrect.");
-
-
       ok(gDebugger.editor.getText().search(/debugger/) != -1,
         "The correct script was loaded initially.");
 
       gDebugger.editor.addEventListener(SourceEditor.EVENTS.TEXT_CHANGED,
                                         function onChange() {
         gDebugger.editor.removeEventListener(SourceEditor.EVENTS.TEXT_CHANGED,
                                              onChange);
         testSwitchPaused();
--- a/browser/devtools/debugger/test/browser_dbg_select-line.js
+++ b/browser/devtools/debugger/test/browser_dbg_select-line.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Make sure that selecting a stack frame loads the right script in the editor
  * pane and highlights the proper line.
  */
 
-const TAB_URL = EXAMPLE_URL + "browser_dbg_script-switching.html";
-
+const TAB_URL = "http://example.com/browser/browser/devtools/debugger/" +
+                "test/browser_dbg_script-switching.html";
 let tempScope = {};
 Cu.import("resource:///modules/source-editor.jsm", tempScope);
 let SourceEditor = tempScope.SourceEditor;
 
 var gPane = null;
 var gTab = null;
 var gDebuggee = null;
 var gDebugger = null;
--- a/browser/devtools/debugger/test/browser_dbg_update-editor-mode.js
+++ b/browser/devtools/debugger/test/browser_dbg_update-editor-mode.js
@@ -1,18 +1,18 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 /**
  * Make sure that updating the editor mode sets the right highlighting engine,
  * and script URIs with extra query parameters also get the right engine.
  */
 
-const TAB_URL = EXAMPLE_URL + "browser_dbg_update-editor-mode.html";
-
+const TAB_URL = "http://example.com/browser/browser/devtools/debugger/" +
+                "test/browser_dbg_update-editor-mode.html";
 let tempScope = {};
 Cu.import("resource:///modules/source-editor.jsm", tempScope);
 let SourceEditor = tempScope.SourceEditor;
 
 var gPane = null;
 var gTab = null;
 var gDebuggee = null;
 var gDebugger = null;
--- a/browser/devtools/debugger/test/head.js
+++ b/browser/devtools/debugger/test/head.js
@@ -9,21 +9,21 @@ let tempScope = {};
 Cu.import("resource:///modules/devtools/dbg-server.jsm", tempScope);
 Cu.import("resource:///modules/devtools/dbg-client.jsm", tempScope);
 Cu.import("resource:///modules/Services.jsm", tempScope);
 let DebuggerServer = tempScope.DebuggerServer;
 let DebuggerTransport = tempScope.DebuggerTransport;
 let DebuggerClient = tempScope.DebuggerClient;
 let Services = tempScope.Services;
 
-const EXAMPLE_URL = "http://example.com/browser/browser/devtools/debugger/test/";
+const TAB1_URL = "http://example.com/browser/browser/devtools/debugger/test/browser_dbg_tab1.html";
 
-const TAB1_URL = EXAMPLE_URL + "browser_dbg_tab1.html";
-const TAB2_URL = EXAMPLE_URL + "browser_dbg_tab2.html";
-const STACK_URL = EXAMPLE_URL + "browser_dbg_stack.html";
+const TAB2_URL = "http://example.com/browser/browser/devtools/debugger/test/browser_dbg_tab2.html";
+
+const STACK_URL = "http://example.com/browser/browser/devtools/debugger/test/browser_dbg_stack.html";
 
 if (!DebuggerServer.initialized) {
   DebuggerServer.init();
   DebuggerServer.addBrowserActors();
 }
 
 waitForExplicitFinish();
 
--- a/browser/devtools/highlighter/inspector.html
+++ b/browser/devtools/highlighter/inspector.html
@@ -1,14 +1,14 @@
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
   "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
 
 <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
-  <link rel="stylesheet" href="chrome://browser/skin/devtools/htmlpanel.css" type="text/css"/>
+  <link rel="stylesheet" href="chrome://browser/skin/inspector.css" type="text/css"/>
 </head>
 <body role="application">
   <div id="attribute-editor">
     <input id="attribute-editor-input" />
   </div>
 </body>
 </html>
--- a/browser/devtools/highlighter/inspector.jsm
+++ b/browser/devtools/highlighter/inspector.jsm
@@ -865,18 +865,17 @@ InspectorUI.prototype = {
    * Delete the selected node. Called via the Inspector:DeleteNode command.
    */
   deleteNode: function IUI_deleteNode()
   {
     let selection = this.selection;
     let parent = this.selection.parentNode;
 
     // remove the node from the treepanel
-    if (this.treePanel.isOpen())
-      this.treePanel.deleteChildBox(selection);
+    this.treePanel.deleteChildBox(selection);
 
     // remove the node from content
     parent.removeChild(selection);
     this.breadcrumbs.invalidateHierarchy();
 
     // select the parent node in the highlighter, treepanel, breadcrumbs
     this.inspectNode(parent);
   },
@@ -1230,17 +1229,16 @@ InspectorUI.prototype = {
     btn.setAttribute("type", "radio");
     btn.setAttribute("group", "sidebar-tools");
     this.sidebarToolbar.appendChild(btn);
 
     // create tool iframe
     let iframe = this.chromeDoc.createElement("iframe");
     iframe.id = "devtools-sidebar-iframe-" + aRegObj.id;
     iframe.setAttribute("flex", "1");
-    iframe.setAttribute("tooltip", "aHTMLTooltip");
     this.sidebarDeck.appendChild(iframe);
 
     // wire up button to show the iframe
     this.bindToolEvent(btn, "click", function showIframe() {
       this.toolShow(aRegObj);
     }.bind(this));
   },
 
--- a/browser/devtools/styleinspector/CssLogic.jsm
+++ b/browser/devtools/styleinspector/CssLogic.jsm
@@ -72,28 +72,20 @@
  * - why their expectations may not have been fulfilled
  * - how browsers process CSS
  * @constructor
  */
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 
-const RX_UNIVERSAL_SELECTOR = /\s*\*\s*/g;
-const RX_NOT = /:not\((.*?)\)/g;
-const RX_PSEUDO_CLASS_OR_ELT = /(:[\w-]+\().*?\)/g;
-const RX_CONNECTORS = /\s*[\s>+~]\s*/g;
-const RX_ID = /\s*#\w+\s*/g;
-const RX_CLASS_OR_ATTRIBUTE = /\s*(?:\.\w+|\[.+?\])\s*/g;
-const RX_PSEUDO = /\s*:?:([\w-]+)(\(?\)?)\s*/g;
-
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/XPCOMUtils.jsm");
 
-var EXPORTED_SYMBOLS = ["CssLogic", "CssSelector"];
+var EXPORTED_SYMBOLS = ["CssLogic"];
 
 function CssLogic()
 {
   // The cache of examined CSS properties.
   _propertyInfos: {};
 }
 
 /**
@@ -1435,107 +1427,61 @@ CssSelector.prototype = {
    * stylesheet.
    */
   get ruleLine()
   {
     return this._cssRule.line;
   },
 
   /**
-   * Retrieve the pseudo-elements that we support. This list should match the
-   * elements specified in layout/style/nsCSSPseudoElementList.h
-   */
-  get pseudoElements()
-  {
-    if (!CssSelector._pseudoElements) {
-      let pseudos = CssSelector._pseudoElements = new Set();
-      pseudos.add("after");
-      pseudos.add("before");
-      pseudos.add("first-letter");
-      pseudos.add("first-line");
-      pseudos.add("selection");
-      pseudos.add("-moz-focus-inner");
-      pseudos.add("-moz-focus-outer");
-      pseudos.add("-moz-list-bullet");
-      pseudos.add("-moz-list-number");
-      pseudos.add("-moz-math-anonymous");
-      pseudos.add("-moz-math-stretchy");
-      pseudos.add("-moz-progress-bar");
-      pseudos.add("-moz-selection");
-    }
-    return CssSelector._pseudoElements;
-  },
-
-  /**
    * Retrieve specificity information for the current selector.
    *
    * @see http://www.w3.org/TR/css3-selectors/#specificity
    * @see http://www.w3.org/TR/CSS2/selector.html
    *
    * @return {object} an object holding specificity information for the current
    * selector.
    */
   get specificity()
   {
     if (this._specificity) {
       return this._specificity;
     }
 
-    let specificity = {
-      ids: 0,
-      classes: 0,
-      tags: 0
-    };
-
-    let text = this.text;
+    let specificity = {};
 
-    if (!this.elementStyle) {
-      // Remove universal selectors as they are not relevant as far as specificity
-      // is concerned.
-      text = text.replace(RX_UNIVERSAL_SELECTOR, "");
-
-      // not() is ignored but any selectors contained by it are counted. Let's
-      // remove the not() and keep the contents.
-      text = text.replace(RX_NOT, " $1");
-
-      // Simplify remaining psuedo classes & elements.
-      text = text.replace(RX_PSEUDO_CLASS_OR_ELT, " $1)");
-
-      // Replace connectors with spaces
-      text = text.replace(RX_CONNECTORS, " ");
+    specificity.ids = 0;
+    specificity.classes = 0;
+    specificity.tags = 0;
 
-      text.split(/\s/).forEach(function(aSimple) {
-        // Count IDs.
-        aSimple = aSimple.replace(RX_ID, function() {
-          specificity.ids++;
-          return "";
-        });
-
-        // Count class names and attribute matchers.
-        aSimple = aSimple.replace(RX_CLASS_OR_ATTRIBUTE, function() {
-          specificity.classes++;
-          return "";
-        });
-
-        aSimple = aSimple.replace(RX_PSEUDO, function(aDummy, aPseudoName) {
-          if (this.pseudoElements.has(aPseudoName)) {
-            // Pseudo elements count as tags.
-            specificity.tags++;
-          } else {
-            // Pseudo classes count as classes.
-            specificity.classes++;
-          }
-          return "";
-        }.bind(this));
-
-        if (aSimple) {
+    // Split on CSS combinators (section 5.2).
+    // TODO: We need to properly parse the selector. See bug 592743.
+    if (!this.elementStyle) {
+      this.text.split(/[ >+]/).forEach(function(aSimple) {
+        // The regex leaves empty nodes combinators like ' > '
+        if (!aSimple) {
+          return;
+        }
+        // See http://www.w3.org/TR/css3-selectors/#specificity
+        // We can count the IDs by counting the '#' marks.
+        specificity.ids += (aSimple.match(/#/g) || []).length;
+        // Similar with class names and attribute matchers
+        specificity.classes += (aSimple.match(/\./g) || []).length;
+        specificity.classes += (aSimple.match(/\[/g) || []).length;
+        // Pseudo elements count as elements.
+        specificity.tags += (aSimple.match(/:/g) || []).length;
+        // If we have anything of substance before we get into ids/classes/etc
+        // then it must be a tag if it isn't '*'.
+        let tag = aSimple.split(/[#.[:]/)[0];
+        if (tag && tag != "*") {
           specificity.tags++;
         }
       }, this);
     }
+
     this._specificity = specificity;
 
     return this._specificity;
   },
 
   toString: function CssSelector_toString()
   {
     return this.text;
--- a/browser/devtools/styleinspector/CssRuleView.jsm
+++ b/browser/devtools/styleinspector/CssRuleView.jsm
@@ -98,23 +98,16 @@ var EXPORTED_SYMBOLS = ["CssRuleView",
  *        set of disabled properties.
  *
  * @constructor
  */
 function ElementStyle(aElement, aStore)
 {
   this.element = aElement;
   this.store = aStore || {};
-
-  // We don't want to overwrite this.store.userProperties so we only create it
-  // if it doesn't already exist.
-  if (!("userProperties" in this.store)) {
-    this.store.userProperties = new UserProperties();
-  }
-
   if (this.store.disabled) {
     this.store.disabled = aStore.disabled;
   } else {
     this.store.disabled = WeakMap();
   }
 
   let doc = aElement.ownerDocument;
 
@@ -424,33 +417,31 @@ Rule.prototype = {
   /**
    * Reapply all the properties in this rule, and update their
    * computed styles.  Store disabled properties in the element
    * style's store.  Will re-mark overridden properties.
    */
   applyProperties: function Rule_applyProperties()
   {
     let disabledProps = [];
-    let store = this.elementStyle.store;
 
     for each (let prop in this.textProps) {
       if (!prop.enabled) {
         disabledProps.push({
           name: prop.name,
           value: prop.value,
           priority: prop.priority
         });
         continue;
       }
 
-      store.userProperties.setProperty(this.style, prop.name, prop.value);
-
       this.style.setProperty(prop.name, prop.value, prop.priority);
-      // Refresh the property's priority from the style, to reflect
+      // Refresh the property's value from the style, to reflect
       // any changes made during parsing.
+      prop.value = this.style.getPropertyValue(prop.name);
       prop.priority = this.style.getPropertyPriority(prop.name);
       prop.updateComputed();
     }
     this.elementStyle._changed();
 
     // Store disabled properties in the disabled store.
     let disabled = this.elementStyle.store.disabled;
     disabled.set(this.style, disabledProps);
@@ -523,42 +514,41 @@ Rule.prototype = {
 
   /**
    * Get the list of TextProperties from the style.  Needs
    * to parse the style's cssText.
    */
   _getTextProperties: function Rule_getTextProperties()
   {
     this.textProps = [];
-    let store = this.elementStyle.store;
     let lines = this.style.cssText.match(CSS_LINE_RE);
     for each (let line in lines) {
       let matches = CSS_PROP_RE.exec(line);
       if(!matches || !matches[2])
         continue;
 
       let name = matches[1];
       if (this.inherited &&
           !this.elementStyle.domUtils.isInheritedProperty(name)) {
         continue;
       }
-      let value = store.userProperties.getProperty(this.style, name, matches[2]);
-      let prop = new TextProperty(this, name, value, matches[3] || "");
+
+      let prop = new TextProperty(this, name, matches[2], matches[3] || "");
       this.textProps.push(prop);
     }
 
     // Include properties from the disabled property store, if any.
     let disabledProps = this.elementStyle.store.disabled.get(this.style);
     if (!disabledProps) {
       return;
     }
 
     for each (let prop in disabledProps) {
-      let value = store.userProperties.getProperty(this.style, prop.name, prop.value);
-      let textProp = new TextProperty(this, prop.name, value, prop.priority);
+      let textProp = new TextProperty(this, prop.name,
+                                      prop.value, prop.priority);
       textProp.enabled = false;
       this.textProps.push(textProp);
     }
   },
 };
 
 /**
  * A single property in a rule's cssText.
@@ -998,22 +988,16 @@ TextPropertyEditor.prototype = {
     // Save the initial value as the last committed value,
     // for restoring after pressing escape.
     this.committed = { name: this.prop.name,
                        value: this.prop.value,
                        priority: this.prop.priority };
 
     appendText(this.element, ";");
 
-    this.warning = createChild(this.element, "div", {
-      hidden: "",
-      class: "ruleview-warning",
-      title: CssLogic.l10n("rule.warning.title"),
-    });
-
     // Holds the viewers for the computed properties.
     // will be populated in |_updateComputed|.
     this.computed = createChild(this.element, "ul", {
       class: "ruleview-computedlist",
     });
   },
 
   /**
@@ -1039,17 +1023,16 @@ TextPropertyEditor.prototype = {
 
     // Combine the property's value and priority into one string for
     // the value.
     let val = this.prop.value;
     if (this.prop.priority) {
       val += " !" + this.prop.priority;
     }
     this.valueSpan.textContent = val;
-    this.warning.hidden = this._validate();
 
     // Populate the computed styles.
     this._updateComputed();
   },
 
   _onStartEditing: function TextPropertyEditor_onStartEditing()
   {
     this.element.classList.remove("ruleview-overridden");
@@ -1175,33 +1158,16 @@ TextPropertyEditor.prototype = {
       let val = this._parseValue(aValue);
       this.prop.setValue(val.value, val.priority);
       this.committed.value = this.prop.value;
       this.committed.priority = this.prop.priority;
     } else {
       this.prop.setValue(this.committed.value, this.committed.priority);
     }
   },
-
-  /**
-   * Validate this property.
-   *
-   * @returns {Boolean}
-   *          True if the property value is valid, false otherwise.
-   */
-  _validate: function TextPropertyEditor_validate()
-  {
-    let name = this.prop.name;
-    let value = this.prop.value;
-    let style = this.doc.createElementNS(HTML_NS, "div").style;
-
-    style.setProperty(name, value, null);
-
-    return !!style.getPropertyValue(name);
-  },
 };
 
 /**
  * Mark a span editable.  |editableField| will listen for the span to
  * be focused and create an InlineEditor to handle text input.
  * Changes will be committed when the InlineEditor's input is blurred
  * or dropped when the user presses escape.
  *
@@ -1411,71 +1377,16 @@ InplaceEditor.prototype = {
     // Call the user's change handler if available.
     if (this.change) {
       this.change(this.input.value.trim());
     }
   }
 };
 
 /**
- * Store of CSSStyleDeclarations mapped to properties that have been changed by
- * the user.
- */
-function UserProperties()
-{
-  this.weakMap = new WeakMap();
-}
-
-UserProperties.prototype = {
-  /**
-   * Get a named property for a given CSSStyleDeclaration.
-   *
-   * @param {CSSStyleDeclaration} aStyle
-   *        The CSSStyleDeclaration against which the property is mapped.
-   * @param {String} aName
-   *        The name of the property to get.
-   * @param {Boolean} aDefault
-   *        Indicates whether the property value is one entered by a user.
-   * @returns {String}
-   *          The property value if it has previously been set by the user, null
-   *          otherwise.
-   */
-  getProperty: function UP_getProperty(aStyle, aName, aDefault) {
-    let entry = this.weakMap.get(aStyle, null);
-
-    if (entry && aName in entry) {
-      return entry[aName];
-    }
-    return typeof aDefault != "undefined" ? aDefault : null;
-
-  },
-
-  /**
-   * Set a named property for a given CSSStyleDeclaration.
-   *
-   * @param {CSSStyleDeclaration} aStyle
-   *        The CSSStyleDeclaration against which the property is to be mapped.
-   * @param {String} aName
-   *        The name of the property to set.
-   * @param {String} aValue
-   *        The value of the property to set.
-   */
-  setProperty: function UP_setProperty(aStyle, aName, aValue) {
-    let entry = this.weakMap.get(aStyle, null);
-    if (entry) {
-      entry[aName] = aValue;
-    } else {
-      let props = {};
-      props[aName] = aValue;
-      this.weakMap.set(aStyle, props);
-    }
-  },
-};
-
-/**
  * Helper functions
  */
 
 /**
  * Create a child element with a set of attributes.
  *
  * @param {Element} aParent
  *        The parent node.
--- a/browser/devtools/styleinspector/StyleInspector.jsm
+++ b/browser/devtools/styleinspector/StyleInspector.jsm
@@ -77,17 +77,17 @@ StyleInspector.prototype = {
     // Were we invoked from the Highlighter?
     if (this.IUI) {
       this.openDocked = true;
       let isOpen = this.isOpen.bind(this);
 
       this.registrationObject = {
         id: "styleinspector",
         label: this.l10n("style.highlighter.button.label2"),
-        tooltiptext: this.l10n("style.highlighter.button.tooltip2"),
+        tooltiptext: this.l10n("style.highlighter.button.tooltip"),
         accesskey: this.l10n("style.highlighter.accesskey2"),
         context: this,
         get isOpen() isOpen(),
         onSelect: this.selectNode,
         onChanged: this.updateNode,
         show: this.open,
         hide: this.close,
         dim: this.dimTool,
--- a/browser/devtools/styleinspector/test/Makefile.in
+++ b/browser/devtools/styleinspector/test/Makefile.in
@@ -50,23 +50,21 @@ include $(topsrcdir)/config/rules.mk
   browser_bug683672.js \
   browser_styleinspector_bug_672746_default_styles.js \
   browser_styleinspector_bug_672744_search_filter.js \
   browser_bug589375_keybindings.js \
   browser_styleinspector_bug_689759_no_results_placeholder.js \
   browser_bug_692400_element_style.js \
   browser_csslogic_inherited.js \
   browser_ruleview_editor.js \
-  browser_ruleview_editor_changedvalues.js \
   browser_ruleview_inherit.js \
   browser_ruleview_manipulation.js \
   browser_ruleview_override.js \
   browser_ruleview_ui.js \
   browser_bug705707_is_content_stylesheet.js \
-  browser_bug_592743_specificity.js \
   head.js \
   $(NULL)
 
 _BROWSER_TEST_PAGES = \
   browser_bug683672.html \
   browser_bug705707_is_content_stylesheet.html \
   browser_bug705707_is_content_stylesheet_imported.css \
   browser_bug705707_is_content_stylesheet_imported2.css \
deleted file mode 100644
--- a/browser/devtools/styleinspector/test/browser_bug_592743_specificity.js
+++ /dev/null
@@ -1,49 +0,0 @@
-/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
-/* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
-
-// Tests that CSS specificity is properly calculated.
-
-let tempScope = {};
-Cu.import("resource:///modules/devtools/CssLogic.jsm", tempScope);
-let CssLogic = tempScope.CssLogic;
-let CssSelector = tempScope.CssSelector;
-
-function test()
-{
-  let tests = [
-    {text: "*", expected: "000"},
-    {text: "LI", expected: "001"},
-    {text: "UL LI", expected: "002"},
-    {text: "UL OL+LI", expected: "003"},
-    {text: "H1 + *[REL=up]", expected: "011"},
-    {text: "UL OL LI.red", expected: "013"},
-    {text: "LI.red.level", expected: "021"},
-    {text: ".red .level", expected: "020"},
-    {text: "#x34y", expected: "100"},
-    {text: "#s12:not(FOO)", expected: "101"},
-    {text: "body#home div#warning p.message", expected: "213"},
-    {text: "* body#home div#warning p.message", expected: "213"},
-    {text: "#footer *:not(nav) li", expected: "102"},
-    {text: "bar:nth-child(1n+0)", expected: "011"},
-    {text: "li::-moz-list-number", expected: "002"},
-    {text: "a:hover", expected: "011"},
-  ];
-
-  tests.forEach(function(aTest) {
-    let selector = new CssSelector(null, aTest.text);
-    let specificity = selector.specificity;
-
-    let result = "" + specificity.ids + specificity.classes + specificity.tags;
-    is(result, aTest.expected, "selector \"" + aTest.text +
-      "\" produces expected result");
-  });
-
-  finishUp();
-}
-
-function finishUp()
-{
-  CssLogic = CssSelector = null;
-  finish();
-}
deleted file mode 100644
--- a/browser/devtools/styleinspector/test/browser_ruleview_editor_changedvalues.js
+++ /dev/null
@@ -1,190 +0,0 @@
-/* vim: set ts=2 et sw=2 tw=80: */
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-
-let tempScope = {};
-Cu.import("resource:///modules/devtools/CssRuleView.jsm", tempScope);
-let CssRuleView = tempScope.CssRuleView;
-let _ElementStyle = tempScope._ElementStyle;
-let _editableField = tempScope._editableField;
-
-let doc;
-let ruleDialog;
-let ruleView;
-
-function waitForEditorFocus(aParent, aCallback)
-{
-  aParent.addEventListener("focus", function onFocus(evt) {
-    if (evt.target.inplaceEditor) {
-      aParent.removeEventListener("focus", onFocus, true);
-      let editor = evt.target.inplaceEditor;
-      executeSoon(function() {
-        aCallback(editor);
-      });
-    }
-  }, true);
-}
-
-function waitForEditorBlur(aEditor, aCallback)
-{
-  let input = aEditor.input;
-  input.addEventListener("blur", function onBlur() {
-    input.removeEventListener("blur", onBlur, false);
-    executeSoon(function() {
-      aCallback();
-    });
-  }, false);
-}
-
-var gRuleViewChanged = false;
-function ruleViewChanged()
-{
-  gRuleViewChanged = true;
-}
-
-function expectChange()
-{
-  ok(gRuleViewChanged, "Rule view should have fired a change event.");
-  gRuleViewChanged = false;
-}
-
-function startTest()
-{
-  let style = '' +
-    '#testid {' +
-    '  background-color: blue;' +
-    '} ' +
-    '.testclass {' +
-    '  background-color: green;' +
-    '}';
-
-  let styleNode = addStyle(doc, style);
-  doc.body.innerHTML = '<div id="testid" class="testclass">Styled Node</div>';
-  let testElement = doc.getElementById("testid");
-
-  ruleDialog = openDialog("chrome://browser/content/devtools/cssruleview.xul",
-                          "cssruleviewtest",
-                          "width=200,height=350");
-  ruleDialog.addEventListener("load", function onLoad(evt) {
-    ruleDialog.removeEventListener("load", onLoad, true);
-    let doc = ruleDialog.document;
-    ruleView = new CssRuleView(doc);
-    doc.documentElement.appendChild(ruleView.element);
-    ruleView.element.addEventListener("CssRuleViewChanged", ruleViewChanged, false);
-    ruleView.highlight(testElement);
-    waitForFocus(testCancelNew, ruleDialog);
-  }, true);
-}
-
-function testCancelNew()
-{
-  // Start at the beginning: start to add a rule to the element's style
-  // declaration, but leave it empty.
-
-  let elementRuleEditor = ruleView.element.children[0]._ruleEditor;
-  waitForEditorFocus(elementRuleEditor.element, function onNewElement(aEditor) {
-    is(elementRuleEditor.newPropSpan.inplaceEditor, aEditor, "Next focused editor should be the new property editor.");
-    let input = aEditor.input;
-    waitForEditorBlur(aEditor, function () {
-      ok(!gRuleViewChanged, "Shouldn't get a change event after a cancel.");
-      is(elementRuleEditor.rule.textProps.length,  0, "Should have canceled creating a new text property.");
-      ok(!elementRuleEditor.propertyList.hasChildNodes(), "Should not have any properties.");
-      testCreateNew();
-    });
-    aEditor.input.blur();
-  });
-
-  EventUtils.synthesizeMouse(elementRuleEditor.closeBrace, 1, 1,
-                             { },
-                             ruleDialog);
-}
-
-function testCreateNew()
-{
-  // Create a new property.
-  let elementRuleEditor = ruleView.element.children[0]._ruleEditor;
-  waitForEditorFocus(elementRuleEditor.element, function onNewElement(aEditor) {
-    is(elementRuleEditor.newPropSpan.inplaceEditor, aEditor, "Next focused editor should be the new property editor.");
-    let input = aEditor.input;
-    input.value = "background-color";
-
-    waitForEditorFocus(elementRuleEditor.element, function onNewValue(aEditor) {
-      expectChange();
-      is(elementRuleEditor.rule.textProps.length,  1, "Should have created a new text property.");
-      is(elementRuleEditor.propertyList.children.length, 1, "Should have created a property editor.");
-      let textProp = elementRuleEditor.rule.textProps[0];
-      is(aEditor, textProp.editor.valueSpan.inplaceEditor, "Should be editing the value span now.");
-
-      aEditor.input.value = "#XYZ";
-      waitForEditorBlur(aEditor, function() {
-        expectChange();
-        is(textProp.value, "#XYZ", "Text prop should have been changed.");
-        is(textProp.editor._validate(), false, "#XYZ should not be a valid entry");
-        testEditProperty();
-      });
-      aEditor.input.blur();
-    });
-    EventUtils.synthesizeKey("VK_RETURN", {}, ruleDialog);
-  });
-
-  EventUtils.synthesizeMouse(elementRuleEditor.closeBrace, 1, 1,
-                             { },
-                             ruleDialog);
-}
-
-function testEditProperty()
-{
-  let idRuleEditor = ruleView.element.children[1]._ruleEditor;
-  let propEditor = idRuleEditor.rule.textProps[0].editor;
-  waitForEditorFocus(propEditor.element, function onNewElement(aEditor) {
-    is(propEditor.nameSpan.inplaceEditor, aEditor, "Next focused editor should be the name editor.");
-    let input = aEditor.input;
-    waitForEditorFocus(propEditor.element, function onNewName(aEditor) {
-      expectChange();
-      input = aEditor.input;
-      is(propEditor.valueSpan.inplaceEditor, aEditor, "Focus should have moved to the value.");
-
-      waitForEditorBlur(aEditor, function() {
-        expectChange();
-        let value = idRuleEditor.rule.style.getPropertyValue("border-color");
-        is(value, "red", "border-color should have been set.");
-        is(propEditor._validate(), true, "red should be a valid entry");
-        finishTest();
-      });
-
-      for each (let ch in "red;") {
-        EventUtils.sendChar(ch, ruleDialog);
-      }
-    });
-    for each (let ch in "border-color:") {
-      EventUtils.sendChar(ch, ruleDialog);
-    }
-  });
-
-  EventUtils.synthesizeMouse(propEditor.nameSpan, 1, 1,
-                             { },
-                             ruleDialog);}
-
-function finishTest()
-{
-  ruleView.element.removeEventListener("CssRuleViewChanged", ruleViewChanged, false);
-  ruleView.clear();
-  ruleDialog.close();
-  ruleDialog = ruleView = null;
-  doc = null;
-  gBrowser.removeCurrentTab();
-  finish();
-}
-
-function test()
-{
-  waitForExplicitFinish();
-  gBrowser.selectedTab = gBrowser.addTab();
-  gBrowser.selectedBrowser.addEventListener("load", function changedValues_load(evt) {
-    gBrowser.selectedBrowser.removeEventListener(evt.type, changedValues_load, true);
-    doc = content.document;
-    waitForFocus(startTest, content);
-  }, true);
-
-  content.location = "data:text/html,test rule view user changes";
-}
--- a/browser/locales/en-US/chrome/browser/devtools/gclicommands.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/gclicommands.properties
@@ -89,27 +89,27 @@ tiltTranslateManual=Incrementally transl
 # LOCALIZATION NOTE (tiltTranslateXDesc) A very short string to describe the
 # 'x' parameter to the 'tilt translate' command, which is displayed in a dialog
 # when the user is using this command.
 tiltTranslateXDesc=X (pixels)
 
 # LOCALIZATION NOTE (tiltTranslateXManual) A fuller description of the 'x'
 # parameter to the 'translate' command, displayed when the user asks for help
 # on what it does.
-tiltTranslateXManual=The amount in pixels to translate the webpage mesh on the X axis
+tiltTranslateXManual=The ammount in pixels to translate the webpage mesh on the X axis
 
 # LOCALIZATION NOTE (tiltTranslateYDesc) A very short string to describe the
 # 'y' parameter to the 'tilt translate' command, which is displayed in a dialog
 # when the user is using this command.
 tiltTranslateYDesc=Y (pixels)
 
 # LOCALIZATION NOTE (tiltTranslateYManual) A fuller description of the 'y'
 # parameter to the 'translate' command, displayed when the user asks for help
 # on what it does.
-tiltTranslateYManual=The amount in pixels to translate the webpage mesh on the Y axis
+tiltTranslateYManual=The ammount in pixels to translate the webpage mesh on the Y axis
 
 # LOCALIZATION NOTE (tiltRotateDesc) A very short description of the 'tilt rotate'
 # command. See tiltRotateManual for a fuller description of what it does. This
 # string is designed to be shown in a menu alongside the command name, which
 # is why it should be as short as possible.
 tiltRotateDesc=Spin the webpage mesh
 
 # LOCALIZATION NOTE (tiltRotateManual) A fuller description of the 'tilt rotate'
@@ -119,37 +119,37 @@ tiltRotateManual=Incrementally rotate th
 # LOCALIZATION NOTE (tiltRotateXDesc) A very short string to describe the
 # 'x' parameter to the 'tilt rotate' command, which is displayed in a dialog
 # when the user is using this command.
 tiltRotateXDesc=X (degrees)
 
 # LOCALIZATION NOTE (tiltRotateXManual) A fuller description of the 'x'
 # parameter to the 'rotate' command, displayed when the user asks for help
 # on what it does.
-tiltRotateXManual=The amount in degrees to rotate the webpage mesh along the X axis
+tiltRotateXManual=The ammount in degrees to rotate the webpage mesh along the X axis
 
 # LOCALIZATION NOTE (tiltRotateYDesc) A very short string to describe the
 # 'y' parameter to the 'tilt rotate' command, which is displayed in a dialog
 # when the user is using this command.
 tiltRotateYDesc=Y (degrees)
 
 # LOCALIZATION NOTE (tiltRotateYManual) A fuller description of the 'y'
 # parameter to the 'rotate' command, displayed when the user asks for help
 # on what it does.
-tiltRotateYManual=The amount in degrees to rotate the webpage mesh along the Y axis
+tiltRotateYManual=The ammount in degrees to rotate the webpage mesh along the Y axis
 
 # LOCALIZATION NOTE (tiltRotateZDesc) A very short string to describe the
 # 'z' parameter to the 'tilt rotate' command, which is displayed in a dialog
 # when the user is using this command.
 tiltRotateZDesc=Z (degrees)
 
 # LOCALIZATION NOTE (tiltRotateZManual) A fuller description of the 'z'
 # parameter to the 'rotate' command, displayed when the user asks for help
 # on what it does.
-tiltRotateZManual=The amount in degrees to rotate the webpage mesh along the Z axis
+tiltRotateZManual=The ammount in degrees to rotate the webpage mesh along the Z axis
 
 # LOCALIZATION NOTE (tiltZoomDesc) A very short description of the 'tilt zoom'
 # command. See tiltZoomManual for a fuller description of what it does. This
 # string is designed to be shown in a menu alongside the command name, which
 # is why it should be as short as possible.
 tiltZoomDesc=Move away or towards the webpage mesh
 
 # LOCALIZATION NOTE (tiltZoomManual) A fuller description of the 'tilt zoom'
--- a/browser/locales/en-US/chrome/browser/devtools/styleinspector.properties
+++ b/browser/locales/en-US/chrome/browser/devtools/styleinspector.properties
@@ -32,20 +32,15 @@ rule.sourceElement=element
 # e.g "Inherited from body#bodyID (styles.css:20)"
 rule.inheritedSource=Inherited from %S (%S)
 
 # LOCALIZATION NOTE (style.highlighter.button): These strings are used inside
 # sidebar of the Highlighter for the style inspector button.
 # "Computed" refers to the Computed Style of the element.
 style.highlighter.button.label2=Computed
 style.highlighter.accesskey2=C
-style.highlighter.button.tooltip2=Inspect element computed styles
+style.highlighter.button.tooltip=Inspect element computed styles
 
 # LOCALIZATION NOTE (helpLinkTitle): For each style property
 # the user can hover it and get a help link button which allows one to
 # quickly jump to the documentation from the Mozilla Developer Network site.
 # This is the link title shown in the hover tooltip.
 helpLinkTitle=Read the documentation for this property
-
-# LOCALIZATION NOTE (rule.warning.title): When an invalid property value is
-# entered into the rule view a warning icon is displayed. This text is used for
-# the title attribute of the warning icon.
-rule.warning.title=Invalid property value
deleted file mode 100644
index 5c5d0aec58bd073334798117dc955d67edeb0276..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/gnomestripe/devtools/csshtmltree.css
+++ b/browser/themes/gnomestripe/devtools/csshtmltree.css
@@ -212,29 +212,16 @@
 .ruleview-rule-source:hover {
   text-decoration: underline;
 }
 
 .ruleview-code {
   padding: 2px 5px;
 }
 
-.ruleview-warning {
-  background: url("chrome://browser/skin/devtools/alerticon-warning.png");
-  display: inline-block;
-  -moz-margin-start: 5px;
-  vertical-align: middle;
-  width: 13px;
-  height: 12px;
-}
-
-.ruleview-warning[hidden] {
-  display: none;
-}
-
 .ruleview-ruleopen {
   -moz-padding-end: 5px;
 }
 
 .ruleview-propertylist {
   list-style: none;
   padding: 0;
   margin: 0;
--- a/browser/themes/gnomestripe/devtools/debugger.css
+++ b/browser/themes/gnomestripe/devtools/debugger.css
@@ -111,23 +111,18 @@ a {
 /**
  * Stack frames
  */
 
 #stackframes {
   background-color: white;
 }
 
-.dbg-stackframe {
-  -moz-padding-start: 4px;
-  -moz-padding-end: 4px;
-}
-
-.dbg-stackframe-name {
-  font-weight: 600;
+.dbg-stackframe-id {
+  -moz-padding-end: 1em;
 }
 
 /**
  * Properties elements
  */
 
 #variables {
   background-color: white;
deleted file mode 100644
--- a/browser/themes/gnomestripe/devtools/htmlpanel.css
+++ /dev/null
@@ -1,402 +0,0 @@
-/*
- * Software License Agreement (BSD License)
- *
- * Copyright (c) 2007, Parakey Inc.
- * All rights reserved.
- * 
- * Redistribution and use of this software in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- * * Redistributions of source code must retain the above
- *   copyright notice, this list of conditions and the
- *   following disclaimer.
- * 
- * * Redistributions in binary form must reproduce the above
- *   copyright notice, this list of conditions and the
- *   following disclaimer in the documentation and/or other
- *   materials provided with the distribution.
- * 
- * * Neither the name of Parakey Inc. nor the names of its
- *   contributors may be used to endorse or promote products
- *   derived from this software without specific prior
- *   written permission of Parakey Inc.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Creator:
- *  Joe Hewitt
- * Contributors
- *  John J. Barton (IBM Almaden)
- *  Jan Odvarko (Mozilla Corp.)
- *  Max Stepanov (Aptana Inc.)
- *  Rob Campbell (Mozilla Corp.)
- *  Hans Hillen (Paciello Group, Mozilla)
- *  Curtis Bartley (Mozilla Corp.)
- *  Mike Collins (IBM Almaden)
- *  Kevin Decker
- *  Mike Ratcliffe (Comartis AG)
- *  Hernan Rodríguez Colmeiro
- *  Austin Andrews
- *  Christoph Dorn
- *  Steven Roussey (AppCenter Inc, Network54)
- */
-
-html {
-  background-color: -moz-dialog;
-}
-
-body {
-  margin: 0;
-  overflow: auto;
-  font-family: Lucida Grande, sans-serif;
-  font-size: 11px;
-  padding-top: 5px;
-}
-
-h1 {
-  font-size: 17px;
-  border-bottom: 1px solid threedlightshadow;
-}
-
-a {
-  color: #0000ff;
-}
-
-pre {
-  margin: 0;
-  font: inherit;
-}
-
-code {
-  display: block;
-  white-space: pre;
-}
-
-/* DOMPlate */
-
-.objectLink-element,
-.objectLink-textNode,
-.objectLink-function,
-.objectBox-stackTrace,
-.objectLink-profile {
-  font-family: Menlo, Andale Mono, monospace;
-}
-
-.objectLink-textNode {
-  white-space: pre-wrap;
-}
-
-.objectLink-styleRule,
-.objectLink-element,
-.objectLink-textNode {
-  color: #000088;
-}
-
-.selectorTag,
-.selectorId,
-.selectorClass {
-  font-family: Menlo, Andale Mono, monospace;
-  font-weight: normal;
-}
-
-.selectorTag {
-  color: #0000FF;
-}
-
-.selectorId {
-  color: DarkBlue;
-}
-
-.selectorClass {
-  color: red;
-}
-
-.selectorHidden > .selectorTag {
-  color: #5F82D9;
-}
-
-.selectorHidden > .selectorId {
-  color: #888888;
-}
-
-.selectorHidden > .selectorClass {
-  color: #D86060;
-}
-
-.selectorValue {
-  font-family: Menlo, Andale Mono, monospace;
-  font-style: italic;
-  color: #555555;
-}
-
-.panelNode-html {
-  -moz-box-sizing: padding-box;
-  padding: 4px 0 0 2px;
-}
-
-.nodeBox {
-  position: relative;
-  font-family: Menlo, Andale Mono, monospace;
-  padding-left: 13px;
-  -moz-user-select: -moz-none;
-}
-
-.nodeBox.search-selection {
-  -moz-user-select: text;
-}
-
-.twisty {
-  position: absolute;
-  left: 0px;
-  padding: 8px;
-}
-
-.nodeChildBox {
-  margin-left: 12px;
-  display: none;
-}
-
-.nodeLabel,
-.nodeCloseLabel {
-  margin: -2px 2px 0 2px;
-  border: 2px solid transparent;
-  border-radius: 3px;
-  padding: 0 2px;
-  color: #000088;
-}
-
-.nodeCloseLabel {
-  display: none;
-}
-
-.nodeTag {
-  cursor: pointer;
-  color: blue;
-}
-
-.nodeValue {
-  color: #FF0000;
-  font-weight: normal;
-}
-
-.nodeText,
-.nodeComment {
-  margin: 0 2px;
-  vertical-align: top;
-}
-
-.nodeText {
-  color: #333333;
-}
-
-.docType {
-  position: absolute;
-  /* position DOCTYPE element above/outside the "nodeBox" that contains it */
-  /* Note: to be fixed in Bug #688439 */
-  top: -16px;
-  font-family: Menlo, Andale Mono, monospace;
-  padding-left: 8px;
-  color: #999;
-  white-space: nowrap;
-  font-style: italic;
-}
-
-.htmlNodeBox {
-  /* make room for DOCTYPE element to be rendered above/outside "nodeBox" */
-  /* Note: to be fixed in Bug #688439 */
-  margin-top: 16px;
-}
-
-.nodeWhiteSpace {
-  border: 1px solid LightGray;
-  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
-  margin-left: 1px;
-  color: gray;
-}
-
-.nodeWhiteSpace_Space {
-  border: 1px solid #ddd;
-}
-
-.nodeTextEntity {
-  border: 1px solid gray;
-  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
-  margin-left: 1px;
-}
-
-.nodeComment {
-  color: DarkGreen;
-}
-
-.nodeBox.highlightOpen > .nodeLabel {
-  background-color: #EEEEEE;
-}
-
-.nodeBox.highlightOpen > .nodeCloseLabel,
-.nodeBox.highlightOpen > .nodeChildBox,
-.nodeBox.open > .nodeCloseLabel,
-.nodeBox.open > .nodeChildBox {
-  display: block;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: Highlight;
-  background-color: Highlight;
-  color: HighlightText !important;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: inherit !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: Highlight !important;
-  background-color: cyan !important;
-  color: #000000 !important;
-}
-
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: #000000 !important;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox,
-.nodeBox.nodeHidden .nodeCloseLabel,
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeText,
-.nodeBox.nodeHidden .nodeText {
-  color: #888888;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.nodeHidden .nodeCloseLabel > .nodeCloseLabelBox > .nodeTag {
-  color: #5F82D9;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue {
-  color: #D86060;
-}
-
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: SkyBlue !important;
-}
-
-.nodeBox.mutated > .nodeLabel,
-.nodeAttr.mutated,
-.nodeValue.mutated,
-.nodeText.mutated,
-.nodeBox.mutated > .nodeText {
-  background-color: #EFFF79;
-  color: #FF0000 !important;
-}
-
-.nodeBox.selected.mutated > .nodeLabel,
-.nodeBox.selected.mutated > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr.mutated > .nodeValue,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue.mutated,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText.mutated {
-  background-color: #EFFF79;
-  border-color: #EFFF79;
-  color: #FF0000 !important;
-}
-
-.logRow-dirxml {
-  padding-left: 0;
-}
-
-.soloElement > .nodeBox  {
-  padding-left: 0;
-}
-
-.useA11y .nodeLabel.focused {
-  outline: 2px solid #FF9933;
-  -moz-outline-radius: 3px;
-  outline-offset: -2px;
-}
-
-.useA11y .nodeLabelBox:focus {
-  outline: none;
-}
-
-/* from panel.css */
-
-/* HTML panel */
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: #3875d7;
-  background-color: #3875d7;
-  color: #FFFFFF !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: #3875d7 !important;
-}
-
-/************************************************************************************************/
-/* Twisties */
-
-.twisty
-{
-  -moz-appearance: treetwisty;
-}
-
-.nodeBox.highlightOpen > .nodeLabel > .twisty,
-.nodeBox.open > .nodeLabel > .twisty
-{
-  -moz-appearance: treetwistyopen;
-}
-
-/************************************************************************************************/
-/* HTML panel */
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: #3875d7;
-  background-color: #3875d7;
-  color: #FFFFFF !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: #3875d7 !important;
-}
-
-.editingAttributeValue {
-  background-color: #492;
-}
-
-#attribute-editor {
-  visibility: hidden;
-  position: absolute;
-  z-index: 5000;
-  background-color: #fff;
-  border: 1px solid #000;
-}
-
-#attribute-editor.editing {
-  visibility: visible;
-}
-
-#attribute-editor-input {
-  border: none;
-  padding: 2px 5px;
-  font-family: Menlo, Andale Mono, monospace;
-  font-size: 11px;
-}
new file mode 100644
--- /dev/null
+++ b/browser/themes/gnomestripe/inspector.css
@@ -0,0 +1,402 @@
+/*
+ * Software License Agreement (BSD License)
+ *
+ * Copyright (c) 2007, Parakey Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use of this software in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ * * Redistributions of source code must retain the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer in the documentation and/or other
+ *   materials provided with the distribution.
+ * 
+ * * Neither the name of Parakey Inc. nor the names of its
+ *   contributors may be used to endorse or promote products
+ *   derived from this software without specific prior
+ *   written permission of Parakey Inc.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Creator:
+ *  Joe Hewitt
+ * Contributors
+ *  John J. Barton (IBM Almaden)
+ *  Jan Odvarko (Mozilla Corp.)
+ *  Max Stepanov (Aptana Inc.)
+ *  Rob Campbell (Mozilla Corp.)
+ *  Hans Hillen (Paciello Group, Mozilla)
+ *  Curtis Bartley (Mozilla Corp.)
+ *  Mike Collins (IBM Almaden)
+ *  Kevin Decker
+ *  Mike Ratcliffe (Comartis AG)
+ *  Hernan Rodríguez Colmeiro
+ *  Austin Andrews
+ *  Christoph Dorn
+ *  Steven Roussey (AppCenter Inc, Network54)
+ */
+
+html {
+  background-color: -moz-dialog;
+}
+
+body {
+  margin: 0;
+  overflow: auto;
+  font-family: Lucida Grande, sans-serif;
+  font-size: 11px;
+  padding-top: 5px;
+}
+
+h1 {
+  font-size: 17px;
+  border-bottom: 1px solid threedlightshadow;
+}
+
+a {
+  color: #0000ff;
+}
+
+pre {
+  margin: 0;
+  font: inherit;
+}
+
+code {
+  display: block;
+  white-space: pre;
+}
+
+/* DOMPlate */
+
+.objectLink-element,
+.objectLink-textNode,
+.objectLink-function,
+.objectBox-stackTrace,
+.objectLink-profile {
+  font-family: Menlo, Andale Mono, monospace;
+}
+
+.objectLink-textNode {
+  white-space: pre-wrap;
+}
+
+.objectLink-styleRule,
+.objectLink-element,
+.objectLink-textNode {
+  color: #000088;
+}
+
+.selectorTag,
+.selectorId,
+.selectorClass {
+  font-family: Menlo, Andale Mono, monospace;
+  font-weight: normal;
+}
+
+.selectorTag {
+  color: #0000FF;
+}
+
+.selectorId {
+  color: DarkBlue;
+}
+
+.selectorClass {
+  color: red;
+}
+
+.selectorHidden > .selectorTag {
+  color: #5F82D9;
+}
+
+.selectorHidden > .selectorId {
+  color: #888888;
+}
+
+.selectorHidden > .selectorClass {
+  color: #D86060;
+}
+
+.selectorValue {
+  font-family: Menlo, Andale Mono, monospace;
+  font-style: italic;
+  color: #555555;
+}
+
+.panelNode-html {
+  -moz-box-sizing: padding-box;
+  padding: 4px 0 0 2px;
+}
+
+.nodeBox {
+  position: relative;
+  font-family: Menlo, Andale Mono, monospace;
+  padding-left: 13px;
+  -moz-user-select: -moz-none;
+}
+
+.nodeBox.search-selection {
+  -moz-user-select: text;
+}
+
+.twisty {
+  position: absolute;
+  left: 0px;
+  padding: 8px;
+}
+
+.nodeChildBox {
+  margin-left: 12px;
+  display: none;
+}
+
+.nodeLabel,
+.nodeCloseLabel {
+  margin: -2px 2px 0 2px;
+  border: 2px solid transparent;
+  border-radius: 3px;
+  padding: 0 2px;
+  color: #000088;
+}
+
+.nodeCloseLabel {
+  display: none;
+}
+
+.nodeTag {
+  cursor: pointer;
+  color: blue;
+}
+
+.nodeValue {
+  color: #FF0000;
+  font-weight: normal;
+}
+
+.nodeText,
+.nodeComment {
+  margin: 0 2px;
+  vertical-align: top;
+}
+
+.nodeText {
+  color: #333333;
+}
+
+.docType {
+  position: absolute;
+  /* position DOCTYPE element above/outside the "nodeBox" that contains it */
+  /* Note: to be fixed in Bug #688439 */
+  top: -16px;
+  font-family: Menlo, Andale Mono, monospace;
+  padding-left: 8px;
+  color: #999;
+  white-space: nowrap;
+  font-style: italic;
+}
+
+.htmlNodeBox {
+  /* make room for DOCTYPE element to be rendered above/outside "nodeBox" */
+  /* Note: to be fixed in Bug #688439 */
+  margin-top: 16px;
+}
+
+.nodeWhiteSpace {
+  border: 1px solid LightGray;
+  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
+  margin-left: 1px;
+  color: gray;
+}
+
+.nodeWhiteSpace_Space {
+  border: 1px solid #ddd;
+}
+
+.nodeTextEntity {
+  border: 1px solid gray;
+  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
+  margin-left: 1px;
+}
+
+.nodeComment {
+  color: DarkGreen;
+}
+
+.nodeBox.highlightOpen > .nodeLabel {
+  background-color: #EEEEEE;
+}
+
+.nodeBox.highlightOpen > .nodeCloseLabel,
+.nodeBox.highlightOpen > .nodeChildBox,
+.nodeBox.open > .nodeCloseLabel,
+.nodeBox.open > .nodeChildBox {
+  display: block;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: Highlight;
+  background-color: Highlight;
+  color: HighlightText !important;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: inherit !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: Highlight !important;
+  background-color: cyan !important;
+  color: #000000 !important;
+}
+
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: #000000 !important;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox,
+.nodeBox.nodeHidden .nodeCloseLabel,
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeText,
+.nodeBox.nodeHidden .nodeText {
+  color: #888888;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.nodeHidden .nodeCloseLabel > .nodeCloseLabelBox > .nodeTag {
+  color: #5F82D9;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue {
+  color: #D86060;
+}
+
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: SkyBlue !important;
+}
+
+.nodeBox.mutated > .nodeLabel,
+.nodeAttr.mutated,
+.nodeValue.mutated,
+.nodeText.mutated,
+.nodeBox.mutated > .nodeText {
+  background-color: #EFFF79;
+  color: #FF0000 !important;
+}
+
+.nodeBox.selected.mutated > .nodeLabel,
+.nodeBox.selected.mutated > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr.mutated > .nodeValue,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue.mutated,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText.mutated {
+  background-color: #EFFF79;
+  border-color: #EFFF79;
+  color: #FF0000 !important;
+}
+
+.logRow-dirxml {
+  padding-left: 0;
+}
+
+.soloElement > .nodeBox  {
+  padding-left: 0;
+}
+
+.useA11y .nodeLabel.focused {
+  outline: 2px solid #FF9933;
+  -moz-outline-radius: 3px;
+  outline-offset: -2px;
+}
+
+.useA11y .nodeLabelBox:focus {
+  outline: none;
+}
+
+/* from panel.css */
+
+/* HTML panel */
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: #3875d7;
+  background-color: #3875d7;
+  color: #FFFFFF !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: #3875d7 !important;
+}
+
+/************************************************************************************************/
+/* Twisties */
+
+.twisty
+{
+  -moz-appearance: treetwisty;
+}
+
+.nodeBox.highlightOpen > .nodeLabel > .twisty,
+.nodeBox.open > .nodeLabel > .twisty
+{
+  -moz-appearance: treetwistyopen;
+}
+
+/************************************************************************************************/
+/* HTML panel */
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: #3875d7;
+  background-color: #3875d7;
+  color: #FFFFFF !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: #3875d7 !important;
+}
+
+.editingAttributeValue {
+  background-color: #492;
+}
+
+#attribute-editor {
+  visibility: hidden;
+  position: absolute;
+  z-index: 5000;
+  background-color: #fff;
+  border: 1px solid #000;
+}
+
+#attribute-editor.editing {
+  visibility: visible;
+}
+
+#attribute-editor-input {
+  border: none;
+  padding: 2px 5px;
+  font-family: Menlo, Andale Mono, monospace;
+  font-size: 11px;
+}
--- a/browser/themes/gnomestripe/jar.mn
+++ b/browser/themes/gnomestripe/jar.mn
@@ -8,16 +8,17 @@ browser.jar:
   skin/classic/browser/aboutCertError.css             (aboutCertError.css)
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/aboutSyncTabs.css
 #endif
   skin/classic/browser/actionicon-tab.png
 * skin/classic/browser/browser.css                    (browser.css)
 * skin/classic/browser/engineManager.css              (engineManager.css)
   skin/classic/browser/fullscreen-video.css
+  skin/classic/browser/inspector.css
   skin/classic/browser/Geolocation-16.png
   skin/classic/browser/Geolocation-64.png
   skin/classic/browser/Go-arrow.png
   skin/classic/browser/identity.png
   skin/classic/browser/Info.png
   skin/classic/browser/KUI-close.png
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
@@ -82,24 +83,22 @@ browser.jar:
   skin/classic/browser/tabview/edit-light.png         (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png             (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png     (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png            (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css            (tabview/tabview.css)
   skin/classic/browser/devtools/common.css            (devtools/common.css)
   skin/classic/browser/devtools/arrows.png            (devtools/arrows.png)
   skin/classic/browser/devtools/commandline.png       (devtools/commandline.png)
-  skin/classic/browser/devtools/alerticon-warning.png (devtools/alerticon-warning.png)
   skin/classic/browser/devtools/goto-mdn.png          (devtools/goto-mdn.png)
   skin/classic/browser/devtools/csshtmltree.css       (devtools/csshtmltree.css)
   skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
   skin/classic/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
   skin/classic/browser/devtools/webconsole.png                  (devtools/webconsole.png)
   skin/classic/browser/devtools/gcli.css              (devtools/gcli.css)
-  skin/classic/browser/devtools/htmlpanel.css         (devtools/htmlpanel.css)
   skin/classic/browser/devtools/orion.css             (devtools/orion.css)
   skin/classic/browser/devtools/orion-container.css   (devtools/orion-container.css)
   skin/classic/browser/devtools/orion-task.png        (devtools/orion-task.png)
   skin/classic/browser/devtools/orion-breakpoint.png  (devtools/orion-breakpoint.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end-pressed.png              (devtools/breadcrumbs/ltr-end-pressed.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end-selected-pressed.png     (devtools/breadcrumbs/ltr-end-selected-pressed.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end-selected.png             (devtools/breadcrumbs/ltr-end-selected.png)
   skin/classic/browser/devtools/breadcrumbs/ltr-end.png                      (devtools/breadcrumbs/ltr-end.png)
deleted file mode 100644
index 5c5d0aec58bd073334798117dc955d67edeb0276..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/pinstripe/devtools/csshtmltree.css
+++ b/browser/themes/pinstripe/devtools/csshtmltree.css
@@ -214,29 +214,16 @@
 .ruleview-rule-source:hover {
   text-decoration: underline;
 }
 
 .ruleview-code {
   padding: 2px 5px;
 }
 
-.ruleview-warning {
-  background: url("chrome://browser/skin/devtools/alerticon-warning.png");
-  display: inline-block;
-  -moz-margin-start: 5px;
-  vertical-align: middle;
-  width: 13px;
-  height: 12px;
-}
-
-.ruleview-warning[hidden] {
-  display: none;
-}
-
 .ruleview-ruleopen {
   -moz-padding-end: 5px;
 }
 
 .ruleview-propertylist {
   list-style: none;
   padding: 0;
   margin: 0;
--- a/browser/themes/pinstripe/devtools/debugger.css
+++ b/browser/themes/pinstripe/devtools/debugger.css
@@ -115,23 +115,18 @@ a {
 /**
  * Stack frames
  */
 
 #stackframes {
   background-color: white;
 }
 
-.dbg-stackframe {
-  -moz-padding-start: 4px;
-  -moz-padding-end: 4px;
-}
-
-.dbg-stackframe-name {
-  font-weight: 600;
+.dbg-stackframe-id {
+  -moz-padding-end: 1em;
 }
 
 /**
  * Properties elements
  */
 
 #variables {
   background-color: white;
deleted file mode 100644
--- a/browser/themes/pinstripe/devtools/htmlpanel.css
+++ /dev/null
@@ -1,392 +0,0 @@
-/*
- * Software License Agreement (BSD License)
- *
- * Copyright (c) 2007, Parakey Inc.
- * All rights reserved.
- * 
- * Redistribution and use of this software in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- * * Redistributions of source code must retain the above
- *   copyright notice, this list of conditions and the
- *   following disclaimer.
- * 
- * * Redistributions in binary form must reproduce the above
- *   copyright notice, this list of conditions and the
- *   following disclaimer in the documentation and/or other
- *   materials provided with the distribution.
- * 
- * * Neither the name of Parakey Inc. nor the names of its
- *   contributors may be used to endorse or promote products
- *   derived from this software without specific prior
- *   written permission of Parakey Inc.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Creator:
- *  Joe Hewitt
- * Contributors
- *  John J. Barton (IBM Almaden)
- *  Jan Odvarko (Mozilla Corp.)
- *  Max Stepanov (Aptana Inc.)
- *  Rob Campbell (Mozilla Corp.)
- *  Hans Hillen (Paciello Group, Mozilla)
- *  Curtis Bartley (Mozilla Corp.)
- *  Mike Collins (IBM Almaden)
- *  Kevin Decker
- *  Mike Ratcliffe (Comartis AG)
- *  Hernan Rodríguez Colmeiro
- *  Austin Andrews
- *  Christoph Dorn
- *  Steven Roussey (AppCenter Inc, Network54)
- */
-
-html {
-  background-color: -moz-dialog;
-}
-
-body {
-  margin: 0;
-  overflow: auto;
-  font-family: Lucida Grande, sans-serif;
-  font-size: 11px;
-  padding-top: 5px;
-}
-
-h1 {
-  font-size: 17px;
-  border-bottom: 1px solid threedlightshadow;
-}
-
-a {
-  color: #0000ff;
-}
-
-pre {
-  margin: 0;
-  font: inherit;
-}
-
-code {
-  display: block;
-  white-space: pre;
-}
-
-/* DOMPlate */
-
-.objectLink-element,
-.objectLink-textNode,
-.objectLink-function,
-.objectBox-stackTrace,
-.objectLink-profile {
-  font-family: Menlo, Andale Mono, monospace;
-}
-
-.objectLink-textNode {
-  white-space: pre-wrap;
-}
-
-.objectLink-styleRule,
-.objectLink-element,
-.objectLink-textNode {
-  color: #000088;
-}
-
-.selectorTag,
-.selectorId,
-.selectorClass {
-  font-family: Menlo, Andale Mono, monospace;
-  font-weight: normal;
-}
-
-.selectorTag {
-  color: #0000FF;
-}
-
-.selectorId {
-  color: DarkBlue;
-}
-
-.selectorClass {
-  color: red;
-}
-
-.selectorHidden > .selectorTag {
-  color: #5F82D9;
-}
-
-.selectorHidden > .selectorId {
-  color: #888888;
-}
-
-.selectorHidden > .selectorClass {
-  color: #D86060;
-}
-
-.selectorValue {
-  font-family: Menlo, Andale Mono, monospace;
-  font-style: italic;
-  color: #555555;
-}
-
-.panelNode-html {
-  -moz-box-sizing: padding-box;
-  padding: 4px 0 0 2px;
-}
-
-.nodeBox {
-  position: relative;
-  font-family: Menlo, Andale Mono, monospace;
-  padding-left: 13px;
-  -moz-user-select: -moz-none;
-}
-
-.nodeBox.search-selection {
-  -moz-user-select: text;
-}
-
-.twisty {
-  position: absolute;
-  left: 0px;
-  top: 0px;
-  width: 14px;
-  height: 14px;
-}
-
-.nodeChildBox {
-  margin-left: 12px;
-  display: none;
-}
-
-.nodeLabel,
-.nodeCloseLabel {
-  margin: -2px 2px 0 2px;
-  border: 2px solid transparent;
-  border-radius: 3px;
-  padding: 0 2px;
-  color: #000088;
-}
-
-.nodeCloseLabel {
-  display: none;
-}
-
-.nodeTag {
-  cursor: pointer;
-  color: blue;
-}
-
-.nodeValue {
-  color: #FF0000;
-  font-weight: normal;
-}
-
-.nodeText,
-.nodeComment {
-  margin: 0 2px;
-  vertical-align: top;
-}
-
-.nodeText {
-  color: #333333;
-}
-
-.docType {
-  position: absolute;
-  /* position DOCTYPE element above/outside the "nodeBox" that contains it */
-  /* Note: to be fixed in Bug #688439 */
-  top: -16px;
-  font-family: Menlo, Andale Mono, monospace;
-  padding-left: 8px;
-  color: #999;
-  white-space: nowrap;
-  font-style: italic;
-}
-
-.htmlNodeBox {
-  /* make room for DOCTYPE element to be rendered above/outside "nodeBox" */
-  /* Note: to be fixed in Bug #688439 */
-  margin-top: 16px;
-}
-
-.nodeWhiteSpace {
-  border: 1px solid LightGray;
-  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
-  margin-left: 1px;
-  color: gray;
-}
-
-.nodeWhiteSpace_Space {
-  border: 1px solid #ddd;
-}
-
-.nodeTextEntity {
-  border: 1px solid gray;
-  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
-  margin-left: 1px;
-}
-
-.nodeComment {
-  color: DarkGreen;
-}
-
-.nodeBox.highlightOpen > .nodeLabel {
-  background-color: #EEEEEE;
-}
-
-.nodeBox.highlightOpen > .nodeCloseLabel,
-.nodeBox.highlightOpen > .nodeChildBox,
-.nodeBox.open > .nodeCloseLabel,
-.nodeBox.open > .nodeChildBox {
-  display: block;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: Highlight;
-  background-color: Highlight;
-  color: HighlightText !important;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: inherit !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: Highlight !important;
-  background-color: cyan !important;
-  color: #000000 !important;
-}
-
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: #000000 !important;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox,
-.nodeBox.nodeHidden .nodeCloseLabel,
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeText,
-.nodeBox.nodeHidden .nodeText {
-  color: #888888;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.nodeHidden .nodeCloseLabel > .nodeCloseLabelBox > .nodeTag {
-  color: #5F82D9;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue {
-  color: #D86060;
-}
-
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: SkyBlue !important;
-}
-
-.nodeBox.mutated > .nodeLabel,
-.nodeAttr.mutated,
-.nodeValue.mutated,
-.nodeText.mutated,
-.nodeBox.mutated > .nodeText {
-  background-color: #EFFF79;
-  color: #FF0000 !important;
-}
-
-.nodeBox.selected.mutated > .nodeLabel,
-.nodeBox.selected.mutated > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr.mutated > .nodeValue,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue.mutated,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText.mutated {
-  background-color: #EFFF79;
-  border-color: #EFFF79;
-  color: #FF0000 !important;
-}
-
-.logRow-dirxml {
-  padding-left: 0;
-}
-
-.soloElement > .nodeBox  {
-  padding-left: 0;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: #3875d7;
-  background-color: #3875d7;
-  color: #FFFFFF !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: #3875d7 !important;
-}
-
-/************************************************************************************************/
-/* Twisties */
-
-.twisty
-{
-  -moz-appearance: treetwisty;
-}
-
-.nodeBox.highlightOpen > .nodeLabel > .twisty,
-.nodeBox.open > .nodeLabel > .twisty
-{
-  -moz-appearance: treetwistyopen;
-}
-
-.memberRow.hasChildren > .memberLabelCell > .memberLabel,
-.hasHeaders .netHrefLabel {
-  background-position: 2px 2px;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: #3875d7;
-  background-color: #3875d7;
-  color: #FFFFFF !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: #3875d7 !important;
-}
-
-.editingAttributeValue {
-  background-color: #492;
-}
-
-#attribute-editor {
-  visibility: hidden;
-  position: absolute;
-  z-index: 5000;
-  background-color: #fff;
-  border: 1px solid #000;
-}
-
-#attribute-editor.editing {
-  visibility: visible;
-}
-
-#attribute-editor-input {
-  border: none;
-  padding: 2px 5px;
-  font-family: Menlo, Andale Mono, monospace;
-  font-size: 11px;
-}
new file mode 100644
--- /dev/null
+++ b/browser/themes/pinstripe/inspector.css
@@ -0,0 +1,392 @@
+/*
+ * Software License Agreement (BSD License)
+ *
+ * Copyright (c) 2007, Parakey Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use of this software in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ * * Redistributions of source code must retain the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer in the documentation and/or other
+ *   materials provided with the distribution.
+ * 
+ * * Neither the name of Parakey Inc. nor the names of its
+ *   contributors may be used to endorse or promote products
+ *   derived from this software without specific prior
+ *   written permission of Parakey Inc.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Creator:
+ *  Joe Hewitt
+ * Contributors
+ *  John J. Barton (IBM Almaden)
+ *  Jan Odvarko (Mozilla Corp.)
+ *  Max Stepanov (Aptana Inc.)
+ *  Rob Campbell (Mozilla Corp.)
+ *  Hans Hillen (Paciello Group, Mozilla)
+ *  Curtis Bartley (Mozilla Corp.)
+ *  Mike Collins (IBM Almaden)
+ *  Kevin Decker
+ *  Mike Ratcliffe (Comartis AG)
+ *  Hernan Rodríguez Colmeiro
+ *  Austin Andrews
+ *  Christoph Dorn
+ *  Steven Roussey (AppCenter Inc, Network54)
+ */
+
+html {
+  background-color: -moz-dialog;
+}
+
+body {
+  margin: 0;
+  overflow: auto;
+  font-family: Lucida Grande, sans-serif;
+  font-size: 11px;
+  padding-top: 5px;
+}
+
+h1 {
+  font-size: 17px;
+  border-bottom: 1px solid threedlightshadow;
+}
+
+a {
+  color: #0000ff;
+}
+
+pre {
+  margin: 0;
+  font: inherit;
+}
+
+code {
+  display: block;
+  white-space: pre;
+}
+
+/* DOMPlate */
+
+.objectLink-element,
+.objectLink-textNode,
+.objectLink-function,
+.objectBox-stackTrace,
+.objectLink-profile {
+  font-family: Menlo, Andale Mono, monospace;
+}
+
+.objectLink-textNode {
+  white-space: pre-wrap;
+}
+
+.objectLink-styleRule,
+.objectLink-element,
+.objectLink-textNode {
+  color: #000088;
+}
+
+.selectorTag,
+.selectorId,
+.selectorClass {
+  font-family: Menlo, Andale Mono, monospace;
+  font-weight: normal;
+}
+
+.selectorTag {
+  color: #0000FF;
+}
+
+.selectorId {
+  color: DarkBlue;
+}
+
+.selectorClass {
+  color: red;
+}
+
+.selectorHidden > .selectorTag {
+  color: #5F82D9;
+}
+
+.selectorHidden > .selectorId {
+  color: #888888;
+}
+
+.selectorHidden > .selectorClass {
+  color: #D86060;
+}
+
+.selectorValue {
+  font-family: Menlo, Andale Mono, monospace;
+  font-style: italic;
+  color: #555555;
+}
+
+.panelNode-html {
+  -moz-box-sizing: padding-box;
+  padding: 4px 0 0 2px;
+}
+
+.nodeBox {
+  position: relative;
+  font-family: Menlo, Andale Mono, monospace;
+  padding-left: 13px;
+  -moz-user-select: -moz-none;
+}
+
+.nodeBox.search-selection {
+  -moz-user-select: text;
+}
+
+.twisty {
+  position: absolute;
+  left: 0px;
+  top: 0px;
+  width: 14px;
+  height: 14px;
+}
+
+.nodeChildBox {
+  margin-left: 12px;
+  display: none;
+}
+
+.nodeLabel,
+.nodeCloseLabel {
+  margin: -2px 2px 0 2px;
+  border: 2px solid transparent;
+  border-radius: 3px;
+  padding: 0 2px;
+  color: #000088;
+}
+
+.nodeCloseLabel {
+  display: none;
+}
+
+.nodeTag {
+  cursor: pointer;
+  color: blue;
+}
+
+.nodeValue {
+  color: #FF0000;
+  font-weight: normal;
+}
+
+.nodeText,
+.nodeComment {
+  margin: 0 2px;
+  vertical-align: top;
+}
+
+.nodeText {
+  color: #333333;
+}
+
+.docType {
+  position: absolute;
+  /* position DOCTYPE element above/outside the "nodeBox" that contains it */
+  /* Note: to be fixed in Bug #688439 */
+  top: -16px;
+  font-family: Menlo, Andale Mono, monospace;
+  padding-left: 8px;
+  color: #999;
+  white-space: nowrap;
+  font-style: italic;
+}
+
+.htmlNodeBox {
+  /* make room for DOCTYPE element to be rendered above/outside "nodeBox" */
+  /* Note: to be fixed in Bug #688439 */
+  margin-top: 16px;
+}
+
+.nodeWhiteSpace {
+  border: 1px solid LightGray;
+  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
+  margin-left: 1px;
+  color: gray;
+}
+
+.nodeWhiteSpace_Space {
+  border: 1px solid #ddd;
+}
+
+.nodeTextEntity {
+  border: 1px solid gray;
+  white-space: pre; /* otherwise the border will be collapsed around zero pixels */
+  margin-left: 1px;
+}
+
+.nodeComment {
+  color: DarkGreen;
+}
+
+.nodeBox.highlightOpen > .nodeLabel {
+  background-color: #EEEEEE;
+}
+
+.nodeBox.highlightOpen > .nodeCloseLabel,
+.nodeBox.highlightOpen > .nodeChildBox,
+.nodeBox.open > .nodeCloseLabel,
+.nodeBox.open > .nodeChildBox {
+  display: block;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: Highlight;
+  background-color: Highlight;
+  color: HighlightText !important;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: inherit !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: Highlight !important;
+  background-color: cyan !important;
+  color: #000000 !important;
+}
+
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: #000000 !important;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox,
+.nodeBox.nodeHidden .nodeCloseLabel,
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeText,
+.nodeBox.nodeHidden .nodeText {
+  color: #888888;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.nodeHidden .nodeCloseLabel > .nodeCloseLabelBox > .nodeTag {
+  color: #5F82D9;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue {
+  color: #D86060;
+}
+
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: SkyBlue !important;
+}
+
+.nodeBox.mutated > .nodeLabel,
+.nodeAttr.mutated,
+.nodeValue.mutated,
+.nodeText.mutated,
+.nodeBox.mutated > .nodeText {
+  background-color: #EFFF79;
+  color: #FF0000 !important;
+}
+
+.nodeBox.selected.mutated > .nodeLabel,
+.nodeBox.selected.mutated > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr.mutated > .nodeValue,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue.mutated,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText.mutated {
+  background-color: #EFFF79;
+  border-color: #EFFF79;
+  color: #FF0000 !important;
+}
+
+.logRow-dirxml {
+  padding-left: 0;
+}
+
+.soloElement > .nodeBox  {
+  padding-left: 0;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: #3875d7;
+  background-color: #3875d7;
+  color: #FFFFFF !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: #3875d7 !important;
+}
+
+/************************************************************************************************/
+/* Twisties */
+
+.twisty
+{
+  -moz-appearance: treetwisty;
+}
+
+.nodeBox.highlightOpen > .nodeLabel > .twisty,
+.nodeBox.open > .nodeLabel > .twisty
+{
+  -moz-appearance: treetwistyopen;
+}
+
+.memberRow.hasChildren > .memberLabelCell > .memberLabel,
+.hasHeaders .netHrefLabel {
+  background-position: 2px 2px;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: #3875d7;
+  background-color: #3875d7;
+  color: #FFFFFF !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: #3875d7 !important;
+}
+
+.editingAttributeValue {
+  background-color: #492;
+}
+
+#attribute-editor {
+  visibility: hidden;
+  position: absolute;
+  z-index: 5000;
+  background-color: #fff;
+  border: 1px solid #000;
+}
+
+#attribute-editor.editing {
+  visibility: visible;
+}
+
+#attribute-editor-input {
+  border: none;
+  padding: 2px 5px;
+  font-family: Menlo, Andale Mono, monospace;
+  font-size: 11px;
+}
--- a/browser/themes/pinstripe/jar.mn
+++ b/browser/themes/pinstripe/jar.mn
@@ -53,16 +53,17 @@ browser.jar:
   skin/classic/browser/feeds/videoFeedIcon.png              (feeds/feedIcon.png)
   skin/classic/browser/feeds/videoFeedIcon16.png            (feeds/feedIcon16.png)
   skin/classic/browser/feeds/audioFeedIcon.png              (feeds/feedIcon.png)
   skin/classic/browser/feeds/audioFeedIcon16.png            (feeds/feedIcon16.png)
   skin/classic/browser/newtab/newTab.css                    (newtab/newTab.css)
   skin/classic/browser/newtab/strip.png                     (newtab/strip.png)
   skin/classic/browser/newtab/toolbar.png                   (newtab/toolbar.png)
   skin/classic/browser/setDesktopBackground.css
+  skin/classic/browser/inspector.css
   skin/classic/browser/monitor.png
   skin/classic/browser/monitor_16-10.png
   skin/classic/browser/places/allBookmarks.png              (places/allBookmarks.png)
 * skin/classic/browser/places/places.css                    (places/places.css)
 * skin/classic/browser/places/organizer.css                 (places/organizer.css)
   skin/classic/browser/places/query.png                     (places/query.png)
   skin/classic/browser/places/bookmarksMenu.png             (places/bookmarksMenu.png)
   skin/classic/browser/places/bookmarksToolbar.png          (places/bookmarksToolbar.png)
@@ -121,21 +122,19 @@ browser.jar:
   skin/classic/browser/tabview/edit-light.png               (tabview/edit-light.png)
   skin/classic/browser/tabview/search.png                   (tabview/search.png)
   skin/classic/browser/tabview/stack-expander.png           (tabview/stack-expander.png)
   skin/classic/browser/tabview/tabview.png                  (tabview/tabview.png)
   skin/classic/browser/tabview/tabview.css                  (tabview/tabview.css)
 * skin/classic/browser/devtools/common.css                  (devtools/common.css)
   skin/classic/browser/devtools/arrows.png                  (devtools/arrows.png)
   skin/classic/browser/devtools/commandline.png             (devtools/commandline.png)
-  skin/classic/browser/devtools/alerticon-warning.png       (devtools/alerticon-warning.png)
   skin/classic/browser/devtools/goto-mdn.png                (devtools/goto-mdn.png)
   skin/classic/browser/devtools/csshtmltree.css             (devtools/csshtmltree.css)
   skin/classic/browser/devtools/gcli.css                    (devtools/gcli.css)
-  skin/classic/browser/devtools/htmlpanel.css               (devtools/htmlpanel.css)
   skin/classic/browser/devtools/orion.css                   (devtools/orion.css)
   skin/classic/browser/devtools/orion-container.css         (devtools/orion-container.css)
   skin/classic/browser/devtools/orion-task.png              (devtools/orion-task.png)
   skin/classic/browser/devtools/orion-breakpoint.png        (devtools/orion-breakpoint.png)
   skin/classic/browser/devtools/toolbarbutton-close.png     (devtools/toolbarbutton-close.png)
 * skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
   skin/classic/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
   skin/classic/browser/devtools/webconsole.png                  (devtools/webconsole.png)
@@ -161,20 +160,20 @@ browser.jar:
   skin/classic/browser/devtools/breadcrumbs/rtl-middle.png                   (devtools/breadcrumbs/rtl-middle.png)
   skin/classic/browser/devtools/breadcrumbs/rtl-start-pressed.png            (devtools/breadcrumbs/rtl-start-pressed.png)
   skin/classic/browser/devtools/breadcrumbs/rtl-start-selected-pressed.png   (devtools/breadcrumbs/rtl-start-selected-pressed.png)
   skin/classic/browser/devtools/breadcrumbs/rtl-start.png                    (devtools/breadcrumbs/rtl-start.png)
   skin/classic/browser/devtools/breadcrumbs/rtl-start-selected.png           (devtools/breadcrumbs/rtl-start-selected.png)
   skin/classic/browser/devtools/splitview.css               (devtools/splitview.css)
   skin/classic/browser/devtools/styleeditor.css             (devtools/styleeditor.css)
   skin/classic/browser/devtools/debugger.css                (devtools/debugger.css)
-  skin/classic/browser/devtools/magnifying-glass.png        (devtools/magnifying-glass.png)
-  skin/classic/browser/devtools/itemToggle.png              (devtools/itemToggle.png)
-  skin/classic/browser/devtools/itemArrow-rtl.png           (devtools/itemArrow-rtl.png)
-  skin/classic/browser/devtools/itemArrow-ltr.png           (devtools/itemArrow-ltr.png)
+  skin/classic/browser/devtools/magnifying-glass.png	    (devtools/magnifying-glass.png)
+  skin/classic/browser/devtools/itemToggle.png		    (devtools/itemToggle.png)
+  skin/classic/browser/devtools/itemArrow-rtl.png	    (devtools/itemArrow-rtl.png)
+  skin/classic/browser/devtools/itemArrow-ltr.png	    (devtools/itemArrow-ltr.png)
   skin/classic/browser/devtools/background-noise-toolbar.png (devtools/background-noise-toolbar.png)
 #ifdef MOZ_SERVICES_SYNC
   skin/classic/browser/sync-throbber.png
   skin/classic/browser/sync-16.png
   skin/classic/browser/sync-32.png
   skin/classic/browser/sync-bg.png
   skin/classic/browser/sync-128.png
   skin/classic/browser/sync-desktopIcon.png
index 250ea7463d2e9e29b80ad796154e7f5fcada1992..5c5881d51490c78ca606db20ca0a4adc51e1e602
GIT binary patch
literal 5117
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
index 1a61727c9139837a0641fc7b47d7bbb196ffbc2b..82b15982d32fd5134e7f5a8777a7af5d7ec63e31
GIT binary patch
literal 12714
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
deleted file mode 100644
index 5c5d0aec58bd073334798117dc955d67edeb0276..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/browser/themes/winstripe/devtools/csshtmltree.css
+++ b/browser/themes/winstripe/devtools/csshtmltree.css
@@ -212,29 +212,16 @@
 .ruleview-rule-source:hover {
   text-decoration: underline;
 }
 
 .ruleview-code {
   padding: 2px 5px;
 }
 
-.ruleview-warning {
-  background: url("chrome://browser/skin/devtools/alerticon-warning.png");
-  display: inline-block;
-  -moz-margin-start: 5px;
-  vertical-align: middle;
-  width: 13px;
-  height: 12px;
-}
-
-.ruleview-warning[hidden] {
-  display: none;
-}
-
 .ruleview-ruleopen {
   -moz-padding-end: 5px;
 }
 
 .ruleview-propertylist {
   list-style: none;
   padding: 0;
   margin: 0;
--- a/browser/themes/winstripe/devtools/debugger.css
+++ b/browser/themes/winstripe/devtools/debugger.css
@@ -111,23 +111,18 @@ a {
 /**
  * Stack frames
  */
 
 #stackframes {
   background-color: white;
 }
 
-.dbg-stackframe {
-  -moz-padding-start: 4px;
-  -moz-padding-end: 4px;
-}
-
-.dbg-stackframe-name {
-  font-weight: 600;
+.dbg-stackframe-id {
+  -moz-padding-end: 1em;
 }
 
 /**
  * Properties elements
  */
 
 #variables {
   background-color: white;
deleted file mode 100644
--- a/browser/themes/winstripe/devtools/htmlpanel.css
+++ /dev/null
@@ -1,377 +0,0 @@
-/*
- * Software License Agreement (BSD License)
- *
- * Copyright (c) 2007, Parakey Inc.
- * All rights reserved.
- * 
- * Redistribution and use of this software in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- * 
- * * Redistributions of source code must retain the above
- *   copyright notice, this list of conditions and the
- *   following disclaimer.
- * 
- * * Redistributions in binary form must reproduce the above
- *   copyright notice, this list of conditions and the
- *   following disclaimer in the documentation and/or other
- *   materials provided with the distribution.
- * 
- * * Neither the name of Parakey Inc. nor the names of its
- *   contributors may be used to endorse or promote products
- *   derived from this software without specific prior
- *   written permission of Parakey Inc.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
- * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-/*
- * Creator:
- *  Joe Hewitt
- * Contributors
- *  John J. Barton (IBM Almaden)
- *  Jan Odvarko (Mozilla Corp.)
- *  Max Stepanov (Aptana Inc.)
- *  Rob Campbell (Mozilla Corp.)
- *  Hans Hillen (Paciello Group, Mozilla)
- *  Curtis Bartley (Mozilla Corp.)
- *  Mike Collins (IBM Almaden)
- *  Kevin Decker
- *  Mike Ratcliffe (Comartis AG)
- *  Hernan Rodríguez Colmeiro
- *  Austin Andrews
- *  Christoph Dorn
- *  Steven Roussey (AppCenter Inc, Network54)
- */
-
-html {
-  background-color: -moz-dialog;
-}
-
-body {
-  margin: 0;
-  overflow: auto;
-  font-family: Lucida Grande, sans-serif;
-  font-size: 11px;
-  padding-top: 5px;
-}
-
-h1 {
-  font-size: 17px;
-  border-bottom: 1px solid threedlightshadow;
-}
-
-a {
-  color: #0000ff;
-}
-
-pre {
-  margin: 0;
-  font: inherit;
-}
-
-code {
-  display: block;
-  white-space: pre;
-}
-
-/* DOMPlate */
-
-.objectLink-element,
-.objectLink-textNode,
-.objectLink-function,
-.objectBox-stackTrace,
-.objectLink-profile {
-  font-family: Menlo, Andale Mono, monospace;
-}
-
-.objectLink-textNode {
-  white-space: pre-wrap;
-}
-
-.objectLink-styleRule,
-.objectLink-element,
-.objectLink-textNode {
-  color: #000088;
-}
-
-.selectorTag,
-.selectorId,
-.selectorClass {
-  font-family: Menlo, Andale Mono, monospace;
-  font-weight: normal;
-}
-
-.selectorTag {
-  color: #0000FF;
-}
-
-.selectorId {
-  color: DarkBlue;
-}
-
-.selectorClass {
-  color: red;
-}
-
-.selectorHidden > .selectorTag {
-  color: #5F82D9;
-}
-
-.selectorHidden > .selectorId {
-  color: #888888;
-}
-
-.selectorHidden > .selectorClass {
-  color: #D86060;
-}
-
-.selectorValue {
-  font-family: Menlo, Andale Mono, monospace;
-  font-style: italic;
-  color: #555555;
-}
-
-.panelNode-html {
-  -moz-box-sizing: padding-box;
-  padding: 4px 0 0 2px;
-}
-
-.nodeBox {
-  position: relative;
-  font-family: Menlo, Andale Mono, monospace;
-  padding-left: 13px;
-  -moz-user-select: -moz-none;
-}
-
-.nodeBox.search-selection {
-  -moz-user-select: text;
-}
-
-.twisty {
-  position: absolute;
-  left: 0px;
-  top: 0px;
-  width: 14px;
-  height: 14px;
-}
-
-.nodeChildBox {
-  margin-left: 12px;
-  display: none;
-}
-
-.nodeLabel,
-.nodeCloseLabel {
-  margin: -2px 2px 0 2px;
-  border: 2px solid transparent;
-  border-radius: 3px;
-  padding: 0 2px;
-  color: #000088;
-}
-
-.nodeCloseLabel {
-  display: none;
-}
-
-.nodeTag {
-  cursor: pointer;
-  color: blue;
-}
-
-.nodeValue {
-  color: #FF0000;
-  font-weight: normal;
-}
-
-.nodeText,
-.nodeComment {
-  margin: 0 2px;
-  vertical-align: top;
-}
-
-.nodeText {
-  color: #333333;
-}
-
-.docType {
-  position: absolute;
-  /* position DOCTYPE element above/outside the "nodeBox" that contains it */
-  /* Note: to be fixed in Bug #688439 */
-  top: -16px;
-  font-family: Menlo, Andale Mono, monospace;
-  padding-left: 8px;
-  color: #999;
-  white-space: nowrap;
-  font-style: italic;
-}
-
-.htmlNodeBox {
-  /* make room for DOCTYPE element to be rendered above/outside "nodeBox" */
-  /* Note: to be fixed in Bug #688439 */
-  margin-top: 16px;
-}
-
-.nodeWhiteSpace {
-  border: 1px solid LightGray;
-  white-space: pre;
-  margin-left: 1px;
-  color: gray;
-}
-
-.nodeWhiteSpace_Space {
-  border: 1px solid #ddd;
-}
-
-.nodeTextEntity {
-  border: 1px solid gray;
-  white-space: pre;
-  margin-left: 1px;
-}
-
-.nodeComment {
-  color: DarkGreen;
-}
-
-.nodeBox.highlightOpen > .nodeLabel {
-  background-color: #EEEEEE;
-}
-
-.nodeBox.highlightOpen > .nodeCloseLabel,
-.nodeBox.highlightOpen > .nodeChildBox,
-.nodeBox.open > .nodeCloseLabel,
-.nodeBox.open > .nodeChildBox {
-  display: block;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: Highlight;
-  background-color: Highlight;
-  color: HighlightText !important;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: inherit !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: Highlight !important;
-  background-color: cyan !important;
-  color: #000000 !important;
-}
-
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: #000000 !important;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox,
-.nodeBox.nodeHidden .nodeCloseLabel,
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeText,
-.nodeBox.nodeHidden .nodeText {
-  color: #888888;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.nodeHidden .nodeCloseLabel > .nodeCloseLabelBox > .nodeTag {
-  color: #5F82D9;
-}
-
-.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue {
-  color: #D86060;
-}
-
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
-.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeText {
-  color: SkyBlue !important;
-}
-
-.nodeBox.mutated > .nodeLabel,
-.nodeAttr.mutated,
-.nodeValue.mutated,
-.nodeText.mutated,
-.nodeBox.mutated > .nodeText {
-  background-color: #EFFF79;
-  color: #FF0000 !important;
-}
-
-.nodeBox.selected.mutated > .nodeLabel,
-.nodeBox.selected.mutated > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr.mutated > .nodeValue,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue.mutated,
-.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText.mutated {
-  background-color: #EFFF79;
-  border-color: #EFFF79;
-  color: #FF0000 !important;
-}
-
-.logRow-dirxml {
-  padding-left: 0;
-}
-
-.soloElement > .nodeBox  {
-  padding-left: 0;
-}
-
-.nodeBox.selected > .nodeLabel > .nodeLabelBox,
-.nodeBox.selected > .nodeLabel {
-  border-color: #3875d7;
-  background-color: #3875d7;
-  color: #FFFFFF !important;
-}
-
-.nodeBox.highlighted > .nodeLabel {
-  border-color: #3875d7 !important;
-}
-
-/* Twisties */
-
-.twisty
-{
-  background-repeat: no-repeat;
-  background-position: center;
-  background-image: url("chrome://global/skin/tree/twisty-clsd.png") !important;
-}
-
-.nodeBox.highlightOpen > .nodeLabel > .twisty,
-.nodeBox.open > .nodeLabel > .twisty
-{
-  background-image: url("chrome://global/skin/tree/twisty-open.png") !important;
-}
-
-.editingAttributeValue {
-  background-color: #492;
-}
-
-#attribute-editor {
-  visibility: hidden;
-  position: absolute;
-  z-index: 5000;
-  background-color: #fff;
-  border: 1px solid #000;
-}
-
-#attribute-editor.editing {
-  visibility: visible;
-}
-
-#attribute-editor-input {
-  border: none;
-  padding: 2px 5px;
-  font-family: Menlo, Andale Mono, monospace;
-  font-size: 11px;
-}
new file mode 100644
--- /dev/null
+++ b/browser/themes/winstripe/inspector.css
@@ -0,0 +1,377 @@
+/*
+ * Software License Agreement (BSD License)
+ *
+ * Copyright (c) 2007, Parakey Inc.
+ * All rights reserved.
+ * 
+ * Redistribution and use of this software in source and binary forms, with or without modification,
+ * are permitted provided that the following conditions are met:
+ * 
+ * * Redistributions of source code must retain the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer.
+ * 
+ * * Redistributions in binary form must reproduce the above
+ *   copyright notice, this list of conditions and the
+ *   following disclaimer in the documentation and/or other
+ *   materials provided with the distribution.
+ * 
+ * * Neither the name of Parakey Inc. nor the names of its
+ *   contributors may be used to endorse or promote products
+ *   derived from this software without specific prior
+ *   written permission of Parakey Inc.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
+ * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * Creator:
+ *  Joe Hewitt
+ * Contributors
+ *  John J. Barton (IBM Almaden)
+ *  Jan Odvarko (Mozilla Corp.)
+ *  Max Stepanov (Aptana Inc.)
+ *  Rob Campbell (Mozilla Corp.)
+ *  Hans Hillen (Paciello Group, Mozilla)
+ *  Curtis Bartley (Mozilla Corp.)
+ *  Mike Collins (IBM Almaden)
+ *  Kevin Decker
+ *  Mike Ratcliffe (Comartis AG)
+ *  Hernan Rodríguez Colmeiro
+ *  Austin Andrews
+ *  Christoph Dorn
+ *  Steven Roussey (AppCenter Inc, Network54)
+ */
+
+html {
+  background-color: -moz-dialog;
+}
+
+body {
+  margin: 0;
+  overflow: auto;
+  font-family: Lucida Grande, sans-serif;
+  font-size: 11px;
+  padding-top: 5px;
+}
+
+h1 {
+  font-size: 17px;
+  border-bottom: 1px solid threedlightshadow;
+}
+
+a {
+  color: #0000ff;
+}
+
+pre {
+  margin: 0;
+  font: inherit;
+}
+
+code {
+  display: block;
+  white-space: pre;
+}
+
+/* DOMPlate */
+
+.objectLink-element,
+.objectLink-textNode,
+.objectLink-function,
+.objectBox-stackTrace,
+.objectLink-profile {
+  font-family: Menlo, Andale Mono, monospace;
+}
+
+.objectLink-textNode {
+  white-space: pre-wrap;
+}
+
+.objectLink-styleRule,
+.objectLink-element,
+.objectLink-textNode {
+  color: #000088;
+}
+
+.selectorTag,
+.selectorId,
+.selectorClass {
+  font-family: Menlo, Andale Mono, monospace;
+  font-weight: normal;
+}
+
+.selectorTag {
+  color: #0000FF;
+}
+
+.selectorId {
+  color: DarkBlue;
+}
+
+.selectorClass {
+  color: red;
+}
+
+.selectorHidden > .selectorTag {
+  color: #5F82D9;
+}
+
+.selectorHidden > .selectorId {
+  color: #888888;
+}
+
+.selectorHidden > .selectorClass {
+  color: #D86060;
+}
+
+.selectorValue {
+  font-family: Menlo, Andale Mono, monospace;
+  font-style: italic;
+  color: #555555;
+}
+
+.panelNode-html {
+  -moz-box-sizing: padding-box;
+  padding: 4px 0 0 2px;
+}
+
+.nodeBox {
+  position: relative;
+  font-family: Menlo, Andale Mono, monospace;
+  padding-left: 13px;
+  -moz-user-select: -moz-none;
+}
+
+.nodeBox.search-selection {
+  -moz-user-select: text;
+}
+
+.twisty {
+  position: absolute;
+  left: 0px;
+  top: 0px;
+  width: 14px;
+  height: 14px;
+}
+
+.nodeChildBox {
+  margin-left: 12px;
+  display: none;
+}
+
+.nodeLabel,
+.nodeCloseLabel {
+  margin: -2px 2px 0 2px;
+  border: 2px solid transparent;
+  border-radius: 3px;
+  padding: 0 2px;
+  color: #000088;
+}
+
+.nodeCloseLabel {
+  display: none;
+}
+
+.nodeTag {
+  cursor: pointer;
+  color: blue;
+}
+
+.nodeValue {
+  color: #FF0000;
+  font-weight: normal;
+}
+
+.nodeText,
+.nodeComment {
+  margin: 0 2px;
+  vertical-align: top;
+}
+
+.nodeText {
+  color: #333333;
+}
+
+.docType {
+  position: absolute;
+  /* position DOCTYPE element above/outside the "nodeBox" that contains it */
+  /* Note: to be fixed in Bug #688439 */
+  top: -16px;
+  font-family: Menlo, Andale Mono, monospace;
+  padding-left: 8px;
+  color: #999;
+  white-space: nowrap;
+  font-style: italic;
+}
+
+.htmlNodeBox {
+  /* make room for DOCTYPE element to be rendered above/outside "nodeBox" */
+  /* Note: to be fixed in Bug #688439 */
+  margin-top: 16px;
+}
+
+.nodeWhiteSpace {
+  border: 1px solid LightGray;
+  white-space: pre;
+  margin-left: 1px;
+  color: gray;
+}
+
+.nodeWhiteSpace_Space {
+  border: 1px solid #ddd;
+}
+
+.nodeTextEntity {
+  border: 1px solid gray;
+  white-space: pre;
+  margin-left: 1px;
+}
+
+.nodeComment {
+  color: DarkGreen;
+}
+
+.nodeBox.highlightOpen > .nodeLabel {
+  background-color: #EEEEEE;
+}
+
+.nodeBox.highlightOpen > .nodeCloseLabel,
+.nodeBox.highlightOpen > .nodeChildBox,
+.nodeBox.open > .nodeCloseLabel,
+.nodeBox.open > .nodeChildBox {
+  display: block;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: Highlight;
+  background-color: Highlight;
+  color: HighlightText !important;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: inherit !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: Highlight !important;
+  background-color: cyan !important;
+  color: #000000 !important;
+}
+
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.highlighted > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: #000000 !important;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox,
+.nodeBox.nodeHidden .nodeCloseLabel,
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeText,
+.nodeBox.nodeHidden .nodeText {
+  color: #888888;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.nodeHidden .nodeCloseLabel > .nodeCloseLabelBox > .nodeTag {
+  color: #5F82D9;
+}
+
+.nodeBox.nodeHidden .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue {
+  color: #D86060;
+}
+
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeTag,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue,
+.nodeBox.nodeHidden.selected > .nodeLabel > .nodeLabelBox > .nodeText {
+  color: SkyBlue !important;
+}
+
+.nodeBox.mutated > .nodeLabel,
+.nodeAttr.mutated,
+.nodeValue.mutated,
+.nodeText.mutated,
+.nodeBox.mutated > .nodeText {
+  background-color: #EFFF79;
+  color: #FF0000 !important;
+}
+
+.nodeBox.selected.mutated > .nodeLabel,
+.nodeBox.selected.mutated > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr.mutated > .nodeValue,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeAttr > .nodeValue.mutated,
+.nodeBox.selected > .nodeLabel > .nodeLabelBox > .nodeText.mutated {
+  background-color: #EFFF79;
+  border-color: #EFFF79;
+  color: #FF0000 !important;
+}
+
+.logRow-dirxml {
+  padding-left: 0;
+}
+
+.soloElement > .nodeBox  {
+  padding-left: 0;
+}
+
+.nodeBox.selected > .nodeLabel > .nodeLabelBox,
+.nodeBox.selected > .nodeLabel {
+  border-color: #3875d7;
+  background-color: #3875d7;
+  color: #FFFFFF !important;
+}
+
+.nodeBox.highlighted > .nodeLabel {
+  border-color: #3875d7 !important;
+}
+
+/* Twisties */
+
+.twisty
+{
+  background-repeat: no-repeat;
+  background-position: center;
+  background-image: url("chrome://global/skin/tree/twisty-clsd.png") !important;
+}
+
+.nodeBox.highlightOpen > .nodeLabel > .twisty,
+.nodeBox.open > .nodeLabel > .twisty
+{
+  background-image: url("chrome://global/skin/tree/twisty-open.png") !important;
+}
+
+.editingAttributeValue {
+  background-color: #492;
+}
+
+#attribute-editor {
+  visibility: hidden;
+  position: absolute;
+  z-index: 5000;
+  background-color: #fff;
+  border: 1px solid #000;
+}
+
+#attribute-editor.editing {
+  visibility: visible;
+}
+
+#attribute-editor-input {
+  border: none;
+  padding: 2px 5px;
+  font-family: Menlo, Andale Mono, monospace;
+  font-size: 11px;
+}
--- a/browser/themes/winstripe/jar.mn
+++ b/browser/themes/winstripe/jar.mn
@@ -55,16 +55,17 @@ browser.jar:
         skin/classic/browser/feeds/audioFeedIcon16.png               (feeds/feedIcon16.png)
         skin/classic/browser/feeds/videoFeedIcon.png                 (feeds/feedIcon.png)
         skin/classic/browser/feeds/videoFeedIcon16.png               (feeds/feedIcon16.png)
         skin/classic/browser/feeds/subscribe.css                     (feeds/subscribe.css)
         skin/classic/browser/feeds/subscribe-ui.css                  (feeds/subscribe-ui.css)
         skin/classic/browser/newtab/newTab.css                       (newtab/newTab.css)
         skin/classic/browser/newtab/strip.png                        (newtab/strip.png)
         skin/classic/browser/newtab/toolbar.png                      (newtab/toolbar.png)
+        skin/classic/browser/inspector.css
         skin/classic/browser/places/places.css                       (places/places.css)
 *       skin/classic/browser/places/organizer.css                    (places/organizer.css)
         skin/classic/browser/places/bookmark.png                     (places/bookmark.png)
         skin/classic/browser/places/editBookmark.png                 (places/editBookmark.png)
         skin/classic/browser/places/query.png                        (places/query.png)
         skin/classic/browser/places/bookmarksMenu.png                (places/bookmarksMenu.png)
         skin/classic/browser/places/bookmarksToolbar.png             (places/bookmarksToolbar.png)
         skin/classic/browser/places/calendar.png                     (places/calendar.png)
@@ -106,21 +107,19 @@ browser.jar:
         skin/classic/browser/tabview/search.png                     (tabview/search.png)
         skin/classic/browser/tabview/stack-expander.png             (tabview/stack-expander.png)
         skin/classic/browser/tabview/tabview.png                    (tabview/tabview.png)
         skin/classic/browser/tabview/tabview-inverted.png           (tabview/tabview-inverted.png)
         skin/classic/browser/tabview/tabview.css                    (tabview/tabview.css)
         skin/classic/browser/devtools/common.css                    (devtools/common.css)
         skin/classic/browser/devtools/arrows.png                    (devtools/arrows.png)
         skin/classic/browser/devtools/commandline.png               (devtools/commandline.png)
-        skin/classic/browser/devtools/alerticon-warning.png         (devtools/alerticon-warning.png)
         skin/classic/browser/devtools/goto-mdn.png                  (devtools/goto-mdn.png)
         skin/classic/browser/devtools/csshtmltree.css               (devtools/csshtmltree.css)
         skin/classic/browser/devtools/gcli.css                      (devtools/gcli.css)
-        skin/classic/browser/devtools/htmlpanel.css                 (devtools/htmlpanel.css)
         skin/classic/browser/devtools/orion.css                     (devtools/orion.css)
         skin/classic/browser/devtools/orion-container.css           (devtools/orion-container.css)
         skin/classic/browser/devtools/orion-task.png                (devtools/orion-task.png)
         skin/classic/browser/devtools/orion-breakpoint.png          (devtools/orion-breakpoint.png)
         skin/classic/browser/devtools/toolbarbutton-close.png       (devtools/toolbarbutton-close.png)
         skin/classic/browser/devtools/webconsole.css                  (devtools/webconsole.css)
         skin/classic/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
         skin/classic/browser/devtools/webconsole.png                  (devtools/webconsole.png)
@@ -225,16 +224,17 @@ browser.jar:
         skin/classic/aero/browser/feeds/audioFeedIcon16.png          (feeds/feedIcon16-aero.png)
         skin/classic/aero/browser/feeds/videoFeedIcon.png            (feeds/feedIcon-aero.png)
         skin/classic/aero/browser/feeds/videoFeedIcon16.png          (feeds/feedIcon16-aero.png)
         skin/classic/aero/browser/feeds/subscribe.css                (feeds/subscribe.css)
         skin/classic/aero/browser/feeds/subscribe-ui.css             (feeds/subscribe-ui.css)
         skin/classic/aero/browser/newtab/newTab.css                  (newtab/newTab.css)
         skin/classic/aero/browser/newtab/strip.png                   (newtab/strip.png)
         skin/classic/aero/browser/newtab/toolbar.png                 (newtab/toolbar.png)
+        skin/classic/aero/browser/inspector.css
 *       skin/classic/aero/browser/places/places.css                  (places/places-aero.css)
 *       skin/classic/aero/browser/places/organizer.css               (places/organizer-aero.css)
         skin/classic/aero/browser/places/bookmark.png                (places/bookmark.png)
         skin/classic/aero/browser/places/editBookmark.png            (places/editBookmark.png)
         skin/classic/aero/browser/places/query.png                   (places/query-aero.png)
         skin/classic/aero/browser/places/bookmarksMenu.png           (places/bookmarksMenu-aero.png)
         skin/classic/aero/browser/places/bookmarksToolbar.png        (places/bookmarksToolbar-aero.png)
         skin/classic/aero/browser/places/calendar.png                (places/calendar-aero.png)
@@ -276,21 +276,19 @@ browser.jar:
         skin/classic/aero/browser/tabview/search.png                 (tabview/search.png)
         skin/classic/aero/browser/tabview/stack-expander.png         (tabview/stack-expander.png)
         skin/classic/aero/browser/tabview/tabview.png                (tabview/tabview.png)
         skin/classic/aero/browser/tabview/tabview-inverted.png       (tabview/tabview-inverted.png)
         skin/classic/aero/browser/tabview/tabview.css                (tabview/tabview.css)
         skin/classic/aero/browser/devtools/common.css                (devtools/common.css)
         skin/classic/aero/browser/devtools/arrows.png                (devtools/arrows.png)
         skin/classic/aero/browser/devtools/commandline.png           (devtools/commandline.png)
-        skin/classic/aero/browser/devtools/alerticon-warning.png     (devtools/alerticon-warning.png)
         skin/classic/aero/browser/devtools/goto-mdn.png              (devtools/goto-mdn.png)
         skin/classic/aero/browser/devtools/csshtmltree.css           (devtools/csshtmltree.css)
         skin/classic/aero/browser/devtools/gcli.css                  (devtools/gcli.css)
-        skin/classic/aero/browser/devtools/htmlpanel.css             (devtools/htmlpanel.css)
         skin/classic/aero/browser/devtools/orion.css                 (devtools/orion.css)
         skin/classic/aero/browser/devtools/orion-container.css       (devtools/orion-container.css)
         skin/classic/aero/browser/devtools/orion-task.png            (devtools/orion-task.png)
         skin/classic/aero/browser/devtools/orion-breakpoint.png      (devtools/orion-breakpoint.png)
         skin/classic/aero/browser/devtools/toolbarbutton-close.png   (devtools/toolbarbutton-close.png)
         skin/classic/aero/browser/devtools/webconsole.css                  (devtools/webconsole.css)
         skin/classic/aero/browser/devtools/webconsole_networkpanel.css     (devtools/webconsole_networkpanel.css)
         skin/classic/aero/browser/devtools/webconsole.png                  (devtools/webconsole.png)
index 7cea7bdd8f7f073156e7fe505fa842ded15195c0..c25c98053b045908ecb130bac2bebab64dbef7bb
GIT binary patch
literal 445
zc$@*f0Yd(XP)<h;3K|Lk000e1NJLTq000mG000sQ1^@s6QafI100001b5ch_0Itp)
z=>Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iph)
z1~44N^^DX200BKoL_t(I%gvI_O2bePMo-JNY0?IXU1(}46!Hi@f#9OjMVEr$w$J2N
z5PSkRYWJ1+28DtYS{Egnq<;`o7v7fJm|%B0%b9P!nK=ynb>z~L{gEdC1JGq^4$K_e
zijrE9VQc^mr5*tTz)uSE83sBa+O4MBZZ%zLq^Ak9Hpl}U*BieM6Dc?6feJvOpsCtQ
zf8+tgDie`$^Ect#7Gn*lCYj{q28TfH{Or^%l}!LjrpZyQ4#0T$$}|W7n1%uO58V@B
z=-AfV)<oSf*tZS<C=`pVR&u?vi4c1L#PMe;#5oXkpB_7E@#6C88sP5sW-IT7i%9lt
z3}(Q<3m0PrqUL|RuNz)~B`{GTZVcpy`RhlKw5!X-OdULNY-_aZAH)D*;Qz?&YA^?)
nUhlb+ym?mxl?m$2|1Z7(W9M+*n^KJE00000NkvXXu0mjftlhTH
index 960d4d75a826afe784389b9b98f308b969742c12..46f6d50e099d3449df363cdb1d4dcb88c5eb0dd5
GIT binary patch
literal 1202
zc$@*U1Wo&iP)<h;3K|Lk000e1NJLTq003G5000sQ1^@s6+oQ<?0000PbVXQnQ*UN;
zcVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBU$R7pfZRCwC#m`iUQMG(jPH81aDW_JPM
zM<gV~M%ZL6>=PU~BZMGANPGb<Mtp=E^AV5`xdPV+4oFDcEI}?HVaFuO#)c&c;UULK
z2w~^ZGfh>`%x1i^4mr$W4%<>|M%C5-t?izw{>{++-|vz_W8~zP%<xN2@SW>S*+h2T
zguX=nzulhUhqfQ)I*-@M7kcUKv+sOpH(IBJVU>1MMgj95KDhbi7Z*Ru{m`D<3IQ#>
zvc7sg6!yRnMk$I&M#Pl<?xme8=c>}l{m`D<>Zl{~$Nbr)<;B&P){ht$s+1G4q*wNK
z7K?s(pWBKl)qHw!@cavX!k8%MRwBv4_2HmOo!k#wZmXltWLDetWV79l=!|?&*?7^9
z6l}%jxgKdXTZGcGl2S^KSE-Zx<@a^fnJhG;R23yqFx7-BI&!9;bj}|6;hfTG!RWDI
zQk_ROVWdA<l@8-<V#7Ig)tM}GEJLQ^m@*+0I_APur$$U+Os5fEsZtbo5$8+?6vr{_
za02r=bf!DagG^MGAJys5bfdtO=s9)O5jld`20ywn+ILOMN*HCwc2GtUvrVq+DPC{=
zdf=jvli7+G(`q=w!@vIMn}!Ly%TpZ;3__5xByMA2Sfx&@=?w22{@G9BgtVKft&Tc0
z<LJ!=%Xk&ixpfk^#EE+FZxD^Z@44JBvwc^@pt;U$oeAEZefPaLyl!vBvTdjoG4ucV
z`{pMXE`0pK*4EZS+dBmts6r{>S?3B;Mg@V-?j0W9`t0*hM@0;(o6g3@#`|rzGq4>;
zr*|-Zxck-D-<+#T=dCwiKi_D&0|ifZ6oyzgbR`JKKDl@I&hGZNmqy3%&g=D-&kQ#1
z!yi*njOf+9ot4bKvi9=keS>oaI|OwHYLASG9|ZLBkKZp(V^H06aB)trt`S@ytgFB5
zr^r>6PN(<G;Kj8w+7>4<Xh>M_h>ZO)xw?0`jCXFkBVEspgb+jsPCDI=MlKJoJ<p5a
z-vUo7UEn2j$FTulIwdTtn~vA@i0ihAWm=jHy1fpmQs=2&7h>~}@$^RF%L^{FWttds
znK}gGU4|=6Q%8z(f(gapk1Bn#;>inRN$Q7)HXTsibU5W;=b8{W9AYASwkp$sMK=ut
z$SlcTULZ4AtT9i(oYF!gm(YxvH9%(w2*nG3m>{Uogl1!@A0;zhZ)&DPbFC@vtx5+=
z1}^+GThl_!$7)an2nU#=w-V|Mm0_UAf*@pJ1oi}zOz9NC4rxZisLa2$(}^Qs_C&wE
zVR--_Ql(A^2Oz|%pJW`%JNjTLDRH!Au%pqzHP^8h;E<P$E2Y_%#^KTMr#;uOj09_$
zP7M$lk9}rxTH@cj=`?I>c>A{-eaCk6f^w>cRq7}i4S&9Vt&e93vNJNZj3n`aI&6!V
zIC>rU@3kT)W(>GJZJ)u8+i<&+ndUkt=+MV}_)nhTgZGnsAfM|%`%i!Y0OW5Kfswqm
Q>;M1&07*qoM6N<$g6YOheE<Le
--- a/config/system-headers
+++ b/config/system-headers
@@ -908,17 +908,16 @@ xpt_xdr.h
 zmouse.h
 sslt.h
 smime.h
 cms.h
 sechash.h
 secoidt.h
 certdb.h
 secerr.h
-nssutil.h
 nssb64.h
 secasn1.h
 secder.h
 certt.h
 ocsp.h
 keyhi.h
 cryptohi.h
 crmf.h
--- a/configure.in
+++ b/configure.in
@@ -5152,20 +5152,20 @@ incorrect])
                       MOZ_ENABLE_QTMOBILITY=)
     if test "$MOZ_ENABLE_QTMOBILITY"; then
        MOZ_ENABLE_QTMOBILITY=1
        MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS $_QTMOBILITY_CFLAGS"
        MOZ_QT_LIBS="$MOZ_QT_LIBS $_QTMOBILITY_LIBS"
     else
        AC_CHECK_LIB(QtSensors, main, [
           MOZ_ENABLE_QTMOBILITY=1
-          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtMobility"
-          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtSensors"
-          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtFeedback"
-          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I$QTDIR/include/QtLocation"
+          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I/usr/include/qt4/QtMobility"
+          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I/usr/include/qt4/QtSensors"
+          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I/usr/include/qt4/QtFeedback"
+          MOZ_QT_CFLAGS="$MOZ_QT_CFLAGS -I/usr/include/qt4/QtLocation"
           MOZ_QT_LIBS="$MOZ_QT_LIBS -lQtSensors -lQtFeedback -lQtLocation"
        ])
     fi
     if test "$MOZ_ENABLE_QTMOBILITY"; then
        AC_DEFINE(MOZ_ENABLE_QTMOBILITY)
     fi
 fi
 
--- a/content/base/public/Element.h
+++ b/content/base/public/Element.h
@@ -100,16 +100,18 @@ public:
   Element(already_AddRefed<nsINodeInfo> aNodeInfo) :
     nsIContent(aNodeInfo),
     mState(NS_EVENT_STATE_MOZ_READONLY)
   {}
 #endif // MOZILLA_INTERNAL_API
 
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ELEMENT_IID)
 
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(Element, nsIContent)
+
   /**
    * Method to get the full state of this element.  See nsEventStates.h for
    * the possible bits that could be set here.
    */
   nsEventStates State() const {
     // mState is maintained by having whoever might have changed it
     // call UpdateState() or one of the other mState mutators.
     return mState;
--- a/content/base/public/nsContentUtils.h
+++ b/content/base/public/nsContentUtils.h
@@ -417,18 +417,18 @@ public:
 
   template<bool IsWhitespace(PRUnichar)>
   static const nsDependentSubstring TrimWhitespace(const nsAString& aStr,
                                                    bool aTrimTrailing = true);
 
   /**
    * Returns true if aChar is of class Ps, Pi, Po, Pf, or Pe.
    */
-  static bool IsFirstLetterPunctuation(PRUint32 aChar);
-  static bool IsFirstLetterPunctuationAt(const nsTextFragment* aFrag, PRUint32 aOffset);
+  static bool IsPunctuationMark(PRUint32 aChar);
+  static bool IsPunctuationMarkAt(const nsTextFragment* aFrag, PRUint32 aOffset);
  
   /**
    * Returns true if aChar is of class Lu, Ll, Lt, Lm, Lo, Nd, Nl or No
    */
   static bool IsAlphanumeric(PRUint32 aChar);
   static bool IsAlphanumericAt(const nsTextFragment* aFrag, PRUint32 aOffset);
 
   /*
--- a/content/base/public/nsIContent.h
+++ b/content/base/public/nsIContent.h
@@ -99,16 +99,18 @@ public:
   {
     NS_ASSERTION(mNodeInfo,
                  "No nsINodeInfo passed to nsIContent, PREPARE TO CRASH!!!");
   }
 #endif // MOZILLA_INTERNAL_API
 
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_ICONTENT_IID)
 
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsIContent, nsINode);
+
   /**
    * Bind this content node to a tree.  If this method throws, the caller must
    * call UnbindFromTree() on the node.  In the typical case of a node being
    * appended to a parent, this will be called after the node has been added to
    * the parent's child list and before nsIDocumentObserver notifications for
    * the addition are dispatched.
    * @param aDocument The new document for the content node.  Must match the
    *                  current document of aParent, if aParent is not null.
@@ -992,13 +994,14 @@ public:
   };
 
   // Tab focus model bit field:
   static PRInt32 sTabFocusModel;
 
   // accessibility.tabfocus_applies_to_xul pref - if it is set to true,
   // the tabfocus bit field applies to xul elements.
   static bool sTabFocusModelAppliesToXUL;
+
 };
 
 NS_DEFINE_STATIC_IID_ACCESSOR(nsIContent, NS_ICONTENT_IID)
 
 #endif /* nsIContent_h___ */
--- a/content/base/public/nsIDocument.h
+++ b/content/base/public/nsIDocument.h
@@ -106,17 +106,16 @@ class nsBindingManager;
 class nsIDOMNodeList;
 class mozAutoSubtreeModified;
 struct JSObject;
 class nsFrameLoader;
 class nsIBoxObject;
 class imgIRequest;
 class nsISHEntry;
 class nsDOMNavigationTiming;
-class nsWindowSizes;
 
 namespace mozilla {
 namespace css {
 class Loader;
 } // namespace css
 
 namespace dom {
 class Link;
@@ -152,16 +151,17 @@ enum DocumentFlavor {
 // Gecko.
 class nsIDocument : public nsINode
 {
 public:
   typedef mozilla::dom::Element Element;
 
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_IDOCUMENT_IID)
   NS_DECL_AND_IMPL_ZEROING_OPERATOR_NEW
+  NS_DECL_DOM_MEMORY_REPORTER_SIZEOF
 
 #ifdef MOZILLA_INTERNAL_API
   nsIDocument()
     : nsINode(nsnull),
       mCharacterSet(NS_LITERAL_CSTRING("ISO-8859-1")),
       mNodeInfoManager(nsnull),
       mCompatMode(eCompatibility_FullStandards),
       mIsInitialDocumentInWindow(false),
@@ -1612,25 +1612,17 @@ public:
 
   void SetNeedStyleFlush() {
     mNeedStyleFlush = true;
     if (mDisplayDocument) {
       mDisplayDocument->SetNeedStyleFlush();
     }
   }
 
-  // Note: nsIDocument is a sub-class of nsINode, which has a
-  // SizeOfExcludingThis function.  However, because nsIDocument objects can
-  // only appear at the top of the DOM tree, we have a specialized measurement
-  // function which returns multiple sizes.
-  virtual void DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const;
-  // DocSizeOfIncludingThis doesn't need to be overridden by sub-classes
-  // because nsIDocument inherits from nsINode;  see the comment above the
-  // declaration of nsINode::SizeOfIncludingThis.
-  virtual void DocSizeOfIncludingThis(nsWindowSizes* aWindowSizes) const;
+  virtual size_t SizeOfStyleSheets(nsMallocSizeOfFun aMallocSizeOf) const = 0;
 
 private:
   PRUint64 mWarnedAbout;
 
 protected:
   ~nsIDocument()
   {
     // XXX The cleanup of mNodeInfoManager (calling DropDocumentReference and
--- a/content/base/public/nsINode.h
+++ b/content/base/public/nsINode.h
@@ -297,49 +297,17 @@ private:
  * of nsIContent children and provides access to them.
  */
 class nsINode : public nsIDOMEventTarget,
                 public nsWrapperCache
 {
 public:
   NS_DECLARE_STATIC_IID_ACCESSOR(NS_INODE_IID)
 
-  // Among the sub-classes that inherit (directly or indirectly) from nsINode,
-  // measurement of the following members may be added later if DMD finds it is
-  // worthwhile:
-  // - nsGenericHTMLElement:  mForm, mFieldSet
-  // - nsGenericHTMLFrameElement: mFrameLoader (bug 672539), mTitleChangedListener
-  // - nsHTMLBodyElement:     mContentStyleRule
-  // - nsHTMLDataListElement: mOptions
-  // - nsHTMLFieldSetElement: mElements, mDependentElements, mFirstLegend
-  // - nsHTMLFormElement:     many!
-  // - nsHTMLFrameSetElement: mRowSpecs, mColSpecs
-  // - nsHTMLInputElement:    mInputData, mFiles, mFileList, mStaticDocfileList
-  // - nsHTMLMapElement:      mAreas
-  // - nsHTMLMediaElement:    many!
-  // - nsHTMLOutputElement:   mDefaultValue, mTokenList
-  // - nsHTMLRowElement:      mCells
-  // - nsHTMLSelectElement:   mOptions, mRestoreState
-  // - nsHTMLTableElement:    mTBodies, mRows, mTableInheritedAttributes
-  // - nsHTMLTableSectionElement: mRows
-  // - nsHTMLTextAreaElement: mControllers, mState
-  //
-  // The following members don't need to be measured:
-  // - nsIContent: mPrimaryFrame, because it's non-owning and measured elsewhere
-  //
-  NS_DECL_SIZEOF_EXCLUDING_THIS
-
-  // SizeOfIncludingThis doesn't need to be overridden by sub-classes because
-  // sub-classes of nsINode are guaranteed to be laid out in memory in such a
-  // way that |this| points to the start of the allocated object, even in
-  // methods of nsINode's sub-classes, and so |aMallocSizeOf(this)| is always
-  // safe to call no matter which object it was invoked on.
-  virtual size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const {
-    return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
-  }
+  NS_DECL_DOM_MEMORY_REPORTER_SIZEOF
 
   friend class nsNodeUtils;
   friend class nsNodeWeakReference;
   friend class nsNodeSupportsWeakRefTearoff;
   friend class nsAttrAndChildArray;
 
 #ifdef MOZILLA_INTERNAL_API
   nsINode(already_AddRefed<nsINodeInfo> aNodeInfo)
@@ -1358,17 +1326,16 @@ protected:
   void SetHasLockedStyleStates() { SetBoolFlag(ElementHasLockedStyleStates); }
   void ClearHasLockedStyleStates() { ClearBoolFlag(ElementHasLockedStyleStates); }
   bool HasLockedStyleStates() const
     { return GetBoolFlag(ElementHasLockedStyleStates); }
 
 public:
   // Optimized way to get classinfo.
   virtual nsXPCClassInfo* GetClassInfo() = 0;
-
 protected:
 
   // Override this function to create a custom slots class.
   virtual nsINode::nsSlots* CreateSlots();
 
   bool HasSlots() const
   {
     return mSlots != nsnull;
--- a/content/base/src/Makefile.in
+++ b/content/base/src/Makefile.in
@@ -205,17 +205,16 @@ INCLUDES	+= \
 		-I$(topsrcdir)/xpcom/io \
 		-I$(topsrcdir)/dom/ipc \
 		-I$(topsrcdir)/js/xpconnect/src \
 		-I$(topsrcdir)/caps/include \
 		-I$(topsrcdir)/netwerk/base/src \
 		$(NULL)
 
 DEFINES += -D_IMPL_NS_LAYOUT
-DEFINES += -DHB_DONT_DEFINE_STDINT
 
 # gcc requires -msse2 for this file since it uses SSE2 intrinsics.  (See bug
 # 585538 comment 12.)
 ifneq (,$(INTEL_ARCHITECTURE))
 ifdef GNU_CC
 nsTextFragmentSSE2.$(OBJ_SUFFIX): CXXFLAGS+=-msse2
 endif
 
--- a/content/base/src/nsAttrAndChildArray.cpp
+++ b/content/base/src/nsAttrAndChildArray.cpp
@@ -834,27 +834,31 @@ nsAttrAndChildArray::SetChildAtPos(void*
   }
   if (aIndex != aChildCount) {
     nsIContent* next = static_cast<nsIContent*>(*(aPos + 1));
     aChild->mNextSibling = next;
     next->mPreviousSibling = aChild;
   }
 }
 
-size_t
-nsAttrAndChildArray::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+PRInt64
+nsAttrAndChildArray::SizeOf() const
 {
-  size_t n = 0;
+  PRInt64 size = sizeof(*this);
+
   if (mImpl) {
     // Don't add the size taken by *mMappedAttrs because it's shared.
 
-    n += aMallocSizeOf(mImpl);
+    // mBuffer cointains InternalAttr and nsIContent* (even if it's void**)
+    // so, we just have to compute the size of *mBuffer given that this object
+    // doesn't own the children list.
+    size += mImpl->mBufferSize * sizeof(*(mImpl->mBuffer)) + NS_IMPL_EXTRA_SIZE;
 
     PRUint32 slotCount = AttrSlotCount();
     for (PRUint32 i = 0; i < slotCount && AttrSlotIsTaken(i); ++i) {
       nsAttrValue* value = &ATTRS(mImpl)[i].mValue;
-      n += value->SizeOfExcludingThis(aMallocSizeOf);
+      size += value->SizeOf() - sizeof(*value);
     }
   }
 
-  return n;
+  return size;
 }
 
--- a/content/base/src/nsAttrAndChildArray.h
+++ b/content/base/src/nsAttrAndChildArray.h
@@ -130,17 +130,17 @@ public:
   void Compact();
 
   bool CanFitMoreAttrs() const
   {
     return AttrSlotCount() < ATTRCHILD_ARRAY_MAX_ATTR_COUNT ||
            !AttrSlotIsTaken(ATTRCHILD_ARRAY_MAX_ATTR_COUNT - 1);
   }
 
-  size_t SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+  PRInt64 SizeOf() const;
   bool HasMappedAttrs() const
   {
     return MappedAttrCount();
   }
 
 private:
   nsAttrAndChildArray(const nsAttrAndChildArray& aOther) MOZ_DELETE;
   nsAttrAndChildArray& operator=(const nsAttrAndChildArray& aOther) MOZ_DELETE;
--- a/content/base/src/nsAttrValue.cpp
+++ b/content/base/src/nsAttrValue.cpp
@@ -1762,55 +1762,64 @@ nsAttrValue::StringToInteger(const nsASt
     if (!value) {
       *aStrict = false;
     }
   }
 
   return value;
 }
 
-size_t
-nsAttrValue::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+PRInt64
+nsAttrValue::SizeOf() const
 {
-  size_t n = 0;
+  PRInt64 size = sizeof(*this);
 
   switch (BaseType()) {
     case eStringBase:
     {
+      // TODO: we might be counting the string size more than once.
+      // This should be fixed with bug 677487.
       nsStringBuffer* str = static_cast<nsStringBuffer*>(GetPtr());
-      n += str ? str->SizeOfIncludingThisIfUnshared(aMallocSizeOf) : 0;
+      size += str ? str->StorageSize() : 0;
       break;
     }
     case eOtherBase:
     {
       MiscContainer* container = GetMiscContainer();
+
       if (!container) {
         break;
       }
-      n += aMallocSizeOf(container);
+
+      size += sizeof(*container);
 
       void* otherPtr = MISC_STR_PTR(container);
       // We only count the size of the object pointed by otherPtr if it's a
       // string. When it's an atom, it's counted separatly.
       if (otherPtr &&
           static_cast<ValueBaseType>(container->mStringBits & NS_ATTRVALUE_BASETYPE_MASK) == eStringBase) {
+        // TODO: we might be counting the string size more than once.
+        // This should be fixed with bug 677487.
         nsStringBuffer* str = static_cast<nsStringBuffer*>(otherPtr);
-        n += str ? str->SizeOfIncludingThisIfUnshared(aMallocSizeOf) : 0;
+        size += str ? str->StorageSize() : 0;
       }
 
+      // TODO: mCSSStyleRule might be owned by another object
+      // which would make us count them twice, bug 677493.
       if (Type() == eCSSStyleRule && container->mCSSStyleRule) {
-        // TODO: mCSSStyleRule might be owned by another object which would
-        //       make us count them twice, bug 677493.
-        //n += container->mCSSStyleRule->SizeOfIncludingThis(aMallocSizeOf);
+        // TODO: Add SizeOf() to StyleRule, bug 677503.
+        size += sizeof(*container->mCSSStyleRule);
       } else if (Type() == eAtomArray && container->mAtomArray) {
-        // Don't measure each nsIAtom, they are measured separatly.
-        n += container->mAtomArray->SizeOfIncludingThis(aMallocSizeOf);
+        size += sizeof(container->mAtomArray) + sizeof(nsTArrayHeader);
+        size += container->mAtomArray->Capacity() * sizeof(nsCOMPtr<nsIAtom>);
+        // Don't count the size of each nsIAtom, they are counted separatly.
       }
+
       break;
     }
-    case eAtomBase:    // Atoms are counted separately.
+    case eAtomBase:    // Atoms are counted separatly.
     case eIntegerBase: // The value is in mBits, nothing to do.
       break;
   }
 
-  return n;
+  return size;
 }
 
--- a/content/base/src/nsAttrValue.h
+++ b/content/base/src/nsAttrValue.h
@@ -371,17 +371,17 @@ public:
    * Parse a margin string of format 'top, right, bottom, left' into
    * an nsIntMargin.
    *
    * @param aString the string to parse
    * @return whether the value could be parsed
    */
   bool ParseIntMarginValue(const nsAString& aString);
 
-  size_t SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+  PRInt64 SizeOf() const;
 
 private:
   // These have to be the same as in ValueType
   enum ValueBaseType {
     eStringBase =    eString,    // 00
     eOtherBase =     0x01,       // 01
     eAtomBase =      eAtom,      // 10
     eIntegerBase =   0x03        // 11
--- a/content/base/src/nsCommentNode.cpp
+++ b/content/base/src/nsCommentNode.cpp
@@ -58,16 +58,20 @@ public:
   NS_DECL_ISUPPORTS_INHERITED
 
   // nsIDOMNode
   NS_FORWARD_NSIDOMNODE(nsGenericDOMDataNode::)
 
   // nsIDOMCharacterData
   NS_FORWARD_NSIDOMCHARACTERDATA(nsGenericDOMDataNode::)
 
+  // DOM Memory Reporter participant.
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsCommentNode,
+                                              nsGenericDOMDataNode)
+
   // nsIDOMComment
   // Empty interface
 
   // nsINode
   virtual bool IsNodeOfType(PRUint32 aFlags) const;
 
   virtual nsGenericDOMDataNode* CloneDataNode(nsINodeInfo *aNodeInfo,
                                               bool aCloneText) const;
--- a/content/base/src/nsContentUtils.cpp
+++ b/content/base/src/nsContentUtils.cpp
@@ -118,17 +118,16 @@
 #include "nsIXTFService.h"
 static NS_DEFINE_CID(kXTFServiceCID, NS_XTFSERVICE_CID);
 #endif
 #include "nsIMIMEService.h"
 #include "nsLWBrkCIID.h"
 #include "nsILineBreaker.h"
 #include "nsIWordBreaker.h"
 #include "nsUnicodeProperties.h"
-#include "harfbuzz/hb-common.h"
 #include "jsdbgapi.h"
 #include "nsIJSRuntimeService.h"
 #include "nsIDOMDocumentXBL.h"
 #include "nsBindingManager.h"
 #include "nsIURI.h"
 #include "nsIURL.h"
 #include "nsXBLBinding.h"
 #include "nsXBLPrototypeBinding.h"
@@ -1113,48 +1112,44 @@ nsContentUtils::CopyNewlineNormalizedUni
   WritingIterator iter;
   aDest.BeginWriting(iter);
   sink_traits dest_traits(iter);
   CopyNormalizeNewlines<sink_traits> normalizer(&dest_traits);
   copy_string(aSrcStart, aSrcEnd, normalizer);
   return normalizer.GetCharsWritten();
 }
 
-/**
- * This is used to determine whether a character is in one of the punctuation
- * mark classes which CSS says should be part of the first-letter.
- * See http://www.w3.org/TR/CSS2/selector.html#first-letter and
- *     http://www.w3.org/TR/selectors/#first-letter
- */
+// Replaced by precompiled CCMap (see bug 180266). To update the list
+// of characters, see one of files included below. As for the way
+// the original list of characters was obtained by Frank Tang, see bug 54467.
+// Updated to fix the regression (bug 263411). The list contains
+// characters of the following Unicode character classes : Ps, Pi, Po, Pf, Pe.
+// (ref.: http://www.w3.org/TR/2004/CR-CSS21-20040225/selector.html#first-letter)
+#include "punct_marks.x-ccmap"
+DEFINE_X_CCMAP(gPuncCharsCCMapExt, const);
 
 // static
 bool
-nsContentUtils::IsFirstLetterPunctuation(PRUint32 aChar)
-{
-  PRUint8 cat = mozilla::unicode::GetGeneralCategory(aChar);
-
-  return (cat == HB_UNICODE_GENERAL_CATEGORY_OPEN_PUNCTUATION ||     // Ps
-          cat == HB_UNICODE_GENERAL_CATEGORY_CLOSE_PUNCTUATION ||    // Pe
-          cat == HB_UNICODE_GENERAL_CATEGORY_INITIAL_PUNCTUATION ||  // Pi
-          cat == HB_UNICODE_GENERAL_CATEGORY_FINAL_PUNCTUATION ||    // Pf
-          cat == HB_UNICODE_GENERAL_CATEGORY_OTHER_PUNCTUATION);     // Po
+nsContentUtils::IsPunctuationMark(PRUint32 aChar)
+{
+  return CCMAP_HAS_CHAR_EXT(gPuncCharsCCMapExt, aChar);
 }
 
 // static
 bool
-nsContentUtils::IsFirstLetterPunctuationAt(const nsTextFragment* aFrag, PRUint32 aOffset)
+nsContentUtils::IsPunctuationMarkAt(const nsTextFragment* aFrag, PRUint32 aOffset)
 {
   PRUnichar h = aFrag->CharAt(aOffset);
   if (!IS_SURROGATE(h)) {
-    return IsFirstLetterPunctuation(h);
+    return IsPunctuationMark(h);
   }
   if (NS_IS_HIGH_SURROGATE(h) && aOffset + 1 < aFrag->GetLength()) {
     PRUnichar l = aFrag->CharAt(aOffset + 1);
     if (NS_IS_LOW_SURROGATE(l)) {
-      return IsFirstLetterPunctuation(SURROGATE_TO_UCS4(h, l));
+      return IsPunctuationMark(SURROGATE_TO_UCS4(h, l));
     }
   }
   return false;
 }
 
 // static
 bool nsContentUtils::IsAlphanumeric(PRUint32 aChar)
 {
--- a/content/base/src/nsDocument.cpp
+++ b/content/base/src/nsDocument.cpp
@@ -8481,16 +8481,29 @@ nsDocument::CreateTouchList(nsIVariant* 
       nsMemory::Free(rawArray);
     }
   }
 
   *aRetVal = retval.forget().get();
   return NS_OK;
 }
 
+PRInt64
+nsIDocument::SizeOf() const
+{
+  PRInt64 size = MemoryReporter::GetBasicSize<nsIDocument, nsINode>(this);
+
+  for (nsIContent* node = GetFirstChild(); node;
+       node = node->GetNextNode(this)) {
+    size += node->SizeOf();
+  }
+
+  return size;
+}
+
 static void
 DispatchFullScreenChange(nsIDocument* aTarget)
 {
   nsRefPtr<nsAsyncDOMEvent> e =
     new nsAsyncDOMEvent(aTarget,
                         NS_LITERAL_STRING("mozfullscreenchange"),
                         true,
                         false);
@@ -9066,16 +9079,24 @@ nsDocument::IsFullScreenEnabled(bool aCa
       return false;
     }
     node = nsContentUtils::GetCrossDocParentNode(node);
   } while (node);
 
   return true;
 }
 
+PRInt64
+nsDocument::SizeOf() const
+{
+  PRInt64 size = MemoryReporter::GetBasicSize<nsDocument, nsIDocument>(this);
+  size += mAttrStyleSheet ? mAttrStyleSheet->DOMSizeOf() : 0;
+  return size;
+}
+
 #define EVENT(name_, id_, type_, struct_)                                 \
   NS_IMETHODIMP nsDocument::GetOn##name_(JSContext *cx, jsval *vp) {      \
     return nsINode::GetOn##name_(cx, vp);                                 \
   }                                                                       \
   NS_IMETHODIMP nsDocument::SetOn##name_(JSContext *cx, const jsval &v) { \
     return nsINode::SetOn##name_(cx, v);                                  \
   }
 #define TOUCH_EVENT EVENT
@@ -9138,70 +9159,22 @@ nsDocument::GetMozVisibilityState(nsAStr
     "hidden",
     "visible"
   };
   PR_STATIC_ASSERT(NS_ARRAY_LENGTH(states) == eVisibilityStateCount);
   aState.AssignASCII(states[mVisibilityState]);
   return NS_OK;
 }
 
-/* virtual */ void
-nsIDocument::DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const
-{
-  aWindowSizes->mDOM +=
-    nsINode::SizeOfExcludingThis(aWindowSizes->mMallocSizeOf);
-
-  // Measurement of the following members may be added later if DMD finds it
-  // is worthwhile:
-  // - many!
-}
-
-void
-nsIDocument::DocSizeOfIncludingThis(nsWindowSizes* aWindowSizes) const
-{
-  aWindowSizes->mDOM += aWindowSizes->mMallocSizeOf(this);
-  DocSizeOfExcludingThis(aWindowSizes);
-}
-
 static size_t
 SizeOfStyleSheetsElementIncludingThis(nsIStyleSheet* aStyleSheet,
                                       nsMallocSizeOfFun aMallocSizeOf,
                                       void* aData)
 {
   return aStyleSheet->SizeOfIncludingThis(aMallocSizeOf);
 }
 
-size_t
-nsDocument::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
-{
-  // This SizeOfExcludingThis() overrides the one from nsINode.  But
-  // nsDocuments can only appear at the top of the DOM tree, and we use the
-  // specialized DocSizeOfExcludingThis() in that case.  So this should never
-  // be called.
-  MOZ_NOT_REACHED("nsDocument::SizeOfExcludingThis");
-  return 0;
-}
-
-void
-nsDocument::DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const
-{
-  nsIDocument::DocSizeOfExcludingThis(aWindowSizes);
-
-  for (nsIContent* node = nsINode::GetFirstChild();
-       node;
-       node = node->GetNextNode(this))
-  {
-    aWindowSizes->mDOM +=
-      node->SizeOfIncludingThis(aWindowSizes->mMallocSizeOf);
-  }
-
-  aWindowSizes->mStyleSheets +=
-    mStyleSheets.SizeOfExcludingThis(SizeOfStyleSheetsElementIncludingThis,
-                                     aWindowSizes->mMallocSizeOf); 
-  aWindowSizes->mDOM +=
-    mAttrStyleSheet ?
-    mAttrStyleSheet->DOMSizeOfIncludingThis(aWindowSizes->mMallocSizeOf) :
-    0;
-
-  // Measurement of the following members may be added later if DMD finds it
-  // is worthwhile:
-  // - many!
-}
+/* virtual */ size_t
+nsDocument::SizeOfStyleSheets(nsMallocSizeOfFun aMallocSizeOf) const
+{
+  return mStyleSheets.SizeOfExcludingThis(SizeOfStyleSheetsElementIncludingThis,
+                                          aMallocSizeOf); 
+}
--- a/content/base/src/nsDocument.h
+++ b/content/base/src/nsDocument.h
@@ -118,17 +118,16 @@ class nsIFormControl;
 struct nsRadioGroupStruct;
 class nsOnloadBlocker;
 class nsUnblockOnloadEvent;
 class nsChildContentList;
 class nsXMLEventsManager;
 class nsHTMLStyleSheet;
 class nsHTMLCSSStyleSheet;
 class nsDOMNavigationTiming;
-class nsWindowSizes;
 
 /**
  * Right now our identifier map entries contain information for 'name'
  * and 'id' mappings of a given string. This is so that
  * nsHTMLDocument::ResolveName only has to do one hash lookup instead
  * of two. It's not clear whether this still matters for performance.
  * 
  * We also store the document.all result list here. This is mainly so that
@@ -501,18 +500,17 @@ class nsDocument : public nsIDocument,
                    public nsStubMutationObserver,
                    public nsIDOMDocumentTouch,
                    public nsIInlineEventHandlers
 {
 public:
   typedef mozilla::dom::Element Element;
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-
-  NS_DECL_SIZEOF_EXCLUDING_THIS
+  NS_DECL_DOM_MEMORY_REPORTER_SIZEOF
 
   using nsINode::GetScriptTypeID;
 
   virtual void Reset(nsIChannel *aChannel, nsILoadGroup *aLoadGroup);
   virtual void ResetToURI(nsIURI *aURI, nsILoadGroup *aLoadGroup,
                           nsIPrincipal* aPrincipal);
 
   // StartDocumentLoad is pure virtual so that subclasses must override it.
@@ -987,18 +985,17 @@ public:
   Element* FullScreenStackTop();
 
   // This method may fire a DOM event; if it does so it will happen
   // synchronously.
   void UpdateVisibilityState();
   // Posts an event to call UpdateVisibilityState
   virtual void PostVisibilityUpdateEvent();
 
-  virtual void DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const;
-  // DocSizeOfIncludingThis is inherited from nsIDocument.
+  virtual size_t SizeOfStyleSheets(nsMallocSizeOfFun aMallocSizeOf) const;
 
 protected:
   friend class nsNodeUtils;
 
   // Returns true if a request for DOM full-screen is currently enabled in
   // this document. This returns true if there are no windowed plugins in this
   // doc tree, and if the document is visible, and if the api is not
   // disabled by pref. aIsCallerChrome must contain the return value of
--- a/content/base/src/nsGenericDOMDataNode.cpp
+++ b/content/base/src/nsGenericDOMDataNode.cpp
@@ -992,16 +992,17 @@ nsGenericDOMDataNode::GetAttributeChange
 }
 
 nsIAtom*
 nsGenericDOMDataNode::GetClassAttributeName() const
 {
   return nsnull;
 }
 
-size_t
-nsGenericDOMDataNode::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+PRInt64
+nsGenericDOMDataNode::SizeOf() const
 {
-  size_t n = nsIContent::SizeOfExcludingThis(aMallocSizeOf);
-  n += mText.SizeOfExcludingThis(aMallocSizeOf);
-  return n;
+  PRInt64 size = dom::MemoryReporter::GetBasicSize<nsGenericDOMDataNode,
+                                                   nsIContent>(this);
+  size += mText.SizeOf() - sizeof(mText);
+  return size;
 }
 
--- a/content/base/src/nsGenericDOMDataNode.h
+++ b/content/base/src/nsGenericDOMDataNode.h
@@ -74,17 +74,17 @@ class nsIDOMText;
 class nsINodeInfo;
 class nsURI;
 
 class nsGenericDOMDataNode : public nsIContent
 {
 public:
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
 
-  NS_DECL_SIZEOF_EXCLUDING_THIS
+  NS_DECL_DOM_MEMORY_REPORTER_SIZEOF
 
   nsGenericDOMDataNode(already_AddRefed<nsINodeInfo> aNodeInfo);
   virtual ~nsGenericDOMDataNode();
 
   // Implementation for nsIDOMNode
   nsresult GetNodeName(nsAString& aNodeName)
   {
     aNodeName = NodeName();
--- a/content/base/src/nsGenericElement.cpp
+++ b/content/base/src/nsGenericElement.cpp
@@ -6192,42 +6192,39 @@ nsGenericElement::MozMatchesSelector(con
   NS_PRECONDITION(aReturn, "Null out param?");
 
   nsresult rv;
   *aReturn = MozMatchesSelector(aSelector, &rv);
 
   return rv;
 }
 
-size_t
-nsINode::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
-{
-  size_t n = 0;
+PRInt64
+nsINode::SizeOf() const
+{
+  PRInt64 size = sizeof(*this);
+
   nsEventListenerManager* elm =
     const_cast<nsINode*>(this)->GetListenerManager(false);
   if (elm) {
-    n += elm->SizeOfIncludingThis(aMallocSizeOf);
-  }
-
-  // Measurement of the following members may be added later if DMD finds it is
-  // worthwhile:
-  // - mNodeInfo (Nb: allocated in nsNodeInfo.cpp with a nsFixedSizeAllocator)
-  // - mSlots
-  //
-  // The following members are not measured:
-  // - mParent, mNextSibling, mPreviousSibling, mFirstChild: because they're
-  //   non-owning
-  return n;
-}
-
-size_t
-nsGenericElement::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
-{
-  return Element::SizeOfExcludingThis(aMallocSizeOf) +
-         mAttrsAndChildren.SizeOfExcludingThis(aMallocSizeOf);
+    size += elm->SizeOf();
+  }
+
+  return size;
+}
+
+PRInt64
+nsGenericElement::SizeOf() const
+{
+  PRInt64 size = MemoryReporter::GetBasicSize<nsGenericElement, Element>(this);
+
+  size -= sizeof(mAttrsAndChildren);
+  size += mAttrsAndChildren.SizeOf();
+
+  return size;
 }
 
 #define EVENT(name_, id_, type_, struct_)                                    \
   NS_IMETHODIMP nsINode::GetOn##name_(JSContext *cx, jsval *vp) {            \
     nsEventListenerManager *elm = GetListenerManager(false);              \
     if (elm) {                                                               \
       elm->GetJSEventListener(nsGkAtoms::on##name_, vp);                     \
     } else {                                                                 \
--- a/content/base/src/nsGenericElement.h
+++ b/content/base/src/nsGenericElement.h
@@ -242,17 +242,17 @@ public:
   nsGenericElement(already_AddRefed<nsINodeInfo> aNodeInfo);
   virtual ~nsGenericElement();
 
   friend class nsTouchEventReceiverTearoff;
   friend class nsInlineEventHandlersTearoff;
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
 
-  NS_DECL_SIZEOF_EXCLUDING_THIS
+  NS_DECL_DOM_MEMORY_REPORTER_SIZEOF
 
   /**
    * Called during QueryInterface to give the binding manager a chance to
    * get an interface for this element.
    */
   nsresult PostQueryInterface(REFNSIID aIID, void** aInstancePtr);
 
   // nsINode interface methods
--- a/content/base/src/nsLineBreaker.cpp
+++ b/content/base/src/nsLineBreaker.cpp
@@ -60,17 +60,17 @@ static void
 SetupCapitalization(const PRUnichar* aWord, PRUint32 aLength,
                     bool* aCapitalization)
 {
   // Capitalize the first non-punctuation character after a space or start
   // of the word.
   // The only space character a word can contain is NBSP.
   bool capitalizeNextChar = true;
   for (PRUint32 i = 0; i < aLength; ++i) {
-    if (capitalizeNextChar && !nsContentUtils::IsFirstLetterPunctuation(aWord[i])) {
+    if (capitalizeNextChar && !nsContentUtils::IsPunctuationMark(aWord[i])) {
       aCapitalization[i] = true;
       capitalizeNextChar = false;
     }
     if (aWord[i] == 0xA0 /*NBSP*/) {
       capitalizeNextChar = true;
     }
   }
 }
--- a/content/base/src/nsMappedAttributeElement.h
+++ b/content/base/src/nsMappedAttributeElement.h
@@ -61,16 +61,19 @@ class nsMappedAttributeElement : public 
 
 protected:
 
   nsMappedAttributeElement(already_AddRefed<nsINodeInfo> aNodeInfo)
     : nsMappedAttributeElementBase(aNodeInfo)
   {}
 
 public:
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsMappedAttributeElement,
+                                              nsMappedAttributeElementBase)
+
   virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
                               nsIContent* aBindingParent,
                               bool aCompileEventHandlers);
 
   virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const;
 
   static void MapNoAttributesInto(const nsMappedAttributes* aAttributes, 
                                   nsRuleData* aRuleData);
--- a/content/base/src/nsMappedAttributes.cpp
+++ b/content/base/src/nsMappedAttributes.cpp
@@ -273,21 +273,23 @@ nsMappedAttributes::IndexOfAttr(nsIAtom*
         return i;
       }
     }
   }
 
   return -1;
 }
 
-size_t
-nsMappedAttributes::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+PRInt64
+nsMappedAttributes::SizeOf() const
 {
   NS_ASSERTION(mAttrCount == mBufferSize,
                "mBufferSize and mAttrCount are expected to be the same.");
 
-  size_t n = aMallocSizeOf(this);
+  PRInt64 size = sizeof(*this) - sizeof(void*) + mAttrCount * sizeof(InternalAttr);
+
   for (PRUint16 i = 0; i < mAttrCount; ++i) {
-    n += Attrs()[i].mValue.SizeOfExcludingThis(aMallocSizeOf);
+    size += Attrs()[i].mValue.SizeOf() - sizeof(Attrs()[i].mValue);
   }
-  return n;
+
+  return size;
 }
 
--- a/content/base/src/nsMappedAttributes.h
+++ b/content/base/src/nsMappedAttributes.h
@@ -103,17 +103,17 @@ public:
   
 
   // nsIStyleRule 
   virtual void MapRuleInfoInto(nsRuleData* aRuleData);
 #ifdef DEBUG
   virtual void List(FILE* out = stdout, PRInt32 aIndent = 0) const;
 #endif
 
-  size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+  PRInt64 SizeOf() const;
 
 private:
   nsMappedAttributes(const nsMappedAttributes& aCopy);
   ~nsMappedAttributes();
 
   struct InternalAttr
   {
     nsAttrName mName;
--- a/content/base/src/nsStyledElement.h
+++ b/content/base/src/nsStyledElement.h
@@ -63,16 +63,20 @@ class nsStyledElementNotElementCSSInline
 
 protected:
 
   inline nsStyledElementNotElementCSSInlineStyle(already_AddRefed<nsINodeInfo> aNodeInfo)
     : nsStyledElementBase(aNodeInfo)
   {}
 
 public:
+
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsStyledElementNotElementCSSInlineStyle,
+                                              nsStyledElementBase)
+
   // nsIContent interface methods
   virtual nsIAtom* GetClassAttributeName() const;
   virtual nsIAtom* GetIDAttributeName() const;
   virtual nsIAtom* DoGetID() const;
   virtual const nsAttrValue* DoGetClasses() const;
 
   virtual mozilla::css::StyleRule* GetInlineStyleRule();
   NS_IMETHOD SetInlineStyleRule(mozilla::css::StyleRule* aStyleRule, bool aNotify);
@@ -110,15 +114,19 @@ protected:
    * first put into a document.  Only has an effect if the old value is a
    * string.  If aForceInDataDoc is true, will reparse even if we're in a data
    * document.
    */
   nsresult  ReparseStyleAttribute(bool aForceInDataDoc);
 };
 
 class nsStyledElement : public nsStyledElementNotElementCSSInlineStyle {
+public:
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsStyledElement,
+                                              nsStyledElementNotElementCSSInlineStyle)
+
 protected:
   inline nsStyledElement(already_AddRefed<nsINodeInfo> aNodeInfo)
     : nsStyledElementNotElementCSSInlineStyle(aNodeInfo)
   {}
 };
 
 #endif // __NS_STYLEDELEMENT_H_
--- a/content/base/src/nsTextFragment.cpp
+++ b/content/base/src/nsTextFragment.cpp
@@ -424,30 +424,16 @@ nsTextFragment::Append(const PRUnichar* 
   LossyConvertEncoding16to8 converter(buff + mState.mLength);
   copy_string(aBuffer, aBuffer + aLength, converter);
 
   m1b = buff;
   mState.mLength += aLength;
 
 }
 
-/* virtual */ size_t
-nsTextFragment::SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
-{
-  if (Is2b()) {
-    return aMallocSizeOf(m2b);
-  }
-
-  if (mState.mInHeap) {
-    return aMallocSizeOf(m1b);
-  }
-
-  return 0;
-}
-
 // To save time we only do this when we really want to know, not during
 // every allocation
 void
 nsTextFragment::UpdateBidiFlag(const PRUnichar* aBuffer, PRUint32 aLength)
 {
   if (mState.mIs2b && !mState.mIsBidi) {
     const PRUnichar* cp = aBuffer;
     const PRUnichar* end = cp + aLength;
--- a/content/base/src/nsTextFragment.h
+++ b/content/base/src/nsTextFragment.h
@@ -218,17 +218,26 @@ public:
     // which causes crashes because we assume this structure is no more than
     // 32 bits!
     PRUint32 mInHeap : 1;
     PRUint32 mIs2b : 1;
     PRUint32 mIsBidi : 1;
     PRUint32 mLength : 29;
   };
 
-  size_t SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+  /**
+   * Returns the size taken in memory by this text fragment.
+   * @return the size taken in memory by this text fragment.
+   */
+  PRInt64 SizeOf() const
+  {
+    PRInt64 size = sizeof(*this);
+    size += GetLength() * (Is2b() ? sizeof(*m2b) : sizeof(*m1b));
+    return size;
+  }
 
 private:
   void ReleaseText();
 
   /**
    * Scan the contents of the fragment and turn on mState.mIsBidi if it
    * includes any Bidi characters.
    */
--- a/content/base/src/nsTextNode.h
+++ b/content/base/src/nsTextNode.h
@@ -64,16 +64,19 @@ public:
   NS_FORWARD_NSIDOMNODE(nsGenericDOMDataNode::)
 
   // nsIDOMCharacterData
   NS_FORWARD_NSIDOMCHARACTERDATA(nsGenericDOMDataNode::)
 
   // nsIDOMText
   NS_FORWARD_NSIDOMTEXT(nsGenericDOMDataNode::)
 
+  // DOM Memory Reporter participant.
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsTextNode, nsGenericDOMDataNode)
+
   // nsINode
   virtual bool IsNodeOfType(PRUint32 aFlags) const;
 
   virtual nsGenericDOMDataNode* CloneDataNode(nsINodeInfo *aNodeInfo,
                                               bool aCloneText) const;
 
   nsresult BindToAttribute(nsIAttribute* aAttr);
   nsresult UnbindFromAttribute();
--- a/content/events/src/nsEventListenerManager.cpp
+++ b/content/events/src/nsEventListenerManager.cpp
@@ -999,30 +999,30 @@ nsEventListenerManager::GetJSEventListen
     
   if (ls->mHandlerIsString) {
     CompileEventHandlerInternal(ls, true, nsnull);
   }
 
   *vp = OBJECT_TO_JSVAL(listener->GetHandler());
 }
 
-size_t
-nsEventListenerManager::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf)
-  const
+PRInt64
+nsEventListenerManager::SizeOf() const
 {
-  size_t n = aMallocSizeOf(this);
-  n += mListeners.SizeOfExcludingThis(aMallocSizeOf);
+  PRInt64 size = sizeof(*this);
   PRUint32 count = mListeners.Length();
   for (PRUint32 i = 0; i < count; ++i) {
-    nsIJSEventListener* jsl = mListeners.ElementAt(i).GetJSListener();
+    const nsListenerStruct& ls = mListeners.ElementAt(i);
+    size += sizeof(ls);
+    nsIJSEventListener* jsl = ls.GetJSListener();
     if (jsl) {
-      n += jsl->SizeOfIncludingThis(aMallocSizeOf);
+      size += jsl->SizeOf();
     }
   }
-  return n;
+  return size;
 }
 
 void
 nsEventListenerManager::UnmarkGrayJSListeners()
 {
   PRUint32 count = mListeners.Length();
   for (PRUint32 i = 0; i < count; ++i) {
     const nsListenerStruct& ls = mListeners.ElementAt(i);
--- a/content/events/src/nsEventListenerManager.h
+++ b/content/events/src/nsEventListenerManager.h
@@ -238,17 +238,17 @@ public:
   /**
    * Returns true if there may be a touch event listener registered,
    * false if there definitely isn't.
    */
   bool MayHaveTouchEventListener() { return mMayHaveTouchEventListener; }
 
   bool MayHaveMouseEnterLeaveEventListener() { return mMayHaveMouseEnterLeaveEventListener; }
 
-  size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+  PRInt64 SizeOf() const;
 
   void UnmarkGrayJSListeners();
 
   nsISupports* GetTarget() { return mTarget; }
 protected:
   nsresult HandleEventSubType(nsListenerStruct* aListenerStruct,
                               nsIDOMEventListener* aListener,
                               nsIDOMEvent* aDOMEvent,
--- a/content/html/content/src/nsFormSubmission.cpp
+++ b/content/html/content/src/nsFormSubmission.cpp
@@ -713,18 +713,25 @@ nsEncodingFormSubmission::nsEncodingForm
 {
   nsCAutoString charset(aCharset);
   // canonical name is passed so that we just have to check against
   // *our* canonical names listed in charsetaliases.properties
   if (charset.EqualsLiteral("ISO-8859-1")) {
     charset.AssignLiteral("windows-1252");
   }
 
+  // use UTF-8 for UTF-16* (per WHATWG and existing practice of
+  // MS IE/Opera). 
+  if (StringBeginsWith(charset, NS_LITERAL_CSTRING("UTF-16"))) {
+    charset.AssignLiteral("UTF-8");
+  }
+
   if (!(charset.EqualsLiteral("UTF-8") || charset.EqualsLiteral("gb18030"))) {
-    NS_ConvertUTF8toUTF16 charsetUtf16(charset);
+    nsAutoString charsetUtf16;
+    CopyUTF8toUTF16(charset, charsetUtf16);
     const PRUnichar* charsetPtr = charsetUtf16.get();
     SendJSWarning(aOriginatingElement ? aOriginatingElement->GetOwnerDocument()
                                       : nsnull,
                   "CannotEncodeAllUnicode",
                   &charsetPtr,
                   1);
   }
 
@@ -857,25 +864,16 @@ GetSubmissionFromForm(nsGenericHTMLEleme
   } else {
     GetEnumAttr(aForm, nsGkAtoms::method, &method);
   }
 
   // Get charset
   nsCAutoString charset;
   GetSubmitCharset(aForm, charset);
 
-  // We now have a canonical charset name, so we only have to check it
-  // against canonical names.
-
-  // use UTF-8 for UTF-16* (per WHATWG and existing practice of
-  // MS IE/Opera).
-  if (StringBeginsWith(charset, NS_LITERAL_CSTRING("UTF-16"))) {
-    charset.AssignLiteral("UTF-8");
-  }
-
   // Choose encoder
   if (method == NS_FORM_METHOD_POST &&
       enctype == NS_FORM_ENCTYPE_MULTIPART) {
     *aFormSubmission = new nsFSMultipartFormData(charset, aOriginatingElement);
   } else if (method == NS_FORM_METHOD_POST &&
              enctype == NS_FORM_ENCTYPE_TEXTPLAIN) {
     *aFormSubmission = new nsFSTextPlain(charset, aOriginatingElement);
   } else {
--- a/content/html/content/src/nsGenericHTMLElement.h
+++ b/content/html/content/src/nsGenericHTMLElement.h
@@ -77,16 +77,19 @@ class nsGenericHTMLElement : public nsGe
 public:
   nsGenericHTMLElement(already_AddRefed<nsINodeInfo> aNodeInfo)
     : nsGenericHTMLElementBase(aNodeInfo)
   {
     NS_ASSERTION(mNodeInfo->NamespaceID() == kNameSpaceID_XHTML,
                  "Unexpected namespace");
   }
 
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsGenericHTMLElement,
+                                              nsGenericHTMLElementBase)
+
   /** Typesafe, non-refcounting cast from nsIContent.  Cheaper than QI. **/
   static nsGenericHTMLElement* FromContent(nsIContent *aContent)
   {
     if (aContent->IsHTML())
       return static_cast<nsGenericHTMLElement*>(aContent);
     return nsnull;
   }
 
@@ -866,16 +869,19 @@ class nsHTMLFieldSetElement;
  */
 class nsGenericHTMLFormElement : public nsGenericHTMLElement,
                                  public nsIFormControl
 {
 public:
   nsGenericHTMLFormElement(already_AddRefed<nsINodeInfo> aNodeInfo);
   virtual ~nsGenericHTMLFormElement();
 
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsGenericHTMLFormElement,
+                                              nsGenericHTMLElement)
+
   NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
 
   virtual bool IsNodeOfType(PRUint32 aFlags) const;
   virtual void SaveSubtreeState();
 
   // nsIFormControl
   virtual mozilla::dom::Element* GetFormElement();
   virtual void SetForm(nsIDOMHTMLFormElement* aForm);
--- a/content/html/content/src/nsGenericHTMLFrameElement.cpp
+++ b/content/html/content/src/nsGenericHTMLFrameElement.cpp
@@ -264,16 +264,26 @@ nsGenericHTMLFrameElement::IsHTMLFocusab
 
   if (!*aIsFocusable && aTabIndex) {
     *aTabIndex = -1;
   }
 
   return false;
 }
 
+PRInt64
+nsGenericHTMLFrameElement::SizeOf() const
+{
+  PRInt64 size = MemoryReporter::GetBasicSize<nsGenericHTMLFrameElement,
+                                              nsGenericHTMLElement>(this);
+  // TODO: need to implement SizeOf() in nsFrameLoader, bug 672539.
+  size += mFrameLoader ? sizeof(*mFrameLoader.get()) : 0;
+  return size;
+}
+
 NS_IMETHODIMP
 nsGenericHTMLFrameElement::GetMozbrowser(bool *aValue)
 {
   return GetBoolAttr(nsGkAtoms::mozbrowser, aValue);
 }
 
 NS_IMETHODIMP
 nsGenericHTMLFrameElement::SetMozbrowser(bool aValue)
--- a/content/html/content/src/nsGenericHTMLFrameElement.h
+++ b/content/html/content/src/nsGenericHTMLFrameElement.h
@@ -29,16 +29,17 @@ public:
   }
 
   virtual ~nsGenericHTMLFrameElement();
 
   NS_IMETHOD QueryInterface(REFNSIID aIID, void** aInstancePtr);
   NS_DECL_NSIFRAMELOADEROWNER
   NS_DECL_NSIDOMMOZBROWSERFRAME
   NS_DECL_NSIWEBPROGRESSLISTENER
+  NS_DECL_DOM_MEMORY_REPORTER_SIZEOF
 
   // nsIContent
   virtual bool IsHTMLFocusable(bool aWithMouse, bool *aIsFocusable, PRInt32 *aTabIndex);
   virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
                               nsIContent* aBindingParent,
                               bool aCompileEventHandlers);
   virtual void UnbindFromTree(bool aDeep = true,
                               bool aNullParent = true);
--- a/content/html/content/src/nsHTMLAnchorElement.cpp
+++ b/content/html/content/src/nsHTMLAnchorElement.cpp
@@ -92,18 +92,20 @@ public:
   }
   NS_SCRIPTABLE NS_IMETHOD SetInnerHTML(const nsAString& aInnerHTML) {
     return nsGenericHTMLElement::SetInnerHTML(aInnerHTML);
   }
 
   // nsIDOMHTMLAnchorElement
   NS_DECL_NSIDOMHTMLANCHORELEMENT  
 
-  // TODO: nsHTMLAnchorElement::SizeOfAnchorElement should call
-  // Link::SizeOfExcludingThis().  See bug 682431.
+  // TODO: we do not really count Link::mCachedURI but given that it's a
+  // nsCOMPtr<nsIURI>, that would be required adding SizeOf() to the interface.
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsHTMLAnchorElement,
+                                              nsGenericHTMLElement)
 
   // nsILink
   NS_IMETHOD LinkAdded() { return NS_OK; }
   NS_IMETHOD LinkRemoved() { return NS_OK; }
 
   virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
                               nsIContent* aBindingParent,
                               bool aCompileEventHandlers);
--- a/content/html/content/src/nsHTMLAreaElement.cpp
+++ b/content/html/content/src/nsHTMLAreaElement.cpp
@@ -56,19 +56,16 @@ class nsHTMLAreaElement : public nsGener
 {
 public:
   nsHTMLAreaElement(already_AddRefed<nsINodeInfo> aNodeInfo);
   virtual ~nsHTMLAreaElement();
 
   // nsISupports
   NS_DECL_ISUPPORTS_INHERITED
 
-  // TODO: nsHTMLAreaElement::SizeOfAnchorElement should call
-  // Link::SizeOfExcludingThis().  See bug 682431.
-
   // nsIDOMNode
   NS_FORWARD_NSIDOMNODE(nsGenericHTMLElement::)
 
   // nsIDOMElement
   NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLElement::)
 
   // nsIDOMHTMLElement
   NS_FORWARD_NSIDOMHTMLELEMENT_BASIC(nsGenericHTMLElement::)
--- a/content/html/content/src/nsHTMLDivElement.cpp
+++ b/content/html/content/src/nsHTMLDivElement.cpp
@@ -64,16 +64,19 @@ public:
   NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLElement::)
 
   // nsIDOMHTMLElement
   NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLElement::)
 
   // nsIDOMHTMLDivElement
   NS_DECL_NSIDOMHTMLDIVELEMENT
 
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsHTMLDivElement,
+                                              nsGenericHTMLElement)
+
   virtual bool ParseAttribute(PRInt32 aNamespaceID,
                                 nsIAtom* aAttribute,
                                 const nsAString& aValue,
                                 nsAttrValue& aResult);
   NS_IMETHOD_(bool) IsAttributeMapped(const nsIAtom* aAttribute) const;
   virtual nsMapRuleToAttributesFunc GetAttributeMappingFunction() const;
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 
--- a/content/html/content/src/nsHTMLLinkElement.cpp
+++ b/content/html/content/src/nsHTMLLinkElement.cpp
@@ -79,19 +79,16 @@ public:
   NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLElement::)
 
   // nsIDOMHTMLElement
   NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLElement::)
 
   // nsIDOMHTMLLinkElement
   NS_DECL_NSIDOMHTMLLINKELEMENT
 
-  // TODO: nsHTMLLinkElement::SizeOfAnchorElement should call
-  // Link::SizeOfExcludingThis().  See bug 682431.
-
   // nsILink
   NS_IMETHOD    LinkAdded();
   NS_IMETHOD    LinkRemoved();
 
   virtual nsresult BindToTree(nsIDocument* aDocument, nsIContent* aParent,
                               nsIContent* aBindingParent,
                               bool aCompileEventHandlers);
   virtual void UnbindFromTree(bool aDeep = true,
--- a/content/html/content/src/nsHTMLSpanElement.cpp
+++ b/content/html/content/src/nsHTMLSpanElement.cpp
@@ -57,16 +57,19 @@ public:
   NS_FORWARD_NSIDOMNODE(nsGenericHTMLElement::)
 
   // nsIDOMElement
   NS_FORWARD_NSIDOMELEMENT(nsGenericHTMLElement::)
 
   // nsIDOMHTMLElement
   NS_FORWARD_NSIDOMHTMLELEMENT(nsGenericHTMLElement::)
 
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsHTMLSpanElement,
+                                              nsGenericHTMLElement)
+
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 
   virtual nsXPCClassInfo* GetClassInfo();
 };
 
 
 NS_IMPL_NS_NEW_HTML_ELEMENT(Span)
 
--- a/content/html/content/test/Makefile.in
+++ b/content/html/content/test/Makefile.in
@@ -267,17 +267,16 @@ include $(topsrcdir)/config/rules.mk
 		test_bug660663.html \
 		test_bug664299.html \
 		test_bug666200.html \
 		test_bug666666.html \
 		test_bug669012.html \
 		test_bug674558.html \
 		test_bug583533.html \
 		test_restore_from_parser_fragment.html \
-		test_bug615595.html \
 		test_bug617528.html \
 		test_bug660959-1.html \
 		test_bug660959-2.html \
 		test_bug660959-3.html \
 		test_checked.html \
 		test_bug677658.html \
 		test_bug677463.html \
 		test_bug682886.html \
deleted file mode 100644
index 3acaad9e0c25cbb16dd60fcbe6facf1c4aa8ef1f..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
GIT binary patch
literal 0
Hc$@<O00001
--- a/content/html/document/src/nsHTMLDocument.cpp
+++ b/content/html/document/src/nsHTMLDocument.cpp
@@ -3444,27 +3444,8 @@ nsHTMLDocument::IsEditingOnAfterFlush()
 }
 
 void
 nsHTMLDocument::RemovedFromDocShell()
 {
   mEditingState = eOff;
   nsDocument::RemovedFromDocShell();
 }
-
-/* virtual */ void
-nsHTMLDocument::DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const
-{
-  nsDocument::DocSizeOfExcludingThis(aWindowSizes);
-
-  // Measurement of the following members may be added later if DMD finds it is
-  // worthwhile:
-  // - mImages
-  // - mApplets
-  // - mEmbeds
-  // - mLinks
-  // - mAnchors
-  // - mScripts
-  // - mForms
-  // - mFormControls
-  // - mWyciwygChannel
-  // - mMidasCommandManager
-}
--- a/content/html/document/src/nsHTMLDocument.h
+++ b/content/html/document/src/nsHTMLDocument.h
@@ -199,20 +199,16 @@ public:
   virtual NS_HIDDEN_(void) RemovedFromDocShell();
 
   virtual mozilla::dom::Element *GetElementById(const nsAString& aElementId)
   {
     return nsDocument::GetElementById(aElementId);
   }
 
   virtual nsXPCClassInfo* GetClassInfo();
-
-  virtual void DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const;
-  // DocSizeOfIncludingThis is inherited from nsIDocument.
-
 protected:
   nsresult GetBodySize(PRInt32* aWidth,
                        PRInt32* aHeight);
 
   nsIContent *MatchId(nsIContent *aContent, const nsAString& aId);
 
   static bool MatchLinks(nsIContent *aContent, PRInt32 aNamespaceID,
                            nsIAtom* aAtom, void* aData);
--- a/content/xml/content/src/nsXMLCDATASection.cpp
+++ b/content/xml/content/src/nsXMLCDATASection.cpp
@@ -57,16 +57,20 @@ public:
   NS_FORWARD_NSIDOMNODE(nsGenericDOMDataNode::)
 
   // nsIDOMCharacterData
   NS_FORWARD_NSIDOMCHARACTERDATA(nsGenericDOMDataNode::)
 
   // nsIDOMText
   NS_FORWARD_NSIDOMTEXT(nsGenericDOMDataNode::)
 
+  // DOM Memory Reporter participant.
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsXMLCDATASection,
+                                              nsGenericDOMDataNode)
+
   // nsIDOMCDATASection
   // Empty interface
 
   // nsINode
   virtual bool IsNodeOfType(PRUint32 aFlags) const;
 
   virtual nsGenericDOMDataNode* CloneDataNode(nsINodeInfo *aNodeInfo,
                                               bool aCloneText) const;
--- a/content/xml/content/src/nsXMLProcessingInstruction.h
+++ b/content/xml/content/src/nsXMLProcessingInstruction.h
@@ -60,16 +60,20 @@ public:
   NS_FORWARD_NSIDOMNODE(nsGenericDOMDataNode::)
 
   // nsIDOMCharacterData
   NS_FORWARD_NSIDOMCHARACTERDATA(nsGenericDOMDataNode::)
 
   // nsIDOMProcessingInstruction
   NS_DECL_NSIDOMPROCESSINGINSTRUCTION
 
+  // DOM Memory Reporter participant.
+  NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(nsXMLProcessingInstruction,
+                                              nsGenericDOMDataNode)
+
   // nsINode
   virtual bool IsNodeOfType(PRUint32 aFlags) const;
 
   virtual nsGenericDOMDataNode* CloneDataNode(nsINodeInfo *aNodeInfo,
                                               bool aCloneText) const;
 
 #ifdef DEBUG
   virtual void List(FILE* out, PRInt32 aIndent) const;
--- a/content/xml/document/src/nsXMLDocument.cpp
+++ b/content/xml/document/src/nsXMLDocument.cpp
@@ -590,22 +590,16 @@ nsXMLDocument::EndLoad()
     // document was loaded as pure data without any presentation
     // attached to it.
     nsEvent event(true, NS_LOAD);
     nsEventDispatcher::Dispatch(static_cast<nsIDocument*>(this), nsnull,
                                 &event);
   }    
 }
  
-/* virtual */ void
-nsXMLDocument::DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const
-{
-  nsDocument::DocSizeOfExcludingThis(aWindowSizes);
-}
-
 // nsIDOMDocument interface
 
 nsresult
 nsXMLDocument::Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const
 {
   NS_ASSERTION(aNodeInfo->NodeInfoManager() == mNodeInfoManager,
                "Can't import this document into another document!");
 
--- a/content/xml/document/src/nsXMLDocument.h
+++ b/content/xml/document/src/nsXMLDocument.h
@@ -71,20 +71,16 @@ public:
   // nsIDOMXMLDocument
   NS_DECL_NSIDOMXMLDOCUMENT
 
   virtual nsresult Init();
 
   virtual nsresult Clone(nsINodeInfo *aNodeInfo, nsINode **aResult) const;
 
   virtual nsXPCClassInfo* GetClassInfo();
-
-  virtual void DocSizeOfExcludingThis(nsWindowSizes* aWindowSizes) const;
-  // DocSizeOfIncludingThis is inherited from nsIDocument.
-
 protected:
   // mChannelIsPending indicates whether we're currently asynchronously loading
   // data from mChannel (via document.load() or normal load).  It's set to true
   // when we first find out about the channel (StartDocumentLoad) and set to
   // false in EndLoad or if ResetToURI() is called.  In the latter case our
   // mChannel is also cancelled.  Note that if this member is true, mChannel
   // cannot be null.
   bool mChannelIsPending;
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -1144,27 +1144,31 @@ Navigator::GetMozBluetooth(nsIDOMBluetoo
     bluetooth = mBluetooth;
   }
 
   bluetooth.forget(aBluetooth);
   return NS_OK;
 }
 #endif //MOZ_B2G_BT
 
-size_t
-Navigator::SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const
+PRInt64
+Navigator::SizeOf() const
 {
-  size_t n = aMallocSizeOf(this);
+  PRInt64 size = sizeof(*this);
 
-  // TODO: add SizeOfIncludingThis() to nsMimeTypeArray, bug 674113.
-  // TODO: add SizeOfIncludingThis() to nsPluginArray, bug 674114.
-  // TODO: add SizeOfIncludingThis() to nsGeolocation, bug 674115.
-  // TODO: add SizeOfIncludingThis() to nsDesktopNotificationCenter, bug 674116.
+  // TODO: add SizeOf() to nsMimeTypeArray, bug 674113.
+  size += mMimeTypes ? sizeof(*mMimeTypes.get()) : 0;
+  // TODO: add SizeOf() to nsPluginArray, bug 674114.
+  size += mPlugins ? sizeof(*mPlugins.get()) : 0;
+  // TODO: add SizeOf() to nsGeolocation, bug 674115.
+  size += mGeolocation ? sizeof(*mGeolocation.get()) : 0;
+  // TODO: add SizeOf() to nsDesktopNotificationCenter, bug 674116.
+  size += mNotification ? sizeof(*mNotification.get()) : 0;
 
-  return n;
+  return size;
 }
 
 void
 Navigator::SetWindow(nsPIDOMWindow *aInnerWindow)
 {
   NS_ASSERTION(aInnerWindow->IsInnerWindow(),
                "Navigator must get an inner window!");
   mWindow = do_GetWeakReference(aInnerWindow);
--- a/dom/base/Navigator.h
+++ b/dom/base/Navigator.h
@@ -131,17 +131,17 @@ public:
 
   void Invalidate();
   nsPIDOMWindow *GetWindow();
 
   void RefreshMIMEArray();
 
   static bool HasDesktopNotificationSupport();
 
-  size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
+  PRInt64 SizeOf() const;
 
   /**
    * For use during document.write where our inner window changes.
    */
   void SetWindow(nsPIDOMWindow *aInnerWindow);
 
 private:
   bool IsSmsAllowed() const;
--- a/dom/base/nsDOMMemoryReporter.cpp
+++ b/dom/base/nsDOMMemoryReporter.cpp
@@ -90,17 +90,18 @@ AppendWindowURI(nsGlobalWindow *aWindow,
 
 struct WindowTotals
 {
   WindowTotals() : mDom(0), mStyleSheets(0) {}
   size_t mDom;
   size_t mStyleSheets;
 };
 
-NS_MEMORY_REPORTER_MALLOC_SIZEOF_FUN(DOMStyleMallocSizeOf, "dom+style")
+NS_MEMORY_REPORTER_MALLOC_SIZEOF_FUN(WindowStyleSheetsMallocSizeOf,
+                                     "window/style-sheets")
 
 static void
 CollectWindowReports(nsGlobalWindow *aWindow,
                      WindowTotals *aWindowTotals,
                      nsIMemoryMultiReporterCallback *aCb,
                      nsISupports *aClosure)
 {
   // DOM window objects fall into one of three categories:
@@ -150,18 +151,18 @@ CollectWindowReports(nsGlobalWindow *aWi
   // Which gives us simple counts of how many outer windows (and their
   // combined sizes) per category.
 
   nsCAutoString windowPath("explicit/dom+style/window-objects/");
 
   nsIDocShell *docShell = aWindow->GetDocShell();
 
   nsGlobalWindow *top = aWindow->GetTop();
-  nsWindowSizes windowSizes(DOMStyleMallocSizeOf);
-  aWindow->SizeOfIncludingThis(&windowSizes);
+  PRInt64 windowDOMSize = aWindow->SizeOf();
+  PRInt64 styleSheetsSize = aWindow->SizeOfStyleSheets(WindowStyleSheetsMallocSizeOf);
 
   if (docShell && aWindow->IsFrozen()) {
     windowPath += NS_LITERAL_CSTRING("cached/");
   } else if (docShell) {
     windowPath += NS_LITERAL_CSTRING("active/");
   } else {
     windowPath += NS_LITERAL_CSTRING("other/");
   }
@@ -194,37 +195,37 @@ CollectWindowReports(nsGlobalWindow *aWi
   } else {
     // Combine all outer windows per section (active/cached/other) as
     // they basically never contain anything of interest, and are
     // always pretty much the same size.
 
     windowPath += NS_LITERAL_CSTRING("outer-windows");
   }
 
-  if (windowSizes.mDOM > 0) {
+  if (windowDOMSize > 0) {
     nsCAutoString domPath(windowPath);
     domPath += "/dom";
     NS_NAMED_LITERAL_CSTRING(kWindowDesc,
                              "Memory used by a window and the DOM within it.");
     aCb->Callback(EmptyCString(), domPath, nsIMemoryReporter::KIND_HEAP,
-                  nsIMemoryReporter::UNITS_BYTES, windowSizes.mDOM,
-                  kWindowDesc, aClosure);
-    aWindowTotals->mDom += windowSizes.mDOM;
+                  nsIMemoryReporter::UNITS_BYTES, windowDOMSize, kWindowDesc,
+                  aClosure);
+    aWindowTotals->mDom += windowDOMSize;
   }
 
-  if (windowSizes.mStyleSheets > 0) {
+  if (styleSheetsSize > 0) {
     nsCAutoString styleSheetsPath(windowPath);
     styleSheetsPath += "/style-sheets";
     NS_NAMED_LITERAL_CSTRING(kStyleSheetsDesc,
                              "Memory used by style sheets within a window.");
     aCb->Callback(EmptyCString(), styleSheetsPath,
                   nsIMemoryReporter::KIND_HEAP,
-                  nsIMemoryReporter::UNITS_BYTES, windowSizes.mStyleSheets,
+                  nsIMemoryReporter::UNITS_BYTES, styleSheetsSize,
                   kStyleSheetsDesc, aClosure);
-    aWindowTotals->mStyleSheets += windowSizes.mStyleSheets;
+    aWindowTotals->mStyleSheets += styleSheetsSize;
   }
 }
 
 typedef nsTArray< nsRefPtr<nsGlobalWindow> > WindowArray;
 
 static
 PLDHashOperator
 GetWindows(const PRUint64& aId, nsGlobalWindow*& aWindow, void* aClosure)
--- a/dom/base/nsDOMMemoryReporter.h
+++ b/dom/base/nsDOMMemoryReporter.h
@@ -35,34 +35,50 @@
  *
  * ***** END LICENSE BLOCK ***** */
 
 #ifndef nsDOMMemoryReporter_h__
 #define nsDOMMemoryReporter_h__
 
 #include "nsIMemoryReporter.h"
 
-// This should be used for any nsINode sub-class that has fields of its own
-// that it needs to measure;  any sub-class that doesn't use it will inherit
-// SizeOfExcludingThis from its super-class.  SizeOfIncludingThis() need not be
-// defined, it is inherited from nsINode.
-#define NS_DECL_SIZEOF_EXCLUDING_THIS \
-  virtual size_t SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const;
 
-class nsWindowSizes {
-public:
-    nsWindowSizes(nsMallocSizeOfFun aMallocSizeOf)
-    : mMallocSizeOf(aMallocSizeOf),
-      mDOM(0),
-      mStyleSheets(0)
-    {}
-    nsMallocSizeOfFun mMallocSizeOf;
-    size_t mDOM;
-    size_t mStyleSheets;
-};
+/**
+ * Helper methods for the DOM Memory Reporter.
+ */
+namespace mozilla {
+  namespace dom {
+    namespace MemoryReporter {
+      /**
+       * It will compute the basic size of an object. This means the size of the
+       * object itself plus everything owned by its superclasses.  This will not
+       * include the size of objects owned by this objects (which have to be
+       * manually added to ::SizeOf), but does include the size of any pointers
+       * to those objects stored in this object.
+       */
+      template <class TypeCurrent, class TypeParent>
+      inline PRInt64 GetBasicSize(const TypeCurrent* const obj) {
+        return obj->TypeParent::SizeOf() - sizeof(TypeParent)
+                                         + sizeof(TypeCurrent);
+      }
+    }
+  }
+}
+
+/**
+ * Helper macros to declare/implement SizeOf() method for DOM objects.
+ */
+#define NS_DECL_DOM_MEMORY_REPORTER_SIZEOF  \
+  virtual PRInt64 SizeOf() const;
+
+#define NS_DECL_AND_IMPL_DOM_MEMORY_REPORTER_SIZEOF(TypeCurrent, TypeParent) \
+  virtual PRInt64 SizeOf() const {                                           \
+    return mozilla::dom::MemoryReporter::GetBasicSize<TypeCurrent,           \
+                                                      TypeParent>(this);     \
+  }
 
 class nsDOMMemoryMultiReporter: public nsIMemoryMultiReporter
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIMEMORYMULTIREPORTER
 
   static void Init();
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -462,23 +462,16 @@ public:
   NS_IMETHOD GetURL(const char *aURL, const char *aTarget,
                     nsIInputStream *aPostStream,
                     void *aHeadersData, PRUint32 aHeadersDataLen);
   NS_IMETHOD ShowStatus(const PRUnichar *aStatusMsg);
   NPError ShowNativeContextMenu(NPMenu* menu, void* event);
   NPBool ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace,
                       double *destX, double *destY, NPCoordinateSpace destSpace);
   void SendIdleEvent();
-  
-  NPError InitAsyncSurface(NPSize *size, NPImageFormat format,
-                           void *initData, NPAsyncSurface *surface)
-  { return NPERR_GENERIC_ERROR; }
-
-  NPError FinalizeAsyncSurface(NPAsyncSurface *surface) { return NPERR_GENERIC_ERROR; }
-  void SetCurrentAsyncSurface(NPAsyncSurface *surface, NPRect *changed) { return; }
 
   NS_DECL_CYCLE_COLLECTION_CLASS(nsDummyJavaPluginOwner)
 
 private:
   nsRefPtr<nsNPAPIPluginInstance> mInstance;
   nsCOMPtr<nsIDocument> mDocument;
 };
 
@@ -608,22 +601,16 @@ nsDummyJavaPluginOwner::InvalidateRect(N
 
 NS_IMETHODIMP
 nsDummyJavaPluginOwner::InvalidateRegion(NPRegion invalidRegion)
 {
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
-nsDummyJavaPluginOwner::RedrawPlugin()
-{
-  return NS_ERROR_NOT_IMPLEMENTED;
-}
-
-NS_IMETHODIMP
 nsDummyJavaPluginOwner::GetNetscapeWindow(void *value)
 {
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
 nsDummyJavaPluginOwner::SetEventModel(PRInt32 eventModel)
 {
@@ -10192,36 +10179,45 @@ nsGlobalWindow::HasIndexedDBSupport()
 
 // static
 bool
 nsGlobalWindow::HasPerformanceSupport() 
 {
   return Preferences::GetBool("dom.enable_performance", false);
 }
 
-void
-nsGlobalWindow::SizeOfIncludingThis(nsWindowSizes* aWindowSizes) const
-{
-  aWindowSizes->mDOM += aWindowSizes->mMallocSizeOf(this);
+PRInt64
+nsGlobalWindow::SizeOf() const
+{
+  PRInt64 size = sizeof(*this);
 
   if (IsInnerWindow()) {
     nsEventListenerManager* elm =
       const_cast<nsGlobalWindow*>(this)->GetListenerManager(false);
     if (elm) {
-      aWindowSizes->mDOM +=
-        elm->SizeOfIncludingThis(aWindowSizes->mMallocSizeOf);
+      size += elm->SizeOf();
     }
     if (mDoc) {
-      mDoc->DocSizeOfIncludingThis(aWindowSizes);
-    }
-  }
-
-  aWindowSizes->mDOM +=
-    mNavigator ?
-      mNavigator->SizeOfIncludingThis(aWindowSizes->mMallocSizeOf) : 0;
+      size += mDoc->SizeOf();
+    }
+  }
+
+  size += mNavigator ? mNavigator->SizeOf() : 0;
+
+  return size;
+}
+
+size_t
+nsGlobalWindow::SizeOfStyleSheets(nsMallocSizeOfFun aMallocSizeOf) const
+{
+  size_t n = 0;
+  if (IsInnerWindow() && mDoc) {
+    n += mDoc->SizeOfStyleSheets(aMallocSizeOf);
+  }
+  return n;
 }
 
 // nsGlobalChromeWindow implementation
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(nsGlobalChromeWindow)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsGlobalChromeWindow,
                                                   nsGlobalWindow)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE_NSCOMPTR(mBrowserDOMWindow)
--- a/dom/base/nsGlobalWindow.h
+++ b/dom/base/nsGlobalWindow.h
@@ -137,18 +137,16 @@ class nsRunnable;
 
 class nsDOMOfflineResourceList;
 class nsDOMMozURLProperty;
 
 #ifdef MOZ_DISABLE_DOMCRYPTO
 class nsIDOMCrypto;
 #endif
 
-class nsWindowSizes;
-
 namespace mozilla {
 namespace dom {
 class Navigator;
 } // namespace dom
 } // namespace mozilla
 
 extern nsresult
 NS_CreateJSTimeoutHandler(nsGlobalWindow *aWindow,
@@ -573,17 +571,18 @@ public:
   static bool HasIndexedDBSupport();
 
   static bool HasPerformanceSupport();
 
   static WindowByIdTable* GetWindowsTable() {
     return sWindowsById;
   }
 
-  void SizeOfIncludingThis(nsWindowSizes* aWindowSizes) const;
+  PRInt64 SizeOf() const;
+  size_t SizeOfStyleSheets(nsMallocSizeOfFun aMallocSizeOf) const;
 
   void UnmarkGrayTimers();
 private:
   // Enable updates for the accelerometer.
   void EnableDeviceMotionUpdates();
 
   // Disables updates for the accelerometer.
   void DisableDeviceMotionUpdates();
--- a/dom/base/nsIJSEventListener.h
+++ b/dom/base/nsIJSEventListener.h
@@ -94,40 +94,17 @@ public:
     return mHandler;
   }
 
   // Set a handler for this event listener.  Must not be called if
   // there is already a handler!  The handler must already be bound to
   // the right target.
   virtual void SetHandler(JSObject *aHandler) = 0;
 
-  // Among the sub-classes that inherit (directly or indirectly) from nsINode,
-  // measurement of the following members may be added later if DMD finds it is
-  // worthwhile:
-  // - nsIJSEventListener: mEventName
-  //
-  virtual size_t SizeOfExcludingThis(nsMallocSizeOfFun aMallocSizeOf) const
-  {
-    return 0;
-
-    // Measurement of the following members may be added later if DMD finds it
-    // is worthwhile:
-    // - mContext
-    // - mTarget
-    //
-    // The following members are not measured:
-    // - mScopeObject, mHandler: because they're measured by the JS memory
-    //   reporters
-  }
-
-  virtual size_t SizeOfIncludingThis(nsMallocSizeOfFun aMallocSizeOf) const
-  {
-    return aMallocSizeOf(this) + SizeOfExcludingThis(aMallocSizeOf);
-  }
-
+  virtual PRInt64 SizeOf() const = 0;
 protected:
   virtual ~nsIJSEventListener()
   {
     NS_ASSERTION(!mTarget, "Should have called Disconnect()!");
   }
   nsCOMPtr<nsIScriptContext> mContext;
   JSObject* mScopeObject;
   nsISupports* mTarget;
--- a/dom/contacts/Makefile.in
+++ b/dom/contacts/Makefile.in
@@ -6,34 +6,35 @@ DEPTH		= ../..
 topsrcdir	= @top_srcdir@
 srcdir		= @srcdir@
 VPATH            = \
   $(srcdir)        \
   $(NULL)
 
 include $(DEPTH)/config/autoconf.mk
 
-ifeq ($(MOZ_BUILD_APP),b2g)
+ifeq ($(MOZ_WIDGET_TOOLKIT),gonk)
 VPATH += $(srcdir)/fallback
 endif
 
 MODULE         = dom
 LIBRARY_NAME   = jsdomcontacts_s
 LIBXUL_LIBRARY = 1
 
-EXTRA_COMPONENTS =        \
-  ContactManager.js       \
-  ContactManager.manifest \
+EXTRA_COMPONENTS =              \
+  ContactManager.js             \
+  ContactManager.manifest       \
   $(NULL)
 
-ifeq ($(MOZ_BUILD_APP),b2g)
-EXTRA_JS_MODULES =   \
-  ContactService.jsm \
-  ContactDB.jsm      \
-  $(NULL)
+ifeq ($(MOZ_WIDGET_TOOLKIT),gonk)
+EXTRA_JS_MODULES = ContactService.jsm \
+                   $(NULL)
+
+EXTRA_JS_MODULES += ContactDB.jsm \
+                    $(NULL)
 endif
 
 ifdef ENABLE_TESTS
 DIRS += tests
 endif
 
 # Add VPATH to LOCAL_INCLUDES so we are going to include the correct backend
 # subdirectory (and the ipc one).
--- a/dom/plugins/base/npapi.h
+++ b/dom/plugins/base/npapi.h
@@ -223,43 +223,16 @@ typedef struct _NPSize
   int32_t height;
 } NPSize;
 
 typedef enum {
   NPFocusNext = 0,
   NPFocusPrevious = 1
 } NPFocusDirection;
 
-/* These formats describe the format in the memory byte-order. This means if
- * a 32-bit value of a pixel is viewed on a little-endian system the layout will
- * be 0xAARRGGBB. The Alpha channel will be stored in the most significant
- * bits. */
-typedef enum {
-  /* 32-bit per pixel 8-bit per channel - premultiplied alpha */
-  NPImageFormatBGRA32     = 0x1,
-  /* 32-bit per pixel 8-bit per channel - 1 unused channel */
-  NPImageFormatBGRX32     = 0x2 
-} NPImageFormat;
- 
-typedef struct _NPAsyncSurface
-{
-  uint32_t version;
-  NPSize size;
-  NPImageFormat format;
-  union {
-    struct {
-      uint32_t stride;
-      void *data;
-    } bitmap;
-#if defined(XP_WIN)
-    HANDLE sharedHandle;
-#endif
-  };
-} NPAsyncSurface;
-
 /* Return values for NPP_HandleEvent */
 #define kNPEventNotHandled 0
 #define kNPEventHandled 1
 /* Exact meaning must be spec'd in event model. */
 #define kNPEventStartIME 2
 
 #if defined(XP_UNIX)
 /*
@@ -295,36 +268,27 @@ typedef struct
 typedef struct
 {
   int32_t type;
   FILE* fp;
 } NPPrintCallbackStruct;
 
 #endif /* XP_UNIX */
 
+#if defined(XP_MACOSX)
 typedef enum {
 #ifndef NP_NO_QUICKDRAW
   NPDrawingModelQuickDraw = 0,
 #endif
-#if defined(XP_MACOSX)
   NPDrawingModelCoreGraphics = 1,
   NPDrawingModelOpenGL = 2,
   NPDrawingModelCoreAnimation = 3,
-  NPDrawingModelInvalidatingCoreAnimation = 4,
-#endif
-  NPDrawingModelSyncWin = 5,
-  NPDrawingModelSyncX = 6,
-  NPDrawingModelAsyncBitmapSurface = 7
-#if defined(XP_WIN)
-  , NPDrawingModelAsyncWindowsDXGISurface = 8,
-  NPDrawingModelAsyncWindowsDX9ExSurface = 9
-#endif
+  NPDrawingModelInvalidatingCoreAnimation = 4
 } NPDrawingModel;
 
-#if defined(XP_MACOSX)
 typedef enum {
 #ifndef NP_NO_CARBON
   NPEventModelCarbon = 0,
 #endif
   NPEventModelCocoa = 1
 } NPEventModel;
 #endif
 
@@ -401,19 +365,19 @@ typedef enum {
 
   /* Checks to see if the plug-in would like the browser to load the "src" attribute. */
   NPPVpluginCancelSrcStream = 20,
 
   NPPVsupportsAdvancedKeyHandling = 21,
 
   NPPVpluginUsesDOMForCursorBool = 22
 
+#if defined(XP_MACOSX)
   /* Used for negotiating drawing models */
   , NPPVpluginDrawingModel = 1000
-#if defined(XP_MACOSX)
   /* Used for negotiating event models */
   , NPPVpluginEventModel = 1001
   /* In the NPDrawingModelCoreAnimation drawing model, the browser asks the plug-in for a Core Animation layer. */
   , NPPVpluginCoreAnimationLayer = 1003
 #endif
 
 #if (MOZ_PLATFORM_MAEMO == 5) || (MOZ_PLATFORM_MAEMO == 6)
   , NPPVpluginWindowlessLocalBool = 2002
@@ -446,35 +410,26 @@ typedef enum {
   NPNVSupportsWindowless = 17,
 
   NPNVprivateModeBool = 18,
 
   NPNVsupportsAdvancedKeyHandling = 21,
 
   NPNVdocumentOrigin = 22
 
+#if defined(XP_MACOSX)
   /* Used for negotiating drawing models */
   , NPNVpluginDrawingModel = 1000
-#if defined(XP_MACOSX)
 #ifndef NP_NO_QUICKDRAW
   , NPNVsupportsQuickDrawBool = 2000
 #endif
   , NPNVsupportsCoreGraphicsBool = 2001
   , NPNVsupportsOpenGLBool = 2002
   , NPNVsupportsCoreAnimationBool = 2003
   , NPNVsupportsInvalidatingCoreAnimationBool = 2004
-#endif
-  , NPNVsupportsSyncDrawingBool = 2005
-  , NPNVsupportsAsyncBitmapSurfaceBool = 2006
-#if defined(XP_WIN)
-  , NPNVsupportsAsyncWindowsDXGISurfaceBool = 2007
-  , NPNVsupportsAsyncWindowsDX9ExSurfaceBool = 2008
-#endif
-
-#if defined(XP_MACOSX)
 #ifndef NP_NO_CARBON
   , NPNVsupportsCarbonBool = 3000 /* TRUE if the browser supports the Carbon event model */
 #endif
   , NPNVsupportsCocoaBool = 3001 /* TRUE if the browser supports the Cocoa event model */
   , NPNVsupportsUpdatedCocoaTextInputBool = 3002 /* TRUE if the browser supports the updated
                                                     Cocoa text input specification. */
   , NPNVsupportsCompositingCoreAnimationPluginsBool = 74656 /* TRUE if the browser supports
                                                                CA model compositing */
@@ -860,17 +815,16 @@ void    NP_LOADDS NPP_URLNotify(NPP inst
                                 NPReason reason, void* notifyData);
 NPError NP_LOADDS NPP_GetValue(NPP instance, NPPVariable variable, void *value);
 NPError NP_LOADDS NPP_SetValue(NPP instance, NPNVariable variable, void *value);
 NPBool  NP_LOADDS NPP_GotFocus(NPP instance, NPFocusDirection direction);
 void    NP_LOADDS NPP_LostFocus(NPP instance);
 void    NP_LOADDS NPP_URLRedirectNotify(NPP instance, const char* url, int32_t status, void* notifyData);
 NPError NP_LOADDS NPP_ClearSiteData(const char* site, uint64_t flags, uint64_t maxAge);
 char**  NP_LOADDS NPP_GetSitesWithData(void);
-void    NP_LOADDS NPP_DidComposite(NPP instance);
 
 /* NPN_* functions are provided by the navigator and called by the plugin. */
 void        NP_LOADDS NPN_Version(int* plugin_major, int* plugin_minor,
                                   int* netscape_major, int* netscape_minor);
 NPError     NP_LOADDS NPN_GetURLNotify(NPP instance, const char* url,
                                        const char* target, void* notifyData);
 NPError     NP_LOADDS NPN_GetURL(NPP instance, const char* url,
                                  const char* target);
@@ -923,21 +877,16 @@ NPError     NP_LOADDS NPN_GetAuthenticat
                                                 uint32_t *plen);
 uint32_t    NP_LOADDS NPN_ScheduleTimer(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
 void        NP_LOADDS NPN_UnscheduleTimer(NPP instance, uint32_t timerID);
 NPError     NP_LOADDS NPN_PopUpContextMenu(NPP instance, NPMenu* menu);
 NPBool      NP_LOADDS NPN_ConvertPoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
 NPBool      NP_LOADDS NPN_HandleEvent(NPP instance, void *event, NPBool handled);
 NPBool      NP_LOADDS NPN_UnfocusInstance(NPP instance, NPFocusDirection direction);
 void        NP_LOADDS NPN_URLRedirectResponse(NPP instance, void* notifyData, NPBool allow);
-NPError     NP_LOADDS NPN_InitAsyncSurface(NPP instance, NPSize *size,
-                                           NPImageFormat format, void *initData,
-                                           NPAsyncSurface *surface);
-NPError     NP_LOADDS NPN_FinalizeAsyncSurface(NPP instance, NPAsyncSurface *surface);
-void        NP_LOADDS NPN_SetCurrentAsyncSurface(NPP instance, NPAsyncSurface *surface, NPRect *changed);
 
 #ifdef __cplusplus
 }  /* end extern "C" */
 #endif
 
 #endif /* RC_INVOKED */
 #if defined(__OS2__)
 #pragma pack()
--- a/dom/plugins/base/npfunctions.h
+++ b/dom/plugins/base/npfunctions.h
@@ -67,17 +67,16 @@ typedef void         (* NP_LOADDS NPP_UR
    by the plugin on the way out. The browser is responsible for releasing. */
 typedef NPError      (* NP_LOADDS NPP_GetValueProcPtr)(NPP instance, NPPVariable variable, void *ret_value);
 typedef NPError      (* NP_LOADDS NPP_SetValueProcPtr)(NPP instance, NPNVariable variable, void *value);
 typedef NPBool       (* NP_LOADDS NPP_GotFocusPtr)(NPP instance, NPFocusDirection direction);
 typedef void         (* NP_LOADDS NPP_LostFocusPtr)(NPP instance);
 typedef void         (* NP_LOADDS NPP_URLRedirectNotifyPtr)(NPP instance, const char* url, int32_t status, void* notifyData);
 typedef NPError      (* NP_LOADDS NPP_ClearSiteDataPtr)(const char* site, uint64_t flags, uint64_t maxAge);
 typedef char**       (* NP_LOADDS NPP_GetSitesWithDataPtr)(void);
-typedef void         (* NP_LOADDS NPP_DidCompositePtr)(NPP instance);
 
 typedef NPError      (*NPN_GetValueProcPtr)(NPP instance, NPNVariable variable, void *ret_value);
 typedef NPError      (*NPN_SetValueProcPtr)(NPP instance, NPPVariable variable, void *value);
 typedef NPError      (*NPN_GetURLNotifyProcPtr)(NPP instance, const char* url, const char* window, void* notifyData);
 typedef NPError      (*NPN_PostURLNotifyProcPtr)(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file, void* notifyData);
 typedef NPError      (*NPN_GetURLProcPtr)(NPP instance, const char* url, const char* window);
 typedef NPError      (*NPN_PostURLProcPtr)(NPP instance, const char* url, const char* window, uint32_t len, const char* buf, NPBool file);
 typedef NPError      (*NPN_RequestReadProcPtr)(NPStream* stream, NPByteRange* rangeList);
@@ -126,19 +125,16 @@ typedef NPError      (*NPN_SetValueForUR
 typedef NPError      (*NPN_GetAuthenticationInfoPtr)(NPP npp, const char *protocol, const char *host, int32_t port, const char *scheme, const char *realm, char **username, uint32_t *ulen, char **password, uint32_t *plen);
 typedef uint32_t     (*NPN_ScheduleTimerPtr)(NPP instance, uint32_t interval, NPBool repeat, void (*timerFunc)(NPP npp, uint32_t timerID));
 typedef void         (*NPN_UnscheduleTimerPtr)(NPP instance, uint32_t timerID);
 typedef NPError      (*NPN_PopUpContextMenuPtr)(NPP instance, NPMenu* menu);
 typedef NPBool       (*NPN_ConvertPointPtr)(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
 typedef NPBool       (*NPN_HandleEventPtr)(NPP instance, void *event, NPBool handled);
 typedef NPBool       (*NPN_UnfocusInstancePtr)(NPP instance, NPFocusDirection direction);
 typedef void         (*NPN_URLRedirectResponsePtr)(NPP instance, void* notifyData, NPBool allow);
-typedef NPError      (*NPN_InitAsyncSurfacePtr)(NPP instance, NPSize *size, NPImageFormat format, void *initData, NPAsyncSurface *surface);
-typedef NPError      (*NPN_FinalizeAsyncSurfacePtr)(NPP instance, NPAsyncSurface *surface);
-typedef void         (*NPN_SetCurrentAsyncSurfacePtr)(NPP instance, NPAsyncSurface *surface, NPRect *changed);
 
 typedef struct _NPPluginFuncs {
   uint16_t size;
   uint16_t version;
   NPP_NewProcPtr newp;
   NPP_DestroyProcPtr destroy;
   NPP_SetWindowProcPtr setwindow;
   NPP_NewStreamProcPtr newstream;
@@ -152,17 +148,16 @@ typedef struct _NPPluginFuncs {
   void* javaClass;
   NPP_GetValueProcPtr getvalue;
   NPP_SetValueProcPtr setvalue;
   NPP_GotFocusPtr gotfocus;
   NPP_LostFocusPtr lostfocus;
   NPP_URLRedirectNotifyPtr urlredirectnotify;
   NPP_ClearSiteDataPtr clearsitedata;
   NPP_GetSitesWithDataPtr getsiteswithdata;
-  NPP_DidCompositePtr didComposite;
 } NPPluginFuncs;
 
 typedef struct _NPNetscapeFuncs {
   uint16_t size;
   uint16_t version;
   NPN_GetURLProcPtr geturl;
   NPN_PostURLProcPtr posturl;
   NPN_RequestReadProcPtr requestread;
@@ -213,19 +208,16 @@ typedef struct _NPNetscapeFuncs {
   NPN_GetAuthenticationInfoPtr getauthenticationinfo;
   NPN_ScheduleTimerPtr scheduletimer;
   NPN_UnscheduleTimerPtr unscheduletimer;
   NPN_PopUpContextMenuPtr popupcontextmenu;
   NPN_ConvertPointPtr convertpoint;
   NPN_HandleEventPtr handleevent;
   NPN_UnfocusInstancePtr unfocusinstance;
   NPN_URLRedirectResponsePtr urlredirectresponse;
-  NPN_InitAsyncSurfacePtr initasyncsurface;
-  NPN_FinalizeAsyncSurfacePtr finalizeasyncsurface;
-  NPN_SetCurrentAsyncSurfacePtr setcurrentasyncsurface;
 } NPNetscapeFuncs;
 
 #ifdef XP_MACOSX
 /*
  * Mac OS X version(s) of NP_GetMIMEDescription(const char *)
  * These can be called to retreive MIME information from the plugin dynamically
  *
  * Note: For compatibility with Quicktime, BPSupportedMIMEtypes is another way
--- a/dom/plugins/base/nsIPluginInstanceOwner.idl
+++ b/dom/plugins/base/nsIPluginInstanceOwner.idl
@@ -114,36 +114,27 @@ interface nsIPluginInstanceOwner : nsISu
   void invalidateRect(in NPRectPtr aRect);
 
   /**
    * Invalidate the region
    */
   void invalidateRegion(in NPRegion aRegion);
 
   /**
-   * Have the plugin recomposited.
-   */
-  void redrawPlugin();
-
-  /**
    * Get NetscapeWindow, corresponds to NPNVnetscapeWindow
    */
   void getNetscapeWindow(in voidPtr aValue);
 
   /**
    * Show native context menu
    */
 %{C++
   virtual NPError ShowNativeContextMenu(NPMenu* menu, void* event) = 0;
   virtual NPBool  ConvertPoint(double sourceX, double sourceY, NPCoordinateSpace sourceSpace,
                                double *destX, double *destY, NPCoordinateSpace destSpace) = 0;
-  virtual NPError InitAsyncSurface(NPSize *size, NPImageFormat format,
-                                   void *initData, NPAsyncSurface *surface) = 0;
-  virtual NPError FinalizeAsyncSurface(NPAsyncSurface *surface) = 0;
-  virtual void SetCurrentAsyncSurface(NPAsyncSurface *surface, NPRect *changed) = 0;
 %}
 
   void setEventModel(in PRInt32 eventModel);
 
 %{C++
   virtual void SendIdleEvent() = 0;
 %}
 
--- a/dom/plugins/base/nsJSNPRuntime.cpp
+++ b/dom/plugins/base/nsJSNPRuntime.cpp
@@ -215,34 +215,35 @@ static JSClass sNPObjectMemberClass =
     JS_ResolveStub, NPObjectMember_Convert,
     NPObjectMember_Finalize, nsnull, NPObjectMember_Call,
     nsnull, nsnull, NPObjectMember_Trace
   };
 
 static void
 OnWrapperDestroyed();
 
-static void
-DelayedReleaseGCCallback(JSRuntime* rt, JSGCStatus status)
+static JSBool
+DelayedReleaseGCCallback(JSContext* cx, JSGCStatus status)
 {
   if (JSGC_END == status) {
     // Take ownership of sDelayedReleases and null it out now. The
     // _releaseobject call below can reenter GC and double-free these objects.
     nsAutoPtr<nsTArray<NPObject*> > delayedReleases(sDelayedReleases);
     sDelayedReleases = nsnull;
 
     if (delayedReleases) {
       for (PRUint32 i = 0; i < delayedReleases->Length(); ++i) {
         NPObject* obj = (*delayedReleases)[i];
         if (obj)
           _releaseobject(obj);
         OnWrapperDestroyed();
       }
     }
   }
+  return JS_TRUE;
 }
 
 static void
 OnWrapperCreated()
 {
   if (sWrapperCount++ == 0) {
     static const char rtsvc_id[] = "@mozilla.org/js/xpc/RuntimeService;1";
     nsCOMPtr<nsIJSRuntimeService> rtsvc(do_GetService(rtsvc_id));
--- a/dom/plugins/base/nsNPAPIPlugin.cpp
+++ b/dom/plugins/base/nsNPAPIPlugin.cpp
@@ -195,20 +195,17 @@ static NPNetscapeFuncs sBrowserFuncs = {
   _setvalueforurl,
   _getauthenticationinfo,
   _scheduletimer,
   _unscheduletimer,
   _popupcontextmenu,
   _convertpoint,
   NULL, // handleevent, unimplemented
   NULL, // unfocusinstance, unimplemented
-  _urlredirectresponse,
-  _initasyncsurface,
-  _finalizeasyncsurface,
-  _setcurrentasyncsurface
+  _urlredirectresponse
 };
 
 static Mutex *sPluginThreadAsyncCallLock = nsnull;
 static PRCList sPendingAsyncCalls = PR_INIT_STATIC_CLIST(&sPendingAsyncCalls);
 
 // POST/GET stream type
 enum eNPPStreamTypeInternal {
   eNPPStreamTypeInternal_Get,
@@ -2015,32 +2012,25 @@ NPError NP_CALLBACK
   switch(variable) {
 #if defined(XP_UNIX) && !defined(XP_MACOSX)
   case NPNVxDisplay : {
 #if defined(MOZ_X11)
     if (npp) {
       nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *) npp->ndata;
       bool windowless = false;
       inst->IsWindowless(&windowless);
-      // The documentation on the types for many variables in NP(N|P)_GetValue
-      // is vague.  Often boolean values are NPBool (1 byte), but
-      // https://developer.mozilla.org/en/XEmbed_Extension_for_Mozilla_Plugins
-      // treats NPPVpluginNeedsXEmbed as PRBool (int), and
-      // on x86/32-bit, flash stores to this using |movl 0x1,&needsXEmbed|.
-      // thus we can't use NPBool for needsXEmbed, or the three bytes above
-      // it on the stack would get clobbered. so protect with the larger bool.
-      int needsXEmbed = 0;
+      NPBool needXEmbed = false;
       if (!windowless) {
-        res = inst->GetValueFromPlugin(NPPVpluginNeedsXEmbed, &needsXEmbed);
+        res = inst->GetValueFromPlugin(NPPVpluginNeedsXEmbed, &needXEmbed);
         // If the call returned an error code make sure we still use our default value.
         if (NS_FAILED(res)) {
-          needsXEmbed = 0;
+          needXEmbed = false;
         }
       }
-      if (windowless || needsXEmbed) {
+      if (windowless || needXEmbed) {
         (*(Display **)result) = mozilla::DefaultXDisplay();
         return NPERR_NO_ERROR;
       }
     }
 #ifdef MOZ_WIDGET_GTK2
     // adobe nppdf calls XtGetApplicationNameAndClass(display,
     // &instance, &class) we have to init Xt toolkit before get
     // XtDisplay just call gtk_xtbin_new(w,0) once
@@ -2530,30 +2520,27 @@ NPError NP_CALLBACK
       return inst->SetCached(bCached);
     }
 
     case NPPVpluginUsesDOMForCursorBool: {
       bool useDOMForCursor = (result != nsnull);
       return inst->SetUsesDOMForCursor(useDOMForCursor);
     }
 
-#ifndef MOZ_WIDGET_ANDROID
-    // On android, their 'drawing model' uses the same constant!
+#ifdef XP_MACOSX
     case NPPVpluginDrawingModel: {
       if (inst) {
         inst->SetDrawingModel((NPDrawingModel)NS_PTR_TO_INT32(result));
         return NPERR_NO_ERROR;
       }
       else {
         return NPERR_GENERIC_ERROR;
       }
     }
-#endif
-
-#ifdef XP_MACOSX
+
     case NPPVpluginEventModel: {
       if (inst) {
         inst->SetEventModel((NPEventModel)NS_PTR_TO_INT32(result));
         return NPERR_NO_ERROR;
       }
       else {
         return NPERR_GENERIC_ERROR;
       }
@@ -2891,46 +2878,16 @@ NPError NP_CALLBACK
 {
   nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *)instance->ndata;
   if (!inst)
     return NPERR_GENERIC_ERROR;
 
   return inst->PopUpContextMenu(menu);
 }
 
-NPError NP_CALLBACK
-_initasyncsurface(NPP instance, NPSize *size, NPImageFormat format, void *initData, NPAsyncSurface *surface)
-{
-  nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *)instance->ndata;
-  if (!inst)
-    return NPERR_GENERIC_ERROR;
-
-  return inst->InitAsyncSurface(size, format, initData, surface);
-}
-
-NPError NP_CALLBACK
-_finalizeasyncsurface(NPP instance, NPAsyncSurface *surface)
-{
-  nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *)instance->ndata;
-  if (!inst)
-    return NPERR_GENERIC_ERROR;
-
-  return inst->FinalizeAsyncSurface(surface);
-}
-
-void NP_CALLBACK
-_setcurrentasyncsurface(NPP instance, NPAsyncSurface *surface, NPRect *changed)
-{
-  nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *)instance->ndata;
-  if (!inst)
-    return;
-
-  inst->SetCurrentAsyncSurface(surface, changed);
-}
-
 NPBool NP_CALLBACK
 _convertpoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace)
 {
   nsNPAPIPluginInstance *inst = (nsNPAPIPluginInstance *)instance->ndata;
   if (!inst)
     return false;
 
   return inst->ConvertPoint(sourceX, sourceY, sourceSpace, destX, destY, destSpace);
--- a/dom/plugins/base/nsNPAPIPlugin.h
+++ b/dom/plugins/base/nsNPAPIPlugin.h
@@ -292,25 +292,16 @@ uint32_t NP_CALLBACK
 _scheduletimer(NPP instance, uint32_t interval, NPBool repeat, PluginTimerFunc timerFunc);
 
 void NP_CALLBACK
 _unscheduletimer(NPP instance, uint32_t timerID);
 
 NPError NP_CALLBACK
 _popupcontextmenu(NPP instance, NPMenu* menu);
 
-NPError NP_CALLBACK
-_initasyncsurface(NPP instance, NPSize *size, NPImageFormat format, void *initData, NPAsyncSurface *surface);
-
-NPError NP_CALLBACK
-_finalizeasyncsurface(NPP instance, NPAsyncSurface *surface);
-
-void NP_CALLBACK
-_setcurrentasyncsurface(NPP instance, NPAsyncSurface *surface, NPRect *changed);
-
 NPBool NP_CALLBACK
 _convertpoint(NPP instance, double sourceX, double sourceY, NPCoordinateSpace sourceSpace, double *destX, double *destY, NPCoordinateSpace destSpace);
 
 NPError NP_CALLBACK
 _requestread(NPStream *pstream, NPByteRange *rangeList);
 
 NPError NP_CALLBACK
 _geturlnotify(NPP npp, const char* relativeURL, const char* target,
--- a/dom/plugins/base/nsNPAPIPluginInstance.cpp
+++ b/dom/plugins/base/nsNPAPIPluginInstance.cpp
@@ -75,17 +75,23 @@ using namespace mozilla::plugins::parent
 
 static NS_DEFINE_IID(kIOutputStreamIID, NS_IOUTPUTSTREAM_IID);
 static NS_DEFINE_IID(kIPluginStreamListenerIID, NS_IPLUGINSTREAMLISTENER_IID);
 
 NS_IMPL_THREADSAFE_ISUPPORTS0(nsNPAPIPluginInstance)
 
 nsNPAPIPluginInstance::nsNPAPIPluginInstance(nsNPAPIPlugin* plugin)
   :
-    mDrawingModel(kDefaultDrawingModel),
+#ifdef XP_MACOSX
+#ifdef NP_NO_QUICKDRAW
+    mDrawingModel(NPDrawingModelCoreGraphics),
+#else
+    mDrawingModel(NPDrawingModelQuickDraw),
+#endif
+#endif
 #ifdef MOZ_WIDGET_ANDROID
     mSurface(nsnull),
     mANPDrawingModel(0),
     mOnScreen(true),
 #endif
     mRunning(NOT_STARTED),
     mWindowless(false),
     mTransparent(false),
@@ -693,27 +699,22 @@ NPError nsNPAPIPluginInstance::SetUsesDO
 }
 
 bool
 nsNPAPIPluginInstance::UsesDOMForCursor()
 {
   return mUsesDOMForCursor;
 }
 
+#if defined(XP_MACOSX)
 void nsNPAPIPluginInstance::SetDrawingModel(NPDrawingModel aModel)
 {
   mDrawingModel = aModel;
 }
 
-void nsNPAPIPluginInstance::RedrawPlugin()
-{
-  mOwner->RedrawPlugin();
-}
-
-#if defined(XP_MACOSX)
 void nsNPAPIPluginInstance::SetEventModel(NPEventModel aModel)
 {
   // the event model needs to be set for the object frame immediately
   nsCOMPtr<nsIPluginInstanceOwner> owner;
   GetOwner(getter_AddRefs(owner));
   if (!owner) {
     NS_WARNING("Trying to set event model without a plugin instance owner!");
     return;