Backed out changeset 39a3044823b0 because of bad interaction with maple.
authorBenoit Girard <b56girard@gmail.com>
Fri, 02 Mar 2012 18:32:46 -0500
changeset 92603 5c3d11c465f1b029e7fbbfffe6af13d0b094a28d
parent 92602 39a3044823b01608c231a281d106018e6687a10f
child 92604 bad6d022d16d26159d5e0ecfe92fd2f4a82eba78
push idunknown
push userunknown
push dateunknown
milestone13.0a1
backs out39a3044823b01608c231a281d106018e6687a10f
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->ConvertPo