Merge last PGO-green changeset of mozilla-inbound to mozilla-central
authorEd Morley <emorley@mozilla.com>
Thu, 04 Oct 2012 16:18:25 +0100
changeset 115539 0d90d5f3da5a9539fa4cf9b2aec0a218fea43e05
parent 115456 4cb8f88213f5e8c108103f7f167463bedd798542 (current diff)
parent 115538 d0cba47694a3888284e7c5b980a114100936a040 (diff)
child 115540 b237556c855d78214a98548776fd2dad200a1e4b
push id1708
push userakeybl@mozilla.com
push dateMon, 19 Nov 2012 21:10:21 +0000
treeherdermozilla-beta@27b14fe50103 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
milestone18.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Merge last PGO-green changeset of mozilla-inbound to mozilla-central
browser/components/privatebrowsing/test/unit/do_test_removeDataFromDomain.js
browser/components/privatebrowsing/test/unit/do_test_removeDataFromDomain_activeDownloads.js
browser/components/privatebrowsing/test/unit/test_privatebrowsingwrapper_removeDataFromDomain.js
browser/components/privatebrowsing/test/unit/test_privatebrowsingwrapper_removeDataFromDomain_activeDownloads.js
--- a/accessible/src/Makefile.in
+++ b/accessible/src/Makefile.in
@@ -5,16 +5,25 @@
 
 DEPTH = @DEPTH@
 topsrcdir = @top_srcdir@
 srcdir = @srcdir@
 VPATH = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
+A11Y_LOG = 0
+ifdef MOZ_DEBUG
+  A11Y_LOG = 1
+endif
+ifeq (,$(filter aurora beta release esr,$(MOZ_UPDATE_CHANNEL)))
+  A11Y_LOG = 1
+endif
+export A11Y_LOG
+
 ifeq ($(MOZ_WIDGET_TOOLKIT),gtk2)
 PLATFORM_DIR = atk
 else
 ifeq ($(MOZ_WIDGET_TOOLKIT),windows)
 PLATFORM_DIR = \
   msaa \
   windows \
   $(null)
--- a/accessible/src/atk/AccessibleWrap.cpp
+++ b/accessible/src/atk/AccessibleWrap.cpp
@@ -401,23 +401,19 @@ AccessibleWrap::CreateMaiInterfaces(void
     interfacesBits |= 1 << MAI_INTERFACE_IMAGE;
 
   // HyperLink interface.
   if (IsLink())
     interfacesBits |= 1 << MAI_INTERFACE_HYPERLINK_IMPL;
 
   if (!nsAccUtils::MustPrune(this)) {  // These interfaces require children
     // Table interface.
-    nsCOMPtr<nsIAccessibleTable> accessInterfaceTable;
-    QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                   getter_AddRefs(accessInterfaceTable));
-    if (accessInterfaceTable) {
+    if (AsTable())
       interfacesBits |= 1 << MAI_INTERFACE_TABLE;
-    }
-      
+ 
     // Selection interface.
     if (IsSelect()) {
       interfacesBits |= 1 << MAI_INTERFACE_SELECTION;
     }
   }
 
   return interfacesBits;
 }
--- a/accessible/src/atk/Makefile.in
+++ b/accessible/src/atk/Makefile.in
@@ -63,8 +63,12 @@ LOCAL_INCLUDES += \
   -I$(srcdir) \
   -I$(srcdir)/../base \
   -I$(srcdir)/../generic \
   -I$(srcdir)/../html \
   -I$(srcdir)/../xpcom \
   -I$(srcdir)/../xul \
   -I$(topsrcdir)/other-licenses/atk-1.0 \
   $(NULL)
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/atk/nsMaiInterfaceTable.cpp
+++ b/accessible/src/atk/nsMaiInterfaceTable.cpp
@@ -3,443 +3,293 @@
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "InterfaceInitFuncs.h"
 
 #include "AccessibleWrap.h"
 #include "nsAccUtils.h"
-#include "nsIAccessibleTable.h"
 #include "TableAccessible.h"
+#include "TableCellAccessible.h"
 #include "nsMai.h"
 
 #include "nsArrayUtils.h"
 
 using namespace mozilla::a11y;
 
 extern "C" {
 static AtkObject*
-refAtCB(AtkTable *aTable, gint aRow, gint aColumn)
+refAtCB(AtkTable* aTable, gint aRowIdx, gint aColIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-  if (!accWrap)
+  if (!accWrap || aRowIdx < 0 || aColIdx < 0)
     return nullptr;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, nullptr);
+  Accessible* cell = accWrap->AsTable()->CellAt(aRowIdx, aColIdx);
+  if (!cell)
+    return nullptr;
 
-    nsCOMPtr<nsIAccessible> cell;
-    nsresult rv = accTable->GetCellAt(aRow, aColumn,getter_AddRefs(cell));
-    if (NS_FAILED(rv) || !cell)
-        return nullptr;
+  AtkObject* cellAtkObj = AccessibleWrap::GetAtkObject(cell);
+  if (cellAtkObj)
+    g_object_ref(cellAtkObj);
 
-    AtkObject* cellAtkObj = AccessibleWrap::GetAtkObject(cell);
-    if (cellAtkObj) {
-        g_object_ref(cellAtkObj);
-    }
-    return cellAtkObj;
+  return cellAtkObj;
 }
 
 static gint
-getIndexAtCB(AtkTable* aTable, gint aRow, gint aColumn)
+getIndexAtCB(AtkTable* aTable, gint aRowIdx, gint aColIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-  if (!accWrap)
+  if (!accWrap || aRowIdx < 0 || aColIdx < 0)
     return -1;
 
-  TableAccessible* table = accWrap->AsTable();
-  NS_ENSURE_TRUE(table, -1);
-
-  return static_cast<gint>(table->CellIndexAt(aRow, aColumn));
+  return static_cast<gint>(accWrap->AsTable()->CellIndexAt(aRowIdx, aColIdx));
 }
 
 static gint
-getColumnAtIndexCB(AtkTable *aTable, gint aIndex)
+getColumnAtIndexCB(AtkTable *aTable, gint aIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-  if (!accWrap)
+  if (!accWrap || aIdx < 0)
     return -1;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, -1);
-
-    int32_t col;
-    nsresult rv = accTable->GetColumnIndexAt(aIndex, &col);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    return static_cast<gint>(col);
+    return static_cast<gint>(accWrap->AsTable()->ColIndexAt(aIdx));
 }
 
 static gint
-getRowAtIndexCB(AtkTable *aTable, gint aIndex)
+getRowAtIndexCB(AtkTable *aTable, gint aIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-  if (!accWrap)
+  if (!accWrap || aIdx < 0)
     return -1;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, -1);
-
-    int32_t row;
-    nsresult rv = accTable->GetRowIndexAt(aIndex, &row);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    return static_cast<gint>(row);
+    return static_cast<gint>(accWrap->AsTable()->RowIndexAt(aIdx));
 }
 
 static gint
 getColumnCountCB(AtkTable *aTable)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return -1;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, -1);
-
-    int32_t count;
-    nsresult rv = accTable->GetColumnCount(&count);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    return static_cast<gint>(count);
+    return static_cast<gint>(accWrap->AsTable()->ColCount());
 }
 
 static gint
 getRowCountCB(AtkTable *aTable)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return -1;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, -1);
-
-    int32_t count;
-    nsresult rv = accTable->GetRowCount(&count);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    return static_cast<gint>(count);
+    return static_cast<gint>(accWrap->AsTable()->RowCount());
 }
 
 static gint
-getColumnExtentAtCB(AtkTable *aTable,
-                    gint aRow, gint aColumn)
+getColumnExtentAtCB(AtkTable *aTable, gint aRowIdx, gint aColIdx)
+{
+  AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
+  if (!accWrap || aRowIdx < 0 || aColIdx < 0)
+    return -1;
+
+    return static_cast<gint>(accWrap->AsTable()->ColExtentAt(aRowIdx, aColIdx));
+}
+
+static gint
+getRowExtentAtCB(AtkTable *aTable, gint aRowIdx, gint aColIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return -1;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, -1);
-
-    int32_t extent;
-    nsresult rv = accTable->GetColumnExtentAt(aRow, aColumn, &extent);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    return static_cast<gint>(extent);
-}
-
-static gint
-getRowExtentAtCB(AtkTable *aTable,
-                 gint aRow, gint aColumn)
-{
-  AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-  if (!accWrap)
-    return -1;
-
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, -1);
-
-    int32_t extent;
-    nsresult rv = accTable->GetRowExtentAt(aRow, aColumn, &extent);
-    NS_ENSURE_SUCCESS(rv, -1);
-
-    return static_cast<gint>(extent);
+  return static_cast<gint>(accWrap->AsTable()->RowExtentAt(aRowIdx, aColIdx));
 }
 
 static AtkObject*
 getCaptionCB(AtkTable* aTable)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return nullptr;
 
-  TableAccessible* table = accWrap->AsTable();
-  NS_ENSURE_TRUE(table, nullptr);
-
-  Accessible* caption = table->Caption();
+  Accessible* caption = accWrap->AsTable()->Caption();
   return caption ? AccessibleWrap::GetAtkObject(caption) : nullptr;
 }
 
 static const gchar*
 getColumnDescriptionCB(AtkTable *aTable, gint aColumn)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return nullptr;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, nullptr);
+  nsAutoString autoStr;
+  accWrap->AsTable()->ColDescription(aColumn, autoStr);
 
-    nsAutoString autoStr;
-    nsresult rv = accTable->GetColumnDescription(aColumn, autoStr);
-    NS_ENSURE_SUCCESS(rv, nullptr);
-
-    return AccessibleWrap::ReturnString(autoStr);
+  return AccessibleWrap::ReturnString(autoStr);
 }
 
 static AtkObject*
-getColumnHeaderCB(AtkTable *aTable, gint aColumn)
+getColumnHeaderCB(AtkTable *aTable, gint aColIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return nullptr;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, nullptr);
+  Accessible* cell = accWrap->AsTable()->CellAt(0, aColIdx);
+  if (!cell)
+    return nullptr;
 
-    nsCOMPtr<nsIAccessible> accCell;
-    accTable->GetCellAt(0, aColumn, getter_AddRefs(accCell));
-    if (!accCell)
-        return nullptr;
-
-    // If the cell at the first row is column header then assume it is column
-    // header for all rows,
-    if (nsAccUtils::Role(accCell) == nsIAccessibleRole::ROLE_COLUMNHEADER)
-        return AccessibleWrap::GetAtkObject(accCell);
+  // If the cell at the first row is column header then assume it is column
+  // header for all rows,
+  if (cell->Role() == roles::COLUMNHEADER)
+    return AccessibleWrap::GetAtkObject(cell);
 
-    // otherwise get column header for the data cell at the first row.
-    nsCOMPtr<nsIAccessibleTableCell> accTableCell =
-        do_QueryInterface(accCell);
+  // otherwise get column header for the data cell at the first row.
+  TableCellAccessible* tableCell = cell->AsTableCell();
+  if (!tableCell)
+    return nullptr;
 
-    if (accTableCell) {
-        nsCOMPtr<nsIArray> headerCells;
-        accTableCell->GetColumnHeaderCells(getter_AddRefs(headerCells));
-        if (headerCells) {
-            nsresult rv;
-            nsCOMPtr<nsIAccessible> accHeaderCell =
-                do_QueryElementAt(headerCells, 0, &rv);
-            NS_ENSURE_SUCCESS(rv, nullptr);
+  nsAutoTArray<Accessible*, 10> headerCells;
+  tableCell->ColHeaderCells(&headerCells);
+  if (headerCells.IsEmpty())
+    return nullptr;
 
-            return AccessibleWrap::GetAtkObject(accHeaderCell);
-        }
-    }
-
-    return nullptr;
+  return AccessibleWrap::GetAtkObject(headerCells[0]);
 }
 
 static const gchar*
 getRowDescriptionCB(AtkTable *aTable, gint aRow)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return nullptr;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, nullptr);
+  nsAutoString autoStr;
+  accWrap->AsTable()->RowDescription(aRow, autoStr);
 
-    nsAutoString autoStr;
-    nsresult rv = accTable->GetRowDescription(aRow, autoStr);
-    NS_ENSURE_SUCCESS(rv, nullptr);
-
-    return AccessibleWrap::ReturnString(autoStr);
+  return AccessibleWrap::ReturnString(autoStr);
 }
 
 static AtkObject*
-getRowHeaderCB(AtkTable *aTable, gint aRow)
+getRowHeaderCB(AtkTable *aTable, gint aRowIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return nullptr;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, nullptr);
+  Accessible* cell = accWrap->AsTable()->CellAt(aRowIdx, 0);
+  if (!cell)
+    return nullptr;
 
-    nsCOMPtr<nsIAccessible> accCell;
-    accTable->GetCellAt(aRow, 0, getter_AddRefs(accCell));
-    if (!accCell)
-      return nullptr;
-
-    // If the cell at the first column is row header then assume it is row
-    // header for all columns,
-    if (nsAccUtils::Role(accCell) == nsIAccessibleRole::ROLE_ROWHEADER)
-        return AccessibleWrap::GetAtkObject(accCell);
+  // If the cell at the first column is row header then assume it is row
+  // header for all columns,
+  if (cell->Role() == roles::ROWHEADER)
+    return AccessibleWrap::GetAtkObject(cell);
 
-    // otherwise get row header for the data cell at the first column.
-    nsCOMPtr<nsIAccessibleTableCell> accTableCell =
-        do_QueryInterface(accCell);
+  // otherwise get row header for the data cell at the first column.
+  TableCellAccessible* tableCell = cell->AsTableCell();
+  if (!tableCell)
+    return nullptr;
 
-    if (accTableCell) {
-      nsCOMPtr<nsIArray> headerCells;
-      accTableCell->GetRowHeaderCells(getter_AddRefs(headerCells));
-      if (headerCells) {
-        nsresult rv;
-        nsCOMPtr<nsIAccessible> accHeaderCell =
-            do_QueryElementAt(headerCells, 0, &rv);
-        NS_ENSURE_SUCCESS(rv, nullptr);
+  nsAutoTArray<Accessible*, 10> headerCells;
+  tableCell->RowHeaderCells(&headerCells);
+  if (headerCells.IsEmpty())
+    return nullptr;
 
-        return AccessibleWrap::GetAtkObject(accHeaderCell);
-      }
-    }
-
-    return nullptr;
+  return AccessibleWrap::GetAtkObject(headerCells[0]);
 }
 
 static AtkObject*
 getSummaryCB(AtkTable *aTable)
 {
   // Neither html:table nor xul:tree nor ARIA grid/tree have an ability to
   // link an accessible object to specify a summary. There is closes method
-  // in nsIAccessibleTable::summary to get a summary as a string which is not
+  // in TableAccessible::summary to get a summary as a string which is not
   // mapped directly to ATK.
   return nullptr;
 }
 
 static gint
-getSelectedColumnsCB(AtkTable *aTable, gint **aSelected)
+getSelectedColumnsCB(AtkTable *aTable, gint** aSelected)
 {
+  *aSelected = nullptr;
+
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return 0;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, 0);
-
-    uint32_t size = 0;
-    int32_t *columns = NULL;
-    nsresult rv = accTable->GetSelectedColumnIndices(&size, &columns);
-    if (NS_FAILED(rv) || (size == 0) || !columns) {
-        *aSelected = nullptr;
-        return 0;
-    }
+  nsAutoTArray<uint32_t, 10> cols;
+  accWrap->AsTable()->SelectedColIndices(&cols);
+  if (cols.IsEmpty())
+    return 0;
 
-    gint *atkColumns = g_new(gint, size);
-    if (!atkColumns) {
-        NS_WARNING("OUT OF MEMORY");
-        return 0;
-    }
+  gint* atkColumns = g_new(gint, cols.Length());
+  if (!atkColumns) {
+    NS_WARNING("OUT OF MEMORY");
+    return 0;
+  }
 
-    //copy
-    for (uint32_t index = 0; index < size; ++index)
-        atkColumns[index] = static_cast<gint>(columns[index]);
-    nsMemory::Free(columns);
-
-    *aSelected = atkColumns;
-    return size;
+  memcpy(atkColumns, cols.Elements(), cols.Length() * sizeof(uint32_t));
+  *aSelected = atkColumns;
+  return cols.Length();
 }
 
 static gint
 getSelectedRowsCB(AtkTable *aTable, gint **aSelected)
 {
-    AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-    if (!accWrap)
-        return 0;
+  AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
+  if (!accWrap)
+    return 0;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, 0);
+  nsAutoTArray<uint32_t, 10> rows;
+  accWrap->AsTable()->SelectedRowIndices(&rows);
 
-    uint32_t size = 0;
-    int32_t *rows = NULL;
-    nsresult rv = accTable->GetSelectedRowIndices(&size, &rows);
-    if (NS_FAILED(rv) || (size == 0) || !rows) {
-        *aSelected = nullptr;
-        return 0;
-    }
+  gint* atkRows = g_new(gint, rows.Length());
+  if (!atkRows) {
+    NS_WARNING("OUT OF MEMORY");
+    return 0;
+  }
 
-    gint *atkRows = g_new(gint, size);
-    if (!atkRows) {
-        NS_WARNING("OUT OF MEMORY");
-        return 0;
-    }
-
-    //copy
-    for (uint32_t index = 0; index < size; ++index)
-        atkRows[index] = static_cast<gint>(rows[index]);
-    nsMemory::Free(rows);
-
-    *aSelected = atkRows;
-    return size;
+  memcpy(atkRows, rows.Elements(), rows.Length() * sizeof(uint32_t));
+  *aSelected = atkRows;
+  return rows.Length();
 }
 
 static gboolean
-isColumnSelectedCB(AtkTable *aTable, gint aColumn)
-{
-    AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
-    if (!accWrap)
-        return FALSE;
-
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, FALSE);
-
-    bool outValue;
-    nsresult rv = accTable->IsColumnSelected(aColumn, &outValue);
-    return NS_FAILED(rv) ? FALSE : static_cast<gboolean>(outValue);
-}
-
-static gboolean
-isRowSelectedCB(AtkTable *aTable, gint aRow)
+isColumnSelectedCB(AtkTable *aTable, gint aColIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return FALSE;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, FALSE);
-
-    bool outValue;
-    nsresult rv = accTable->IsRowSelected(aRow, &outValue);
-    return NS_FAILED(rv) ? FALSE : static_cast<gboolean>(outValue);
+  return static_cast<gboolean>(accWrap->AsTable()->IsColSelected(aColIdx));
 }
 
 static gboolean
-isCellSelectedCB(AtkTable *aTable, gint aRow, gint aColumn)
+isRowSelectedCB(AtkTable *aTable, gint aRowIdx)
 {
   AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
   if (!accWrap)
     return FALSE;
 
-    nsCOMPtr<nsIAccessibleTable> accTable;
-    accWrap->QueryInterface(NS_GET_IID(nsIAccessibleTable),
-                            getter_AddRefs(accTable));
-    NS_ENSURE_TRUE(accTable, FALSE);
+  return static_cast<gboolean>(accWrap->AsTable()->IsRowSelected(aRowIdx));
+}
 
-    bool outValue;
-    nsresult rv = accTable->IsCellSelected(aRow, aColumn, &outValue);
-    return NS_FAILED(rv) ? FALSE : static_cast<gboolean>(outValue);
+static gboolean
+isCellSelectedCB(AtkTable *aTable, gint aRowIdx, gint aColIdx)
+{
+  AccessibleWrap* accWrap = GetAccessibleWrap(ATK_OBJECT(aTable));
+  if (!accWrap)
+    return FALSE;
+
+    return static_cast<gboolean>(accWrap->AsTable()->
+      IsCellSelected(aRowIdx, aColIdx));
 }
 }
 
 void
 tableInterfaceInitCB(AtkTableIface* aIface)
 {
   NS_ASSERTION(aIface, "no interface!");
   if (NS_UNLIKELY(!aIface))
--- a/accessible/src/base/FocusManager.cpp
+++ b/accessible/src/base/FocusManager.cpp
@@ -109,17 +109,17 @@ FocusManager::IsInOrContainsFocus(const 
   }
 
   return eNone;
 }
 
 void
 FocusManager::NotifyOfDOMFocus(nsISupports* aTarget)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eFocus))
     logging::FocusNotificationTarget("DOM focus", "Target", aTarget);
 #endif
 
   mActiveItem = nullptr;
 
   nsCOMPtr<nsINode> targetNode(do_QueryInterface(aTarget));
   if (targetNode) {
@@ -137,17 +137,17 @@ FocusManager::NotifyOfDOMFocus(nsISuppor
         (this, &FocusManager::ProcessDOMFocus, targetNode);
     }
   }
 }
 
 void
 FocusManager::NotifyOfDOMBlur(nsISupports* aTarget)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eFocus))
     logging::FocusNotificationTarget("DOM blur", "Target", aTarget);
 #endif
 
   mActiveItem = nullptr;
 
   // If DOM document stays focused then fire accessible focus event to process
   // the case when no element within this DOM document will be focused.
@@ -161,30 +161,30 @@ FocusManager::NotifyOfDOMBlur(nsISupport
         (this, &FocusManager::ProcessDOMFocus, DOMDoc);
     }
   }
 }
 
 void
 FocusManager::ActiveItemChanged(Accessible* aItem, bool aCheckIfActive)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eFocus))
     logging::FocusNotificationTarget("active item changed", "Item", aItem);
 #endif
 
   // Nothing changed, happens for XUL trees and HTML selects.
   if (aItem && aItem == mActiveItem)
     return;
 
   mActiveItem = nullptr;
 
   if (aItem && aCheckIfActive) {
     Accessible* widget = aItem->ContainerWidget();
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eFocus))
       logging::ActiveWidget(widget);
 #endif
     if (!widget || !widget->IsActiveWidget() || !widget->AreItemsOperable())
       return;
   }
   mActiveItem = aItem;
 
@@ -216,27 +216,27 @@ FocusManager::DispatchFocusEvent(DocAcce
 {
   NS_PRECONDITION(aDocument, "No document for focused accessible!");
   if (aDocument) {
     nsRefPtr<AccEvent> event =
       new AccEvent(nsIAccessibleEvent::EVENT_FOCUS, aTarget,
                    eAutoDetect, AccEvent::eCoalesceOfSameType);
     aDocument->FireDelayedAccessibleEvent(event);
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eFocus))
       logging::FocusDispatched(aTarget);
 #endif
   }
 }
 
 void
 FocusManager::ProcessDOMFocus(nsINode* aTarget)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eFocus))
     logging::FocusNotificationTarget("process DOM focus", "Target", aTarget);
 #endif
 
   DocAccessible* document =
     GetAccService()->GetDocAccessible(aTarget->OwnerDoc());
 
   Accessible* target = document->GetAccessibleOrContainer(aTarget);
@@ -317,17 +317,17 @@ FocusManager::ProcessFocusEvent(AccEvent
     nsRefPtr<AccEvent> menuEndEvent =
       new AccEvent(nsIAccessibleEvent::EVENT_MENU_END, mActiveARIAMenubar,
                    fromUserInputFlag);
     nsEventShell::FireEvent(menuEndEvent);
 
     mActiveARIAMenubar = nullptr;
   }
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eFocus))
     logging::FocusNotificationTarget("fire focus event", "Target", target);
 #endif
 
   nsRefPtr<AccEvent> focusEvent =
     new AccEvent(nsIAccessibleEvent::EVENT_FOCUS, target, fromUserInputFlag);
   nsEventShell::FireEvent(focusEvent);
 
--- a/accessible/src/base/Makefile.in
+++ b/accessible/src/base/Makefile.in
@@ -35,17 +35,17 @@ CPPSRCS = \
   nsCaretAccessible.cpp \
   nsTextEquivUtils.cpp \
   RoleAsserts.cpp \
   StyleInfo.cpp \
   TextAttrs.cpp \
   TextUpdater.cpp \
   $(NULL)
 
-ifdef MOZ_DEBUG
+ifneq ($(A11Y_LOG),0)
 CPPSRCS += \
   Logging.cpp \
   $(NULL)
 endif
 
 EXPORTS = \
   a11yGeneric.h \
   AccEvent.h \
@@ -101,8 +101,12 @@ LOCAL_INCLUDES += \
   $(NULL)
 else
 LOCAL_INCLUDES += \
   -I$(srcdir)/../other \
   $(NULL)
 endif
 endif
 endif
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/base/NotificationController.cpp
+++ b/accessible/src/base/NotificationController.cpp
@@ -11,17 +11,17 @@
 #include "nsCoreUtils.h"
 #include "DocAccessible.h"
 #include "nsEventShell.h"
 #include "FocusManager.h"
 #include "Role.h"
 #include "TextLeafAccessible.h"
 #include "TextUpdater.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 #include "mozilla/dom/Element.h"
 #include "mozilla/Telemetry.h"
 
 using namespace mozilla;
 using namespace mozilla::a11y;
@@ -193,17 +193,17 @@ NotificationController::WillRefresh(mozi
   if (!mDocument->HasLoadState(DocAccessible::eTreeConstructed)) {
     // If document is not bound to parent at this point then the document is not
     // ready yet (process notifications later).
     if (!mDocument->IsBoundToParent()) {
       mObservingState = eRefreshObserving;
       return;
     }
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eTree)) {
       logging::MsgBegin("TREE", "initial tree created");
       logging::Address("document", mDocument);
       logging::MsgEnd();
     }
 #endif
 
     mDocument->DoInitialUpdate();
@@ -298,17 +298,17 @@ NotificationController::WillRefresh(mozi
   // process it synchronously.
   mObservingState = eRefreshObserving;
 
   // Process only currently queued events.
   nsTArray<nsRefPtr<AccEvent> > events;
   events.SwapElements(mEvents);
 
   uint32_t eventCount = events.Length();
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (eventCount > 0 && logging::IsEnabled(logging::eEvents)) {
     logging::MsgBegin("EVENTS", "events processing");
     logging::Address("document", mDocument);
     logging::MsgEnd();
   }
 #endif
 
   for (uint32_t idx = 0; idx < eventCount; idx++) {
@@ -723,31 +723,31 @@ NotificationController::TextEnumerator(n
     containerNode->AsElement() : nullptr;
 
   nsAutoString text;
   textFrame->GetRenderedText(&text);
 
   // Remove text accessible if rendered text is empty.
   if (textAcc) {
     if (text.IsEmpty()) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
       if (logging::IsEnabled(logging::eTree | logging::eText)) {
         logging::MsgBegin("TREE", "text node lost its content");
         logging::Node("container", containerElm);
         logging::Node("content", textNode);
         logging::MsgEnd();
       }
 #endif
 
       document->ContentRemoved(containerElm, textNode);
       return PL_DHASH_NEXT;
     }
 
     // Update text of the accessible and fire text change events.
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eText)) {
       logging::MsgBegin("TEXT", "text may be changed");
       logging::Node("container", containerElm);
       logging::Node("content", textNode);
       logging::MsgEntry("old text '%s'",
                         NS_ConvertUTF16toUTF8(textAcc->AsTextLeaf()->Text()).get());
       logging::MsgEntry("new text: '%s'",
                         NS_ConvertUTF16toUTF8(text).get());
@@ -756,17 +756,17 @@ NotificationController::TextEnumerator(n
 #endif
 
     TextUpdater::Run(document, textAcc->AsTextLeaf(), text);
     return PL_DHASH_NEXT;
   }
 
   // Append an accessible if rendered text is not empty.
   if (!text.IsEmpty()) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eTree | logging::eText)) {
       logging::MsgBegin("TREE", "text node gains new content");
       logging::Node("container", containerElm);
       logging::Node("content", textNode);
       logging::MsgEnd();
     }
 #endif
 
--- a/accessible/src/base/NotificationController.h
+++ b/accessible/src/base/NotificationController.h
@@ -5,17 +5,17 @@
 
 #ifndef NotificationController_h_
 #define NotificationController_h_
 
 #include "AccEvent.h"
 #include "nsCycleCollectionParticipant.h"
 #include "nsRefreshDriver.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 class Accessible;
 class DocAccessible;
 class nsIContent;
 
 /**
@@ -131,17 +131,17 @@ public:
    *        the notification is processed.
    */
   template<class Class, class Arg>
   inline void HandleNotification(Class* aInstance,
                                  typename TNotification<Class, Arg>::Callback aMethod,
                                  Arg* aArg)
   {
     if (!IsUpdatePending()) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
       if (mozilla::a11y::logging::IsEnabled(mozilla::a11y::logging::eNotifications))
         mozilla::a11y::logging::Text("sync notification processing");
 #endif
       (aInstance->*aMethod)(aArg);
       return;
     }
 
     nsRefPtr<Notification> notification =
--- a/accessible/src/base/nsAccDocManager.cpp
+++ b/accessible/src/base/nsAccDocManager.cpp
@@ -8,17 +8,17 @@
 #include "ApplicationAccessible.h"
 #include "DocAccessible-inl.h"
 #include "nsAccessibilityService.h"
 #include "nsAccUtils.h"
 #include "nsARIAMap.h"
 #include "RootAccessibleWrap.h"
 #include "States.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 #include "nsCURILoader.h"
 #include "nsDocShellLoadTypes.h"
 #include "nsIChannel.h"
 #include "nsIContentViewer.h"
 #include "nsIDOMDocument.h"
@@ -140,17 +140,17 @@ nsAccDocManager::OnStateChange(nsIWebPro
   nsCOMPtr<nsIDOMDocument> DOMDocument;
   DOMWindow->GetDocument(getter_AddRefs(DOMDocument));
   NS_ENSURE_STATE(DOMDocument);
 
   nsCOMPtr<nsIDocument> document(do_QueryInterface(DOMDocument));
 
   // Document was loaded.
   if (aStateFlags & STATE_STOP) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDocLoad))
       logging::DocLoad("document loaded", aWebProgress, aRequest, aStateFlags);
 #endif
 
     // Figure out an event type to notify the document has been loaded.
     uint32_t eventType = nsIAccessibleEvent::EVENT_DOCUMENT_LOAD_STOPPED;
 
     // Some XUL documents get start state and then stop state with failure
@@ -169,17 +169,17 @@ nsAccDocManager::OnStateChange(nsIWebPro
         eventType = 0;
     }
 
     HandleDOMDocumentLoad(document, eventType);
     return NS_OK;
   }
 
   // Document loading was started.
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocLoad))
     logging::DocLoad("start document loading", aWebProgress, aRequest, aStateFlags);
 #endif
 
   DocAccessible* docAcc = mDocAccessibleCache.GetWeak(document);
   if (!docAcc)
     return NS_OK;
 
@@ -258,17 +258,17 @@ nsAccDocManager::HandleEvent(nsIDOMEvent
     return NS_OK;
 
   if (type.EqualsLiteral("pagehide")) {
     // 'pagehide' event is registered on every DOM document we create an
     // accessible for, process the event for the target. This document
     // accessible and all its sub document accessible are shutdown as result of
     // processing.
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDocDestroy))
       logging::DocDestroy("received 'pagehide' event", document);
 #endif
 
     // Ignore 'pagehide' on temporary documents since we ignore them entirely in
     // accessibility.
     if (document->IsInitialDocument())
       return NS_OK;
@@ -284,17 +284,17 @@ nsAccDocManager::HandleEvent(nsIDOMEvent
 
     return NS_OK;
   }
 
   // XXX: handle error pages loading separately since they get neither
   // webprogress notifications nor 'pageshow' event.
   if (type.EqualsLiteral("DOMContentLoaded") &&
       nsCoreUtils::IsErrorPage(document)) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDocLoad))
       logging::DocLoad("handled 'DOMContentLoaded' event", document);
 #endif
 
     HandleDOMDocumentLoad(document,
                           nsIAccessibleEvent::EVENT_DOCUMENT_LOAD_COMPLETE);
   }
 
@@ -325,25 +325,25 @@ nsAccDocManager::AddListeners(nsIDocumen
                               bool aAddDOMContentLoadedListener)
 {
   nsPIDOMWindow *window = aDocument->GetWindow();
   nsIDOMEventTarget *target = window->GetChromeEventHandler();
   nsEventListenerManager* elm = target->GetListenerManager(true);
   elm->AddEventListenerByType(this, NS_LITERAL_STRING("pagehide"),
                               NS_EVENT_FLAG_CAPTURE);
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocCreate))
     logging::Text("added 'pagehide' listener");
 #endif
 
   if (aAddDOMContentLoadedListener) {
     elm->AddEventListenerByType(this, NS_LITERAL_STRING("DOMContentLoaded"),
                                 NS_EVENT_FLAG_CAPTURE);
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDocCreate))
       logging::Text("added 'DOMContentLoaded' listener");
 #endif
   }
 }
 
 DocAccessible*
 nsAccDocManager::CreateDocOrRootAccessible(nsIDocument* aDocument)
@@ -406,17 +406,17 @@ nsAccDocManager::CreateDocOrRootAccessib
       new AccEvent(nsIAccessibleEvent::EVENT_REORDER, ApplicationAcc(),
                    eAutoDetect, AccEvent::eCoalesceFromSameSubtree);
     docAcc->FireDelayedAccessibleEvent(reorderEvent);
 
   } else {
     parentDocAcc->BindChildDocument(docAcc);
   }
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocCreate)) {
     logging::DocCreate("document creation finished", aDocument);
     logging::Stack();
   }
 #endif
 
   AddListeners(aDocument, isRootDoc);
   return docAcc;
--- a/accessible/src/base/nsAccessibilityService.cpp
+++ b/accessible/src/base/nsAccessibilityService.cpp
@@ -34,17 +34,17 @@
 #include "RootAccessibleWrap.h"
 #include "States.h"
 #include "Statistics.h"
 #ifdef XP_WIN
 #include "nsHTMLWin32ObjectAccessible.h"
 #endif
 #include "TextLeafAccessibleWrap.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 #ifdef MOZ_CRASHREPORTER
 #include "nsExceptionHandler.h"
 #endif
 
 #include "nsIDOMDocument.h"
@@ -465,17 +465,17 @@ nsAccessibilityService::CreateHTMLCaptio
 }
 
 void
 nsAccessibilityService::ContentRangeInserted(nsIPresShell* aPresShell,
                                              nsIContent* aContainer,
                                              nsIContent* aStartChild,
                                              nsIContent* aEndChild)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eTree)) {
     logging::MsgBegin("TREE", "content inserted");
     logging::Node("container", aContainer);
     for (nsIContent* child = aStartChild; child != aEndChild;
          child = child->GetNextSibling()) {
       logging::Node("content", child);
     }
     logging::MsgEnd();
@@ -487,17 +487,17 @@ nsAccessibilityService::ContentRangeInse
     docAccessible->ContentInserted(aContainer, aStartChild, aEndChild);
 }
 
 void
 nsAccessibilityService::ContentRemoved(nsIPresShell* aPresShell,
                                        nsIContent* aContainer,
                                        nsIContent* aChild)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eTree)) {
     logging::MsgBegin("TREE", "content removed");
     logging::Node("container", aContainer);
     logging::Node("content", aChild);
     logging::MsgEnd();
   }
 #endif
 
@@ -838,17 +838,17 @@ nsAccessibilityService::CreateAccessible
   NS_ADDREF(*aPivot = pivot);
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsAccessibilityService::SetLogging(const nsACString& aModules)
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   logging::Enable(PromiseFlatCString(aModules));
 #endif
   return NS_OK;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // nsAccessibilityService public
 
@@ -896,80 +896,69 @@ nsAccessibilityService::GetOrCreateAcces
     return nullptr;
   }
 
   if (aNode->OwnerDoc() != aDoc->GetDocumentNode()) {
     NS_ERROR("Creating accessible for wrong document");
     return nullptr;
   }
 
-  nsCOMPtr<nsIContent> content(do_QueryInterface(aNode));
-  if (!content)
+  if (!aNode->IsContent())
     return nullptr;
 
-  // Frames can be deallocated when we flush layout, or when we call into code
-  // that can flush layout, either directly, or via DOM manipulation, or some
-  // CSS styles like :hover. We use the weak frame checks to avoid calling
-  // methods on a dead frame pointer.
-  nsWeakFrame weakFrame = content->GetPrimaryFrame();
+  nsIContent* content = aNode->AsContent();
+  nsIFrame* frame = content->GetPrimaryFrame();
 
   // Check frame and its visibility. Note, hidden frame allows visible
   // elements in subtree.
-  if (!weakFrame.GetFrame() || !weakFrame->GetStyleVisibility()->IsVisible()) {
-    if (aIsSubtreeHidden && !weakFrame.GetFrame())
+  if (!frame || !frame->GetStyleVisibility()->IsVisible()) {
+    if (aIsSubtreeHidden && !frame)
       *aIsSubtreeHidden = true;
 
     return nullptr;
   }
 
-  if (weakFrame.GetFrame()->GetContent() != content) {
+  if (frame->GetContent() != content) {
     // Not the main content for this frame. This happens because <area>
     // elements return the image frame as their primary frame. The main content
     // for the image frame is the image content. If the frame is not an image
     // frame or the node is not an area element then null is returned.
     // This setup will change when bug 135040 is fixed. Make sure we don't
     // create area accessible here. Hopefully assertion below will handle that.
 
 #ifdef DEBUG
-  nsImageFrame* imageFrame = do_QueryFrame(weakFrame.GetFrame());
+  nsImageFrame* imageFrame = do_QueryFrame(frame);
   NS_ASSERTION(imageFrame && content->IsHTML() && content->Tag() == nsGkAtoms::area,
                "Unknown case of not main content for the frame!");
 #endif
     return nullptr;
   }
 
 #ifdef DEBUG
-  nsImageFrame* imageFrame = do_QueryFrame(weakFrame.GetFrame());
+  nsImageFrame* imageFrame = do_QueryFrame(frame);
   NS_ASSERTION(!imageFrame || !content->IsHTML() || content->Tag() != nsGkAtoms::area,
                "Image map manages the area accessible creation!");
 #endif
 
-  DocAccessible* docAcc =
-    GetAccService()->GetDocAccessible(aNode->OwnerDoc());
-  if (!docAcc) {
-    NS_NOTREACHED("Node has no host document accessible!");
-    return nullptr;
-  }
-
   // Attempt to create an accessible based on what we know.
   nsRefPtr<Accessible> newAcc;
 
   // Create accessible for visible text frames.
   if (content->IsNodeOfType(nsINode::eTEXT)) {
     nsAutoString text;
-    weakFrame->GetRenderedText(&text, nullptr, nullptr, 0, UINT32_MAX);
+    frame->GetRenderedText(&text, nullptr, nullptr, 0, UINT32_MAX);
     if (text.IsEmpty()) {
       if (aIsSubtreeHidden)
         *aIsSubtreeHidden = true;
 
       return nullptr;
     }
 
-    newAcc = weakFrame->CreateAccessible();
-    if (docAcc->BindToDocument(newAcc, nullptr)) {
+    newAcc = frame->CreateAccessible();
+    if (aDoc->BindToDocument(newAcc, nullptr)) {
       newAcc->AsTextLeaf()->SetText(text);
       return newAcc;
     }
 
     return nullptr;
   }
 
   bool isHTML = content->IsHTML();
@@ -977,26 +966,26 @@ nsAccessibilityService::GetOrCreateAcces
     // Create hyper text accessible for HTML map if it is used to group links
     // (see http://www.w3.org/TR/WCAG10-HTML-TECHS/#group-bypass). If the HTML
     // map rect is empty then it is used for links grouping. Otherwise it should
     // be used in conjunction with HTML image element and in this case we don't
     // create any accessible for it and don't walk into it. The accessibles for
     // HTML area (HTMLAreaAccessible) the map contains are attached as
     // children of the appropriate accessible for HTML image
     // (ImageAccessible).
-    if (nsLayoutUtils::GetAllInFlowRectsUnion(weakFrame,
-                                              weakFrame->GetParent()).IsEmpty()) {
+    if (nsLayoutUtils::GetAllInFlowRectsUnion(frame,
+                                              frame->GetParent()).IsEmpty()) {
       if (aIsSubtreeHidden)
         *aIsSubtreeHidden = true;
 
       return nullptr;
     }
 
-    newAcc = new HyperTextAccessibleWrap(content, docAcc);
-    if (docAcc->BindToDocument(newAcc, aria::GetRoleMap(aNode)))
+    newAcc = new HyperTextAccessibleWrap(content, aDoc);
+    if (aDoc->BindToDocument(newAcc, aria::GetRoleMap(aNode)))
       return newAcc;
     return nullptr;
   }
 
   nsRoleMapEntry* roleMapEntry = aria::GetRoleMap(aNode);
 
   // If the element is focusable or global ARIA attribute is applied to it or
   // it is referenced by ARIA relationship then treat role="presentation" on
@@ -1004,18 +993,18 @@ nsAccessibilityService::GetOrCreateAcces
   if (roleMapEntry && roleMapEntry->Is(nsGkAtoms::presentation)) {
     if (!content->IsFocusable() && !HasUniversalAriaProperty(content) &&
         !HasRelatedContent(content))
       return nullptr;
 
     roleMapEntry = nullptr;
   }
 
-  if (weakFrame.IsAlive() && !newAcc && isHTML) {  // HTML accessibles
-    nsIAtom *frameType = weakFrame.GetFrame()->GetType();
+  if (!newAcc && isHTML) {  // HTML accessibles
+    nsIAtom* frameType = frame->GetType();
 
     bool partOfHTMLTable =
       frameType == nsGkAtoms::tableCaptionFrame ||
       frameType == nsGkAtoms::tableCellFrame ||
       frameType == nsGkAtoms::tableRowGroupFrame ||
       frameType == nsGkAtoms::tableRowFrame;
     bool legalPartOfHTMLTable = partOfHTMLTable;
 
@@ -1078,109 +1067,102 @@ nsAccessibilityService::GetOrCreateAcces
     if (roleMapEntry) {
       // Create ARIA grid/treegrid accessibles if node is not a child or legal
       // child of HTML table and is not a HTML table.
       if ((!partOfHTMLTable || !legalPartOfHTMLTable) &&
           frameType != nsGkAtoms::tableOuterFrame) {
 
         if (roleMapEntry->role == roles::TABLE ||
             roleMapEntry->role == roles::TREE_TABLE) {
-          newAcc = new ARIAGridAccessibleWrap(content, docAcc);
+          newAcc = new ARIAGridAccessibleWrap(content, aDoc);
 
         } else if (roleMapEntry->role == roles::GRID_CELL ||
             roleMapEntry->role == roles::ROWHEADER ||
             roleMapEntry->role == roles::COLUMNHEADER) {
-          newAcc = new ARIAGridCellAccessibleWrap(content, docAcc);
+          newAcc = new ARIAGridCellAccessibleWrap(content, aDoc);
         }
       }
     }
 
     if (!newAcc) {
       // Prefer to use markup (mostly tag name, perhaps attributes) to
       // decide if and what kind of accessible to create.
       // The method creates accessibles for table related content too therefore
       // we do not call it if accessibles for table related content are
       // prevented above.
-      newAcc = CreateHTMLAccessibleByMarkup(weakFrame.GetFrame(), content,
-                                            docAcc, legalPartOfHTMLTable);
+      newAcc = CreateHTMLAccessibleByMarkup(frame, content, aDoc,
+                                            legalPartOfHTMLTable);
 
       if (!newAcc && (!partOfHTMLTable || legalPartOfHTMLTable)) {
         // Do not create accessible object subtrees for non-rendered table
         // captions. This could not be done in
         // nsTableCaptionFrame::GetAccessible() because the descendants of
         // the table caption would still be created. By setting
         // *aIsSubtreeHidden = true we ensure that no descendant accessibles
         // are created.
-        nsIFrame* f = weakFrame.GetFrame();
-        if (!f) {
-          f = aDoc->PresShell()->GetRealPrimaryFrameFor(content);
-        }
-        if (f->GetType() == nsGkAtoms::tableCaptionFrame &&
-           f->GetRect().IsEmpty()) {
+        if (frame->GetType() == nsGkAtoms::tableCaptionFrame &&
+            frame->GetRect().IsEmpty()) {
           // XXX This is not the ideal place for this code, but right now there
           // is no better place:
           if (aIsSubtreeHidden)
             *aIsSubtreeHidden = true;
 
           return nullptr;
         }
 
         // Try using frame to do it.
-        newAcc = f->CreateAccessible();
+        newAcc = frame->CreateAccessible();
       }
     }
   }
 
   if (!newAcc) {
     // Elements may implement nsIAccessibleProvider via XBL. This allows them to
     // say what kind of accessible to create.
-    newAcc = CreateAccessibleByType(content, docAcc);
+    newAcc = CreateAccessibleByType(content, aDoc);
   }
 
   if (!newAcc) {
     // xul:deck does not have XBL and nsIFrame::CreateAccessible() is only called 
     // on HTML elements
     nsIAtom* tag = content->Tag();
     if ((tag == nsGkAtoms::deck) || (tag == nsGkAtoms::tabpanels)) {
-      newAcc = new XULDeckAccessible(content, docAcc);
+      newAcc = new XULDeckAccessible(content, aDoc);
     } else if (content->IsSVG(nsGkAtoms::svg)) {
-      newAcc = new EnumRoleAccessible(content, docAcc, roles::DIAGRAM);
+      newAcc = new EnumRoleAccessible(content, aDoc, roles::DIAGRAM);
     } else if (content->IsMathML(nsGkAtoms::math)) {
-      newAcc = new EnumRoleAccessible(content, docAcc, roles::EQUATION);
+      newAcc = new EnumRoleAccessible(content, aDoc, roles::EQUATION);
     }
   }
 
-  if (!newAcc) {
-    newAcc = CreateAccessibleForDeckChild(weakFrame.GetFrame(), content,
-                                          docAcc);
-  }
+  if (!newAcc)
+    newAcc = CreateAccessibleForDeckChild(frame, content, aDoc);
 
   // If no accessible, see if we need to create a generic accessible because
   // of some property that makes this object interesting
   // We don't do this for <body>, <html>, <window>, <dialog> etc. which
   // correspond to the doc accessible and will be created in any case
   if (!newAcc && content->Tag() != nsGkAtoms::body && content->GetParent() &&
-      ((weakFrame.GetFrame() && weakFrame.GetFrame()->IsFocusable()) ||
+      (frame->IsFocusable() ||
        (isHTML && nsCoreUtils::HasClickListener(content)) ||
        HasUniversalAriaProperty(content) || roleMapEntry ||
        HasRelatedContent(content) || nsCoreUtils::IsXLink(content))) {
     // This content is focusable or has an interesting dynamic content accessibility property.
     // If it's interesting we need it in the accessibility hierarchy so that events or
     // other accessibles can point to it, or so that it can hold a state, etc.
     if (isHTML) {
       // Interesting HTML container which may have selectable text and/or embedded objects
-      newAcc = new HyperTextAccessibleWrap(content, docAcc);
-    }
-    else {  // XUL, SVG, MathML etc.
+      newAcc = new HyperTextAccessibleWrap(content, aDoc);
+    } else {  // XUL, SVG, MathML etc.
       // Interesting generic non-HTML container
-      newAcc = new AccessibleWrap(content, docAcc);
+      newAcc = new AccessibleWrap(content, aDoc);
     }
   }
 
-  return docAcc->BindToDocument(newAcc, roleMapEntry) ? newAcc : nullptr;
+  return aDoc->BindToDocument(newAcc, roleMapEntry) ? newAcc : nullptr;
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // nsAccessibilityService private
 
 bool
 nsAccessibilityService::Init()
 {
@@ -1194,17 +1176,17 @@ nsAccessibilityService::Init()
   if (!observerService)
     return false;
 
   observerService->AddObserver(this, NS_XPCOM_SHUTDOWN_OBSERVER_ID, false);
 
   static const PRUnichar kInitIndicator[] = { '1', 0 };
   observerService->NotifyObservers(nullptr, "a11y-init-or-shutdown", kInitIndicator);
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   logging::CheckEnv();
 #endif
 
   // Create and initialize the application accessible.
   ApplicationAccessibleWrap::PreCreate();
   gApplicationAccessible = new ApplicationAccessibleWrap();
   NS_ADDREF(gApplicationAccessible); // will release in Shutdown()
   gApplicationAccessible->Init();
@@ -1288,17 +1270,17 @@ nsAccessibilityService::CreateAccessible
 
   int32_t type;
   nsresult rv = accessibleProvider->GetAccessibleType(&type);
   if (NS_FAILED(rv))
     return nullptr;
 
   if (type == nsIAccessibleProvider::OuterDoc) {
     Accessible* accessible = new OuterDocAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   Accessible* accessible = nullptr;
   switch (type)
   {
 #ifdef MOZ_XUL
     case nsIAccessibleProvider::NoAccessible:
@@ -1568,113 +1550,113 @@ nsAccessibilityService::CreateHTMLAccess
                                                      nsIContent* aContent,
                                                      DocAccessible* aDoc,
                                                      bool aIsLegalPartOfHTMLTable)
 {
   if (aIsLegalPartOfHTMLTable) {
     if (nsCoreUtils::IsHTMLTableHeader(aContent)) {
       Accessible* accessible =
         new HTMLTableHeaderCellAccessibleWrap(aContent, aDoc);
-      NS_IF_ADDREF(accessible);
+      NS_ADDREF(accessible);
       return accessible;
     }
 
     return nullptr;
   }
 
   // This method assumes we're in an HTML namespace.
   nsIAtom* tag = aContent->Tag();
   if (tag == nsGkAtoms::figcaption) {
     Accessible* accessible = new HTMLFigcaptionAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::figure) {
     Accessible* accessible = new HTMLFigureAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::legend) {
     Accessible* accessible = new HTMLLegendAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::option) {
     Accessible* accessible = new HTMLSelectOptionAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::optgroup) {
     Accessible* accessible = new HTMLSelectOptGroupAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::ul || tag == nsGkAtoms::ol ||
       tag == nsGkAtoms::dl) {
     Accessible* accessible = new HTMLListAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::a) {
     // Only some roles truly enjoy life as HTMLLinkAccessibles, for details
     // see closed bug 494807.
     nsRoleMapEntry* roleMapEntry = aria::GetRoleMap(aContent);
     if (roleMapEntry && roleMapEntry->role != roles::NOTHING &&
         roleMapEntry->role != roles::LINK) {
       Accessible* accessible = new HyperTextAccessibleWrap(aContent, aDoc);
-      NS_IF_ADDREF(accessible);
+      NS_ADDREF(accessible);
       return accessible;
     }
 
     Accessible* accessible = new HTMLLinkAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::dt || tag == nsGkAtoms::li) {
     // Create list item accessible unconditionally by tag name. nsBlockFrame
     // creates the list item accessible for other elements styled as list items.
     Accessible* accessible = new HTMLLIAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::abbr ||
       tag == nsGkAtoms::acronym ||
       tag == nsGkAtoms::blockquote ||
       tag == nsGkAtoms::dd ||
       tag == nsGkAtoms::form ||
       tag == nsGkAtoms::h1 ||
       tag == nsGkAtoms::h2 ||
       tag == nsGkAtoms::h3 ||
       tag == nsGkAtoms::h4 ||
       tag == nsGkAtoms::h5 ||
       tag == nsGkAtoms::h6 ||
       tag == nsGkAtoms::q) {
     Accessible* accessible = new HyperTextAccessibleWrap(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::output) {
     Accessible* accessible = new HTMLOutputAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   if (tag == nsGkAtoms::progress) {
     Accessible* accessible =
       new HTMLProgressMeterAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   return nullptr;
  }
 
 ////////////////////////////////////////////////////////////////////////////////
 // nsIAccessibilityService (DON'T put methods here)
@@ -1754,28 +1736,28 @@ nsAccessibilityService::CreateAccessible
 {
   if (aFrame->GetType() == nsGkAtoms::boxFrame ||
       aFrame->GetType() == nsGkAtoms::scrollFrame) {
 
     nsIFrame* parentFrame = aFrame->GetParent();
     if (parentFrame && parentFrame->GetType() == nsGkAtoms::deckFrame) {
       // If deck frame is for xul:tabpanels element then the given node has
       // tabpanel accessible.
-      nsCOMPtr<nsIContent> parentContent = parentFrame->GetContent();
+      nsIContent* parentContent = parentFrame->GetContent();
 #ifdef MOZ_XUL
       if (parentContent->NodeInfo()->Equals(nsGkAtoms::tabpanels,
                                             kNameSpaceID_XUL)) {
         Accessible* accessible = new XULTabpanelAccessible(aContent, aDoc);
-        NS_IF_ADDREF(accessible);
+        NS_ADDREF(accessible);
         return accessible;
       }
 #endif
       Accessible* accessible = new EnumRoleAccessible(aContent, aDoc,
                                                       roles::PROPERTYPAGE);
-      NS_IF_ADDREF(accessible);
+      NS_ADDREF(accessible);
       return accessible;
     }
   }
 
   return nullptr;
 }
 
 #ifdef MOZ_XUL
@@ -1793,23 +1775,23 @@ nsAccessibilityService::CreateAccessible
     return nullptr;
 
   int32_t count = 0;
   treeColumns->GetCount(&count);
 
   // Outline of list accessible.
   if (count == 1) {
     Accessible* accessible = new XULTreeAccessible(aContent, aDoc);
-    NS_IF_ADDREF(accessible);
+    NS_ADDREF(accessible);
     return accessible;
   }
 
   // Table or tree table accessible.
   Accessible* accessible = new XULTreeGridAccessibleWrap(aContent, aDoc);
-  NS_IF_ADDREF(accessible);
+  NS_ADDREF(accessible);
   return accessible;
 }
 #endif
 
 ////////////////////////////////////////////////////////////////////////////////
 // Services
 ////////////////////////////////////////////////////////////////////////////////
 
--- a/accessible/src/base/nsCaretAccessible.cpp
+++ b/accessible/src/base/nsCaretAccessible.cpp
@@ -90,20 +90,18 @@ nsCaretAccessible::SetControlSelectionLi
   mLastTextAccessible = nullptr;
 
   // When focus moves such that the caret is part of a new frame selection
   // this removes the old selection listener and attaches a new one for
   // the current focus.
 
   nsCOMPtr<nsISelectionController> controller =
     GetSelectionControllerForNode(mCurrentControl);
-#ifdef DEBUG
   NS_ASSERTION(controller || aCurrentNode->IsNodeOfType(nsINode::eDOCUMENT),
                "No selection controller for non document node!");
-#endif
   if (!controller)
     return NS_OK;
 
   // Register 'this' as selection listener for the normal selection.
   nsCOMPtr<nsISelection> normalSel;
   controller->GetSelection(nsISelectionController::SELECTION_NORMAL,
                            getter_AddRefs(normalSel));
   nsCOMPtr<nsISelectionPrivate> selPrivate(do_QueryInterface(normalSel));
@@ -175,17 +173,17 @@ nsCaretAccessible::NotifySelectionChange
                                           int16_t aReason)
 {
   NS_ENSURE_ARG(aDOMDocument);
   NS_ENSURE_STATE(mRootAccessible);
 
   nsCOMPtr<nsIDocument> documentNode(do_QueryInterface(aDOMDocument));
   DocAccessible* document = GetAccService()->GetDocAccessible(documentNode);
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eSelection))
     logging::SelChange(aSelection, document);
 #endif
 
   // Don't fire events until document is loaded.
   if (document && document->IsContentLoaded()) {
     // The caret accessible has the same lifetime as the root accessible, and
     // this outlives all its descendant document accessibles, so that we are
--- a/accessible/src/generic/DocAccessible.cpp
+++ b/accessible/src/generic/DocAccessible.cpp
@@ -40,17 +40,17 @@
 #include "nsIViewManager.h"
 #include "nsIScrollableFrame.h"
 #include "nsUnicharUtils.h"
 #include "nsIURI.h"
 #include "nsIWebNavigation.h"
 #include "nsFocusManager.h"
 #include "mozilla/dom/Element.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 #ifdef MOZ_XUL
 #include "nsIXULDocument.h"
 #endif
 
 using namespace mozilla;
@@ -602,17 +602,17 @@ DocAccessible::GetAccessible(nsINode* aN
 }
 
 ////////////////////////////////////////////////////////////////////////////////
 // nsAccessNode
 
 void
 DocAccessible::Init()
 {
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocCreate))
     logging::DocCreate("document initialize", mDocument, this);
 #endif
 
   // Initialize notification controller.
   mNotificationController = new NotificationController(this, mPresShell);
 
   // Mark the document accessible as loaded if its DOM document was loaded at
@@ -625,17 +625,17 @@ DocAccessible::Init()
 }
 
 void
 DocAccessible::Shutdown()
 {
   if (!mPresShell) // already shutdown
     return;
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocDestroy))
     logging::DocDestroy("document shutdown", mDocument, this);
 #endif
 
   mPresShell->SetAccDocument(nullptr);
 
   if (mNotificationController) {
     mNotificationController->Shutdown();
@@ -851,17 +851,17 @@ void
 DocAccessible::AddScrollListener()
 {
   if (!mPresShell)
     return;
 
   nsIScrollableFrame* sf = mPresShell->GetRootScrollFrameAsScrollableExternal();
   if (sf) {
     sf->AddScrollPositionListener(this);
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDocCreate))
       logging::Text("add scroll listener");
 #endif
   }
 }
 
 // DocAccessible protected member
 void
@@ -1225,17 +1225,17 @@ DocAccessible::ARIAActiveDescendantChang
   if (widget && widget->IsActiveWidget()) {
     nsAutoString id;
     if (aElm->GetAttr(kNameSpaceID_None, nsGkAtoms::aria_activedescendant, id)) {
       dom::Element* activeDescendantElm = aElm->OwnerDoc()->GetElementById(id);
       if (activeDescendantElm) {
         Accessible* activeDescendant = GetAccessible(activeDescendantElm);
         if (activeDescendant) {
           FocusMgr()->ActiveItemChanged(activeDescendant, false);
-#ifdef DEBUG
+#ifdef A11Y_LOG
           if (logging::IsEnabled(logging::eFocus))
             logging::ActiveItemChangeCausedBy("ARIA activedescedant changed",
                                               activeDescendant);
 #endif
         }
       }
     }
   }
@@ -1313,17 +1313,17 @@ void
 DocAccessible::ParentChainChanged(nsIContent* aContent)
 {
 }
 
 
 ////////////////////////////////////////////////////////////////////////////////
 // Accessible
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 nsresult
 DocAccessible::HandleAccEvent(AccEvent* aEvent)
 {
   if (logging::IsEnabled(logging::eDocLoad))
     logging::DocLoadEventHandled(aEvent);
 
   return HyperTextAccessible::HandleAccEvent(aEvent);
 }
@@ -1411,17 +1411,17 @@ DocAccessible::UnbindFromDocument(Access
 {
   NS_ASSERTION(mAccessibleCache.GetWeak(aAccessible->UniqueID()),
                "Unbinding the unbound accessible!");
 
   // Fire focus event on accessible having DOM focus if active item was removed
   // from the tree.
   if (FocusMgr()->IsActiveItem(aAccessible)) {
     FocusMgr()->ActiveItemChanged(nullptr);
-#ifdef DEBUG
+#ifdef A11Y_LOG
           if (logging::IsEnabled(logging::eFocus))
             logging::ActiveItemChangeCausedBy("tree shutdown", aAccessible);
 #endif
   }
 
   // Remove an accessible from node-to-accessible map if it exists there.
   if (aAccessible->IsPrimaryForNode() &&
       mNodeToAccessibleMap.Get(aAccessible->GetNode()) == aAccessible)
@@ -1759,17 +1759,17 @@ DocAccessible::FireDelayedAccessibleEven
 }
 
 // DocAccessible public member
 nsresult
 DocAccessible::FireDelayedAccessibleEvent(AccEvent* aEvent)
 {
   NS_ENSURE_ARG(aEvent);
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocLoad))
     logging::DocLoadEventFired(aEvent);
 #endif
 
   if (mNotificationController)
     mNotificationController->QueueEvent(aEvent);
 
   return NS_OK;
@@ -1850,17 +1850,17 @@ DocAccessible::ProcessContentInserted(Ac
 void
 DocAccessible::UpdateTree(Accessible* aContainer, nsIContent* aChildNode,
                           bool aIsInsert)
 {
   uint32_t updateFlags = eNoAccessible;
 
   // If child node is not accessible then look for its accessible children.
   Accessible* child = GetAccessible(aChildNode);
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eTree)) {
     logging::MsgBegin("TREE", "process content %s",
                       (aIsInsert ? "insertion" : "removal"));
     logging::Node("container", aContainer->GetNode());
     logging::Node("child", aChildNode);
     if (child)
       logging::Address("child", child);
     else
--- a/accessible/src/generic/DocAccessible.h
+++ b/accessible/src/generic/DocAccessible.h
@@ -92,17 +92,17 @@ public:
   virtual mozilla::a11y::role NativeRole();
   virtual uint64_t NativeState();
   virtual uint64_t NativeInteractiveState() const;
   virtual bool NativelyUnavailable() const;
   virtual void ApplyARIAState(uint64_t* aState) const;
 
   virtual void SetRoleMapEntry(nsRoleMapEntry* aRoleMapEntry);
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   virtual nsresult HandleAccEvent(AccEvent* aEvent);
 #endif
 
   virtual void GetBoundsRect(nsRect& aRect, nsIFrame** aRelativeFrame);
 
   // HyperTextAccessible
   virtual already_AddRefed<nsIEditor> GetEditor() const;
 
--- a/accessible/src/generic/Makefile.in
+++ b/accessible/src/generic/Makefile.in
@@ -69,8 +69,12 @@ LOCAL_INCLUDES += \
   $(NULL)
 else
 LOCAL_INCLUDES += \
   -I$(srcdir)/../other \
   $(NULL)
 endif
 endif
 endif
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/generic/OuterDocAccessible.cpp
+++ b/accessible/src/generic/OuterDocAccessible.cpp
@@ -5,17 +5,17 @@
 
 #include "OuterDocAccessible.h"
 
 #include "nsAccUtils.h"
 #include "DocAccessible.h"
 #include "Role.h"
 #include "States.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 
 ////////////////////////////////////////////////////////////////////////////////
 // OuterDocAccessible
@@ -118,24 +118,24 @@ OuterDocAccessible::DoAction(uint8_t aIn
 
 void
 OuterDocAccessible::Shutdown()
 {
   // XXX: sometimes outerdoc accessible is shutdown because of layout style
   // change however the presshell of underlying document isn't destroyed and
   // the document doesn't get pagehide events. Shutdown underlying document if
   // any to avoid hanging document accessible.
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocDestroy))
     logging::OuterDocDestroy(this);
 #endif
 
   Accessible* childAcc = mChildren.SafeElementAt(0, nullptr);
   if (childAcc) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDocDestroy)) {
       logging::DocDestroy("outerdoc's child document shutdown",
                           childAcc->GetDocumentNode());
     }
 #endif
     childAcc->Shutdown();
   }
 
@@ -169,17 +169,17 @@ OuterDocAccessible::AppendChild(Accessib
   // The old viewer will be destroyed after the new one is created.
   // For a11y, it should be safe to shut down the old document now.
   if (mChildren.Length())
     mChildren[0]->Shutdown();
 
   if (!AccessibleWrap::AppendChild(aAccessible))
     return false;
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocCreate)) {
     logging::DocCreate("append document to outerdoc",
                        aAccessible->GetDocumentNode());
     logging::Address("outerdoc", this);
   }
 #endif
 
   return true;
@@ -189,17 +189,17 @@ bool
 OuterDocAccessible::RemoveChild(Accessible* aAccessible)
 {
   Accessible* child = mChildren.SafeElementAt(0, nullptr);
   if (child != aAccessible) {
     NS_ERROR("Wrong child to remove!");
     return false;
   }
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::eDocDestroy)) {
     logging::DocDestroy("remove document from outerdoc", child->GetDocumentNode(),
                         child->AsDoc());
     logging::Address("outerdoc", this);
   }
 #endif
 
   bool wasRemoved = AccessibleWrap::RemoveChild(child);
--- a/accessible/src/generic/RootAccessible.cpp
+++ b/accessible/src/generic/RootAccessible.cpp
@@ -257,17 +257,17 @@ RootAccessible::HandleEvent(nsIDOMEvent*
   nsCOMPtr<nsINode> origTargetNode(do_QueryInterface(DOMEventTarget));
   if (!origTargetNode)
     return NS_OK;
 
   DocAccessible* document =
     GetAccService()->GetDocAccessible(origTargetNode->OwnerDoc());
 
   if (document) {
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eDOMEvents)) {
       nsAutoString eventType;
       aDOMEvent->GetType(eventType);
 
       logging::MsgBegin("DOMEvents", "event '%s' handled",
                         NS_ConvertUTF16toUTF8(eventType).get());
       logging::Node("target", origTargetNode);
       logging::MsgEnd();
@@ -337,17 +337,17 @@ RootAccessible::ProcessDOMEvent(nsIDOMEv
     bool isEnabled = (state & (states::CHECKED | states::SELECTED)) != 0;
 
     nsRefPtr<AccEvent> accEvent =
       new AccStateChangeEvent(accessible, states::CHECKED, isEnabled);
     nsEventShell::FireEvent(accEvent);
 
     if (isEnabled) {
       FocusMgr()->ActiveItemChanged(accessible);
-#ifdef DEBUG
+#ifdef A11Y_LOG
       if (logging::IsEnabled(logging::eFocus))
         logging::ActiveItemChangeCausedBy("RadioStateChange", accessible);
 #endif
     }
 
     return;
   }
 
@@ -419,31 +419,31 @@ RootAccessible::ProcessDOMEvent(nsIDOMEv
   else if (eventType.EqualsLiteral("DOMMenuInactive")) {
     if (accessible->Role() == roles::MENUPOPUP) {
       nsEventShell::FireEvent(nsIAccessibleEvent::EVENT_MENUPOPUP_END,
                               accessible);
     }
   }
   else if (eventType.EqualsLiteral("DOMMenuItemActive")) {
     FocusMgr()->ActiveItemChanged(accessible);
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eFocus))
       logging::ActiveItemChangeCausedBy("DOMMenuItemActive", accessible);
 #endif
   }
   else if (eventType.EqualsLiteral("DOMMenuItemInactive")) {
     // Process DOMMenuItemInactive event for autocomplete only because this is
     // unique widget that may acquire focus from autocomplete popup while popup
     // stays open and has no active item. In case of XUL tree autocomplete
     // popup this event is fired for tree accessible.
     Accessible* widget =
       accessible->IsWidget() ? accessible : accessible->ContainerWidget();
     if (widget && widget->IsAutoCompletePopup()) {
       FocusMgr()->ActiveItemChanged(nullptr);
-#ifdef DEBUG
+#ifdef A11Y_LOG
       if (logging::IsEnabled(logging::eFocus))
         logging::ActiveItemChangeCausedBy("DOMMenuItemInactive", accessible);
 #endif
     }
   }
   else if (eventType.EqualsLiteral("DOMMenuBarActive")) {  // Always from user input
     nsEventShell::FireEvent(nsIAccessibleEvent::EVENT_MENU_START,
                             accessible, eFromUserInput);
@@ -452,28 +452,28 @@ RootAccessible::ProcessDOMEvent(nsIDOMEv
     // current item. This is a case of mouseover (set current menuitem) and
     // mouse click (activate the menubar). If menubar doesn't have current item
     // (can be a case of menubar activation from keyboard) then ignore this
     // notification because later we'll receive DOMMenuItemActive event after
     // current menuitem is set.
     Accessible* activeItem = accessible->CurrentItem();
     if (activeItem) {
       FocusMgr()->ActiveItemChanged(activeItem);
-#ifdef DEBUG
+#ifdef A11Y_LOG
       if (logging::IsEnabled(logging::eFocus))
         logging::ActiveItemChangeCausedBy("DOMMenuBarActive", accessible);
 #endif
     }
   }
   else if (eventType.EqualsLiteral("DOMMenuBarInactive")) {  // Always from user input
     nsEventShell::FireEvent(nsIAccessibleEvent::EVENT_MENU_END,
                             accessible, eFromUserInput);
 
     FocusMgr()->ActiveItemChanged(nullptr);
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eFocus))
       logging::ActiveItemChangeCausedBy("DOMMenuBarInactive", accessible);
 #endif
   }
   else if (eventType.EqualsLiteral("ValueChange")) {
     targetDocument->
       FireDelayedAccessibleEvent(nsIAccessibleEvent::EVENT_VALUE_CHANGE,
                                  targetNode, AccEvent::eRemoveDupes);
@@ -657,17 +657,17 @@ RootAccessible::HandlePopupHidingEvent(n
     // For menubars processing we listen DOMMenubarActive/Inactive
     // notifications.
     notifyOf = kNotifyOfFocus;
   }
 
   // Restore focus to where it was.
   if (notifyOf & kNotifyOfFocus) {
     FocusMgr()->ActiveItemChanged(nullptr);
-#ifdef DEBUG
+#ifdef A11Y_LOG
     if (logging::IsEnabled(logging::eFocus))
       logging::ActiveItemChangeCausedBy("popuphiding", popup);
 #endif
   }
 
   // Fire expanded state change event.
   if (notifyOf & kNotifyOfState) {
     nsRefPtr<AccEvent> event =
--- a/accessible/src/html/Makefile.in
+++ b/accessible/src/html/Makefile.in
@@ -58,8 +58,12 @@ LOCAL_INCLUDES += \
   $(NULL)
 else
 LOCAL_INCLUDES += \
   -I$(srcdir)/../other \
   $(NULL)
 endif
 endif
 endif
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/mac/Makefile.in
+++ b/accessible/src/mac/Makefile.in
@@ -52,8 +52,11 @@ LOCAL_INCLUDES += \
   -I$(srcdir)/../html \
   -I$(srcdir)/../xul \
   -I$(topsrcdir)/widget/cocoa \
   -I$(topsrcdir)/widget/xpwidgets \
   -I$(topsrcdir)/layout/xul/base/src \
   -I$(topsrcdir)/layout/generic \
   $(NULL)
 
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/msaa/AccessibleWrap.cpp
+++ b/accessible/src/msaa/AccessibleWrap.cpp
@@ -15,17 +15,17 @@
 #include "nsIAccessibleRelation.h"
 #include "nsWinUtils.h"
 #include "Relation.h"
 #include "Role.h"
 #include "RootAccessible.h"
 #include "States.h"
 #include "uiaRawElmProvider.h"
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
 #include "Logging.h"
 #endif
 
 #include "nsIMutableArray.h"
 #include "nsIFrame.h"
 #include "nsIScrollableFrame.h"
 #include "nsINameSpaceManager.h"
 #include "nsINodeInfo.h"
@@ -1572,17 +1572,17 @@ AccessibleWrap::FirePlatformEvent(AccEve
   nsIContent* cnt = accessible->GetContent();
   if (cnt) {
     cnt->Tag()->ToString(tag);
     nsIAtom* aid = cnt->GetID();
     if (aid)
       aid->ToUTF8String(id);
   }
 
-#ifdef DEBUG
+#ifdef A11Y_LOG
   if (logging::IsEnabled(logging::ePlatforms)) {
     printf("\n\nMSAA event: event: %d, target: %s@id='%s', childid: %d, hwnd: %d\n\n",
            eventType, NS_ConvertUTF16toUTF8(tag).get(), id.get(),
            childID, hWnd);
   }
 #endif
 
   // Fire MSAA event for client area window.
--- a/accessible/src/msaa/Makefile.in
+++ b/accessible/src/msaa/Makefile.in
@@ -83,8 +83,12 @@ LOCAL_INCLUDES += \
   -I$(srcdir)/../generic \
   -I$(srcdir)/../html \
   -I$(srcdir)/../xpcom \
   -I$(srcdir)/../xul \
   -I$(srcdir)/../windows/uia \
   -I$(srcdir)/../../../content/base/src \
   -I$(srcdir)/../../../content/events/src \
   $(NULL)
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/other/Makefile.in
+++ b/accessible/src/other/Makefile.in
@@ -39,8 +39,11 @@ include $(topsrcdir)/config/rules.mk
 LOCAL_INCLUDES += \
   -I$(srcdir) \
   -I$(srcdir)/../base \
   -I$(srcdir)/../generic \
   -I$(srcdir)/../html \
   -I$(srcdir)/../xul \
   $(NULL)
 
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/windows/Makefile.in
+++ b/accessible/src/windows/Makefile.in
@@ -9,8 +9,12 @@ srcdir = @srcdir@
 VPATH = @srcdir@
 
 include $(DEPTH)/config/autoconf.mk
 
 DIRS += uia \
   $(null)
 
 include $(topsrcdir)/config/rules.mk
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/windows/uia/Makefile.in
+++ b/accessible/src/windows/uia/Makefile.in
@@ -29,8 +29,12 @@ LOCAL_INCLUDES += \
   -I$(srcdir) \
   -I$(srcdir)/../../base \
   -I$(srcdir)/../../generic \
   -I$(srcdir)/../../html \
   -I$(srcdir)/../../msaa \
   -I$(srcdir)/../../xpcom \
   -I$(srcdir)/../../xul \
   $(NULL)
+
+ifdef A11Y_LOG
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/xforms/Makefile.in
+++ b/accessible/src/xforms/Makefile.in
@@ -50,8 +50,12 @@ LOCAL_INCLUDES += \
   $(NULL)
 else
 LOCAL_INCLUDES += \
   -I$(srcdir)/../other \
   $(NULL)
 endif
 endif
 endif
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/xpcom/Makefile.in
+++ b/accessible/src/xpcom/Makefile.in
@@ -47,8 +47,12 @@ LOCAL_INCLUDES += \
   $(NULL)
 else
 LOCAL_INCLUDES += \
   -I$(srcdir)/../other \
   $(NULL)
 endif
 endif
 endif
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/accessible/src/xul/Makefile.in
+++ b/accessible/src/xul/Makefile.in
@@ -62,8 +62,12 @@ LOCAL_INCLUDES += \
   $(NULL)
 else
 LOCAL_INCLUDES += \
   -I$(srcdir)/../other \
   $(NULL)
 endif
 endif
 endif
+
+ifneq ($(A11Y_LOG),0)
+  DEFINES += -DA11Y_LOG
+endif
--- a/b2g/installer/Makefile.in
+++ b/b2g/installer/Makefile.in
@@ -64,37 +64,8 @@ DEFINES += -DMOZ_SHARED_MOZGLUE=1
 endif
 
 ifdef MOZ_PKG_MANIFEST_P
 $(MOZ_PKG_MANIFEST): $(MOZ_PKG_MANIFEST_P) FORCE
 	$(PYTHON) $(topsrcdir)/config/Preprocessor.py $(DEFINES) $(ACDEFINES) $< > $@
 
 GARBAGE += $(MOZ_PKG_MANIFEST)
 endif
-
-ifneq (,$(filter mac cocoa,$(MOZ_WIDGET_TOOLKIT)))
-PACKAGE_XULRUNNER =
-UNPACKAGE =
-else
-PACKAGE_XULRUNNER = package-xulrunner
-UNPACKAGE = $(LIBXUL_DIST)/xulrunner*$(PKG_SUFFIX)
-endif
-
-ifdef LIBXUL_SDK
-MOZ_GRE_PKG_DIR=$(MOZ_PKG_DIR)/xulrunner
-else
-MOZ_GRE_PKG_DIR=$(MOZ_PKG_DIR)
-endif
-
-package-xulrunner:
-ifdef LIBXUL_SDK
-ifndef SYSTEM_LIBXUL
-	@echo "Packaging xulrunner..."
-	@rm -rf $(LIBXUL_DIST)/xulrunner*
-	@$(MAKE) -C $(LIBXUL_DIST)/.. package || echo "Perhaps you're trying to package a prebuilt SDK. See 'https://wiki.mozilla.org/B2G' for more information."
-	@cd $(DIST)/$(MOZ_PKG_DIR); $(UNMAKE_PACKAGE)
-	@echo "Removing unpackaged files... (the ones xulrunner/installer keeps)"
-	@cd $(DIST)/$(MOZ_PKG_DIR)/xulrunner; rm -rf $(NO_PKG_FILES)
-else
-	@echo "Using system xulrunner..."
-endif
-endif
-
--- a/browser/app/profile/firefox.js
+++ b/browser/app/profile/firefox.js
@@ -527,21 +527,16 @@ pref("mousewheel.with_shift.action", 1);
 #else
 pref("mousewheel.with_alt.action", 1);
 pref("mousewheel.with_shift.action", 2);
 #endif
 pref("mousewheel.with_control.action",3);
 pref("mousewheel.with_meta.action", 1);  // command key on Mac
 pref("mousewheel.with_win.action", 1);
 
-// pref to control the alert notification 
-pref("alerts.slideIncrement", 1);
-pref("alerts.slideIncrementTime", 10);
-pref("alerts.totalOpenTime", 4000);
-
 pref("browser.xul.error_pages.enabled", true);
 pref("browser.xul.error_pages.expert_bad_cert", false);
 
 // Work Offline is best manually managed by the user.
 pref("network.manage-offline-status", false);
 
 // We want to make sure mail URLs are handled externally...
 pref("network.protocol-handler.external.mailto", true); // for mail
--- a/browser/base/content/abouthome/aboutHome.js
+++ b/browser/base/content/abouthome/aboutHome.js
@@ -62,47 +62,16 @@ const SEARCH_ENGINES = {
            "ttQGnDMs6Tej8SaseF4LN9c9cnxNj6VxI8Q+3em9Hx+c3PmW1UDztMZtXVLEfdymbGAJ60kJGZQm" +
            "tH99bE8YGN/wd/mgxdG7NFDb8/ZohryYA5HguHhI5uYO27vyoqtrmAiXr31JX/V48CuY8R8FJhxE" +
            "eeEAQWk9HnYlFmMJoRKG03QLtUJ7/93FvpXXJ7wM/6Za4l71UEu5pWkoucv0Be0tm95vmUdy5t5k" +
            "tpbPbe8B2vmsi7+rl2Nf4yVaUlLHSQXu7r8tw1JyT+ivhQBaAhZUxBSC5EPpPtMKVDzi3z/+HZHJ" +
            "7K/7IvC/CRhZ6Ep6evGGyXJS3kAsp3SGcgLKc7uSktBhrW7ZFq32r/HHCVbb0P9fBSYOTpIoJ5SE" +
            "7GUnpHbrbG8EzsfWfwgwAEfC/ToQIhkhAAAAAElFTkSuQmCC"
   , params: "source=hp&channel=np"
   }
-
-, "Яндекс":
-  {
-    image: "data:image/png;base64," +
-           "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAcCAYAAADcO8kVAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ" +
-           "bWFnZVJlYWR5ccllPAAABWFJREFUeNrsWWtsVEUUnltLH7tbaeuDbfCBojUoBTGmooLE+Igx+gON" +
-           "RvEJhEQNUdEYA0Ji4xNf2Bg1iBJJrGBC+CEBNYoxxmh94CMKRE2MitBqoZRi6bbdZT3TfhM/TmZ2" +
-           "u5jGsOEkX8/0ztzp3HPP4zu3UTabNUfEI9YwgzAxjUbBGkG7IAv0CwYE53rWC+KChFloRh329igN" +
-           "zD8keJR+P2DvEbgnrjp4eWT65GerSZuU6FWii9Fj5pGHvC6ow/WpdP1C7SV3Bm18eNpDG2a0oA0P" +
-           "v0qFSn3IMPOKxChsmBJ1/TpBEuNn1NxRB8XOoJSYRabfrCiG0FGiDXMZ9HeC73PfGpkOST0vmYGi" +
-           "LEraMCdB/5jP46xhnhaj7C3Sal2qjFSDcU8eb4m2m4xpHvKWYwSTBd2Cr1HBrIwVnCXYIdiiNrDh" +
-           "Wi8YQLVzZ+mDt/ar9acK5gqOE6wTvKvmE4JzsN83ghSu1+AMMcGngr/pnnHYM4nzrRX8EapKm5Fc" +
-           "3/bwlAn/Jt/EtJdNmdvidjxcpyrjT+D6Fx7LPoA5jf3ktU5metY9rtZcRHNn0vV3cO0rtf6GwN9v" +
-           "DCXfX6AbVLL1hJJOxIM6UtwnJG7ORuIaMl5W7W297g2MmwR3YLxQcDmty3jOdongCrrXyRTBaoyf" +
-           "x5qdgjZ4qzfHbCQ3mzXcChcYH8hhIGf0zwQ3Ch6k8/Ae9yEM3hc8LFguWIm5uwIvwYXhPdA2RNbT" +
-           "/BLoFsECwXsw1gUIZa9h7NvZivGLgkk010eHjv5jbitXD1HiWVMhuB7jDXR9E/R0Qa3nPvvmTxZc" +
-           "7fGWyQhNK6/R9b8Ev4aSr0HyunWQ3Q/li8/hdh8JTiOD+DpPa7jegHtriUN35zDMRMEJGH9J17dB" +
-           "18KzO9V9NvndjbH1sB9objp0u+CT4VYlJ5txKLvpDMFsIJ/EwYOs9bsEp+RYeyz0nx7y6ORsGu8K" +
-           "EM2kx1ts7rkXL+YxNd8I/TOcoCDDOB5jY/Fj/P4cEmVTjr0SlKNCOcjJ8fQgodAcQ/d/i/BLK8Oo" +
-           "ZtYcLVgGD1wq2K7mx0LvKITHaFlCbny/oI4M43uQDJJkL3KH5RWnB/auh96ax9AGnKQdoZNAyO4T" +
-           "VHv4VobC+XzPntWUMgpivtwzufbgWbVpSHYh4V0DnrA6YETrCWdgvGUYIboX9KEahqlFcq0GT2HZ" +
-           "jwrXBW4zJ/C8FYdqmEWUb94aZniUUbXJVbmm0N6/5zjbPnohcfKePiDlSfBJeO0r9Bx8pi7oEw/F" +
-           "MPMp8S0roARHar+QYS6FXp9nv230dicVcA7LaZoxHo/ncfIbEdi6Qgxje4vFRL5aRqA/uxn6Vc9c" +
-           "muK/lXqeuQXsPwZMdi0RPedxH1AFva0QwyygavDkCBjlFuy/HJWhksLQgOVyxWqh3mYx7RND2Pi8" +
-           "0n1+baawmU9e2o6x/XR7raIQVb4mskGQQaO4ydNENlATeTE1kXOQc/agXDpZqhq42dQL2US9G1Wl" +
-           "G5XEzaWJbyTBddzcTuSmAYTMOKybQWsmeppIbk5nqcbxJ1RHO37B10TeRL3KU543kUKF0J8leqgq" +
-           "8ae8PdAd6ltPL954LXQV/m4HEbgaYqjT6KNZHWhAKd5+mzpDN4WflUdw5koweitv4lldX2QpxQSc" +
-           "/UOfx9jvvTHBKP+/RmKRoHwIiYg8pgQJsszTKFYSV2qC0VcShyqnqlEKRpolqsAyFfnpKmLOnOgr" +
-           "VAVirhYnYzsZLbgSe57nwtL375N8H+Oy3H2qKpAKEL5eVc65E04rD2NW66uWrUDobKnAnPs7PR5+" +
-           "tLFQHjMS0knhEZLdim/8bxId+RetX/4RYACXlwEEPBQycwAAAABJRU5ErkJggg=="
-  }
 };
 
 // The process of adding a new default snippet involves:
 //   * add a new entity to aboutHome.dtd
 //   * add a <span/> for it in aboutHome.xhtml
 //   * add an entry here in the proper ordering (based on spans)
 // The <a/> part of the snippet will be linked to the corresponding url.
 const DEFAULT_SNIPPETS_URLS = [
--- a/browser/base/content/browser-social.js
+++ b/browser/base/content/browser-social.js
@@ -530,21 +530,25 @@ let SocialShareButton = {
     }
     shareButton.style.backgroundImage = 'url("' + encodeURI(imageURL) + '")';
   }
 };
 
 var SocialToolbar = {
   // Called once, after window load, when the Social.provider object is initialized
   init: function SocialToolbar_init() {
-    document.getElementById("social-provider-button").setAttribute("image", Social.provider.iconURL);
+    this.button.setAttribute("image", Social.provider.iconURL);
     this.updateButton();
     this.updateProfile();
   },
 
+  get button() {
+    return document.getElementById("social-provider-button");
+  },
+
   updateButtonHiddenState: function SocialToolbar_updateButtonHiddenState() {
     let tbi = document.getElementById("social-toolbar-item");
     tbi.hidden = !Social.uiVisible;
     if (!SocialUI.haveLoggedInUser()) {
       let parent = document.getElementById("social-notification-box");
       while (parent.hasChildNodes())
         parent.removeChild(parent.firstChild);
 
@@ -722,17 +726,17 @@ var SocialSidebar = {
     return Social.uiVisible && Social.provider.sidebarURL && !this.chromeless;
   },
 
   // Whether this is a "chromeless window" (e.g. popup window). We don't show
   // the sidebar in these windows.
   get chromeless() {
     let docElem = document.documentElement;
     return docElem.getAttribute('disablechrome') ||
-           docElem.getAttribute('chromehidden').indexOf("extrachrome") >= 0;
+           docElem.getAttribute('chromehidden').contains("toolbar");
   },
 
   // Whether the user has toggled the sidebar on (for windows where it can appear)
   get enabled() {
     return Services.prefs.getBoolPref("social.sidebar.open");
   },
 
   dispatchEvent: function(aType, aDetail) {
--- a/browser/components/places/content/controller.js
+++ b/browser/components/places/content/controller.js
@@ -1,14 +1,15 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* 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/. */
 
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
 XPCOMUtils.defineLazyModuleGetter(this, "NetUtil",
                                   "resource://gre/modules/NetUtil.jsm");
 
 // XXXmano: we should move most/all of these constants to PlacesUtils
 const ORGANIZER_ROOT_BOOKMARKS = "place:folder=BOOKMARKS_MENU&excludeItems=1&queryType=1";
 
 // No change to the view, preserve current selection
 const RELOAD_ACTION_NOTHING = 0;
@@ -221,17 +222,17 @@ PlacesController.prototype = {
     case "placesCmd_deleteDataHost":
       var host;
       if (PlacesUtils.nodeIsHost(this._view.selectedNode)) {
         var queries = this._view.selectedNode.getQueries();
         host = queries[0].domain;
       }
       else
         host = NetUtil.newURI(this._view.selectedNode.uri).host;
-      PlacesUIUtils.privateBrowsing.removeDataFromDomain(host);
+      ClearRecentHistory.removeDataFromDomain(host);
       break;
     case "cmd_selectAll":
       this.selectAll();
       break;
     case "placesCmd_open":
       PlacesUIUtils.openNodeIn(this._view.selectedNode, "current", this._view);
       break;
     case "placesCmd_open:window":
--- a/browser/components/preferences/aboutPermissions.js
+++ b/browser/components/preferences/aboutPermissions.js
@@ -5,16 +5,17 @@
 let Ci = Components.interfaces;
 let Cc = Components.classes;
 let Cu = Components.utils;
 
 Cu.import("resource://gre/modules/Services.jsm");
 Cu.import("resource://gre/modules/PluralForm.jsm");
 Cu.import("resource://gre/modules/DownloadUtils.jsm");
 Cu.import("resource://gre/modules/NetUtil.jsm");
+Cu.import("resource://gre/modules/ClearRecentHistory.jsm");
 
 let gFaviconService = Cc["@mozilla.org/browser/favicon-service;1"].
                       getService(Ci.nsIFaviconService);
 
 let gPlacesDatabase = Cc["@mozilla.org/browser/nav-history-service;1"].
                       getService(Ci.nsPIPlacesDatabase).
                       DBConnection.
                       clone(true);
@@ -226,19 +227,17 @@ Site.prototype = {
     Services.logins.setLoginSavingEnabled(this.httpURI.prePath, isEnabled);
     Services.logins.setLoginSavingEnabled(this.httpsURI.prePath, isEnabled);
   },
 
   /**
    * Removes all data from the browser corresponding to the site.
    */
   forgetSite: function Site_forgetSite() {
-    let pb = Cc["@mozilla.org/privatebrowsing;1"].
-             getService(Ci.nsIPrivateBrowsingService);
-    pb.removeDataFromDomain(this.host);
+    ClearRecentHistory.removeDataFromDomain(this.host);
   }
 }
 
 /**
  * PermissionDefaults object keeps track of default permissions for sites based
  * on global preferences.
  *
  * Inspired by pageinfo/permissions.js
--- a/browser/components/preferences/tests/browser_chunk_permissions.js
+++ b/browser/components/preferences/tests/browser_chunk_permissions.js
@@ -1,13 +1,14 @@
 /* Any copyright is dedicated to the Public Domain.
    http://creativecommons.org/publicdomain/zero/1.0/ */
 
 Components.utils.import("resource://gre/modules/PlacesUtils.jsm");
 Components.utils.import("resource://gre/modules/NetUtil.jsm");
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
 
 const ABOUT_PERMISSIONS_SPEC = "about:permissions";
 
 const TEST_URI_1 = NetUtil.newURI("http://mozilla.com/");
 const TEST_URI_2 = NetUtil.newURI("http://mozilla.org/");
 const TEST_URI_3 = NetUtil.newURI("http://wikipedia.org/");
 
 // values from DefaultPermissions object
@@ -110,19 +111,17 @@ var tests = [
       ok(testSite3.collapsed, "test site 3 is collapsed after early filtering");
 
       runNextTest();
     }
   },
   {
     desc: "test removing from sites-list before it is fully constructed.",
     preInit: function() {
-      let pb = Cc["@mozilla.org/privatebrowsing;1"].
-                 getService(Ci.nsIPrivateBrowsingService);
-      pb.removeDataFromDomain(TEST_URI_2.host);
+      ClearRecentHistory.removeDataFromDomain(TEST_URI_2.host);
     },
     run: function() {
       let testSite1 = getSiteItem(TEST_URI_1.host);
       ok(!testSite2, "test site 1 was not removed from sites list");
       let testSite2 = getSiteItem(TEST_URI_2.host);
       ok(!testSite2, "test site 2 was pre-removed from sites list");
       let testSite3 = getSiteItem(TEST_URI_3.host);
       ok(!testSite2, "test site 3 was not removed from sites list");
new file mode 100644
--- /dev/null
+++ b/browser/components/privatebrowsing/src/ClearRecentHistory.jsm
@@ -0,0 +1,226 @@
+/* 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/. */
+
+Components.utils.import("resource://gre/modules/Services.jsm");
+
+var EXPORTED_SYMBOLS = ["ClearRecentHistory"];
+
+/**
+ * Returns true if the string passed in is part of the root domain of the
+ * current string.  For example, if this is "www.mozilla.org", and we pass in
+ * "mozilla.org", this will return true.  It would return false the other way
+ * around.
+ */
+function hasRootDomain(str, aDomain)
+{
+  let index = str.indexOf(aDomain);
+  // If aDomain is not found, we know we do not have it as a root domain.
+  if (index == -1)
+    return false;
+
+  // If the strings are the same, we obviously have a match.
+  if (str == aDomain)
+    return true;
+
+  // Otherwise, we have aDomain as our root domain iff the index of aDomain is
+  // aDomain.length subtracted from our length and (since we do not have an
+  // exact match) the character before the index is a dot or slash.
+  let prevChar = str[index - 1];
+  return (index == (str.length - aDomain.length)) &&
+         (prevChar == "." || prevChar == "/");
+}
+
+const Cc = Components.classes;
+const Ci = Components.interfaces;
+const Cu = Components.utils;
+
+var ClearRecentHistory = {
+  removeDataFromDomain: function CRH_removeDataFromDomain(aDomain)
+  {
+    // clear any and all network geolocation provider sessions
+    try {
+        Services.prefs.deleteBranch("geo.wifi.access_token.");
+    } catch (e) {}
+
+    // History
+    let (bh = Cc["@mozilla.org/browser/global-history;2"].
+              getService(Ci.nsIBrowserHistory)) {
+      bh.removePagesFromHost(aDomain, true);
+    }
+
+    // Cache
+    let (cs = Cc["@mozilla.org/network/cache-service;1"].
+              getService(Ci.nsICacheService)) {
+      // NOTE: there is no way to clear just that domain, so we clear out
+      //       everything)
+      try {
+        cs.evictEntries(Ci.nsICache.STORE_ANYWHERE);
+      } catch (ex) {
+        Cu.reportError("Exception thrown while clearing the cache: " +
+          ex.toString());
+      }
+    }
+
+    // Image Cache
+    let (imageCache = Cc["@mozilla.org/image/tools;1"].
+                      getService(Ci.imgITools).getImgCacheForDocument(null)) {
+      try {
+        imageCache.clearCache(false); // true=chrome, false=content
+      } catch (ex) {
+        Cu.reportError("Exception thrown while clearing the image cache: " +
+          ex.toString());
+      }
+    }
+
+    // Cookies
+    let (cm = Cc["@mozilla.org/cookiemanager;1"].
+              getService(Ci.nsICookieManager2)) {
+      let enumerator = cm.getCookiesFromHost(aDomain);
+      while (enumerator.hasMoreElements()) {
+        let cookie = enumerator.getNext().QueryInterface(Ci.nsICookie);
+        cm.remove(cookie.host, cookie.name, cookie.path, false);
+      }
+    }
+
+    // Plugin data
+    const phInterface = Ci.nsIPluginHost;
+    const FLAG_CLEAR_ALL = phInterface.FLAG_CLEAR_ALL;
+    let (ph = Cc["@mozilla.org/plugin/host;1"].getService(phInterface)) {
+      let tags = ph.getPluginTags();
+      for (let i = 0; i < tags.length; i++) {
+        try {
+          ph.clearSiteData(tags[i], aDomain, FLAG_CLEAR_ALL, -1);
+        } catch (e) {
+          // Ignore errors from the plugin
+        }
+      }
+    }
+
+    // Downloads
+    let (dm = Cc["@mozilla.org/download-manager;1"].
+              getService(Ci.nsIDownloadManager)) {
+      // Active downloads
+      let enumerator = dm.activeDownloads;
+      while (enumerator.hasMoreElements()) {
+        let dl = enumerator.getNext().QueryInterface(Ci.nsIDownload);
+        if (hasRootDomain(dl.source.host, aDomain)) {
+          dm.cancelDownload(dl.id);
+          dm.removeDownload(dl.id);
+        }
+      }
+
+      // Completed downloads
+      let db = dm.DBConnection;
+      // NOTE: This is lossy, but we feel that it is OK to be lossy here and not
+      //       invoke the cost of creating a URI for each download entry and
+      //       ensure that the hostname matches.
+      let stmt = db.createStatement(
+        "DELETE FROM moz_downloads " +
+        "WHERE source LIKE ?1 ESCAPE '/' " +
+        "AND state NOT IN (?2, ?3, ?4)"
+      );
+      let pattern = stmt.escapeStringForLIKE(aDomain, "/");
+      stmt.bindByIndex(0, "%" + pattern + "%");
+      stmt.bindByIndex(1, Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING);
+      stmt.bindByIndex(2, Ci.nsIDownloadManager.DOWNLOAD_PAUSED);
+      stmt.bindByIndex(3, Ci.nsIDownloadManager.DOWNLOAD_QUEUED);
+      try {
+        stmt.execute();
+      }
+      finally {
+        stmt.finalize();
+      }
+
+      // We want to rebuild the list if the UI is showing, so dispatch the
+      // observer topic
+      let os = Cc["@mozilla.org/observer-service;1"].
+               getService(Ci.nsIObserverService);
+      os.notifyObservers(null, "download-manager-remove-download", null);
+    }
+
+    // Passwords
+    let (lm = Cc["@mozilla.org/login-manager;1"].
+              getService(Ci.nsILoginManager)) {
+      // Clear all passwords for domain
+      try {
+        let logins = lm.getAllLogins();
+        for (let i = 0; i < logins.length; i++)
+          if (hasRootDomain(logins[i].hostname, aDomain))
+            lm.removeLogin(logins[i]);
+      }
+      // XXXehsan: is there a better way to do this rather than this
+      // hacky comparison?
+      catch (ex if ex.message.indexOf("User canceled Master Password entry") != -1) { }
+
+      // Clear any "do not save for this site" for this domain
+      let disabledHosts = lm.getAllDisabledHosts();
+      for (let i = 0; i < disabledHosts.length; i++)
+        if (hasRootDomain(disabledHosts[i], aDomain))
+          lm.setLoginSavingEnabled(disabledHosts, true);
+    }
+
+    // Permissions
+    let (pm = Cc["@mozilla.org/permissionmanager;1"].
+              getService(Ci.nsIPermissionManager)) {
+      // Enumerate all of the permissions, and if one matches, remove it
+      let enumerator = pm.enumerator;
+      while (enumerator.hasMoreElements()) {
+        let perm = enumerator.getNext().QueryInterface(Ci.nsIPermission);
+        if (hasRootDomain(perm.host, aDomain))
+          pm.remove(perm.host, perm.type);
+      }
+    }
+
+    // Content Preferences
+    let (cp = Cc["@mozilla.org/content-pref/service;1"].
+              getService(Ci.nsIContentPrefService)) {
+      let db = cp.DBConnection;
+      // First we need to get the list of "groups" which are really just domains
+      let names = [];
+      let stmt = db.createStatement(
+        "SELECT name " +
+        "FROM groups " +
+        "WHERE name LIKE ?1 ESCAPE '/'"
+      );
+      let pattern = stmt.escapeStringForLIKE(aDomain, "/");
+      stmt.bindByIndex(0, "%" + pattern);
+      try {
+        while (stmt.executeStep())
+          if (hasRootDomain(stmt.getString(0), aDomain))
+            names.push(stmt.getString(0));
+      }
+      finally {
+        stmt.finalize();
+      }
+
+      // Now, for each name we got back, remove all of its prefs.
+      for (let i = 0; i < names.length; i++) {
+        let uri = names[i];
+        let enumerator = cp.getPrefs(uri).enumerator;
+        while (enumerator.hasMoreElements()) {
+          let pref = enumerator.getNext().QueryInterface(Ci.nsIProperty);
+          cp.removePref(uri, pref.name);
+        }
+      }
+    }
+
+    // Indexed DB
+    let (idbm = Cc["@mozilla.org/dom/indexeddb/manager;1"].
+                getService(Ci.nsIIndexedDatabaseManager)) {
+      // delete data from both HTTP and HTTPS sites
+      let caUtils = {};
+      let scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
+                         getService(Ci.mozIJSSubScriptLoader);
+      scriptLoader.loadSubScript("chrome://global/content/contentAreaUtils.js",
+                                 caUtils);
+      let httpURI = caUtils.makeURI("http://" + aDomain);
+      let httpsURI = caUtils.makeURI("https://" + aDomain);
+      idbm.clearDatabasesForURI(httpURI);
+      idbm.clearDatabasesForURI(httpsURI);
+    }
+
+    // Everybody else (including extensions)
+    Services.obs.notifyObservers(null, "browser:purge-domain-data", aDomain);
+  }
+};
--- a/browser/components/privatebrowsing/src/Makefile.in
+++ b/browser/components/privatebrowsing/src/Makefile.in
@@ -24,9 +24,13 @@ LOCAL_INCLUDES = -I$(srcdir)/../../build
 EXTRA_COMPONENTS = \
   nsPrivateBrowsingService.manifest \
   $(NULL)
 
 EXTRA_PP_COMPONENTS = \
 	nsPrivateBrowsingService.js \
 	$(NULL)
 
+EXTRA_JS_MODULES = \
+	ClearRecentHistory.jsm \
+	$(NULL)
+
 include $(topsrcdir)/config/rules.mk
--- a/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js
+++ b/browser/components/privatebrowsing/src/nsPrivateBrowsingService.js
@@ -5,44 +5,16 @@
 Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
 Components.utils.import("resource://gre/modules/Services.jsm");
 
 #ifndef XP_WIN
 #define BROKEN_WM_Z_ORDER
 #endif
 
 ////////////////////////////////////////////////////////////////////////////////
-//// Utilities
-
-/**
- * Returns true if the string passed in is part of the root domain of the
- * current string.  For example, if this is "www.mozilla.org", and we pass in
- * "mozilla.org", this will return true.  It would return false the other way
- * around.
- */
-String.prototype.hasRootDomain = function hasRootDomain(aDomain)
-{
-  let index = this.indexOf(aDomain);
-  // If aDomain is not found, we know we do not have it as a root domain.
-  if (index == -1)
-    return false;
-
-  // If the strings are the same, we obviously have a match.
-  if (this == aDomain)
-    return true;
-
-  // Otherwise, we have aDomain as our root domain iff the index of aDomain is
-  // aDomain.length subtracted from our length and (since we do not have an
-  // exact match) the character before the index is a dot or slash.
-  let prevChar = this[index - 1];
-  return (index == (this.length - aDomain.length)) &&
-         (prevChar == "." || prevChar == "/");
-}
-
-////////////////////////////////////////////////////////////////////////////////
 //// Constants
 
 const Cc = Components.classes;
 const Ci = Components.interfaces;
 const Cu = Components.utils;
 const Cr = Components.results;
 
 const STATE_IDLE = 0;
@@ -101,17 +73,17 @@ PrivateBrowsingService.prototype = {
 
   // Telemetry measurements
   _enterTimestamps: {},
   _exitTimestamps: {},
 
   // XPCOM registration
   classID: Components.ID("{c31f4883-839b-45f6-82ad-a6a9bc5ad599}"),
 
-  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrivateBrowsingService, 
+  QueryInterface: XPCOMUtils.generateQI([Ci.nsIPrivateBrowsingService,
                                          Ci.nsIObserver,
                                          Ci.nsISupportsWeakReference,
                                          Ci.nsICommandLineHandler]),
 
   _unload: function PBS__destroy() {
     // Force an exit from the private browsing mode on shutdown
     this._quitting = true;
     if (this._inPrivateBrowsing)
@@ -603,201 +575,12 @@ PrivateBrowsingService.prototype = {
     return this._inPrivateBrowsing && this._autoStarted;
   },
 
   /**
    * Whether the latest transition was initiated from the command line.
    */
   get lastChangedByCommandLine() {
     return this._lastChangedByCommandLine;
-  },
-
-  removeDataFromDomain: function PBS_removeDataFromDomain(aDomain)
-  {
-
-    // clear any and all network geolocation provider sessions
-    try {
-        this._prefs.deleteBranch("geo.wifi.access_token.");
-    } catch (e) {}
-    
-    // History
-    let (bh = Cc["@mozilla.org/browser/global-history;2"].
-              getService(Ci.nsIBrowserHistory)) {
-      bh.removePagesFromHost(aDomain, true);
-    }
-
-    // Cache
-    let (cs = Cc["@mozilla.org/network/cache-service;1"].
-              getService(Ci.nsICacheService)) {
-      // NOTE: there is no way to clear just that domain, so we clear out
-      //       everything)
-      try {
-        cs.evictEntries(Ci.nsICache.STORE_ANYWHERE);
-      } catch (ex) {
-        Cu.reportError("Exception thrown while clearing the cache: " +
-          ex.toString());
-      }
-    }
-
-    // Image Cache
-    let (imageCache = Cc["@mozilla.org/image/tools;1"].
-                      getService(Ci.imgITools).getImgCacheForDocument(null)) {
-      try {
-        imageCache.clearCache(false); // true=chrome, false=content
-      } catch (ex) {
-        Cu.reportError("Exception thrown while clearing the image cache: " +
-          ex.toString());
-      }
-    }
-
-    // Cookies
-    let (cm = Cc["@mozilla.org/cookiemanager;1"].
-              getService(Ci.nsICookieManager2)) {
-      let enumerator = cm.getCookiesFromHost(aDomain);
-      while (enumerator.hasMoreElements()) {
-        let cookie = enumerator.getNext().QueryInterface(Ci.nsICookie);
-        cm.remove(cookie.host, cookie.name, cookie.path, false);
-      }
-    }
-
-    // Plugin data
-    const phInterface = Ci.nsIPluginHost;
-    const FLAG_CLEAR_ALL = phInterface.FLAG_CLEAR_ALL;
-    let (ph = Cc["@mozilla.org/plugin/host;1"].getService(phInterface)) {
-      let tags = ph.getPluginTags();
-      for (let i = 0; i < tags.length; i++) {
-        try {
-          ph.clearSiteData(tags[i], aDomain, FLAG_CLEAR_ALL, -1);
-        } catch (e) {
-          // Ignore errors from the plugin
-        }
-      }
-    }
-
-    // Downloads
-    let (dm = Cc["@mozilla.org/download-manager;1"].
-              getService(Ci.nsIDownloadManager)) {
-      // Active downloads
-      let enumerator = dm.activeDownloads;
-      while (enumerator.hasMoreElements()) {
-        let dl = enumerator.getNext().QueryInterface(Ci.nsIDownload);
-        if (dl.source.host.hasRootDomain(aDomain)) {
-          dm.cancelDownload(dl.id);
-          dm.removeDownload(dl.id);
-        }
-      }
-
-      // Completed downloads
-      let db = dm.DBConnection;
-      // NOTE: This is lossy, but we feel that it is OK to be lossy here and not
-      //       invoke the cost of creating a URI for each download entry and
-      //       ensure that the hostname matches.
-      let stmt = db.createStatement(
-        "DELETE FROM moz_downloads " +
-        "WHERE source LIKE ?1 ESCAPE '/' " +
-        "AND state NOT IN (?2, ?3, ?4)"
-      );
-      let pattern = stmt.escapeStringForLIKE(aDomain, "/");
-      stmt.bindByIndex(0, "%" + pattern + "%");
-      stmt.bindByIndex(1, Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING);
-      stmt.bindByIndex(2, Ci.nsIDownloadManager.DOWNLOAD_PAUSED);
-      stmt.bindByIndex(3, Ci.nsIDownloadManager.DOWNLOAD_QUEUED);
-      try {
-        stmt.execute();
-      }
-      finally {
-        stmt.finalize();
-      }
-
-      // We want to rebuild the list if the UI is showing, so dispatch the
-      // observer topic
-      let os = Cc["@mozilla.org/observer-service;1"].
-               getService(Ci.nsIObserverService);
-      os.notifyObservers(null, "download-manager-remove-download", null);
-    }
-
-    // Passwords
-    let (lm = Cc["@mozilla.org/login-manager;1"].
-              getService(Ci.nsILoginManager)) {
-      // Clear all passwords for domain
-      try {
-        let logins = lm.getAllLogins();
-        for (let i = 0; i < logins.length; i++)
-          if (logins[i].hostname.hasRootDomain(aDomain))
-            lm.removeLogin(logins[i]);
-      }
-      // XXXehsan: is there a better way to do this rather than this
-      // hacky comparison?
-      catch (ex if ex.message.indexOf("User canceled Master Password entry") != -1) { }
-
-      // Clear any "do not save for this site" for this domain
-      let disabledHosts = lm.getAllDisabledHosts();
-      for (let i = 0; i < disabledHosts.length; i++)
-        if (disabledHosts[i].hasRootDomain(aDomain))
-          lm.setLoginSavingEnabled(disabledHosts, true);
-    }
-
-    // Permissions
-    let (pm = Cc["@mozilla.org/permissionmanager;1"].
-              getService(Ci.nsIPermissionManager)) {
-      // Enumerate all of the permissions, and if one matches, remove it
-      let enumerator = pm.enumerator;
-      while (enumerator.hasMoreElements()) {
-        let perm = enumerator.getNext().QueryInterface(Ci.nsIPermission);
-        if (perm.host.hasRootDomain(aDomain))
-          pm.remove(perm.host, perm.type);
-      }
-    }
-
-    // Content Preferences
-    let (cp = Cc["@mozilla.org/content-pref/service;1"].
-              getService(Ci.nsIContentPrefService)) {
-      let db = cp.DBConnection;
-      // First we need to get the list of "groups" which are really just domains
-      let names = [];
-      let stmt = db.createStatement(
-        "SELECT name " +
-        "FROM groups " +
-        "WHERE name LIKE ?1 ESCAPE '/'"
-      );
-      let pattern = stmt.escapeStringForLIKE(aDomain, "/");
-      stmt.bindByIndex(0, "%" + pattern);
-      try {
-        while (stmt.executeStep())
-          if (stmt.getString(0).hasRootDomain(aDomain))
-            names.push(stmt.getString(0));
-      }
-      finally {
-        stmt.finalize();
-      }
-
-      // Now, for each name we got back, remove all of its prefs.
-      for (let i = 0; i < names.length; i++) {
-        let uri = names[i];
-        let enumerator = cp.getPrefs(uri).enumerator;
-        while (enumerator.hasMoreElements()) {
-          let pref = enumerator.getNext().QueryInterface(Ci.nsIProperty);
-          cp.removePref(uri, pref.name);
-        }
-      }
-    }
-
-    // Indexed DB
-    let (idbm = Cc["@mozilla.org/dom/indexeddb/manager;1"].
-                getService(Ci.nsIIndexedDatabaseManager)) {
-      // delete data from both HTTP and HTTPS sites
-      let caUtils = {};
-      let scriptLoader = Cc["@mozilla.org/moz/jssubscript-loader;1"].
-                         getService(Ci.mozIJSSubScriptLoader);
-      scriptLoader.loadSubScript("chrome://global/content/contentAreaUtils.js",
-                                 caUtils);
-      let httpURI = caUtils.makeURI("http://" + aDomain);
-      let httpsURI = caUtils.makeURI("https://" + aDomain);
-      idbm.clearDatabasesForURI(httpURI);
-      idbm.clearDatabasesForURI(httpsURI);
-    }
-
-    // Everybody else (including extensions)
-    this._obs.notifyObservers(null, "browser:purge-domain-data", aDomain);
   }
 };
 
 var NSGetFactory = XPCOMUtils.generateNSGetFactory([PrivateBrowsingService]);
--- a/browser/components/privatebrowsing/src/nsPrivateBrowsingServiceWrapper.cpp
+++ b/browser/components/privatebrowsing/src/nsPrivateBrowsingServiceWrapper.cpp
@@ -79,22 +79,15 @@ nsPrivateBrowsingServiceWrapper::GetLast
 {
   if (!aReason)
     return NS_ERROR_NULL_POINTER;
   JSStackGuard guard;
   return mPBService->GetLastChangedByCommandLine(aReason);
 }
 
 NS_IMETHODIMP
-nsPrivateBrowsingServiceWrapper::RemoveDataFromDomain(const nsACString & aDomain)
-{
-  JSStackGuard guard;
-  return mPBService->RemoveDataFromDomain(aDomain);
-}
-
-NS_IMETHODIMP
 nsPrivateBrowsingServiceWrapper::Observe(nsISupports *aSubject, const char *aTopic, const PRUnichar *aData)
 {
   JSStackGuard guard;
   nsCOMPtr<nsIObserver> observer(do_QueryInterface(mPBService));
   NS_ENSURE_TRUE(observer, NS_ERROR_FAILURE);
   return observer->Observe(aSubject, aTopic, aData);
 }
--- a/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_clearplugindata.js
+++ b/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_clearplugindata.js
@@ -1,13 +1,15 @@
 /**
  * Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
+
 // Test clearing plugin data by domain using nsPrivateBrowsingService.
 const testURL = "http://mochi.test:8888/browser/browser/components/privatebrowsing/test/browser/browser_privatebrowsing_clearplugindata.html";
 
 const pluginHostIface = Ci.nsIPluginHost;
 var pluginHost = Cc["@mozilla.org/plugin/host;1"].getService(Ci.nsIPluginHost);
 pluginHost.QueryInterface(pluginHostIface);
 
 var pluginTag;
@@ -61,35 +63,32 @@ function do_test()
   gBrowser.selectedTab = gBrowser.addTab();
   gBrowser.selectedBrowser.addEventListener("load", function () {
     gBrowser.selectedBrowser.removeEventListener("load", arguments.callee, true);
 
     setFinishedCallback(function() {
       ok(stored(["192.168.1.1","foo.com","nonexistent.foo.com","bar.com","localhost"]),
         "Data stored for sites");
 
-      let pb = Cc["@mozilla.org/privatebrowsing;1"].
-               getService(Ci.nsIPrivateBrowsingService);
-
       // Clear data for "foo.com" and its subdomains.
-      pb.removeDataFromDomain("foo.com");
+      ClearRecentHistory.removeDataFromDomain("foo.com");
       ok(stored(["bar.com","192.168.1.1","localhost"]), "Data stored for sites");
       ok(!stored(["foo.com"]), "Data cleared for foo.com");
       ok(!stored(["bar.foo.com"]), "Data cleared for subdomains of foo.com");
 
       // Clear data for "bar.com" using a subdomain.
-      pb.removeDataFromDomain("foo.bar.com");
+      ClearRecentHistory.removeDataFromDomain("foo.bar.com");
       ok(!stored(["bar.com"]), "Data cleared for bar.com");
 
       // Clear data for "192.168.1.1".
-      pb.removeDataFromDomain("192.168.1.1");
+      ClearRecentHistory.removeDataFromDomain("192.168.1.1");
       ok(!stored(["192.168.1.1"]), "Data cleared for 192.168.1.1");
 
       // Clear data for "localhost".
-      pb.removeDataFromDomain("localhost");
+      ClearRecentHistory.removeDataFromDomain("localhost");
       ok(!stored(null), "All data cleared");
 
       gBrowser.removeCurrentTab();
 
       executeSoon(finish);
     });
   }, true);
   content.location = testURL;
deleted file mode 100644
--- a/browser/components/privatebrowsing/test/unit/do_test_removeDataFromDomain.js
+++ /dev/null
@@ -1,630 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: sw=2 ts=2 sts=2
- * 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/. */
-
-/**
- * Test added with bug 460086 to test the behavior of the new API that was added
- * to remove all traces of visiting a site.
- */
-
-////////////////////////////////////////////////////////////////////////////////
-//// Globals
-
-Cu.import("resource://gre/modules/PlacesUtils.jsm");
-
-let pb = Cc[PRIVATEBROWSING_CONTRACT_ID].
-         getService(Ci.nsIPrivateBrowsingService);
-
-const COOKIE_EXPIRY = Math.round(Date.now() / 1000) + 60;
-const COOKIE_NAME = "testcookie";
-const COOKIE_PATH = "/";
-
-const LOGIN_USERNAME = "username";
-const LOGIN_PASSWORD = "password";
-const LOGIN_USERNAME_FIELD = "username_field";
-const LOGIN_PASSWORD_FIELD = "password_field";
-
-const PERMISSION_TYPE = "test-perm";
-const PERMISSION_VALUE = Ci.nsIPermissionManager.ALLOW_ACTION;
-
-const PREFERENCE_NAME = "test-pref";
-
-////////////////////////////////////////////////////////////////////////////////
-//// Utility Functions
-
-/**
- * Creates an nsIURI object for the given string representation of a URI.
- *
- * @param aURIString
- *        The spec of the URI to create.
- * @returns an nsIURI representing aURIString.
- */
-function uri(aURIString)
-{
-  return Cc["@mozilla.org/network/io-service;1"].
-         getService(Ci.nsIIOService).
-         newURI(aURIString, null, null);
-}
-
-/**
- * Adds a visit to history.
- *
- * @param aURI
- *        The URI to add.
- */
-function add_visit(aURI)
-{
-  check_visited(aURI, false);
-  PlacesUtils.history.addVisit(aURI, Date.now() * 1000, null,
-                               Ci.nsINavHistoryService.TRANSITION_LINK, false,
-                               0);
-  check_visited(aURI, true);
-}
-
-/**
- * Checks to ensure a URI string is visited or not.
- *
- * @param aURI
- *        The URI to check.
- * @param aIsVisited
- *        True if the URI should be visited, false otherwise.
- */
-function check_visited(aURI, aIsVisited)
-{
-  let checker = aIsVisited ? do_check_true : do_check_false;
-  checker(PlacesUtils.ghistory2.isVisited(aURI));
-}
-
-/**
- * Add a cookie to the cookie service.
- *
- * @param aDomain
- */
-function add_cookie(aDomain)
-{
-  check_cookie_exists(aDomain, false);
-  let cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
-  cm.add(aDomain, COOKIE_PATH, COOKIE_NAME, "", false, false, false,
-         COOKIE_EXPIRY);
-  check_cookie_exists(aDomain, true);
-}
-
-/**
- * Checks to ensure that a cookie exists or not for a domain.
- *
- * @param aDomain
- *        The domain to check for the cookie.
- * @param aExists
- *        True if the cookie should exist, false otherwise.
- */
-function check_cookie_exists(aDomain, aExists)
-{
-  let cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
-  let cookie = {
-    host: aDomain,
-    name: COOKIE_NAME,
-    path: COOKIE_PATH
-  }
-  let checker = aExists ? do_check_true : do_check_false;
-  checker(cm.cookieExists(cookie));
-}
-
-/**
- * Adds a download to download history.
- *
- * @param aURIString
- *        The string of the URI to add.
- * @param aIsActive
- *        If it should be set to an active state in the database.  This does not
- *        make it show up in the list of active downloads however!
- */
-function add_download(aURIString, aIsActive)
-{
-  check_downloaded(aURIString, false);
-  let db = Cc["@mozilla.org/download-manager;1"].
-           getService(Ci.nsIDownloadManager).
-           DBConnection;
-  let stmt = db.createStatement(
-    "INSERT INTO moz_downloads (source, state) " +
-    "VALUES (:source, :state)"
-  );
-  stmt.params.source = aURIString;
-  stmt.params.state = aIsActive ? Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING :
-                                  Ci.nsIDownloadManager.DOWNLOAD_FINISHED;
-  try {
-    stmt.execute();
-  }
-  finally {
-    stmt.finalize();
-  }
-  check_downloaded(aURIString, true);
-}
-
-/**
- * Checks to ensure a URI string is in download history or not.
- *
- * @param aURIString
- *        The string of the URI to check.
- * @param aIsDownloaded
- *        True if the URI should be downloaded, false otherwise.
- */
-function check_downloaded(aURIString, aIsDownloaded)
-{
-  let db = Cc["@mozilla.org/download-manager;1"].
-           getService(Ci.nsIDownloadManager).
-           DBConnection;
-  let stmt = db.createStatement(
-    "SELECT * " +
-    "FROM moz_downloads " +
-    "WHERE source = :source"
-  );
-  stmt.params.source = aURIString;
-
-  let checker = aIsDownloaded ? do_check_true : do_check_false;
-  try {
-    checker(stmt.executeStep());
-  }
-  finally {
-    stmt.finalize();
-  }
-}
-
-/**
- * Adds a disabled host to the login manager.
- *
- * @param aHost
- *        The host to add to the list of disabled hosts.
- */
-function add_disabled_host(aHost)
-{
-  check_disabled_host(aHost, false);
-  let lm = Cc["@mozilla.org/login-manager;1"].
-           getService(Ci.nsILoginManager);
-  lm.setLoginSavingEnabled(aHost, false);
-  check_disabled_host(aHost, true);
-}
-
-/**
- * Checks to see if a host is disabled for storing logins or not.
- *
- * @param aHost
- *        The host to check if it is disabled.
- * @param aIsDisabled
- *        True if the host should be disabled, false otherwise.
- */
-function check_disabled_host(aHost, aIsDisabled)
-{
-  let lm = Cc["@mozilla.org/login-manager;1"].
-           getService(Ci.nsILoginManager);
-  let checker = aIsDisabled ? do_check_false : do_check_true;
-  checker(lm.getLoginSavingEnabled(aHost));
-}
-
-/**
- * Adds a login for the specified host to the login manager.
- *
- * @param aHost
- *        The host to add the login for.
- */
-function add_login(aHost)
-{
-  check_login_exists(aHost, false);
-  let login = Cc["@mozilla.org/login-manager/loginInfo;1"].
-              createInstance(Ci.nsILoginInfo);
-  login.init(aHost, "", null, LOGIN_USERNAME, LOGIN_PASSWORD,
-             LOGIN_USERNAME_FIELD, LOGIN_PASSWORD_FIELD);
-  let lm = Cc["@mozilla.org/login-manager;1"].
-           getService(Ci.nsILoginManager);
-  lm.addLogin(login);
-  check_login_exists(aHost, true);
-}
-
-/**
- * Checks to see if a login exists for a host.
- *
- * @param aHost
- *        The host to check for the test login.
- * @param aExists
- *        True if the login should exist, false otherwise.
- */
-function check_login_exists(aHost, aExists)
-{
-  let lm = Cc["@mozilla.org/login-manager;1"].
-           getService(Ci.nsILoginManager);
-  let count = { value: 0 };
-  lm.findLogins(count, aHost, "", null);
-  do_check_eq(count.value, aExists ? 1 : 0);
-}
-
-/**
- * Adds a permission for the specified URI to the permission manager.
- *
- * @param aURI
- *        The URI to add the test permission for.
- */
-function add_permission(aURI)
-{
-  check_permission_exists(aURI, false);
-  let pm = Cc["@mozilla.org/permissionmanager;1"].
-           getService(Ci.nsIPermissionManager);
-  let principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
-                    .getService(Ci.nsIScriptSecurityManager)
-                    .getNoAppCodebasePrincipal(aURI);
-
-  pm.addFromPrincipal(principal, PERMISSION_TYPE, PERMISSION_VALUE);
-  check_permission_exists(aURI, true);
-}
-
-/**
- * Checks to see if a permission exists for the given URI.
- *
- * @param aURI
- *        The URI to check if a permission exists.
- * @param aExists
- *        True if the permission should exist, false otherwise.
- */
-function check_permission_exists(aURI, aExists)
-{
-  let pm = Cc["@mozilla.org/permissionmanager;1"].
-           getService(Ci.nsIPermissionManager);
-  let principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
-                    .getService(Ci.nsIScriptSecurityManager)
-                    .getNoAppCodebasePrincipal(aURI);
-
-  let perm = pm.testExactPermissionFromPrincipal(principal, PERMISSION_TYPE);
-  let checker = aExists ? do_check_eq : do_check_neq;
-  checker(perm, PERMISSION_VALUE);
-}
-
-/**
- * Adds a content preference for the specified URI.
- *
- * @param aURI
- *        The URI to add a preference for.
- */
-function add_preference(aURI)
-{
-  check_preference_exists(aURI, false);
-  let cp = Cc["@mozilla.org/content-pref/service;1"].
-           getService(Ci.nsIContentPrefService);
-  cp.setPref(aURI, PREFERENCE_NAME, "foo");
-  check_preference_exists(aURI, true);
-}
-
-/**
- * Checks to see if a preference exists for the given URI.
- *
- * @param aURI
- *        The URI to check if a preference exists.
- * @param aExists
- *        True if the permission should exist, false otherwise.
- */
-function check_preference_exists(aURI, aExists)
-{
-  let cp = Cc["@mozilla.org/content-pref/service;1"].
-           getService(Ci.nsIContentPrefService);
-  let checker = aExists ? do_check_true : do_check_false;
-  checker(cp.hasPref(aURI, PREFERENCE_NAME));
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//// Test Functions
-
-// History
-function test_history_cleared_with_direct_match()
-{
-  const TEST_URI = uri("http://mozilla.org/foo");
-  add_visit(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_visited(TEST_URI, false);
-}
-
-function test_history_cleared_with_subdomain()
-{
-  const TEST_URI = uri("http://www.mozilla.org/foo");
-  add_visit(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_visited(TEST_URI, false);
-}
-
-function test_history_not_cleared_with_uri_contains_domain()
-{
-  const TEST_URI = uri("http://ilovemozilla.org/foo");
-  add_visit(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_visited(TEST_URI, true);
-
-  // Clear history since we left something there from this test.
-  PlacesUtils.bhistory.removeAllPages();
-}
-
-// Cookie Service
-function test_cookie_cleared_with_direct_match()
-{
-  const TEST_DOMAIN = "mozilla.org";
-  add_cookie(TEST_DOMAIN);
-  pb.removeDataFromDomain("mozilla.org");
-  check_cookie_exists(TEST_DOMAIN, false);
-}
-
-function test_cookie_cleared_with_subdomain()
-{
-  const TEST_DOMAIN = "www.mozilla.org";
-  add_cookie(TEST_DOMAIN);
-  pb.removeDataFromDomain("mozilla.org");
-  check_cookie_exists(TEST_DOMAIN, false);
-}
-
-function test_cookie_not_cleared_with_uri_contains_domain()
-{
-  const TEST_DOMAIN = "ilovemozilla.org";
-  add_cookie(TEST_DOMAIN);
-  pb.removeDataFromDomain("mozilla.org");
-  check_cookie_exists(TEST_DOMAIN, true);
-}
-
-// Download Manager
-function test_download_history_cleared_with_direct_match()
-{
-  const TEST_URI = "http://mozilla.org/foo";
-  add_download(TEST_URI, false);
-  pb.removeDataFromDomain("mozilla.org");
-  check_downloaded(TEST_URI, false);
-}
-
-function test_download_history_cleared_with_subdomain()
-{
-  const TEST_URI = "http://www.mozilla.org/foo";
-  add_download(TEST_URI, false);
-  pb.removeDataFromDomain("mozilla.org");
-  check_downloaded(TEST_URI, false);
-}
-
-function test_download_history_not_cleared_with_active_direct_match()
-{
-  // Tests that downloads marked as active in the db are not deleted from the db
-  const TEST_URI = "http://mozilla.org/foo";
-  add_download(TEST_URI, true);
-  pb.removeDataFromDomain("mozilla.org");
-  check_downloaded(TEST_URI, true);
-
-  // Reset state
-  let db = Cc["@mozilla.org/download-manager;1"].
-           getService(Ci.nsIDownloadManager).
-           DBConnection;
-  db.executeSimpleSQL("DELETE FROM moz_downloads");
-  check_downloaded(TEST_URI, false);
-}
-
-// Login Manager
-function test_login_manager_disabled_hosts_cleared_with_direct_match()
-{
-  const TEST_HOST = "http://mozilla.org";
-  add_disabled_host(TEST_HOST);
-  pb.removeDataFromDomain("mozilla.org");
-  check_disabled_host(TEST_HOST, false);
-}
-
-function test_login_manager_disabled_hosts_cleared_with_subdomain()
-{
-  const TEST_HOST = "http://www.mozilla.org";
-  add_disabled_host(TEST_HOST);
-  pb.removeDataFromDomain("mozilla.org");
-  check_disabled_host(TEST_HOST, false);
-}
-
-function test_login_manager_disabled_hosts_not_cleared_with_uri_contains_domain()
-{
-  const TEST_HOST = "http://ilovemozilla.org";
-  add_disabled_host(TEST_HOST);
-  pb.removeDataFromDomain("mozilla.org");
-  check_disabled_host(TEST_HOST, true);
-
-  // Reset state
-  let lm = Cc["@mozilla.org/login-manager;1"].
-           getService(Ci.nsILoginManager);
-  lm.setLoginSavingEnabled(TEST_HOST, true);
-  check_disabled_host(TEST_HOST, false);
-}
-
-function test_login_manager_logins_cleared_with_direct_match()
-{
-  const TEST_HOST = "http://mozilla.org";
-  add_login(TEST_HOST);
-  pb.removeDataFromDomain("mozilla.org");
-  check_login_exists(TEST_HOST, false);
-}
-
-function test_login_manager_logins_cleared_with_subdomain()
-{
-  const TEST_HOST = "http://www.mozilla.org";
-  add_login(TEST_HOST);
-  pb.removeDataFromDomain("mozilla.org");
-  check_login_exists(TEST_HOST, false);
-}
-
-function tets_login_manager_logins_not_cleared_with_uri_contains_domain()
-{
-  const TEST_HOST = "http://ilovemozilla.org";
-  add_login(TEST_HOST);
-  pb.removeDataFromDomain("mozilla.org");
-  check_login_exists(TEST_HOST, true);
-
-  let lm = Cc["@mozilla.org/login-manager;1"].
-           getService(Ci.nsILoginManager);
-  lm.removeAllLogins();
-  check_login_exists(TEST_HOST, false);
-}
-
-// Permission Manager
-function test_permission_manager_cleared_with_direct_match()
-{
-  const TEST_URI = uri("http://mozilla.org");
-  add_permission(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_permission_exists(TEST_URI, false);
-}
-
-function test_permission_manager_cleared_with_subdomain()
-{
-  const TEST_URI = uri("http://www.mozilla.org");
-  add_permission(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_permission_exists(TEST_URI, false);
-}
-
-function test_permission_manager_not_cleared_with_uri_contains_domain()
-{
-  const TEST_URI = uri("http://ilovemozilla.org");
-  add_permission(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_permission_exists(TEST_URI, true);
-
-  // Reset state
-  let pm = Cc["@mozilla.org/permissionmanager;1"].
-           getService(Ci.nsIPermissionManager);
-  pm.removeAll();
-  check_permission_exists(TEST_URI, false);
-}
-
-// Content Preferences
-function test_content_preferences_cleared_with_direct_match()
-{
-  const TEST_URI = uri("http://mozilla.org");
-  add_preference(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_preference_exists(TEST_URI, false);
-}
-
-function test_content_preferences_cleared_with_subdomain()
-{
-  const TEST_URI = uri("http://www.mozilla.org");
-  add_preference(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_preference_exists(TEST_URI, false);
-}
-
-function test_content_preferecnes_not_cleared_with_uri_contains_domain()
-{
-  const TEST_URI = uri("http://ilovemozilla.org");
-  add_preference(TEST_URI);
-  pb.removeDataFromDomain("mozilla.org");
-  check_preference_exists(TEST_URI, true);
-
-  // Reset state
-  let cp = Cc["@mozilla.org/content-pref/service;1"].
-           getService(Ci.nsIContentPrefService);
-  cp.removePref(TEST_URI, PREFERENCE_NAME);
-  check_preference_exists(TEST_URI, false);
-}
-
-// Cache
-function test_cache_cleared()
-{
-  // Because this test is asynchronous, it should be the last test
-  do_check_eq(tests[tests.length - 1], arguments.callee);
-
-  // NOTE: We could be more extensive with this test and actually add an entry
-  //       to the cache, and then make sure it is gone.  However, we trust that
-  //       the API is well tested, and that when we get the observer
-  //       notification, we have actually cleared the cache.
-  // This seems to happen asynchronously...
-  let os = Cc["@mozilla.org/observer-service;1"].
-           getService(Ci.nsIObserverService);
-  let observer = {
-    observe: function(aSubject, aTopic, aData)
-    {
-      os.removeObserver(observer, "cacheservice:empty-cache");
-      do_test_finished();
-    }
-  };
-  os.addObserver(observer, "cacheservice:empty-cache", false);
-  pb.removeDataFromDomain("mozilla.org");
-  do_test_pending();
-}
-
-function test_storage_cleared()
-{
-  function getStorageForURI(aURI)
-  {
-    let principal = Cc["@mozilla.org/scriptsecuritymanager;1"].
-                    getService(Ci.nsIScriptSecurityManager).
-                    getNoAppCodebasePrincipal(aURI);
-    let dsm = Cc["@mozilla.org/dom/storagemanager;1"].
-              getService(Ci.nsIDOMStorageManager);
-    return dsm.getLocalStorageForPrincipal(principal, "");
-  }
-
-  let s = [
-    getStorageForURI(uri("http://mozilla.org")),
-    getStorageForURI(uri("http://my.mozilla.org")),
-    getStorageForURI(uri("http://ilovemozilla.org")),
-  ];
-
-  for (let i = 0; i < s.length; ++i) {
-    let storage = s[i];
-    storage.setItem("test", "value" + i);
-    do_check_eq(storage.length, 1);
-    do_check_eq(storage.key(0), "test");
-    do_check_eq(storage.getItem("test"), "value" + i);
-  }
-
-  pb.removeDataFromDomain("mozilla.org");
-
-  do_check_eq(s[0].getItem("test"), null);
-  do_check_eq(s[0].length, 0);
-  do_check_eq(s[1].getItem("test"), null);
-  do_check_eq(s[1].length, 0);
-  do_check_eq(s[2].getItem("test"), "value2");
-  do_check_eq(s[2].length, 1);
-}
-
-let tests = [
-  // History
-  test_history_cleared_with_direct_match,
-  test_history_cleared_with_subdomain,
-  test_history_not_cleared_with_uri_contains_domain,
-
-  // Cookie Service
-  test_cookie_cleared_with_direct_match,
-  test_cookie_cleared_with_subdomain,
-  test_cookie_not_cleared_with_uri_contains_domain,
-
-  // Download Manager
-  // Note: active downloads tested in test_removeDataFromDomain_activeDownloads.js
-  test_download_history_cleared_with_direct_match,
-  test_download_history_cleared_with_subdomain,
-  test_download_history_not_cleared_with_active_direct_match,
-
-  // Login Manager
-  test_login_manager_disabled_hosts_cleared_with_direct_match,
-  test_login_manager_disabled_hosts_cleared_with_subdomain,
-  test_login_manager_disabled_hosts_not_cleared_with_uri_contains_domain,
-  test_login_manager_logins_cleared_with_direct_match,
-  test_login_manager_logins_cleared_with_subdomain,
-  tets_login_manager_logins_not_cleared_with_uri_contains_domain,
-
-  // Permission Manager
-  test_permission_manager_cleared_with_direct_match,
-  test_permission_manager_cleared_with_subdomain,
-  test_permission_manager_not_cleared_with_uri_contains_domain,
-
-  // Content Preferences
-  test_content_preferences_cleared_with_direct_match,
-  test_content_preferences_cleared_with_subdomain,
-  test_content_preferecnes_not_cleared_with_uri_contains_domain,
-
-  // Storage
-  test_storage_cleared,
-
-  // Cache
-  test_cache_cleared,
-];
-
-function do_test()
-{
-  for (let i = 0; i < tests.length; i++)
-    tests[i]();
-}
deleted file mode 100644
--- a/browser/components/privatebrowsing/test/unit/do_test_removeDataFromDomain_activeDownloads.js
+++ /dev/null
@@ -1,125 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: sw=2 ts=2 sts=2
- * 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/. */
-
-/**
- * Test added with bug 460086 to test the behavior of the new API that was added
- * to remove all traces of visiting a site.
- */
-
-////////////////////////////////////////////////////////////////////////////////
-//// Constants
-
-let pb = Cc[PRIVATEBROWSING_CONTRACT_ID].
-         getService(Ci.nsIPrivateBrowsingService);
-
-////////////////////////////////////////////////////////////////////////////////
-//// Utility Functions
-
-/**
- * Creates an nsIURI object for the given file.
- *
- * @param aFile
- *        The nsIFile of the URI to create.
- * @returns an nsIURI representing aFile.
- */
-function uri(aFile)
-{
-  return Cc["@mozilla.org/network/io-service;1"].
-         getService(Ci.nsIIOService).
-         newFileURI(aFile);
-}
-
-/**
- * Checks to ensure a URI string is in download history or not.
- *
- * @param aURIString
- *        The string of the URI to check.
- * @param aIsActive
- *        True if the URI should be actively downloaded, false otherwise.
- */
-function check_active_download(aURIString, aIsActive)
-{
-  let dm = Cc["@mozilla.org/download-manager;1"].
-           getService(Ci.nsIDownloadManager);
-  let enumerator = dm.activeDownloads;
-  let found = false;
-  while (enumerator.hasMoreElements()) {
-    let dl = enumerator.getNext().QueryInterface(Ci.nsIDownload);
-    if (dl.source.spec == aURIString)
-      found = true;
-  }
-  let checker = aIsActive ? do_check_true : do_check_false;
-  checker(found);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-//// Test Functions
-
-let destFile = dirSvc.get("TmpD", Ci.nsIFile);
-destFile.append("dm-test-file");
-destFile = uri(destFile);
-let data = [
-  { source: "http://mozilla.org/direct_match",
-    target: destFile.spec,
-    removed: true
-  },
-  { source: "http://www.mozilla.org/subdomain",
-    target: destFile.spec,
-    removed: true
-  },
-  { source: "http://ilovemozilla.org/contains_domain",
-    target: destFile.spec,
-    removed: false
-  },
-];
-
-function do_test()
-{
-  // We add this data to the database first, but we cannot instantiate the
-  // download manager service, otherwise these downloads will not be placed in
-  // the active downloads array.
-
-  // Copy the empty downloads database to our profile directory
-  let downloads = do_get_file("downloads.empty.sqlite");
-  downloads.copyTo(dirSvc.get("ProfD", Ci.nsIFile), "downloads.sqlite");
-
-  // Open the database
-  let ss = Cc["@mozilla.org/storage/service;1"].
-           getService(Ci.mozIStorageService);
-  let file = dirSvc.get("ProfD", Ci.nsIFile);
-  file.append("downloads.sqlite");
-  let db = ss.openDatabase(file);
-
-  // Insert the data
-  let stmt = db.createStatement(
-    "INSERT INTO moz_downloads (source, target, state, autoResume, entityID) " +
-    "VALUES (:source, :target, :state, :autoResume, :entityID)"
-  );
-  for (let i = 0; i < data.length; i++) {
-    stmt.params.source = data[i].source;
-    stmt.params.target = data[i].target;
-    stmt.params.state = Ci.nsIDownloadManager.DOWNLOAD_PAUSED;
-    stmt.params.autoResume = 0; // DONT_RESUME is 0
-    stmt.params.entityID = "foo" // just has to be non-null for our test
-    stmt.execute();
-    stmt.reset();
-  }
-  stmt.finalize();
-  stmt = null;
-  db.close();
-  db = null;
-
-  // Check to make sure it's all there
-  for (let i = 0; i < data.length; i++)
-    check_active_download(data[i].source, true);
-
-  // Dispatch the remove call
-  pb.removeDataFromDomain("mozilla.org");
-
-  // And check our data
-  for (let i = 0; i < data.length; i++)
-    check_active_download(data[i].source, !data[i].removed);
-}
deleted file mode 100644
--- a/browser/components/privatebrowsing/test/unit/test_privatebrowsingwrapper_removeDataFromDomain.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: sw=2 ts=2 sts=2
- * 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/. */
-
-/**
- * Test added with bug 460086 to test the behavior of the new API that was added
- * to remove all traces of visiting a site.
- */
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-function run_test() {
-  PRIVATEBROWSING_CONTRACT_ID = "@mozilla.org/privatebrowsing-wrapper;1";
-  load("do_test_removeDataFromDomain.js");
-  do_test();
-
-  // Shutdown the download manager.
-  Services.obs.notifyObservers(null, "quit-application", null);
-}
deleted file mode 100644
--- a/browser/components/privatebrowsing/test/unit/test_privatebrowsingwrapper_removeDataFromDomain_activeDownloads.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
- * vim: sw=2 ts=2 sts=2
- * 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/. */
-
-/**
- * Test added with bug 460086 to test the behavior of the new API that was added
- * to remove all traces of visiting a site.
- */
-
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-function run_test() {
-  PRIVATEBROWSING_CONTRACT_ID = "@mozilla.org/privatebrowsing;1";
-  load("do_test_removeDataFromDomain_activeDownloads.js");
-  do_test();
-
-  // Shutdown the download manager.
-  Services.obs.notifyObservers(null, "quit-application", null);
-}
--- a/browser/components/privatebrowsing/test/unit/test_removeDataFromDomain.js
+++ b/browser/components/privatebrowsing/test/unit/test_removeDataFromDomain.js
@@ -4,18 +4,629 @@
  * 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/. */
 
 /**
  * Test added with bug 460086 to test the behavior of the new API that was added
  * to remove all traces of visiting a site.
  */
 
-Components.utils.import("resource://gre/modules/Services.jsm");
+////////////////////////////////////////////////////////////////////////////////
+//// Globals
+
+Cu.import("resource://gre/modules/Services.jsm");
+Cu.import("resource://gre/modules/PlacesUtils.jsm");
+Cu.import("resource://gre/modules/ClearRecentHistory.jsm");
+
+const COOKIE_EXPIRY = Math.round(Date.now() / 1000) + 60;
+const COOKIE_NAME = "testcookie";
+const COOKIE_PATH = "/";
+
+const LOGIN_USERNAME = "username";
+const LOGIN_PASSWORD = "password";
+const LOGIN_USERNAME_FIELD = "username_field";
+const LOGIN_PASSWORD_FIELD = "password_field";
+
+const PERMISSION_TYPE = "test-perm";
+const PERMISSION_VALUE = Ci.nsIPermissionManager.ALLOW_ACTION;
+
+const PREFERENCE_NAME = "test-pref";
+
+////////////////////////////////////////////////////////////////////////////////
+//// Utility Functions
+
+/**
+ * Creates an nsIURI object for the given string representation of a URI.
+ *
+ * @param aURIString
+ *        The spec of the URI to create.
+ * @returns an nsIURI representing aURIString.
+ */
+function uri(aURIString)
+{
+  return Cc["@mozilla.org/network/io-service;1"].
+         getService(Ci.nsIIOService).
+         newURI(aURIString, null, null);
+}
+
+/**
+ * Adds a visit to history.
+ *
+ * @param aURI
+ *        The URI to add.
+ */
+function add_visit(aURI)
+{
+  check_visited(aURI, false);
+  PlacesUtils.history.addVisit(aURI, Date.now() * 1000, null,
+                               Ci.nsINavHistoryService.TRANSITION_LINK, false,
+                               0);
+  check_visited(aURI, true);
+}
+
+/**
+ * Checks to ensure a URI string is visited or not.
+ *
+ * @param aURI
+ *        The URI to check.
+ * @param aIsVisited
+ *        True if the URI should be visited, false otherwise.
+ */
+function check_visited(aURI, aIsVisited)
+{
+  let checker = aIsVisited ? do_check_true : do_check_false;
+  checker(PlacesUtils.ghistory2.isVisited(aURI));
+}
+
+/**
+ * Add a cookie to the cookie service.
+ *
+ * @param aDomain
+ */
+function add_cookie(aDomain)
+{
+  check_cookie_exists(aDomain, false);
+  let cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
+  cm.add(aDomain, COOKIE_PATH, COOKIE_NAME, "", false, false, false,
+         COOKIE_EXPIRY);
+  check_cookie_exists(aDomain, true);
+}
+
+/**
+ * Checks to ensure that a cookie exists or not for a domain.
+ *
+ * @param aDomain
+ *        The domain to check for the cookie.
+ * @param aExists
+ *        True if the cookie should exist, false otherwise.
+ */
+function check_cookie_exists(aDomain, aExists)
+{
+  let cm = Cc["@mozilla.org/cookiemanager;1"].getService(Ci.nsICookieManager2);
+  let cookie = {
+    host: aDomain,
+    name: COOKIE_NAME,
+    path: COOKIE_PATH
+  }
+  let checker = aExists ? do_check_true : do_check_false;
+  checker(cm.cookieExists(cookie));
+}
+
+/**
+ * Adds a download to download history.
+ *
+ * @param aURIString
+ *        The string of the URI to add.
+ * @param aIsActive
+ *        If it should be set to an active state in the database.  This does not
+ *        make it show up in the list of active downloads however!
+ */
+function add_download(aURIString, aIsActive)
+{
+  check_downloaded(aURIString, false);
+  let db = Cc["@mozilla.org/download-manager;1"].
+           getService(Ci.nsIDownloadManager).
+           DBConnection;
+  let stmt = db.createStatement(
+    "INSERT INTO moz_downloads (source, state) " +
+    "VALUES (:source, :state)"
+  );
+  stmt.params.source = aURIString;
+  stmt.params.state = aIsActive ? Ci.nsIDownloadManager.DOWNLOAD_DOWNLOADING :
+                                  Ci.nsIDownloadManager.DOWNLOAD_FINISHED;
+  try {
+    stmt.execute();
+  }
+  finally {
+    stmt.finalize();
+  }
+  check_downloaded(aURIString, true);
+}
+
+/**
+ * Checks to ensure a URI string is in download history or not.
+ *
+ * @param aURIString
+ *        The string of the URI to check.
+ * @param aIsDownloaded
+ *        True if the URI should be downloaded, false otherwise.
+ */
+function check_downloaded(aURIString, aIsDownloaded)
+{
+  let db = Cc["@mozilla.org/download-manager;1"].
+           getService(Ci.nsIDownloadManager).
+           DBConnection;
+  let stmt = db.createStatement(
+    "SELECT * " +
+    "FROM moz_downloads " +
+    "WHERE source = :source"
+  );
+  stmt.params.source = aURIString;
+
+  let checker = aIsDownloaded ? do_check_true : do_check_false;
+  try {
+    checker(stmt.executeStep());
+  }
+  finally {
+    stmt.finalize();
+  }
+}
+
+/**
+ * Adds a disabled host to the login manager.
+ *
+ * @param aHost
+ *        The host to add to the list of disabled hosts.
+ */
+function add_disabled_host(aHost)
+{
+  check_disabled_host(aHost, false);
+  let lm = Cc["@mozilla.org/login-manager;1"].
+           getService(Ci.nsILoginManager);
+  lm.setLoginSavingEnabled(aHost, false);
+  check_disabled_host(aHost, true);
+}
+
+/**
+ * Checks to see if a host is disabled for storing logins or not.
+ *
+ * @param aHost
+ *        The host to check if it is disabled.
+ * @param aIsDisabled
+ *        True if the host should be disabled, false otherwise.
+ */
+function check_disabled_host(aHost, aIsDisabled)
+{
+  let lm = Cc["@mozilla.org/login-manager;1"].
+           getService(Ci.nsILoginManager);
+  let checker = aIsDisabled ? do_check_false : do_check_true;
+  checker(lm.getLoginSavingEnabled(aHost));
+}
+
+/**
+ * Adds a login for the specified host to the login manager.
+ *
+ * @param aHost
+ *        The host to add the login for.
+ */
+function add_login(aHost)
+{
+  check_login_exists(aHost, false);
+  let login = Cc["@mozilla.org/login-manager/loginInfo;1"].
+              createInstance(Ci.nsILoginInfo);
+  login.init(aHost, "", null, LOGIN_USERNAME, LOGIN_PASSWORD,
+             LOGIN_USERNAME_FIELD, LOGIN_PASSWORD_FIELD);
+  let lm = Cc["@mozilla.org/login-manager;1"].
+           getService(Ci.nsILoginManager);
+  lm.addLogin(login);
+  check_login_exists(aHost, true);
+}
+
+/**
+ * Checks to see if a login exists for a host.
+ *
+ * @param aHost
+ *        The host to check for the test login.
+ * @param aExists
+ *        True if the login should exist, false otherwise.
+ */
+function check_login_exists(aHost, aExists)
+{
+  let lm = Cc["@mozilla.org/login-manager;1"].
+           getService(Ci.nsILoginManager);
+  let count = { value: 0 };
+  lm.findLogins(count, aHost, "", null);
+  do_check_eq(count.value, aExists ? 1 : 0);
+}
+
+/**
+ * Adds a permission for the specified URI to the permission manager.
+ *
+ * @param aURI
+ *        The URI to add the test permission for.
+ */
+function add_permission(aURI)
+{
+  check_permission_exists(aURI, false);
+  let pm = Cc["@mozilla.org/permissionmanager;1"].
+           getService(Ci.nsIPermissionManager);
+  let principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
+                    .getService(Ci.nsIScriptSecurityManager)
+                    .getNoAppCodebasePrincipal(aURI);
+
+  pm.addFromPrincipal(principal, PERMISSION_TYPE, PERMISSION_VALUE);
+  check_permission_exists(aURI, true);
+}
+
+/**
+ * Checks to see if a permission exists for the given URI.
+ *
+ * @param aURI
+ *        The URI to check if a permission exists.
+ * @param aExists
+ *        True if the permission should exist, false otherwise.
+ */
+function check_permission_exists(aURI, aExists)
+{
+  let pm = Cc["@mozilla.org/permissionmanager;1"].
+           getService(Ci.nsIPermissionManager);
+  let principal = Cc["@mozilla.org/scriptsecuritymanager;1"]
+                    .getService(Ci.nsIScriptSecurityManager)
+                    .getNoAppCodebasePrincipal(aURI);
+
+  let perm = pm.testExactPermissionFromPrincipal(principal, PERMISSION_TYPE);
+  let checker = aExists ? do_check_eq : do_check_neq;
+  checker(perm, PERMISSION_VALUE);
+}
+
+/**
+ * Adds a content preference for the specified URI.
+ *
+ * @param aURI
+ *        The URI to add a preference for.
+ */
+function add_preference(aURI)
+{
+  check_preference_exists(aURI, false);
+  let cp = Cc["@mozilla.org/content-pref/service;1"].
+           getService(Ci.nsIContentPrefService);
+  cp.setPref(aURI, PREFERENCE_NAME, "foo");
+  check_preference_exists(aURI, true);
+}
+
+/**
+ * Checks to see if a preference exists for the given URI.
+ *
+ * @param aURI
+ *        The URI to check if a preference exists.
+ * @param aExists
+ *        True if the permission should exist, false otherwise.
+ */
+function check_preference_exists(aURI, aExists)
+{
+  let cp = Cc["@mozilla.org/content-pref/service;1"].
+           getService(Ci.nsIContentPrefService);
+  let checker = aExists ? do_check_true : do_check_false;
+  checker(cp.hasPref(aURI, PREFERENCE_NAME));
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//// Test Functions
 
-function run_test() {
-  PRIVATEBROWSING_CONTRACT_ID = "@mozilla.org/privatebrowsing;1";
-  load("do_test_removeDataFromDomain.js");
-  do_test();
+// History
+function test_history_cleared_with_direct_match()
+{
+  const TEST_URI = uri("http://mozilla.org/foo");
+  add_visit(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_visited(TEST_URI, false);
+}
+
+function test_history_cleared_with_subdomain()
+{
+  const TEST_URI = uri("http://www.mozilla.org/foo");
+  add_visit(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_visited(TEST_URI, false);
+}
+
+function test_history_not_cleared_with_uri_contains_domain()
+{
+  const TEST_URI = uri("http://ilovemozilla.org/foo");
+  add_visit(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_visited(TEST_URI, true);
+
+  // Clear history since we left something there from this test.
+  PlacesUtils.bhistory.removeAllPages();
+}
+
+// Cookie Service
+function test_cookie_cleared_with_direct_match()
+{
+  const TEST_DOMAIN = "mozilla.org";
+  add_cookie(TEST_DOMAIN);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_cookie_exists(TEST_DOMAIN, false);
+}
+
+function test_cookie_cleared_with_subdomain()
+{
+  const TEST_DOMAIN = "www.mozilla.org";
+  add_cookie(TEST_DOMAIN);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_cookie_exists(TEST_DOMAIN, false);
+}
+
+function test_cookie_not_cleared_with_uri_contains_domain()
+{
+  const TEST_DOMAIN = "ilovemozilla.org";
+  add_cookie(TEST_DOMAIN);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_cookie_exists(TEST_DOMAIN, true);
+}
+
+// Download Manager
+function test_download_history_cleared_with_direct_match()
+{
+  const TEST_URI = "http://mozilla.org/foo";
+  add_download(TEST_URI, false);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_downloaded(TEST_URI, false);
+}
+
+function test_download_history_cleared_with_subdomain()
+{
+  const TEST_URI = "http://www.mozilla.org/foo";
+  add_download(TEST_URI, false);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_downloaded(TEST_URI, false);
+}
+
+function test_download_history_not_cleared_with_active_direct_match()
+{
+  // Tests that downloads marked as active in the db are not deleted from the db
+  const TEST_URI = "http://mozilla.org/foo";
+  add_download(TEST_URI, true);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_downloaded(TEST_URI, true);
+
+  // Reset state
+  let db = Cc["@mozilla.org/download-manager;1"].
+           getService(Ci.nsIDownloadManager).
+           DBConnection;
+  db.executeSimpleSQL("DELETE FROM moz_downloads");
+  check_downloaded(TEST_URI, false);
+}
+
+// Login Manager
+function test_login_manager_disabled_hosts_cleared_with_direct_match()
+{
+  const TEST_HOST = "http://mozilla.org";
+  add_disabled_host(TEST_HOST);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_disabled_host(TEST_HOST, false);
+}
+
+function test_login_manager_disabled_hosts_cleared_with_subdomain()
+{
+  const TEST_HOST = "http://www.mozilla.org";
+  add_disabled_host(TEST_HOST);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_disabled_host(TEST_HOST, false);
+}
+
+function test_login_manager_disabled_hosts_not_cleared_with_uri_contains_domain()
+{
+  const TEST_HOST = "http://ilovemozilla.org";
+  add_disabled_host(TEST_HOST);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_disabled_host(TEST_HOST, true);
+
+  // Reset state
+  let lm = Cc["@mozilla.org/login-manager;1"].
+           getService(Ci.nsILoginManager);
+  lm.setLoginSavingEnabled(TEST_HOST, true);
+  check_disabled_host(TEST_HOST, false);
+}
+
+function test_login_manager_logins_cleared_with_direct_match()
+{
+  const TEST_HOST = "http://mozilla.org";
+  add_login(TEST_HOST);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_login_exists(TEST_HOST, false);
+}
+
+function test_login_manager_logins_cleared_with_subdomain()
+{
+  const TEST_HOST = "http://www.mozilla.org";
+  add_login(TEST_HOST);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_login_exists(TEST_HOST, false);
+}
+
+function tets_login_manager_logins_not_cleared_with_uri_contains_domain()
+{
+  const TEST_HOST = "http://ilovemozilla.org";
+  add_login(TEST_HOST);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_login_exists(TEST_HOST, true);
+
+  let lm = Cc["@mozilla.org/login-manager;1"].
+           getService(Ci.nsILoginManager);
+  lm.removeAllLogins();
+  check_login_exists(TEST_HOST, false);
+}
+
+// Permission Manager
+function test_permission_manager_cleared_with_direct_match()
+{
+  const TEST_URI = uri("http://mozilla.org");
+  add_permission(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_permission_exists(TEST_URI, false);
+}
+
+function test_permission_manager_cleared_with_subdomain()
+{
+  const TEST_URI = uri("http://www.mozilla.org");
+  add_permission(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_permission_exists(TEST_URI, false);
+}
+
+function test_permission_manager_not_cleared_with_uri_contains_domain()
+{
+  const TEST_URI = uri("http://ilovemozilla.org");
+  add_permission(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_permission_exists(TEST_URI, true);
+
+  // Reset state
+  let pm = Cc["@mozilla.org/permissionmanager;1"].
+           getService(Ci.nsIPermissionManager);
+  pm.removeAll();
+  check_permission_exists(TEST_URI, false);
+}
+
+// Content Preferences
+function test_content_preferences_cleared_with_direct_match()
+{
+  const TEST_URI = uri("http://mozilla.org");
+  add_preference(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_preference_exists(TEST_URI, false);
+}
+
+function test_content_preferences_cleared_with_subdomain()
+{
+  const TEST_URI = uri("http://www.mozilla.org");
+  add_preference(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_preference_exists(TEST_URI, false);
+}
+
+function test_content_preferecnes_not_cleared_with_uri_contains_domain()
+{
+  const TEST_URI = uri("http://ilovemozilla.org");
+  add_preference(TEST_URI);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  check_preference_exists(TEST_URI, true);
+
+  // Reset state
+  let cp = Cc["@mozilla.org/content-pref/service;1"].
+           getService(Ci.nsIContentPrefService);
+  cp.removePref(TEST_URI, PREFERENCE_NAME);
+  check_preference_exists(TEST_URI, false);
+}
+
+// Cache
+function test_cache_cleared()
+{
+  // Because this test is asynchronous, it should be the last test
+  do_check_eq(tests[tests.length - 1], arguments.callee);
+
+  // NOTE: We could be more extensive with this test and actually add an entry
+  //       to the cache, and then make sure it is gone.  However, we trust that
+  //       the API is well tested, and that when we get the observer
+  //       notification, we have actually cleared the cache.
+  // This seems to happen asynchronously...
+  let os = Cc["@mozilla.org/observer-service;1"].
+           getService(Ci.nsIObserverService);
+  let observer = {
+    observe: function(aSubject, aTopic, aData)
+    {
+      os.removeObserver(observer, "cacheservice:empty-cache");
+      do_test_finished();
+    }
+  };
+  os.addObserver(observer, "cacheservice:empty-cache", false);
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+  do_test_pending();
+}
+
+function test_storage_cleared()
+{
+  function getStorageForURI(aURI)
+  {
+    let principal = Cc["@mozilla.org/scriptsecuritymanager;1"].
+                    getService(Ci.nsIScriptSecurityManager).
+                    getNoAppCodebasePrincipal(aURI);
+    let dsm = Cc["@mozilla.org/dom/storagemanager;1"].
+              getService(Ci.nsIDOMStorageManager);
+    return dsm.getLocalStorageForPrincipal(principal, "");
+  }
+
+  let s = [
+    getStorageForURI(uri("http://mozilla.org")),
+    getStorageForURI(uri("http://my.mozilla.org")),
+    getStorageForURI(uri("http://ilovemozilla.org")),
+  ];
+
+  for (let i = 0; i < s.length; ++i) {
+    let storage = s[i];
+    storage.setItem("test", "value" + i);
+    do_check_eq(storage.length, 1);
+    do_check_eq(storage.key(0), "test");
+    do_check_eq(storage.getItem("test"), "value" + i);
+  }
+
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+
+  do_check_eq(s[0].getItem("test"), null);
+  do_check_eq(s[0].length, 0);
+  do_check_eq(s[1].getItem("test"), null);
+  do_check_eq(s[1].length, 0);
+  do_check_eq(s[2].getItem("test"), "value2");
+  do_check_eq(s[2].length, 1);
+}
+
+let tests = [
+  // History
+  test_history_cleared_with_direct_match,
+  test_history_cleared_with_subdomain,
+  test_history_not_cleared_with_uri_contains_domain,
+
+  // Cookie Service
+  test_cookie_cleared_with_direct_match,
+  test_cookie_cleared_with_subdomain,
+  test_cookie_not_cleared_with_uri_contains_domain,
+
+  // Download Manager
+  // Note: active downloads tested in test_removeDataFromDomain_activeDownloads.js
+  test_download_history_cleared_with_direct_match,
+  test_download_history_cleared_with_subdomain,
+  test_download_history_not_cleared_with_active_direct_match,
+
+  // Login Manager
+  test_login_manager_disabled_hosts_cleared_with_direct_match,
+  test_login_manager_disabled_hosts_cleared_with_subdomain,
+  test_login_manager_disabled_hosts_not_cleared_with_uri_contains_domain,
+  test_login_manager_logins_cleared_with_direct_match,
+  test_login_manager_logins_cleared_with_subdomain,
+  tets_login_manager_logins_not_cleared_with_uri_contains_domain,
+
+  // Permission Manager
+  test_permission_manager_cleared_with_direct_match,
+  test_permission_manager_cleared_with_subdomain,
+  test_permission_manager_not_cleared_with_uri_contains_domain,
+
+  // Content Preferences
+  test_content_preferences_cleared_with_direct_match,
+  test_content_preferences_cleared_with_subdomain,
+  test_content_preferecnes_not_cleared_with_uri_contains_domain,
+
+  // Storage
+  test_storage_cleared,
+
+  // Cache
+  test_cache_cleared,
+];
+
+function run_test()
+{
+  for (let i = 0; i < tests.length; i++)
+    tests[i]();
 
   // Shutdown the download manager.
   Services.obs.notifyObservers(null, "quit-application", null);
 }
--- a/browser/components/privatebrowsing/test/unit/test_removeDataFromDomain_activeDownloads.js
+++ b/browser/components/privatebrowsing/test/unit/test_removeDataFromDomain_activeDownloads.js
@@ -5,17 +5,121 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 /**
  * Test added with bug 460086 to test the behavior of the new API that was added
  * to remove all traces of visiting a site.
  */
 
 Components.utils.import("resource://gre/modules/Services.jsm");
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
 
-function run_test() {
-  PRIVATEBROWSING_CONTRACT_ID = "@mozilla.org/privatebrowsing;1";
-  load("do_test_removeDataFromDomain_activeDownloads.js");
-  do_test();
+////////////////////////////////////////////////////////////////////////////////
+//// Utility Functions
+
+/**
+ * Creates an nsIURI object for the given file.
+ *
+ * @param aFile
+ *        The nsIFile of the URI to create.
+ * @returns an nsIURI representing aFile.
+ */
+function uri(aFile)
+{
+  return Cc["@mozilla.org/network/io-service;1"].
+         getService(Ci.nsIIOService).
+         newFileURI(aFile);
+}
+
+/**
+ * Checks to ensure a URI string is in download history or not.
+ *
+ * @param aURIString
+ *        The string of the URI to check.
+ * @param aIsActive
+ *        True if the URI should be actively downloaded, false otherwise.
+ */
+function check_active_download(aURIString, aIsActive)
+{
+  let dm = Cc["@mozilla.org/download-manager;1"].
+           getService(Ci.nsIDownloadManager);
+  let enumerator = dm.activeDownloads;
+  let found = false;
+  while (enumerator.hasMoreElements()) {
+    let dl = enumerator.getNext().QueryInterface(Ci.nsIDownload);
+    if (dl.source.spec == aURIString)
+      found = true;
+  }
+  let checker = aIsActive ? do_check_true : do_check_false;
+  checker(found);
+}
+
+////////////////////////////////////////////////////////////////////////////////
+//// Test Functions
+
+let destFile = dirSvc.get("TmpD", Ci.nsIFile);
+destFile.append("dm-test-file");
+destFile = uri(destFile);
+let data = [
+  { source: "http://mozilla.org/direct_match",
+    target: destFile.spec,
+    removed: true
+  },
+  { source: "http://www.mozilla.org/subdomain",
+    target: destFile.spec,
+    removed: true
+  },
+  { source: "http://ilovemozilla.org/contains_domain",
+    target: destFile.spec,
+    removed: false
+  },
+];
+
+function run_test()
+{
+  // We add this data to the database first, but we cannot instantiate the
+  // download manager service, otherwise these downloads will not be placed in
+  // the active downloads array.
+
+  // Copy the empty downloads database to our profile directory
+  let downloads = do_get_file("downloads.empty.sqlite");
+  downloads.copyTo(dirSvc.get("ProfD", Ci.nsIFile), "downloads.sqlite");
+
+  // Open the database
+  let ss = Cc["@mozilla.org/storage/service;1"].
+           getService(Ci.mozIStorageService);
+  let file = dirSvc.get("ProfD", Ci.nsIFile);
+  file.append("downloads.sqlite");
+  let db = ss.openDatabase(file);
+
+  // Insert the data
+  let stmt = db.createStatement(
+    "INSERT INTO moz_downloads (source, target, state, autoResume, entityID) " +
+    "VALUES (:source, :target, :state, :autoResume, :entityID)"
+  );
+  for (let i = 0; i < data.length; i++) {
+    stmt.params.source = data[i].source;
+    stmt.params.target = data[i].target;
+    stmt.params.state = Ci.nsIDownloadManager.DOWNLOAD_PAUSED;
+    stmt.params.autoResume = 0; // DONT_RESUME is 0
+    stmt.params.entityID = "foo" // just has to be non-null for our test
+    stmt.execute();
+    stmt.reset();
+  }
+  stmt.finalize();
+  stmt = null;
+  db.close();
+  db = null;
+
+  // Check to make sure it's all there
+  for (let i = 0; i < data.length; i++)
+    check_active_download(data[i].source, true);
+
+  // Dispatch the remove call
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
+
+  // And check our data
+  for (let i = 0; i < data.length; i++)
+    check_active_download(data[i].source, !data[i].removed);
 
   // Shutdown the download manager.
   Services.obs.notifyObservers(null, "quit-application", null);
 }
--- a/browser/components/privatebrowsing/test/unit/xpcshell.ini
+++ b/browser/components/privatebrowsing/test/unit/xpcshell.ini
@@ -11,14 +11,12 @@ tail = tail_privatebrowsing.js
 [test_privatebrowsing_autostart.js]
 [test_privatebrowsing_commandline.js]
 [test_privatebrowsing_exit.js]
 [test_privatebrowsing_telemetry.js]
 [test_privatebrowsingwrapper_autostart.js]
 [test_privatebrowsingwrapper_commandline.js]
 [test_privatebrowsingwrapper_exit.js]
 [test_privatebrowsingwrapper_placesTitleNoUpdate.js]
-[test_privatebrowsingwrapper_removeDataFromDomain.js]
-[test_privatebrowsingwrapper_removeDataFromDomain_activeDownloads.js]
 [test_privatebrowsingwrapper_telemetry.js]
 [test_removeDataFromDomain.js]
 [test_removeDataFromDomain_activeDownloads.js]
 [test_transition_nooffline.js]
--- a/browser/components/sessionstore/test/browser_394759_purge.js
+++ b/browser/components/sessionstore/test/browser_394759_purge.js
@@ -1,15 +1,15 @@
 /* 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/. */
 
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
+
 function test() {
-  let pb = Cc["@mozilla.org/privatebrowsing;1"].getService(Ci.nsIPrivateBrowsingService);
-
   // utility functions
   function countClosedTabsByTitle(aClosedTabList, aTitle)
     aClosedTabList.filter(function (aData) aData.title == aTitle).length;
 
   function countOpenTabsByTitle(aOpenTabList, aTitle)
     aOpenTabList.filter(function (aData) aData.entries.some(function (aEntry) aEntry.title == aTitle)).length
 
   // backup old state
@@ -74,17 +74,17 @@ function test() {
       }
     ]
   };
 
   // set browser to test state
   ss.setBrowserState(JSON.stringify(testState));
 
   // purge domain & check that we purged correctly for closed windows
-  pb.removeDataFromDomain("mozilla.org");
+  ClearRecentHistory.removeDataFromDomain("mozilla.org");
 
   let closedWindowData = JSON.parse(ss.getClosedWindowData());
 
   // First set of tests for _closedWindows[0] - tests basics
   let win = closedWindowData[0];
   is(win.tabs.length, 1, "1 tab was removed");
   is(countOpenTabsByTitle(win.tabs, FORGET), 0,
      "The correct tab was removed");
--- a/browser/components/sessionstore/test/browser_464199.js
+++ b/browser/components/sessionstore/test/browser_464199.js
@@ -1,12 +1,14 @@
 /* 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/. */
 
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
+
 function test() {
   /** Test for Bug 464199 **/
 
   waitForExplicitFinish();
 
   const REMEMBER = Date.now(), FORGET = Math.random();
   let test_state = { windows: [{ "tabs": [{ "entries": [] }], _closedTabs: [
     { state: { entries: [{ url: "http://www.example.net/" }] }, title: FORGET },
@@ -51,19 +53,17 @@ function test() {
     is(closedTabs.length, test_state.windows[0]._closedTabs.length,
        "Closed tab list has the expected length");
     is(countByTitle(closedTabs, FORGET),
        test_state.windows[0]._closedTabs.length - remember_count,
        "The correct amout of tabs are to be forgotten");
     is(countByTitle(closedTabs, REMEMBER), remember_count,
        "Everything is set up.");
 
-    let pb = Cc["@mozilla.org/privatebrowsing;1"].
-             getService(Ci.nsIPrivateBrowsingService);
-    pb.removeDataFromDomain("example.net");
+    ClearRecentHistory.removeDataFromDomain("example.net");
 
     closedTabs = JSON.parse(ss.getClosedTabData(newWin));
     is(closedTabs.length, remember_count,
        "The correct amout of tabs was removed");
     is(countByTitle(closedTabs, FORGET), 0,
        "All tabs to be forgotten were indeed removed");
     is(countByTitle(closedTabs, REMEMBER), remember_count,
        "... and tabs to be remembered weren't.");
--- a/browser/themes/pinstripe/browser.css
+++ b/browser/themes/pinstripe/browser.css
@@ -1475,17 +1475,17 @@ window[tabsontop="false"] richlistitem[t
 
   .ac-result-type-tag {
     list-style-image: url("chrome://browser/skin/places/tag@2x.png");
   }
 
   richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-icon {
     list-style-image: url("chrome://browser/skin/actionicon-tab@2x.png");
     -moz-image-region: rect(0, 32px, 22px, 0);
-    width: 16px;
+    width: 22px;
   }
 
   richlistitem[type~="action"][actiontype="switchtab"][selected="true"] > .ac-url-box > .ac-action-icon {
     -moz-image-region: rect(22px, 32px, 44px, 0);
   }
 
   window[tabsontop="false"] richlistitem[type~="action"][actiontype="switchtab"] > .ac-url-box > .ac-action-icon {
     -moz-image-region: rect(0, 64px, 22px, 32px);
--- a/configure.in
+++ b/configure.in
@@ -4201,17 +4201,17 @@ dnl ====================================
 
 MOZ_ARG_HEADER(Application)
 
 ENABLE_TESTS=1
 ENABLE_SYSTEM_EXTENSION_DIRS=1
 MOZ_BRANDING_DIRECTORY=
 MOZ_OFFICIAL_BRANDING=
 MOZ_FEEDS=1
-MOZ_FLEXBOX=
+MOZ_FLEXBOX=1
 MOZ_WEBAPP_RUNTIME=
 MOZ_JSDEBUGGER=1
 MOZ_AUTH_EXTENSION=1
 MOZ_OGG=1
 MOZ_RAW=
 MOZ_SYDNEYAUDIO=
 MOZ_SPEEX_RESAMPLER=1
 MOZ_CUBEB=
--- a/content/base/public/Makefile.in
+++ b/content/base/public/Makefile.in
@@ -60,16 +60,17 @@ EXPORTS_mozilla = \
 
 SDK_XPIDLSRCS   = \
 		nsISelection.idl  \
 		$(NULL)
 
 XPIDLSRCS	= \
 		nsIContentPolicy.idl        \
 		nsIDocumentEncoder.idl      \
+	        nsIDOMDataChannel.idl \
 		nsIDOMFile.idl \
 		nsIDOMFileReader.idl \
 		nsIDOMFileList.idl \
 		nsIDOMFormData.idl \
 		nsIDOMParser.idl \
 		nsIDOMSerializer.idl \
 		nsISelectionController.idl  \
 		nsISelectionDisplay.idl  \
--- a/content/base/public/nsContentUtils.h
+++ b/content/base/public/nsContentUtils.h
@@ -1760,16 +1760,20 @@ public:
   }
 
   /**
    * Creates an arraybuffer from a binary string.
    */
   static nsresult CreateArrayBuffer(JSContext *aCx, const nsACString& aData,
                                     JSObject** aResult);
 
+  static nsresult CreateBlobBuffer(JSContext* aCx,
+                                   const nsACString& aData,
+                                   jsval& aBlob);
+
   static void StripNullChars(const nsAString& aInStr, nsAString& aOutStr);
 
   /**
    * Strip all \n, \r and nulls from the given string
    * @param aString the string to remove newlines from [in/out]
    */
   static void RemoveNewlines(nsString &aString);
 
new file mode 100644
--- /dev/null
+++ b/content/base/public/nsIDOMDataChannel.idl
@@ -0,0 +1,35 @@
+#include "domstubs.idl"
+
+#include "nsIDOMEventTarget.idl"
+
+interface nsIVariant;
+
+[scriptable, builtinclass, uuid(fb7a8ec4-c1eb-4d9f-b927-fbb8b4493e6d)]
+interface nsIDOMDataChannel : nsIDOMEventTarget
+{
+  readonly attribute DOMString label;
+  readonly attribute boolean reliable;
+  readonly attribute boolean ordered;
+
+  readonly attribute DOMString readyState;
+  readonly attribute unsigned long bufferedAmount;
+
+  [implicit_jscontext] attribute jsval onopen;
+  [implicit_jscontext] attribute jsval onerror;
+  [implicit_jscontext] attribute jsval onclose;
+  [implicit_jscontext] attribute jsval onmessage;
+
+  attribute DOMString binaryType;
+
+  void close();
+
+  /**
+   * Transmits data to other end of the connection.
+   * @param data The data to be transmitted.  Arraybuffers and Blobs are sent as
+   * binary data.  Strings are sent as UTF-8 text data.  Other types are
+   * converted to a String and sent as a String.
+   * @return if the connection is still established and the data was queued or
+   *         sent successfully.
+   */
+  [implicit_jscontext] void send(in nsIVariant data);
+};
--- a/content/base/src/Makefile.in
+++ b/content/base/src/Makefile.in
@@ -132,16 +132,24 @@ CPPSRCS		= \
 		nsInProcessTabChildGlobal.cpp \
 		ThirdPartyUtil.cpp \
 		nsEventSource.cpp \
 		FileIOObject.cpp \
 		nsDOMMutationObserver.cpp \
 		nsMixedContentBlocker.cpp \
 		$(NULL)
 
+ifdef MOZ_WEBRTC
+EXPORTS += nsDOMDataChannel.h
+CPPSRCS += nsDOMDataChannel.cpp
+LOCAL_INCLUDES += \
+		-I$(topsrcdir)/netwerk/sctp/datachannel \
+		$(NULL)
+endif
+
 # Are we targeting x86-32 or x86-64?  If so, we want to include SSE2 code for
 # nsTextFragment.cpp
 ifneq (,$(INTEL_ARCHITECTURE))
 CPPSRCS += nsTextFragmentSSE2.cpp
 endif
 
 GQI_SRCS = contentbase.gqi
 
--- a/content/base/src/WebSocket.cpp
+++ b/content/base/src/WebSocket.cpp
@@ -895,17 +895,17 @@ WebSocket::CreateAndDispatchMessageEvent
   NS_ENSURE_TRUE(cx, NS_ERROR_FAILURE);
 
   // Create appropriate JS object for message
   jsval jsData;
   {
     JSAutoRequest ar(cx);
     if (isBinary) {
       if (mBinaryType == BinaryTypeValues::Blob) {
-        rv = CreateResponseBlob(aData, cx, jsData);
+        rv = nsContentUtils::CreateBlobBuffer(cx, aData, jsData);
         NS_ENSURE_SUCCESS(rv, rv);
       } else if (mBinaryType == BinaryTypeValues::Arraybuffer) {
         JSObject* arrayBuf;
         rv = nsContentUtils::CreateArrayBuffer(cx, aData, &arrayBuf);
         NS_ENSURE_SUCCESS(rv, rv);
         jsData = OBJECT_TO_JSVAL(arrayBuf);
       } else {
         NS_RUNTIMEABORT("Unknown binary type!");
@@ -938,36 +938,16 @@ WebSocket::CreateAndDispatchMessageEvent
   NS_ENSURE_SUCCESS(rv, rv);
 
   rv = event->SetTrusted(true);
   NS_ENSURE_SUCCESS(rv, rv);
 
   return DispatchDOMEvent(nullptr, event, nullptr, nullptr);
 }
 
-// Initial implementation: only stores to RAM, not file
-// TODO: bug 704447: large file support
-nsresult
-WebSocket::CreateResponseBlob(const nsACString& aData,
-                              JSContext *aCx,
-                              jsval &jsData)
-{
-  uint32_t blobLen = aData.Length();
-  void* blobData = PR_Malloc(blobLen);
-  nsCOMPtr<nsIDOMBlob> blob;
-  if (blobData) {
-    memcpy(blobData, aData.BeginReading(), blobLen);
-    blob = new nsDOMMemoryFile(blobData, blobLen, EmptyString());
-  } else {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-  JSObject* scope = JS_GetGlobalForScopeChain(aCx);
-  return nsContentUtils::WrapNative(aCx, scope, blob, &jsData, nullptr, true);
-}
-
 nsresult
 WebSocket::CreateAndDispatchCloseEvent(bool aWasClean,
                                        uint16_t aCode,
                                        const nsString &aReason)
 {
   NS_ABORT_IF_FALSE(NS_IsMainThread(), "Not running on main thread");
 
   nsresult rv = CheckInnerWindowCorrectness();
--- a/content/base/src/WebSocket.h
+++ b/content/base/src/WebSocket.h
@@ -223,19 +223,16 @@ protected:
 
   // These methods actually do the dispatch for various events.
   nsresult CreateAndDispatchSimpleEvent(const nsString& aName);
   nsresult CreateAndDispatchMessageEvent(const nsACString& aData,
                                          bool isBinary);
   nsresult CreateAndDispatchCloseEvent(bool aWasClean,
                                        uint16_t aCode,
                                        const nsString& aReason);
-  nsresult CreateResponseBlob(const nsACString& aData,
-                              JSContext* aCx,
-                              jsval& jsData);
 
   // if there are "strong event listeners" (see comment in WebSocket.cpp) or
   // outgoing not sent messages then this method keeps the object alive
   // when js doesn't have strong references to it.
   void UpdateMustKeepAlive();
   // ATTENTION, when calling this method the object can be released
   // (and possibly collected).
   void DontKeepAliveAnyMore();
--- a/content/base/src/nsContentUtils.cpp
+++ b/content/base/src/nsContentUtils.cpp
@@ -2690,21 +2690,17 @@ nsContentUtils::GetImgLoaderForDocument(
   if (loadGroup) {
     loadGroup->GetNotificationCallbacks(getter_AddRefs(callbacks));
     if (callbacks) {
       nsCOMPtr<nsILoadContext> loadContext = do_GetInterface(callbacks);
       isPrivate = loadContext && loadContext->UsePrivateBrowsing();
     }
   } else {
     nsCOMPtr<nsIChannel> channel = aDoc->GetChannel();
-    if (channel) {
-      nsCOMPtr<nsILoadContext> context;
-      NS_QueryNotificationCallbacks(channel, context);
-      isPrivate = context && context->UsePrivateBrowsing();
-    }
+    isPrivate = channel && NS_UsePrivateBrowsing(channel);
   }
   return isPrivate ? sPrivateImgLoader : sImgLoader;
 }
 
 // static
 imgILoader*
 nsContentUtils::GetImgLoaderForChannel(nsIChannel* aChannel)
 {
@@ -6202,16 +6198,36 @@ nsContentUtils::CreateArrayBuffer(JSCont
   if (dataLen > 0) {
     NS_ASSERTION(JS_IsArrayBufferObject(*aResult, aCx), "What happened?");
     memcpy(JS_GetArrayBufferData(*aResult, aCx), aData.BeginReading(), dataLen);
   }
 
   return NS_OK;
 }
 
+// Initial implementation: only stores to RAM, not file
+// TODO: bug 704447: large file support
+nsresult
+nsContentUtils::CreateBlobBuffer(JSContext* aCx,
+                                 const nsACString& aData,
+                                 jsval& aBlob)
+{
+  uint32_t blobLen = aData.Length();
+  void* blobData = PR_Malloc(blobLen);
+  nsCOMPtr<nsIDOMBlob> blob;
+  if (blobData) {
+    memcpy(blobData, aData.BeginReading(), blobLen);
+    blob = new nsDOMMemoryFile(blobData, blobLen, EmptyString());
+  } else {
+    return NS_ERROR_OUT_OF_MEMORY;
+  }
+  JSObject* scope = JS_GetGlobalForScopeChain(aCx);
+  return nsContentUtils::WrapNative(aCx, scope, blob, &aBlob, nullptr, true);
+}
+
 void
 nsContentUtils::StripNullChars(const nsAString& aInStr, nsAString& aOutStr)
 {
   // In common cases where we don't have nulls in the
   // string we can simple simply bypass the checking code.
   int32_t firstNullPos = aInStr.FindChar('\0');
   if (firstNullPos == kNotFound) {
     aOutStr.Assign(aInStr);
new file mode 100644
--- /dev/null
+++ b/content/base/src/nsDOMDataChannel.cpp
@@ -0,0 +1,512 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set sw=2 ts=8 et tw=80 : */
+/* 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/. */
+
+#ifdef MOZ_LOGGING
+#define FORCE_PR_LOG
+#endif
+
+#include "base/basictypes.h"
+#include "prlog.h"
+
+#ifdef PR_LOGGING
+extern PRLogModuleInfo* dataChannelLog;
+#endif
+#undef LOG
+#define LOG(args) PR_LOG(dataChannelLog, PR_LOG_DEBUG, args)
+
+
+#include "nsDOMDataChannel.h"
+#include "nsIDOMFile.h"
+#include "nsIJSNativeInitializer.h"
+#include "nsIDOMDataChannel.h"
+#include "nsIDOMMessageEvent.h"
+#include "nsDOMClassInfo.h"
+#include "nsDOMEventTargetHelper.h"
+
+#include "jsval.h"
+
+#include "nsError.h"
+#include "nsAutoPtr.h"
+#include "nsContentUtils.h"
+#include "nsCycleCollectionParticipant.h"
+#include "nsIScriptObjectPrincipal.h"
+#include "nsJSUtils.h"
+#include "nsNetUtil.h"
+#include "nsDOMFile.h"
+
+#include "DataChannel.h"
+
+#ifdef GetBinaryType
+// Windows apparently has a #define for GetBinaryType...
+#undef GetBinaryType
+#endif
+
+class nsDOMDataChannel : public nsDOMEventTargetHelper,
+                         public nsIDOMDataChannel,
+                         public mozilla::DataChannelListener
+{
+public:
+  nsDOMDataChannel(mozilla::DataChannel* aDataChannel)
+    : mDataChannel(aDataChannel)
+    , mBinaryType(DC_BINARY_TYPE_BLOB)
+  {}
+
+  nsresult Init(nsPIDOMWindow* aDOMWindow);
+
+  NS_DECL_ISUPPORTS_INHERITED
+  NS_DECL_NSIDOMDATACHANNEL
+
+  NS_FORWARD_NSIDOMEVENTTARGET(nsDOMEventTargetHelper::)
+
+  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(nsDOMDataChannel,
+                                           nsDOMEventTargetHelper)
+
+  nsresult
+  DoOnMessageAvailable(const nsACString& aMessage, bool aBinary);
+
+  virtual nsresult
+  OnMessageAvailable(nsISupports* aContext, const nsACString& aMessage);
+
+  virtual nsresult
+  OnBinaryMessageAvailable(nsISupports* aContext, const nsACString& aMessage);
+
+  virtual nsresult OnSimpleEvent(nsISupports* aContext, const nsAString& aName);
+
+  virtual nsresult
+  OnChannelConnected(nsISupports* aContext);
+
+  virtual nsresult
+  OnChannelClosed(nsISupports* aContext);
+
+  virtual void
+  AppReady();
+
+private:
+  // Get msg info out of JS variable being sent (string, arraybuffer, blob)
+  nsresult GetSendParams(nsIVariant *aData, nsCString &aStringOut,
+                         nsCOMPtr<nsIInputStream> &aStreamOut,
+                         bool &aIsBinary, uint32_t &aOutgoingLength,
+                         JSContext *aCx);
+
+  // Owning reference
+  nsAutoPtr<mozilla::DataChannel> mDataChannel;
+  nsString  mOrigin;
+  enum
+  {
+    DC_BINARY_TYPE_ARRAYBUFFER,
+    DC_BINARY_TYPE_BLOB,
+  } mBinaryType;
+};
+
+DOMCI_DATA(DataChannel, nsDOMDataChannel)
+
+NS_IMPL_CYCLE_COLLECTION_CLASS(nsDOMDataChannel)
+
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(nsDOMDataChannel,
+                                                  nsDOMEventTargetHelper)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
+
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(nsDOMDataChannel,
+                                                nsDOMEventTargetHelper)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_END
+
+NS_IMPL_ADDREF_INHERITED(nsDOMDataChannel, nsDOMEventTargetHelper)
+NS_IMPL_RELEASE_INHERITED(nsDOMDataChannel, nsDOMEventTargetHelper)
+
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION_INHERITED(nsDOMDataChannel)
+  NS_INTERFACE_MAP_ENTRY(nsIDOMDataChannel)
+  NS_DOM_INTERFACE_MAP_ENTRY_CLASSINFO(DataChannel)
+NS_INTERFACE_MAP_END_INHERITING(nsDOMEventTargetHelper)
+
+nsresult
+nsDOMDataChannel::Init(nsPIDOMWindow* aDOMWindow)
+{
+  nsresult rv;
+  nsAutoString urlParam;
+
+  nsDOMEventTargetHelper::Init();
+
+  MOZ_ASSERT(mDataChannel);
+  mDataChannel->SetListener(this, nullptr);
+
+  // Now grovel through the objects to get a usable origin for onMessage
+  nsCOMPtr<nsIScriptGlobalObject> sgo = do_QueryInterface(aDOMWindow);
+  NS_ENSURE_STATE(sgo);
+  nsCOMPtr<nsIScriptContext> scriptContext = sgo->GetContext();
+  NS_ENSURE_STATE(scriptContext);
+
+  nsCOMPtr<nsIScriptObjectPrincipal> scriptPrincipal(do_QueryInterface(aDOMWindow));
+  NS_ENSURE_STATE(scriptPrincipal);
+  nsCOMPtr<nsIPrincipal> principal = scriptPrincipal->GetPrincipal();
+  NS_ENSURE_STATE(principal);
+
+  if (aDOMWindow) {
+    BindToOwner(aDOMWindow->IsOuterWindow() ?
+                aDOMWindow->GetCurrentInnerWindow() : aDOMWindow);
+  } else {
+    BindToOwner(aDOMWindow);
+  }
+
+  // Attempt to kill "ghost" DataChannel (if one can happen): but usually too early for check to fail
+  rv = CheckInnerWindowCorrectness();
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  // See bug 696085
+  // We don't need to observe for window destroyed or frozen; but PeerConnection needs
+  // to not allow itself to be bfcached (and get destroyed on navigation).
+
+  rv = nsContentUtils::GetUTFOrigin(principal,mOrigin);
+  LOG(("%s: origin = %s\n",__FUNCTION__,NS_LossyConvertUTF16toASCII(mOrigin).get()));
+  return rv;
+}
+
+NS_IMPL_EVENT_HANDLER(nsDOMDataChannel, open)
+NS_IMPL_EVENT_HANDLER(nsDOMDataChannel, error)
+NS_IMPL_EVENT_HANDLER(nsDOMDataChannel, close)
+NS_IMPL_EVENT_HANDLER(nsDOMDataChannel, message)
+
+NS_IMETHODIMP
+nsDOMDataChannel::GetLabel(nsAString& aLabel)
+{
+  mDataChannel->GetLabel(aLabel);
+  return NS_OK;
+}
+
+// XXX should be GetType()?  Open question for the spec
+NS_IMETHODIMP
+nsDOMDataChannel::GetReliable(bool* aReliable)
+{
+  *aReliable = (mDataChannel->GetType() == mozilla::DataChannelConnection::RELIABLE);
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDOMDataChannel::GetOrdered(bool* aOrdered)
+{
+  *aOrdered = mDataChannel->GetOrdered();
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDOMDataChannel::GetReadyState(nsAString& aReadyState)
+{
+  uint16_t readyState = mDataChannel->GetReadyState();
+  const char * stateName[] = {
+    "Connecting",
+    "Open",
+    "Closing",
+    "Closed"
+  };
+  MOZ_ASSERT(/*readyState >= mozilla::DataChannel::CONNECTING && */ // Always true due to datatypes
+             readyState <= mozilla::DataChannel::CLOSED);
+  aReadyState.AssignASCII(stateName[readyState]);
+
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDOMDataChannel::GetBufferedAmount(uint32_t* aBufferedAmount)
+{
+  *aBufferedAmount = mDataChannel->GetBufferedAmount();
+  return NS_OK;
+}
+
+NS_IMETHODIMP nsDOMDataChannel::GetBinaryType(nsAString & aBinaryType)
+{
+  switch (mBinaryType) {
+  case DC_BINARY_TYPE_ARRAYBUFFER:
+    aBinaryType.AssignLiteral("arraybuffer");
+    break;
+  case DC_BINARY_TYPE_BLOB:
+    aBinaryType.AssignLiteral("blob");
+    break;
+  default:
+    NS_ERROR("Should not happen");
+  }
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDOMDataChannel::SetBinaryType(const nsAString& aBinaryType)
+{
+  if (aBinaryType.EqualsLiteral("arraybuffer")) {
+    mBinaryType = DC_BINARY_TYPE_ARRAYBUFFER;
+  } else if (aBinaryType.EqualsLiteral("blob")) {
+    mBinaryType = DC_BINARY_TYPE_BLOB;
+  } else  {
+    return NS_ERROR_INVALID_ARG;
+  }
+  return NS_OK;
+}
+
+NS_IMETHODIMP
+nsDOMDataChannel::Close()
+{
+  mDataChannel->Close();
+  return NS_OK;
+}
+
+// Almost a clone of nsWebSocketChannel::Send()
+NS_IMETHODIMP
+nsDOMDataChannel::Send(nsIVariant* aData, JSContext* aCx)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  uint16_t state = mDataChannel->GetReadyState();
+
+  // In reality, the DataChannel protocol allows this, but we want it to
+  // look like WebSockets
+  if (state == mozilla::DataChannel::CONNECTING) {
+    return NS_ERROR_DOM_INVALID_STATE_ERR;
+  }
+
+  nsCString msgString;
+  nsCOMPtr<nsIInputStream> msgStream;
+  bool isBinary;
+  uint32_t msgLen;
+  nsresult rv = GetSendParams(aData, msgString, msgStream, isBinary, msgLen, aCx);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  if (state == mozilla::DataChannel::CLOSING ||
+      state == mozilla::DataChannel::CLOSED) {
+    return NS_OK;
+  }
+
+  MOZ_ASSERT(state == mozilla::DataChannel::OPEN,
+             "Unknown state in nsWebSocket::Send");
+
+  int32_t sent;
+  if (msgStream) {
+    sent = mDataChannel->SendBinaryStream(msgStream, msgLen);
+  } else {
+    if (isBinary) {
+      sent = mDataChannel->SendBinaryMsg(msgString);
+    } else {
+      sent = mDataChannel->SendMsg(msgString);
+    }
+  }
+  return sent >= 0 ? NS_OK : NS_ERROR_FAILURE;
+}
+
+// XXX Exact clone of nsWebSocketChannel::GetSendParams() - find a way to share!
+nsresult
+nsDOMDataChannel::GetSendParams(nsIVariant* aData, nsCString& aStringOut,
+                                nsCOMPtr<nsIInputStream>& aStreamOut,
+                                bool& aIsBinary, uint32_t& aOutgoingLength,
+                                JSContext* aCx)
+{
+  // Get type of data (arraybuffer, blob, or string)
+  uint16_t dataType;
+  nsresult rv = aData->GetDataType(&dataType);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  if (dataType == nsIDataType::VTYPE_INTERFACE ||
+      dataType == nsIDataType::VTYPE_INTERFACE_IS) {
+    nsCOMPtr<nsISupports> supports;
+    nsID* iid;
+    rv = aData->GetAsInterface(&iid, getter_AddRefs(supports));
+    NS_ENSURE_SUCCESS(rv, rv);
+
+    nsMemory::Free(iid);
+
+    // ArrayBuffer?
+    jsval realVal;
+    JSObject* obj;
+    nsresult rv = aData->GetAsJSVal(&realVal);
+    if (NS_SUCCEEDED(rv) && !JSVAL_IS_PRIMITIVE(realVal) &&
+        (obj = JSVAL_TO_OBJECT(realVal)) &&
+        (JS_IsArrayBufferObject(obj, aCx))) {
+      int32_t len = JS_GetArrayBufferByteLength(obj, aCx);
+      char* data = reinterpret_cast<char*>(JS_GetArrayBufferData(obj, aCx));
+
+      aStringOut.Assign(data, len);
+      aIsBinary = true;
+      aOutgoingLength = len;
+      return NS_OK;
+    }
+
+    // Blob?
+    nsCOMPtr<nsIDOMBlob> blob = do_QueryInterface(supports);
+    if (blob) {
+      rv = blob->GetInternalStream(getter_AddRefs(aStreamOut));
+      NS_ENSURE_SUCCESS(rv, rv);
+
+      // GetSize() should not perform blocking I/O (unlike Available())
+      uint64_t blobLen;
+      rv = blob->GetSize(&blobLen);
+      NS_ENSURE_SUCCESS(rv, rv);
+      if (blobLen > PR_UINT32_MAX) {
+        return NS_ERROR_FILE_TOO_BIG;
+      }
+      aOutgoingLength = static_cast<uint32_t>(blobLen);
+
+      aIsBinary = true;
+      return NS_OK;
+    }
+  }
+
+  // Text message: if not already a string, turn it into one.
+  // TODO: bug 704444: Correctly coerce any JS type to string
+  //
+  PRUnichar* data = nullptr;
+  uint32_t len = 0;
+  rv = aData->GetAsWStringWithSize(&len, &data);
+  NS_ENSURE_SUCCESS(rv, rv);
+
+  nsString text;
+  text.Adopt(data, len);
+
+  CopyUTF16toUTF8(text, aStringOut);
+
+  aIsBinary = false;
+  aOutgoingLength = aStringOut.Length();
+  return NS_OK;
+}
+
+nsresult
+nsDOMDataChannel::DoOnMessageAvailable(const nsACString& aData,
+                                       bool aBinary)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+
+  LOG(("DoOnMessageAvailable%s\n",aBinary ? ((mBinaryType == DC_BINARY_TYPE_BLOB) ? " (blob)" : " (binary)") : ""));
+
+  nsresult rv = CheckInnerWindowCorrectness();
+  if (NS_FAILED(rv)) {
+    return NS_OK;
+  }
+  nsCOMPtr<nsIScriptGlobalObject> sgo = do_QueryInterface(GetOwner());
+  NS_ENSURE_TRUE(sgo, NS_ERROR_FAILURE);
+
+  nsIScriptContext* sc = sgo->GetContext();
+  NS_ENSURE_TRUE(sc, NS_ERROR_FAILURE);
+
+  JSContext* cx = sc->GetNativeContext();
+  NS_ENSURE_TRUE(cx, NS_ERROR_FAILURE);
+
+  JSAutoRequest ar(cx);
+  jsval jsData;
+
+  if (aBinary) {
+    if (mBinaryType == DC_BINARY_TYPE_BLOB) {
+      rv = nsContentUtils::CreateBlobBuffer(cx, aData, jsData);
+      NS_ENSURE_SUCCESS(rv, rv);
+    } else if (mBinaryType == DC_BINARY_TYPE_ARRAYBUFFER) {
+      JSObject* arrayBuf;
+      rv = nsContentUtils::CreateArrayBuffer(cx, aData, &arrayBuf);
+      NS_ENSURE_SUCCESS(rv, rv);
+      jsData = OBJECT_TO_JSVAL(arrayBuf);
+    } else {
+      NS_RUNTIMEABORT("Unknown binary type!");
+      return NS_ERROR_UNEXPECTED;
+    }
+  } else {
+    NS_ConvertUTF8toUTF16 utf16data(aData);
+    JSString* jsString = JS_NewUCStringCopyN(cx, utf16data.get(), utf16data.Length());
+    NS_ENSURE_TRUE(jsString, NS_ERROR_FAILURE);
+
+    jsData = STRING_TO_JSVAL(jsString);
+  }
+
+  nsCOMPtr<nsIDOMEvent> event;
+  rv = NS_NewDOMMessageEvent(getter_AddRefs(event), nullptr, nullptr);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  nsCOMPtr<nsIDOMMessageEvent> messageEvent = do_QueryInterface(event);
+  rv = messageEvent->InitMessageEvent(NS_LITERAL_STRING("message"),
+                                      false, false,
+                                      jsData, mOrigin, EmptyString(),
+                                      nullptr);
+  NS_ENSURE_SUCCESS(rv,rv);
+  event->SetTrusted(true);
+
+  LOG(("%p(%p): %s - Dispatching\n",this,(void*)mDataChannel,__FUNCTION__));
+  rv = DispatchDOMEvent(nullptr, event, nullptr, nullptr);
+  if (NS_FAILED(rv)) {
+    NS_WARNING("Failed to dispatch the message event!!!");
+  }
+  return rv;
+}
+
+nsresult
+nsDOMDataChannel::OnMessageAvailable(nsISupports* aContext,
+                                     const nsACString& aMessage)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  return DoOnMessageAvailable(aMessage, false);
+}
+
+nsresult
+nsDOMDataChannel::OnBinaryMessageAvailable(nsISupports* aContext,
+                                           const nsACString& aMessage)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+  return DoOnMessageAvailable(aMessage, true);
+}
+
+nsresult
+nsDOMDataChannel::OnSimpleEvent(nsISupports* aContext, const nsAString& aName)
+{
+  MOZ_ASSERT(NS_IsMainThread());
+
+  nsresult rv = CheckInnerWindowCorrectness();
+  if (NS_FAILED(rv)) {
+    return NS_OK;
+  }
+
+  nsCOMPtr<nsIDOMEvent> event;
+  rv = NS_NewDOMEvent(getter_AddRefs(event), nullptr, nullptr);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  rv = event->InitEvent(aName, false, false);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  event->SetTrusted(true);
+
+  return DispatchDOMEvent(nullptr, event, nullptr, nullptr);
+}
+
+nsresult
+nsDOMDataChannel::OnChannelConnected(nsISupports* aContext)
+{
+  LOG(("%p(%p): %s - Dispatching\n",this,(void*)mDataChannel,__FUNCTION__));
+
+  return OnSimpleEvent(aContext, NS_LITERAL_STRING("open"));
+}
+
+nsresult
+nsDOMDataChannel::OnChannelClosed(nsISupports* aContext)
+{
+  LOG(("%p(%p): %s - Dispatching\n",this,(void*)mDataChannel,__FUNCTION__));
+
+  return OnSimpleEvent(aContext, NS_LITERAL_STRING("close"));
+}
+
+void
+nsDOMDataChannel::AppReady()
+{
+  mDataChannel->AppReady();
+}
+
+/* static */
+nsresult
+NS_NewDOMDataChannel(mozilla::DataChannel* aDataChannel,
+                     nsPIDOMWindow* aWindow,
+                     nsIDOMDataChannel** aDomDataChannel)
+{
+  nsRefPtr<nsDOMDataChannel> domdc = new nsDOMDataChannel(aDataChannel);
+
+  nsresult rv = domdc->Init(aWindow);
+  NS_ENSURE_SUCCESS(rv,rv);
+
+  return CallQueryInterface(domdc, aDomDataChannel);
+}
+
+/* static */
+void
+NS_DataChannelAppReady(nsIDOMDataChannel* aDomDataChannel)
+{
+  ((nsDOMDataChannel *)aDomDataChannel)->AppReady();
+}
new file mode 100644
--- /dev/null
+++ b/content/base/src/nsDOMDataChannel.h
@@ -0,0 +1,29 @@
+/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* vim: set sw=2 ts=8 et tw=80 : */
+/* 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/. */
+
+#ifndef nsDOMDataChannel_h__
+#define nsDOMDataChannel_h__
+
+// This defines only what's necessary to create nsDOMDataChannels, since this
+// gets used with MOZ_INTERNAL_API not set for media/webrtc/signaling/testing
+
+#include "nsIDOMDataChannel.h"
+
+namespace mozilla {
+   class DataChannel;
+}
+
+class nsPIDOMWindow;
+
+nsresult
+NS_NewDOMDataChannel(mozilla::DataChannel* dataChannel,
+                     nsPIDOMWindow* aWindow,
+                     nsIDOMDataChannel** domDataChannel);
+
+// Tell DataChannel it's ok to deliver open and message events
+void NS_DataChannelAppReady(nsIDOMDataChannel* domDataChannel);
+
+#endif
--- a/content/canvas/src/WebGLContextNotSupported.cpp
+++ b/content/canvas/src/WebGLContextNotSupported.cpp
@@ -11,19 +11,9 @@
 DUMMY(NS_NewCanvasRenderingContextWebGL, nsIDOMWebGLRenderingContext)
 
 DOMCI_DATA(WebGLBuffer, void)
 DOMCI_DATA(WebGLTexture, void)
 DOMCI_DATA(WebGLProgram, void)
 DOMCI_DATA(WebGLShader, void)
 DOMCI_DATA(WebGLFramebuffer, void)
 DOMCI_DATA(WebGLRenderbuffer, void)
-DOMCI_DATA(WebGLUniformLocation, void)
-DOMCI_DATA(WebGLShaderPrecisionFormat, void)
-DOMCI_DATA(WebGLActiveInfo, void)
-DOMCI_DATA(WebGLExtension, void)
-DOMCI_DATA(WebGLExtensionStandardDerivatives, void)
-DOMCI_DATA(WebGLExtensionTextureFilterAnisotropic, void)
-DOMCI_DATA(WebGLExtensionLoseContext, void)
-DOMCI_DATA(WebGLExtensionCompressedTextureS3TC, void)
-DOMCI_DATA(WebGLExtensionCompressedTextureATC, void)
-DOMCI_DATA(WebGLExtensionCompressedTexturePVRTC, void)
-DOMCI_DATA(WebGLExtensionDepthTexture, void)
+DOMCI_DATA(WebGLActiveInfo, void)
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/content/media/test/crashtests/795892-1.html
@@ -0,0 +1,17 @@
+<!DOCTYPE html>
+<html class="reftest-wait">
+<head>
+<script>
+function boom()
+{
+  var a = document.getElementById("a");
+  a.play();
+  a.onplaying = function () { document.documentElement.className = ""; }
+}
+</script>
+</head>
+
+<body>
+<video id="a" src="cors.webm" crossorigin onloadedmetadata="boom();">
+</body>
+</html>
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..72b02972333619281b5205ccf7825f378addbfb1
GIT binary patch
literal 215529
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
A9{>OV
new file mode 100644
--- /dev/null
+++ b/content/media/test/crashtests/cors.webm^headers^
@@ -0,0 +1,1 @@
+Access-Control-Allow-Origin: *
--- a/content/media/test/crashtests/crashtests.list
+++ b/content/media/test/crashtests/crashtests.list
@@ -5,8 +5,9 @@ load 468763-1.html
 load 474744-1.html
 HTTP load 481136-1.html # needs to be HTTP to recognize the ogg as an audio file?
 load 493915-1.html
 skip-if(Android) load 495794-1.html
 load 492286-1.xhtml
 load 576612-1.html
 skip-if(Android) load 691096-1.html # Android sound API can't handle playing large number of sounds at once.
 load 752784-1.html
+HTTP load 795892-1.html
--- a/dom/base/nsDOMClassInfo.cpp
+++ b/dom/base/nsDOMClassInfo.cpp
@@ -545,16 +545,20 @@ using mozilla::dom::indexedDB::IDBWrappe
 
 #include "DOMFileHandle.h"
 #include "FileRequest.h"
 #include "LockedFile.h"
 #include "GeneratedEvents.h"
 #include "mozilla/Likely.h"
 #include "nsDebug.h"
 
+#ifdef MOZ_WEBRTC
+#include "nsIDOMDataChannel.h"
+#endif
+
 #undef None // something included above defines this preprocessor symbol, maybe Xlib headers
 #include "WebGLContext.h"
 #include "nsICanvasRenderingContextInternal.h"
 #include "mozilla/dom/BindingUtils.h"
 #include "mozilla/dom/HTMLCollectionBinding.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
@@ -1702,16 +1706,21 @@ static nsDOMClassInfoData sClassInfoData
                            EVENTTARGET_SCRIPTABLE_FLAGS)
   NS_DEFINE_CLASSINFO_DATA(LockedFile, nsEventTargetSH,
                            EVENTTARGET_SCRIPTABLE_FLAGS)
   NS_DEFINE_CLASSINFO_DATA(MozActivity, nsEventTargetSH,
                            EVENTTARGET_SCRIPTABLE_FLAGS)
 
   NS_DEFINE_CLASSINFO_DATA(MozTimeManager, nsDOMGenericSH,
                            DOM_DEFAULT_SCRIPTABLE_FLAGS)
+
+#ifdef MOZ_WEBRTC
+  NS_DEFINE_CLASSINFO_DATA(DataChannel, nsEventTargetSH,
+                           EVENTTARGET_SCRIPTABLE_FLAGS)
+#endif
 };
 
 // Objects that should be constructable through |new Name();|
 struct nsContractIDMapData
 {
   int32_t mDOMClassInfoID;
   const char *mContractID;
 };
@@ -4505,16 +4514,23 @@ nsDOMClassInfo::Init()
     DOM_CLASSINFO_MAP_ENTRY(nsIDOMDOMRequest)
     DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
   DOM_CLASSINFO_MAP_END
 
   DOM_CLASSINFO_MAP_BEGIN(MozTimeManager, nsIDOMMozTimeManager)
     DOM_CLASSINFO_MAP_ENTRY(nsIDOMMozTimeManager)
   DOM_CLASSINFO_MAP_END
 
+#ifdef MOZ_WEBRTC
+  DOM_CLASSINFO_MAP_BEGIN(DataChannel, nsIDOMDataChannel)
+    DOM_CLASSINFO_MAP_ENTRY(nsIDOMDataChannel)
+    DOM_CLASSINFO_MAP_ENTRY(nsIDOMEventTarget)
+  DOM_CLASSINFO_MAP_END
+#endif
+
 #ifdef DEBUG
   {
     uint32_t i = ArrayLength(sClassInfoData);
 
     if (i != eDOMClassInfoIDCount) {
       NS_ERROR("The number of items in sClassInfoData doesn't match the "
                "number of nsIDOMClassInfo ID's, this is bad! Fix it!");
 
--- a/dom/base/nsDOMClassInfoClasses.h
+++ b/dom/base/nsDOMClassInfoClasses.h
@@ -532,8 +532,12 @@ DOMCI_CLASS(OpenWindowEventDetail)
 
 DOMCI_CLASS(DOMFileHandle)
 DOMCI_CLASS(FileRequest)
 DOMCI_CLASS(LockedFile)
 
 DOMCI_CLASS(MozActivity)
 
 DOMCI_CLASS(MozTimeManager)
+
+#ifdef MOZ_WEBRTC
+DOMCI_CLASS(DataChannel)
+#endif
--- a/dom/base/nsGlobalWindow.cpp
+++ b/dom/base/nsGlobalWindow.cpp
@@ -6543,19 +6543,20 @@ nsGlobalWindow::Close()
   if (mBlockScriptedClosingFlag)
   {
     // A script's popup has been blocked and we don't want
     // the window to be closed directly after this event,
     // so the user can see that there was a blocked popup.
     return NS_OK;
   }
 
-  // Don't allow scripts from content to close windows
-  // that were not opened by script
-  if (!mHadOriginalOpener && !nsContentUtils::IsCallerTrustedForWrite()) {
+  // Don't allow scripts from content to close non-app windows that were not
+  // opened by script.
+  if (!mDocShell->GetIsApp() &&
+      !mHadOriginalOpener && !nsContentUtils::IsCallerTrustedForWrite()) {
     bool allowClose =
       Preferences::GetBool("dom.allow_scripts_to_close_windows", true);
     if (!allowClose) {
       // We're blocking the close operation
       // report localized error msg in JS console
       nsContentUtils::ReportToConsole(
           nsIScriptError::warningFlag,
           "DOM Window", mDoc,  // Better name for the category?
--- a/dom/bluetooth/BluetoothDevice.cpp
+++ b/dom/bluetooth/BluetoothDevice.cpp
@@ -56,27 +56,16 @@ BluetoothDevice::BluetoothDevice(nsPIDOM
   mAdapterPath(aAdapterPath),
   mIsRooted(false)
 {
   BindToOwner(aOwner);
   const InfallibleTArray<BluetoothNamedValue>& values =
     aValue.get_ArrayOfBluetoothNamedValue();
   for (uint32_t i = 0; i < values.Length(); ++i) {
     SetPropertyByValue(values[i]);
-    if (values[i].name().EqualsLiteral("Path")) {
-      // Since this is our signal handler string, set it as we set the property
-      // in the object. Odd place to do it, but makes more sense than in
-      // SetPropertyByValue.
-      BluetoothService* bs = BluetoothService::Get();
-      if (!bs) {
-        NS_WARNING("BluetoothService not available!");
-      } else {
-        bs->RegisterBluetoothSignalHandler(mPath, this);
-      }
-    }
   }
 }
 
 BluetoothDevice::~BluetoothDevice()
 {
   BluetoothService* bs = BluetoothService::Get();
   // bs can be null on shutdown, where destruction might happen.
   if (bs) {
--- a/dom/bluetooth/BluetoothHfpManager.cpp
+++ b/dom/bluetooth/BluetoothHfpManager.cpp
@@ -7,27 +7,25 @@
 #include "base/basictypes.h" 
 
 #include "BluetoothHfpManager.h"
 
 #include "BluetoothReplyRunnable.h"
 #include "BluetoothScoManager.h"
 #include "BluetoothService.h"
 #include "BluetoothServiceUuid.h"
+#include "BluetoothUtils.h"
 
 #include "mozilla/dom/bluetooth/BluetoothTypes.h"
 #include "mozilla/Services.h"
 #include "mozilla/StaticPtr.h"
 #include "nsContentUtils.h"
 #include "nsIAudioManager.h"
 #include "nsIObserverService.h"
 #include "nsIRadioInterfaceLayer.h"
-#include "nsISystemMessagesInternal.h"
-#include "BluetoothUtils.h"
-
 #include "nsVariant.h"
 
 #include <unistd.h> /* usleep() */
 
 #define MOZSETTINGS_CHANGED_ID "mozsettings-changed"
 #define BLUETOOTH_SCO_STATUS_CHANGED "bluetooth-sco-status-changed"
 #define AUDIO_VOLUME_MASTER "audio.volume.master"
 
@@ -207,49 +205,16 @@ BluetoothHfpManager::Get()
     manager->Cleanup();
     return nullptr;
   }
 
   gBluetoothHfpManager = manager;
   return gBluetoothHfpManager;
 }
 
-bool
-BluetoothHfpManager::BroadcastSystemMessage(const nsAString& aType,
-                                            const InfallibleTArray<BluetoothNamedValue>& aData)
-{
-  JSContext* cx = nsContentUtils::GetSafeJSContext();
-  NS_ASSERTION(!::JS_IsExceptionPending(cx),
-               "Shouldn't get here when an exception is pending!");
-
-  JSAutoRequest jsar(cx);
-  JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL);
-  if (!obj) {
-    NS_WARNING("Failed to new JSObject for system message!");
-    return false;
-  }
-
-  if (!SetJsObject(cx, obj, aData)) {
-    NS_WARNING("Failed to set properties of system message!");
-    return false;
-  }
-
-  nsCOMPtr<nsISystemMessagesInternal> systemMessenger =
-    do_GetService("@mozilla.org/system-message-internal;1");
-
-  if (!systemMessenger) {
-    NS_WARNING("Failed to get SystemMessenger service!");
-    return false;
-  }
-
-  systemMessenger->BroadcastMessage(aType, OBJECT_TO_JSVAL(obj));
-
-  return true;
-}
-
 void
 BluetoothHfpManager::NotifySettings(const bool aConnected)
 {
   nsString type, name;
   BluetoothValue v;
   InfallibleTArray<BluetoothNamedValue> parameters;
   type.AssignLiteral("bluetooth-hfp-status-changed");
 
--- a/dom/bluetooth/BluetoothHfpManager.h
+++ b/dom/bluetooth/BluetoothHfpManager.h
@@ -10,17 +10,16 @@
 #include "BluetoothCommon.h"
 #include "BluetoothRilListener.h"
 #include "mozilla/ipc/UnixSocket.h"
 #include "nsIObserver.h"
 
 BEGIN_BLUETOOTH_NAMESPACE
 
 class BluetoothReplyRunnable;
-class BluetoothNamedValue;
 
 class BluetoothHfpManager : public mozilla::ipc::UnixSocketConsumer
                           , public nsIObserver
 {
 public:
   NS_DECL_ISUPPORTS
   NS_DECL_NSIOBSERVER
 
@@ -36,18 +35,16 @@ public:
   bool Listen();
 
 private:
   BluetoothHfpManager();
   bool Init();
   void Cleanup();
   nsresult HandleVolumeChanged(const nsAString& aData);
   nsresult HandleShutdown();
-  bool BroadcastSystemMessage(const nsAString& aType,
-                              const InfallibleTArray<BluetoothNamedValue>& aData);
   void NotifyDialer(const nsAString& aCommand);
   void NotifySettings(const bool aConnected);
 
   int mCurrentVgs;
   int mCurrentCallIndex;
   int mCurrentCallState;
   nsAutoPtr<BluetoothRilListener> mListener;
   nsString mDevicePath;
--- a/dom/bluetooth/BluetoothOppManager.cpp
+++ b/dom/bluetooth/BluetoothOppManager.cpp
@@ -5,27 +5,30 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "base/basictypes.h"
 #include "BluetoothOppManager.h"
 
 #include "BluetoothReplyRunnable.h"
 #include "BluetoothService.h"
 #include "BluetoothServiceUuid.h"
+#include "BluetoothUtils.h"
 #include "ObexBase.h"
 
+#include "mozilla/dom/bluetooth/BluetoothTypes.h"
 #include "mozilla/RefPtr.h"
 #include "nsIInputStream.h"
 
 USING_BLUETOOTH_NAMESPACE
 using namespace mozilla::ipc;
 
 static mozilla::RefPtr<BluetoothOppManager> sInstance;
 static nsCOMPtr<nsIInputStream> stream = nullptr;
-static uint64_t sSentFileSize = 0;
+static uint32_t sSentFileSize = 0;
+static nsString sFileName;
 
 class ReadFileTask : public nsRunnable
 {
 public:
   ReadFileTask(nsIDOMBlob* aBlob) : mBlob(aBlob)
   {
     MOZ_ASSERT(NS_IsMainThread());
   }
@@ -202,23 +205,22 @@ BluetoothOppManager::ReceiveSocketData(U
 
       if (mBlob) {
         /*
          * Before sending content, we have to send a header including
          * information such as file name, file length and content type.
          */
         nsresult rv;
         nsCOMPtr<nsIDOMFile> file = do_QueryInterface(mBlob);
-        nsString fileName;
         if (file) {
-          rv = file->GetName(fileName);
+          rv = file->GetName(sFileName);
         }
 
-        if (!file || fileName.IsEmpty()) {
-          fileName.AssignLiteral("Unknown");
+        if (!file || sFileName.IsEmpty()) {
+          sFileName.AssignLiteral("Unknown");
         }
 
         uint64_t fileSize;
         rv = mBlob->GetSize(&fileSize);
         if (NS_FAILED(rv)) {
           NS_WARNING("Can't get file size");
           return;
         }
@@ -226,17 +228,17 @@ BluetoothOppManager::ReceiveSocketData(U
         if (NS_FAILED(NS_NewThread(getter_AddRefs(mReadFileThread)))) {
           NS_WARNING("Can't create thread");
           SendDisconnectRequest();
           return;
         }
 
         sSentFileSize = 0;
         mAbortFlag = false;
-        sInstance->SendPutHeaderRequest(fileName, fileSize);
+        sInstance->SendPutHeaderRequest(sFileName, fileSize);
       }
     }
   } else if (mLastCommand == ObexRequestCode::Disconnect) {
     if (responseCode != ObexResponseCode::Success) {
       // FIXME: Needs error handling here
       NS_WARNING("[OPP] Disconnect failed");
     } else {
       mConnected = false;
@@ -258,23 +260,25 @@ BluetoothOppManager::ReceiveSocketData(U
         }
       }
     }
   } else if (mLastCommand == ObexRequestCode::PutFinal) {
     if (responseCode != ObexResponseCode::Success) {
       // FIXME: Needs error handling here
       NS_WARNING("[OPP] PutFinal failed");
     } else {
+      FileTransferComplete(true, false, sFileName, sSentFileSize);
       SendDisconnectRequest();
     }
   } else if (mLastCommand == ObexRequestCode::Abort) {
     if (responseCode != ObexResponseCode::Success) {
       NS_WARNING("[OPP] Abort failed");
     }
 
+    FileTransferComplete(false, false, sFileName, sSentFileSize);
     SendDisconnectRequest();
   }
 }
 
 void
 BluetoothOppManager::SendConnectRequest()
 {
   if (mConnected) return;
@@ -392,8 +396,41 @@ BluetoothOppManager::SendAbortRequest()
 
   SetObexPacketInfo(req, ObexRequestCode::Abort, index);
   mLastCommand = ObexRequestCode::Abort;
 
   UnixSocketRawData* s = new UnixSocketRawData(index);
   memcpy(s->mData, req, s->mSize);
   SendSocketData(s);
 }
+
+void
+BluetoothOppManager::FileTransferComplete(bool aSuccess,
+                                          bool aReceived,
+                                          const nsString& aFileName,
+                                          uint32_t aFileLength)
+{
+  nsString type, name;
+  BluetoothValue v;
+  InfallibleTArray<BluetoothNamedValue> parameters;
+  type.AssignLiteral("bluetooth-opp-transfer-complete");
+
+  name.AssignLiteral("success");
+  v = aSuccess;
+  parameters.AppendElement(BluetoothNamedValue(name, v));
+
+  name.AssignLiteral("received");
+  v = aReceived;
+  parameters.AppendElement(BluetoothNamedValue(name, v));
+
+  name.AssignLiteral("filename");
+  v = aFileName;
+  parameters.AppendElement(BluetoothNamedValue(name, v));
+
+  name.AssignLiteral("filelength");
+  v = aFileLength;
+  parameters.AppendElement(BluetoothNamedValue(name, v));
+
+  if (!BroadcastSystemMessage(type, parameters)) {
+    NS_WARNING("Failed to broadcast [bluetooth-opp-transfer-complete]");
+    return;
+  }
+}
--- a/dom/bluetooth/BluetoothOppManager.h
+++ b/dom/bluetooth/BluetoothOppManager.h
@@ -56,16 +56,19 @@ public:
   void SendPutHeaderRequest(const nsAString& aFileName, int aFileSize);
   void SendPutRequest(uint8_t* aFileBody, int aFileBodyLength,
                       bool aFinal);
   void SendDisconnectRequest();
   void SendAbortRequest();
 
 private:
   BluetoothOppManager();
+  void UpdateProgress(uint32_t aTotalBytes, uint32_t aSentBytes);
+  void FileTransferComplete(bool aSuccess, bool aReceived,
+                            const nsString& aFileName, uint32_t aFileLength);
 
   bool mConnected;
   int mConnectionId;
   int mLastCommand;
   uint8_t mRemoteObexVersion;
   uint8_t mRemoteConnectionFlags;
   int mRemoteMaxPacketLength;
   bool mAbortFlag;
--- a/dom/bluetooth/BluetoothUtils.cpp
+++ b/dom/bluetooth/BluetoothUtils.cpp
@@ -1,24 +1,27 @@
 /* -*- Mode: c++; c-basic-offset: 2; indent-tabs-mode: nil; tab-width: 40 -*- */
 /* vim: set ts=2 et sw=2 tw=80: */
 /* This Source Code Form is subject to the terms of the Mozilla Public
  * License, v. 2.0. If a copy of the MPL was not distributed with this file,
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "base/basictypes.h"
 
+#include "BluetoothDevice.h"
 #include "BluetoothUtils.h"
+#include "jsapi.h"
+#include "mozilla/Scoped.h"
+#include "mozilla/dom/bluetooth/BluetoothTypes.h"
 #include "nsContentUtils.h"
-#include "BluetoothDevice.h"
-#include "jsapi.h"
+#include "nsISystemMessagesInternal.h"
 #include "nsTArray.h"
 #include "nsString.h"
-#include "mozilla/Scoped.h"
-#include "mozilla/dom/bluetooth/BluetoothTypes.h"
+
+USING_BLUETOOTH_NAMESPACE
 
 nsresult
 mozilla::dom::bluetooth::StringArrayToJSArray(JSContext* aCx, JSObject* aGlobal,
                                               const nsTArray<nsString>& aSourceArray,
                                               JSObject** aResultArray)
 {
   NS_ASSERTION(aCx, "Null context!");
   NS_ASSERTION(aGlobal, "Null global!");
@@ -161,8 +164,42 @@ mozilla::dom::bluetooth::GetAddressFromO
   MOZ_ASSERT(addressHead + BLUETOOTH_ADDRESS_LENGTH == address.Length());
 
   address.Cut(0, addressHead);
   address.ReplaceChar('_', ':');
 
   return address;
 }
 
+bool
+mozilla::dom::bluetooth::BroadcastSystemMessage(
+  const nsAString& aType,
+  const InfallibleTArray<BluetoothNamedValue>& aData)
+{
+  JSContext* cx = nsContentUtils::GetSafeJSContext();
+  NS_ASSERTION(!::JS_IsExceptionPending(cx),
+      "Shouldn't get here when an exception is pending!");
+
+  JSAutoRequest jsar(cx);
+  JSObject* obj = JS_NewObject(cx, NULL, NULL, NULL);
+  if (!obj) {
+    NS_WARNING("Failed to new JSObject for system message!");
+    return false;
+  }
+
+  if (!SetJsObject(cx, obj, aData)) {
+    NS_WARNING("Failed to set properties of system message!");
+    return false;
+  }
+
+  nsCOMPtr<nsISystemMessagesInternal> systemMessenger =
+    do_GetService("@mozilla.org/system-message-internal;1");
+
+  if (!systemMessenger) {
+    NS_WARNING("Failed to get SystemMessenger service!");
+    return false;
+  }
+
+  systemMessenger->BroadcastMessage(aType, OBJECT_TO_JSVAL(obj));
+
+  return true;
+}
+
--- a/dom/bluetooth/BluetoothUtils.h
+++ b/dom/bluetooth/BluetoothUtils.h
@@ -34,11 +34,15 @@ SetJsObject(JSContext* aContext,
 
 nsString
 GetObjectPathFromAddress(const nsAString& aAdapterPath,
                          const nsAString& aDeviceAddress);
 
 nsString
 GetAddressFromObjectPath(const nsAString& aObjectPath);
 
+bool
+BroadcastSystemMessage(const nsAString& aType,
+                       const InfallibleTArray<BluetoothNamedValue>& aData);
+
 END_BLUETOOTH_NAMESPACE
 
 #endif
--- a/dom/bluetooth/linux/BluetoothDBusService.cpp
+++ b/dom/bluetooth/linux/BluetoothDBusService.cpp
@@ -1255,26 +1255,16 @@ EventFilter(DBusConnection* aConn, DBusM
                         sDeviceProperties,
                         ArrayLength(sDeviceProperties));
     if (v.get_ArrayOfBluetoothNamedValue()[0].name().EqualsLiteral("Paired")) {
       // transfer signal to BluetoothService and
       // broadcast system message of bluetooth-pairingstatuschanged
       signalName = NS_LITERAL_STRING("PairedStatusChanged");
       signalPath = NS_LITERAL_STRING(LOCAL_AGENT_PATH);
       v.get_ArrayOfBluetoothNamedValue()[0].name() = NS_LITERAL_STRING("paired");
-    } else {
-     /*
-      * This is a workaround for Bug 795458. We avoid sending events whose
-      * signalPath is "device object path" (formatted as "/org/bluez/
-      * [pid]/hci0/dev_xx_xx_xx_xx_xx_xx". It's because those corresponding
-      * BluetoothDevice objects may have been garbage-collected. Since we
-      * don't need to know any propert changed except 'paired', this should
-      * work for now.
-      */
-      return DBUS_HANDLER_RESULT_HANDLED;
     }
   } else if (dbus_message_is_signal(aMsg, DBUS_MANAGER_IFACE, "AdapterAdded")) {
     const char* str;
     if (!dbus_message_get_args(aMsg, &err,
                                DBUS_TYPE_OBJECT_PATH, &str,
                                DBUS_TYPE_INVALID)) {
       LOG_AND_FREE_DBUS_ERROR_WITH_MSG(&err, aMsg);
       errorStr.AssignLiteral("Cannot parse manager path!");
@@ -1637,17 +1627,18 @@ public:
           properties[i].name().AssignLiteral("name");
           parameters.AppendElement(properties[i]);
           mSignal.value() = parameters;
           break;
         }
       }
       NS_ASSERTION(i != properties.Length(), "failed to get device name");
     } else {
-      // Return all device properties for event "DeviceCreated"
+      // Return all device properties for event "DeviceCreated", including device path
+      properties.AppendElement(BluetoothNamedValue(NS_LITERAL_STRING("Path"), mSignal.value()));
       mSignal.value() = properties;
     }
 
     nsRefPtr<DistributeBluetoothSignalTask> t =
       new DistributeBluetoothSignalTask(mSignal);
 
     if (NS_FAILED(NS_DispatchToMainThread(t))) {
        NS_WARNING("Failed to dispatch to main thread!");
--- a/dom/browser-element/mochitest/Makefile.in
+++ b/dom/browser-element/mochitest/Makefile.in
@@ -88,16 +88,19 @@ MOCHITEST_FILES = \
 		test_browserElement_inproc_PromptCheck.html \
 		browserElement_PromptConfirm.js \
 		test_browserElement_inproc_PromptConfirm.html \
 		browserElement_Close.js \
 		test_browserElement_inproc_Close.html \
 		browserElement_CloseFromOpener.js \
 		test_browserElement_inproc_CloseFromOpener.html \
 		file_browserElement_CloseFromOpener.html \
+		browserElement_CloseApp.js \
+		test_browserElement_inproc_CloseApp.html \
+		file_browserElement_CloseApp.html \
 		browserElement_OpenWindow.js \
 		test_browserElement_inproc_OpenWindow.html \
 		file_browserElement_Open1.html \
 		file_browserElement_Open2.html \
 		browserElement_OpenWindowInFrame.js \
 		test_browserElement_inproc_OpenWindowInFrame.html \
 		file_browserElement_OpenWindowInFrame.html \
 		browserElement_OpenWindowRejected.js \
@@ -176,16 +179,17 @@ MOCHITEST_FILES += \
 		test_browserElement_oop_AlertInFrame.html \
 		test_browserElement_oop_TargetTop.html \
 		test_browserElement_oop_ForwardName.html \
 		test_browserElement_oop_TargetBlank.html \
 		test_browserElement_oop_PromptCheck.html \
 		test_browserElement_oop_PromptConfirm.html \
 		test_browserElement_oop_Close.html \
 		test_browserElement_oop_CloseFromOpener.html \
+		test_browserElement_oop_CloseApp.html \
 		test_browserElement_oop_OpenWindow.html \
 		test_browserElement_oop_OpenWindowInFrame.html \
 		test_browserElement_oop_OpenWindowRejected.html \
 		test_browserElement_oop_OpenWindowDifferentOrigin.html \
 		test_browserElement_oop_OpenNamed.html \
 		test_browserElement_oop_SecurityChange.html \
 		test_browserElement_oop_BackForward.html \
 		test_browserElement_oop_Reload.html \
new file mode 100644
--- /dev/null
+++ b/dom/browser-element/mochitest/browserElement_CloseApp.js
@@ -0,0 +1,71 @@
+/* Any copyright is dedicated to the public domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+// Bug 789392 - Test that apps frames can trigger mozbrowserclose by calling
+// window.close(), but browser frames cannot.
+"use strict";
+
+SimpleTest.waitForExplicitFinish();
+
+function runTest() {
+  browserElementTestHelpers.setEnabledPref(true);
+  browserElementTestHelpers.addPermission();
+  SpecialPowers.addPermission("embed-apps", true, window.document);
+
+  addEventListener('unload', function() {
+    SpecialPowers.removePermission("embed-apps", window.document);
+  });
+
+  // Our app frame and browser frame load the same content.  That content calls
+  // window.close() and then alert().  We should get a mozbrowserclose event on
+  // the app frame before the mozbrowsershowmodalprompt, but not on the browser
+  // frame.
+
+  var appFrame = document.createElement('iframe');
+  appFrame.mozbrowser = true;
+  appFrame.setAttribute('mozapp', 'http://example.org/manifest.webapp');
+
+  var browserFrame = document.createElement('iframe');
+  browserFrame.mozbrowser = true;
+
+  var gotAppFrameClose = false;
+  appFrame.addEventListener('mozbrowserclose', function() {
+    ok(true, "Got close from app frame.");
+    gotAppFrameClose = true;
+  });
+
+  var gotAppFrameAlert = false;
+  appFrame.addEventListener('mozbrowsershowmodalprompt', function() {
+    ok(gotAppFrameClose, "Should have gotten app frame close by now.");
+    ok(!gotAppFrameAlert, "Just one alert from the app frame.");
+    gotAppFrameAlert = true;
+    if (gotBrowserFrameAlert && gotAppFrameAlert) {
+      SimpleTest.finish();
+    }
+  });
+
+  browserFrame.addEventListener('mozbrowserclose', function() {
+    ok(false, "Got close from browser frame.");
+  });
+
+  var gotBrowserFrameAlert = false;
+  browserFrame.addEventListener('mozbrowsershowmodalprompt', function() {
+    ok(!gotBrowserFrameAlert, "Just one browser frame alert.");
+    gotBrowserFrameAlert = true;
+    if (gotBrowserFrameAlert && gotAppFrameAlert) {
+      SimpleTest.finish();
+    }
+  });
+
+  document.body.appendChild(appFrame);
+  document.body.appendChild(browserFrame);
+
+  appFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html';
+  browserFrame.src = 'http://example.org/tests/dom/browser-element/mochitest/file_browserElement_CloseApp.html';
+}
+
+// The test harness sets dom.allow_scripts_to_close_windows to true (as of
+// writing, anyway).  But that means that browser tabs can close themselves,
+// which is what we want to test /can't/ happen!   For the purposes of this
+// test (and normal browser operation), this pref should be false.
+SpecialPowers.pushPrefEnv({'set': [['dom.allow_scripts_to_close_windows', false]]}, runTest);
new file mode 100644
--- /dev/null
+++ b/dom/browser-element/mochitest/file_browserElement_CloseApp.html
@@ -0,0 +1,12 @@
+<html>
+<body>
+
+file_browserElement_CloseApp.html
+
+<script>
+window.close();
+alert('called close');
+</script>
+
+</body>
+</html>
new file mode 100644
--- /dev/null
+++ b/dom/browser-element/mochitest/test_browserElement_inproc_CloseApp.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Test for Bug 789392</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="browserElementTestHelpers.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<script type="application/javascript;version=1.7" src="browserElement_CloseApp.js">
+</script>
+</body>
+</html>
\ No newline at end of file
new file mode 100644
--- /dev/null
+++ b/dom/browser-element/mochitest/test_browserElement_oop_CloseApp.html
@@ -0,0 +1,13 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+  <title>Test for Bug 789392</title>
+  <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
+  <script type="application/javascript" src="browserElementTestHelpers.js"></script>
+  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+</head>
+<body>
+<script type="application/javascript;version=1.7" src="browserElement_CloseApp.js">
+</script>
+</body>
+</html>
\ No newline at end of file
--- a/dom/indexedDB/test/browser_forgetThisSite.js
+++ b/dom/indexedDB/test/browser_forgetThisSite.js
@@ -1,13 +1,15 @@
 /**
  * Any copyright is dedicated to the Public Domain.
  * http://creativecommons.org/publicdomain/zero/1.0/
  */
 
+Components.utils.import("resource://gre/modules/ClearRecentHistory.jsm");
+
 const domains = [
   "mochi.test:8888",
   "www.example.com"
 ];
 
 const addPath = "/browser/dom/indexedDB/test/browser_forgetThisSiteAdd.html";
 const getPath = "/browser/dom/indexedDB/test/browser_forgetThisSiteGet.html";
 
@@ -59,19 +61,17 @@ function test2()
     });
   }, true);
   content.location = testPageURL2;
 }
 
 function test3()
 {
   // Remove database from domain 2
-  Components.classes["@mozilla.org/privatebrowsing;1"]
-            .getService(Components.interfaces.nsIPrivateBrowsingService)
-            .removeDataFromDomain(domains[1]);
+  ClearRecentHistory.removeDataFromDomain(domains[1]);
   setPermission(testPageURL4, "indexedDB", "unknown");
   executeSoon(test4);
 }
 
 function test4()
 {
   // Get database version for domain 1
   gBrowser.selectedTab = gBrowser.addTab();
--- a/dom/interfaces/css/nsIDOMCSS2Properties.idl
+++ b/dom/interfaces/css/nsIDOMCSS2Properties.idl
@@ -9,17 +9,17 @@
  * The nsIDOMCSS2Properties interface is a datatype for additional
  * reflection of data already provided in nsIDOMCSSStyleDeclaration in
  * the Document Object Model.
  *
  * For more information on this interface please see
  * http://www.w3.org/TR/DOM-Level-2-Style
  */
 
-[builtinclass, scriptable, uuid(243898eb-0e13-416d-9a2e-33af084985ed)]
+[builtinclass, scriptable, uuid(2ae61565-1a66-4e6e-960d-b999c631e5c6)]
 interface nsIDOMCSS2Properties : nsISupports
 {
            attribute DOMString        background;
                                         // raises(DOMException) on setting
 
            attribute DOMString        backgroundAttachment;
                                         // raises(DOMException) on setting
 
@@ -798,20 +798,16 @@ interface nsIDOMCSS2Properties : nsISupp
                                         // raises(DOMException) on setting
 
            attribute DOMString        borderImageRepeat;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozBorderImage;
                                         // raises(DOMException) on setting
 
-/* XXXdholbert NOTE: Flexbox properties are commented out here, until our
-   layout engine responds to them.  In builds with MOZ_FLEXBOX enabled, this
-   block should be uncommented (and this interface's uuid should be revved).
-   (This would be #ifdef MOZ_FLEXBOX, if that worked in IDL files.)
            attribute DOMString        MozAlignItems;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozAlignSelf;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozFlex;
                                         // raises(DOMException) on setting
@@ -828,10 +824,9 @@ interface nsIDOMCSS2Properties : nsISupp
            attribute DOMString        MozFlexShrink;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozOrder;
                                         // raises(DOMException) on setting
 
            attribute DOMString        MozJustifyContent;
                                         // raises(DOMException) on setting
-*/
 };
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -769,18 +769,22 @@ ContentParent::~ContentParent()
     NS_ASSERTION(NS_IsMainThread(), "Wrong thread!");
 
     // We should be removed from all these lists in ActorDestroy.
     MOZ_ASSERT(!gPrivateContent || !gPrivateContent->Contains(this));
     if (mAppManifestURL.IsEmpty()) {
         MOZ_ASSERT(!gNonAppContentParents ||
                    !gNonAppContentParents->Contains(this));
     } else {
+        // In general, we expect gAppContentParents->Get(mAppManifestURL) to be
+        // NULL.  But it could be that we created another ContentParent for this
+        // app after we did this->ActorDestroy(), so the right check is that
+        // gAppContentParent->Get(mAppManifestURL) != this.
         MOZ_ASSERT(!gAppContentParents ||
-                   !gAppContentParents->Get(mAppManifestURL));
+                   gAppContentParents->Get(mAppManifestURL) != this);
     }
 }
 
 bool
 ContentParent::IsAlive()
 {
     return mIsAlive;
 }
--- a/dom/plugins/base/nsNPAPIPlugin.cpp
+++ b/dom/plugins/base/nsNPAPIPlugin.cpp
@@ -257,21 +257,22 @@ nsNPAPIPlugin::RunPluginOOP(const nsPlug
   if (!aPluginTag) {
     return false;
   }
 
 #ifdef ACCESSIBILITY
   // Certain assistive technologies don't want oop Flash, thus we have a special
   // pref for them to disable oop Flash (refer to bug 785047 for details).
   bool useA11yPref = false;
+#ifdef XP_WIN
+  useA11yPref =  a11y::Compatibility::IsJAWS();
+#endif
 #endif
 
 #ifdef XP_WIN
-  useA11yPref =  a11y::Compatibility::IsJAWS();
-
   // On Windows Vista+, we force Flash to run in OOPP mode because Adobe
   // doesn't test Flash in-process and there are known stability bugs.
   if (aPluginTag->mIsFlashPlugin && IsVistaOrLater()) {
 #ifdef ACCESSIBILITY
     if (!useA11yPref)
       return true;
 #else
     return true;
--- a/dom/plugins/base/nsPluginNativeWindowWin.cpp
+++ b/dom/plugins/base/nsPluginNativeWindowWin.cpp
@@ -689,17 +689,17 @@ nsresult nsPluginNativeWindowWin::Subcla
   else
     style |= WS_CLIPCHILDREN;
   SetWindowLongPtr(hWnd, GWL_STYLE, style);
 
   mPluginWinProc = (WNDPROC)SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)PluginWndProc);
   if (!mPluginWinProc)
     return NS_ERROR_FAILURE;
 
-  nsPluginNativeWindowWin * win = (nsPluginNativeWindowWin *)::GetProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
+  DebugOnly<nsPluginNativeWindowWin *> win = (nsPluginNativeWindowWin *)::GetProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION);
   NS_ASSERTION(!win || (win == this), "plugin window already has property and this is not us");
   
   if (!::SetProp(hWnd, NS_PLUGIN_WINDOW_PROPERTY_ASSOCIATION, (HANDLE)this))
     return NS_ERROR_FAILURE;
 
   return NS_OK;
 }
 
--- a/dom/plugins/base/nsPluginsDirWin.cpp
+++ b/dom/plugins/base/nsPluginsDirWin.cpp
@@ -275,17 +275,17 @@ nsresult nsPluginFile::LoadPlugin(PRLibr
   if (NS_FAILED(rv))
       *outLibrary = NULL;
 
   if (protectCurrentDirectory) {
     SetDllDirectory(L"");
   }
 
   if (restoreOrigDir) {
-    BOOL bCheck = SetCurrentDirectoryW(aOrigDir);
+    DebugOnly<BOOL> bCheck = SetCurrentDirectoryW(aOrigDir);
     NS_ASSERTION(bCheck, "Error in Loading plugin");
   }
 
   return rv;
 }
 
 /**
  * Obtains all of the information currently available for this plugin.
@@ -316,17 +316,17 @@ nsresult nsPluginFile::GetPluginInfo(nsP
 
   versionsize = ::GetFileVersionInfoSizeW(lpFilepath, &zerome);
 
   if (versionsize > 0)
     verbuf = PR_Malloc(versionsize);
   if (!verbuf)
     return NS_ERROR_OUT_OF_MEMORY;
 
-  if (::GetFileVersionInfoW(lpFilepath, NULL, versionsize, verbuf))
+  if (::GetFileVersionInfoW(lpFilepath, 0, versionsize, verbuf))
   {
     // TODO: get appropriately-localized info from plugin file
     UINT lang = 1033; // language = English
     UINT cp = 1252;   // codepage = Western
     info.fName = GetKeyValue(verbuf, L"ProductName", lang, cp);
     info.fDescription = GetKeyValue(verbuf, L"FileDescription", lang, cp);
  
     char *mimeType = GetKeyValue(verbuf, L"MIMEType", lang, cp);
--- a/dom/plugins/ipc/NPEventWindows.h
+++ b/dom/plugins/ipc/NPEventWindows.h
@@ -93,17 +93,17 @@ struct ParamTraits<mozilla::plugins::NPR
             case WM_RBUTTONDBLCLK:
 
             case WM_SETFOCUS:
             case WM_KILLFOCUS:
                 break;
 
             default:
                 // RegisterWindowMessage events should be passed.
-                if (paramCopy.event.event >= 0xC000 && paramCopy.event.event <= 0xFFFF)
+                if (paramCopy.event.event >= 0xC000)
                     break;
 
                 // FIXME/bug 567465: temporarily work around unhandled
                 // events by forwarding a "dummy event".  The eventual
                 // fix will be to stop trying to send these events
                 // entirely.
                 paramCopy.event.event = WM_NULL;
                 break;
--- a/dom/system/gonk/GonkGPSGeolocationProvider.cpp
+++ b/dom/system/gonk/GonkGPSGeolocationProvider.cpp
@@ -32,17 +32,20 @@
 #endif
 
 #define DEBUG_GPS 0
 
 using namespace mozilla;
 
 static const int kDefaultPeriod = 1000; // ms
 
-NS_IMPL_ISUPPORTS2(GonkGPSGeolocationProvider, nsIGeolocationProvider, nsIRILDataCallback)
+// While most methods of GonkGPSGeolocationProvider should only be
+// called from main thread, we deliberately put the Init and ShutdownGPS
+// methods off main thread to avoid blocking.
+NS_IMPL_THREADSAFE_ISUPPORTS2(GonkGPSGeolocationProvider, nsIGeolocationProvider, nsIRILDataCallback)
 
 GonkGPSGeolocationProvider* GonkGPSGeolocationProvider::sSingleton;
 GpsCallbacks GonkGPSGeolocationProvider::mCallbacks = {
   sizeof(GpsCallbacks),
   LocationCallback,
   StatusCallback,
   SvStatusCallback,
   NmeaCallback,
@@ -121,29 +124,39 @@ GonkGPSGeolocationProvider::NmeaCallback
   printf_stderr("nmea:     \t%s\n", nmea);
   printf_stderr("length:   \t%d\n", length);
 #endif
 }
 
 void
 GonkGPSGeolocationProvider::SetCapabilitiesCallback(uint32_t capabilities)
 {
-  // Called by GPS engine in init(), hence we don't have to
-  // protect the memebers
-
-  nsRefPtr<GonkGPSGeolocationProvider> provider =
-    GonkGPSGeolocationProvider::GetSingleton();
+  class UpdateCapabilitiesEvent : public nsRunnable {
+  public:
+    UpdateCapabilitiesEvent(uint32_t aCapabilities)
+      : mCapabilities(aCapabilities)
+    {}
+    NS_IMETHOD Run() {
+      nsRefPtr<GonkGPSGeolocationProvider> provider =
+        GonkGPSGeolocationProvider::GetSingleton();
 
-  provider->mSupportsScheduling = capabilities & GPS_CAPABILITY_SCHEDULING;
-  provider->mSupportsMSB = capabilities & GPS_CAPABILITY_MSB;
-  provider->mSupportsMSA = capabilities & GPS_CAPABILITY_MSA;
-  provider->mSupportsSingleShot = capabilities & GPS_CAPABILITY_SINGLE_SHOT;
+      provider->mSupportsScheduling = mCapabilities & GPS_CAPABILITY_SCHEDULING;
+      provider->mSupportsMSB = mCapabilities & GPS_CAPABILITY_MSB;
+      provider->mSupportsMSA = mCapabilities & GPS_CAPABILITY_MSA;
+      provider->mSupportsSingleShot = mCapabilities & GPS_CAPABILITY_SINGLE_SHOT;
 #ifdef GPS_CAPABILITY_ON_DEMAND_TIME
-  provider->mSupportsTimeInjection = capabilities & GPS_CAPABILITY_ON_DEMAND_TIME;
+      provider->mSupportsTimeInjection = mCapabilities & GPS_CAPABILITY_ON_DEMAND_TIME;
 #endif
+      return NS_OK;
+    }
+  private:
+    uint32_t mCapabilities;
+  };
+
+  NS_DispatchToMainThread(new UpdateCapabilitiesEvent(capabilities));
 }
 
 void
 GonkGPSGeolocationProvider::AcquireWakelockCallback()
 {
 }
 
 void
@@ -176,31 +189,40 @@ GonkGPSGeolocationProvider::RequestUtcTi
 {
 }
 
 void
 GonkGPSGeolocationProvider::AGPSStatusCallback(AGpsStatus* status)
 {
   MOZ_ASSERT(status);
 
-  nsRefPtr<GonkGPSGeolocationProvider> provider =
-    GonkGPSGeolocationProvider::GetSingleton();
+  class AGPSStatusEvent : public nsRunnable {
+  public:
+    AGPSStatusEvent(AGpsStatusValue aStatus)
+      : mStatus(aStatus)
+    {}
+    NS_IMETHOD Run() {
+      nsRefPtr<GonkGPSGeolocationProvider> provider =
+        GonkGPSGeolocationProvider::GetSingleton();
 
-  nsCOMPtr<nsIRunnable> event;
-  switch (status->status) {
-    case GPS_REQUEST_AGPS_DATA_CONN:
-      event = NS_NewRunnableMethod(provider, &GonkGPSGeolocationProvider::RequestDataConnection);
-      break;
-    case GPS_RELEASE_AGPS_DATA_CONN:
-      event = NS_NewRunnableMethod(provider, &GonkGPSGeolocationProvider::ReleaseDataConnection);
-      break;
-  }
-  if (event) {
-    NS_DispatchToMainThread(event);
-  }
+      switch (mStatus) {
+        case GPS_REQUEST_AGPS_DATA_CONN:
+          provider->RequestDataConnection();
+          break;
+        case GPS_RELEASE_AGPS_DATA_CONN:
+          provider->ReleaseDataConnection();
+          break;
+      }
+      return NS_OK;
+    }
+  private:
+    AGpsStatusValue mStatus;
+  };
+
+  NS_DispatchToMainThread(new AGPSStatusEvent(status->status));
 }
 
 void
 GonkGPSGeolocationProvider::AGPSRILSetIDCallback(uint32_t flags)
 {
   class RequestSetIDEvent : public nsRunnable {
   public:
     RequestSetIDEvent(uint32_t flags)
@@ -240,23 +262,27 @@ GonkGPSGeolocationProvider::GonkGPSGeolo
   , mSupportsSingleShot(false)
   , mSupportsTimeInjection(false)
   , mGpsInterface(nullptr)
 {
 }
 
 GonkGPSGeolocationProvider::~GonkGPSGeolocationProvider()
 {
-  ShutdownNow();
+  MOZ_ASSERT(NS_IsMainThread());
+  MOZ_ASSERT(!mStarted, "Must call Shutdown before destruction");
+
   sSingleton = nullptr;
 }
 
 already_AddRefed<GonkGPSGeolocationProvider>
 GonkGPSGeolocationProvider::GetSingleton()
 {
+  MOZ_ASSERT(NS_IsMainThread());
+
   if (!sSingleton)
     sSingleton = new GonkGPSGeolocationProvider();
 
   NS_ADDREF(sSingleton);
   return sSingleton;
 }
 
 const GpsInterface*
@@ -278,16 +304,18 @@ GonkGPSGeolocationProvider::GetGPSInterf
     return nullptr;
   }
   return result;
 }
 
 void
 GonkGPSGeolocationProvider::RequestDataConnection()
 {
+  MOZ_ASSERT(NS_IsMainThread());
+
   if (!mRIL) {
     return;
   }
 
   // TODO: Bug 772747 - We should ask NetworkManager or RIL to open
   // SUPL type connection for us.
   const nsAdoptingString& apnName = Preferences::GetString("geo.gps.apn.name");
   const nsAdoptingString& apnUser = Preferences::GetString("geo.gps.apn.user");
@@ -299,16 +327,18 @@ GonkGPSGeolocationProvider::RequestDataC
                         3 /* DATACALL_AUTH_PAP_OR_CHAP */,
                         NS_LITERAL_STRING("IP") /* pdptype */);
   }
 }
 
 void
 GonkGPSGeolocationProvider::ReleaseDataConnection()
 {
+  MOZ_ASSERT(NS_IsMainThread());
+
   if (!mRIL) {
     return;
   }
 
   if (mCid.IsEmpty()) {
     // We didn't request data call or the data call failed, bail out.
     return;
   }
@@ -416,16 +446,17 @@ GonkGPSGeolocationProvider::Init()
   }
 
   NS_DispatchToMainThread(NS_NewRunnableMethod(this, &GonkGPSGeolocationProvider::StartGPS));
 }
 
 void
 GonkGPSGeolocationProvider::StartGPS()
 {
+  MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(mGpsInterface);
 
   int32_t update = Preferences::GetInt("geo.default.update", kDefaultPeriod);
 
   if (mSupportsMSA || mSupportsMSB) {
     SetupAGPS();
   }
 
@@ -452,17 +483,17 @@ GonkGPSGeolocationProvider::StartGPS()
 
   mGpsInterface->start();
 }
 
 void
 GonkGPSGeolocationProvider::SetupAGPS()
 {
   MOZ_ASSERT(NS_IsMainThread());
-  MOZ_ASSERT(mAGpsRilInterface);
+  MOZ_ASSERT(mAGpsInterface);
 
   const nsAdoptingCString& suplServer = Preferences::GetCString("geo.gps.supl_server");
   int32_t suplPort = Preferences::GetInt("geo.gps.supl_port", -1);
   if (!suplServer.IsEmpty() && suplPort > 0) {
     mAGpsInterface->set_server(AGPS_TYPE_SUPL, suplServer.get(), suplPort);
   } else {
     NS_WARNING("Cannot get SUPL server settings");
     return;
@@ -478,16 +509,18 @@ GonkGPSGeolocationProvider::SetupAGPS()
   }
 
   return;
 }
 
 NS_IMETHODIMP
 GonkGPSGeolocationProvider::Startup()
 {
+  MOZ_ASSERT(NS_IsMainThread());
+
   if (mStarted) {
     return NS_OK;
   }
 
   if (!mInitThread) {
     nsresult rv = NS_NewThread(getter_AddRefs(mInitThread));
     NS_ENSURE_SUCCESS(rv, rv);
   }
@@ -497,46 +530,47 @@ GonkGPSGeolocationProvider::Startup()
 
   mStarted = true;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 GonkGPSGeolocationProvider::Watch(nsIGeolocationUpdate* aCallback)
 {
+  MOZ_ASSERT(NS_IsMainThread());
+
   mLocationCallback = aCallback;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 GonkGPSGeolocationProvider::Shutdown()
 {
+  MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(mInitThread);
 
   if (!mStarted) {
     return NS_OK;
   }
+  mStarted = false;
 
-  mInitThread->Dispatch(NS_NewRunnableMethod(this, &GonkGPSGeolocationProvider::ShutdownNow),
+  if (mRIL) {
+    mRIL->UnregisterDataCallCallback(this);
+  }
+
+  mInitThread->Dispatch(NS_NewRunnableMethod(this, &GonkGPSGeolocationProvider::ShutdownGPS),
                         NS_DISPATCH_NORMAL);
 
   return NS_OK;
 }
 
 void
-GonkGPSGeolocationProvider::ShutdownNow()
+GonkGPSGeolocationProvider::ShutdownGPS()
 {
-  if (!mStarted) {
-    return;
-  }
-  mStarted = false;
-
-  if (mRIL) {
-    mRIL->UnregisterDataCallCallback(this);
-  }
+  MOZ_ASSERT(!mStarted, "Should only be called after Shutdown");
 
   if (mGpsInterface) {
     mGpsInterface->stop();
     mGpsInterface->cleanup();
   }
 
   mInitThread = nullptr;
 }
@@ -547,16 +581,17 @@ GonkGPSGeolocationProvider::SetHighAccur
   return NS_OK;
 }
 
 /** nsIRILDataCallback interface **/
 
 NS_IMETHODIMP
 GonkGPSGeolocationProvider::DataCallStateChanged(nsIRILDataCallInfo* aDataCall)
 {
+  MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(aDataCall);
   MOZ_ASSERT(mAGpsInterface);
   nsCOMPtr<nsIRILDataCallInfo> datacall = aDataCall;
 
   uint32_t callState;
   nsresult rv = datacall->GetState(&callState);
   NS_ENSURE_SUCCESS(rv, rv);
 
--- a/dom/system/gonk/GonkGPSGeolocationProvider.h
+++ b/dom/system/gonk/GonkGPSGeolocationProvider.h
@@ -58,17 +58,17 @@ private:
 
   static GpsCallbacks mCallbacks;
   static AGpsCallbacks mAGPSCallbacks;
   static AGpsRilCallbacks mAGPSRILCallbacks;
 
   void Init();
   void SetupAGPS();
   void StartGPS();
-  void ShutdownNow();
+  void ShutdownGPS();
   void RequestDataConnection();
   void ReleaseDataConnection();
   void RequestSetID(uint32_t flags);
   void SetReferenceLocation();
 
   const GpsInterface* GetGPSInterface();
 
   static GonkGPSGeolocationProvider* sSingleton;
--- a/dom/telephony/Telephony.cpp
+++ b/dom/telephony/Telephony.cpp
@@ -15,72 +15,30 @@
 #include "nsCharSeparatedTokenizer.h"
 #include "nsContentUtils.h"
 #include "nsDOMClassInfo.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsNetUtil.h"
 #include "nsServiceManagerUtils.h"
 #include "SystemWorkerManager.h"
 #include "nsRadioInterfaceLayer.h"
+#include "nsTArrayHelpers.h"
 
 #include "CallEvent.h"
 #include "TelephonyCall.h"
 
 USING_TELEPHONY_NAMESPACE
 using namespace mozilla::dom::gonk;
 
 namespace {
 
 typedef nsAutoTArray<Telephony*, 2> TelephonyList;
 
 TelephonyList* gTelephonyList;
 
-template <class T>
-inline nsresult
-nsTArrayToJSArray(JSContext* aCx, JSObject* aGlobal,
-                  const nsTArray<nsRefPtr<T> >& aSourceArray,
-                  JSObject** aResultArray)
-{
-  NS_ASSERTION(aCx, "Null context!");
-  NS_ASSERTION(aGlobal, "Null global!");
-
-  JSAutoRequest ar(aCx);
-  JSAutoCompartment ac(aCx, aGlobal);
-
-  JSObject* arrayObj;
-
-  if (aSourceArray.IsEmpty()) {
-    arrayObj = JS_NewArrayObject(aCx, 0, nullptr);
-  } else {
-    uint32_t valLength = aSourceArray.Length();
-    mozilla::ScopedDeleteArray<jsval> valArray(new jsval[valLength]);
-    JS::AutoArrayRooter tvr(aCx, 0, valArray);
-    for (uint32_t index = 0; index < valLength; index++) {
-      nsISupports* obj = aSourceArray[index]->ToISupports();
-      nsresult rv =
-        nsContentUtils::WrapNative(aCx, aGlobal, obj, &valArray[index]);
-      NS_ENSURE_SUCCESS(rv, rv);
-      tvr.changeLength(index + 1);
-    }
-    arrayObj = JS_NewArrayObject(aCx, valLength, valArray);
-  }
-
-  if (!arrayObj) {
-    return NS_ERROR_OUT_OF_MEMORY;
-  }
-
-  // XXX This is not what Jonas wants. He wants it to be live.
-  if (!JS_FreezeObject(aCx, arrayObj)) {
-    return NS_ERROR_FAILURE;
-  }
-
-  *aResultArray = arrayObj;
-  return NS_OK;
-}
-
 } // anonymous namespace
 
 Telephony::Telephony()
 : mActiveCall(nullptr), mCallsArray(nullptr), mRooted(false)
 {
   if (!gTelephonyList) {
     gTelephonyList = new TelephonyList();
   }
@@ -329,19 +287,17 @@ NS_IMETHODIMP
 Telephony::GetCalls(jsval* aCalls)
 {
   JSObject* calls = mCallsArray;
   if (!calls) {
     nsresult rv;
     nsIScriptContext* sc = GetContextForEventHandlers(&rv);
     NS_ENSURE_SUCCESS(rv, rv);
     if (sc) {
-      rv =
-        nsTArrayToJSArray(sc->GetNativeContext(),
-                          sc->GetNativeGlobal(), mCalls, &calls);
+      rv = nsTArrayToJSArray(sc->GetNativeContext(), mCalls, &calls);
       NS_ENSURE_SUCCESS(rv, rv);
 
       if (!mRooted) {
         NS_HOLD_JS_OBJECTS(this, Telephony);
         mRooted = true;
       }
 
       mCallsArray = calls;
--- a/dom/tests/mochitest/general/test_interfaces.html
+++ b/dom/tests/mochitest/general/test_interfaces.html
@@ -532,17 +532,18 @@ var interfaceNamesInGlobalScope =
     "CameraManager",
     "CSSSupportsRule",
     "MozMobileCellInfo",
     "MozCanvasPrintState",
     "TCPSocket",
     "MozTimeManager",
     "MozNavigatorTime",
     "PermissionSettings",
-    "DataErrorEvent"
+    "DataErrorEvent",
+    "DataChannel"
   ]
 
 for (var i in SpecialPowers.Components.interfaces) {
   var s = i.toString();
   var name = null;
   if (s.indexOf("nsIDOM") == 0) {
     name = s.substring("nsIDOM".length);
   } else if (s.indexOf("nsI") == 0) {
--- a/dom/tests/mochitest/pointerlock/pointerlock_utils.js
+++ b/dom/tests/mochitest/pointerlock/pointerlock_utils.js
@@ -50,10 +50,13 @@ if (window.opener) {
   // Ensure the full-screen api is enabled, and will be disabled on test exit.
   SpecialPowers.setBoolPref("full-screen-api.enabled", true);
 
   // Disable the requirement for trusted contexts only, so the tests are easier to write.
   SpecialPowers.setBoolPref("full-screen-api.allow-trusted-requests-only", false);
 }
 
 addLoadEvent(function() {
-  SimpleTest.waitForFocus(start);
+  if (typeof start !== 'undefined') {
+    SimpleTest.waitForFocus(start);
+  }
 });
+
--- a/embedding/components/printingui/src/win/nsPrintDialogUtil.cpp
+++ b/embedding/components/printingui/src/win/nsPrintDialogUtil.cpp
@@ -404,17 +404,17 @@ typedef struct {
 
 // These are the control ids used in the dialog and 
 // defined by MS-Windows in commdlg.h
 static PropKeyInfo gAllPropKeys[] = {
     {"printFramesTitleWindows", grp3},
     {"asLaidOutWindows", rad4},
     {"selectedFrameWindows", rad5},
     {"separateFramesWindows", rad6},
-    {NULL, NULL}};
+    {NULL, 0}};
 
 //--------------------------------------------------------
 //--------------------------------------------------------
 //--------------------------------------------------------
 //--------------------------------------------------------
 // Get the absolute coords of the child windows relative
 // to its parent window
 static void GetLocalRect(HWND aWnd, RECT& aRect, HWND aParent)
@@ -878,17 +878,17 @@ ShowNativePrintDialog(HWND              
   prntdlg.lpSetupTemplateName = NULL;
   prntdlg.hPrintTemplate      = NULL;
   prntdlg.hSetupTemplate      = NULL;
 
   prntdlg.hInstance           = NULL;
   prntdlg.lpPrintTemplateName = NULL;
 
   if (!ShouldExtendPrintDialog()) {
-    prntdlg.lCustData         = NULL;
+    prntdlg.lCustData         = 0;
     prntdlg.lpfnPrintHook     = NULL;
   } else {
     // Set up print dialog "hook" procedure for extending the dialog
     prntdlg.lCustData         = (DWORD)howToEnableFrameUI;
     prntdlg.lpfnPrintHook     = (LPPRINTHOOKPROC)PrintHookProc;
     prntdlg.Flags            |= PD_ENABLEPRINTHOOK;
   }
 
--- a/embedding/components/printingui/src/win/nsPrintingPromptService.cpp
+++ b/embedding/components/printingui/src/win/nsPrintingPromptService.cpp
@@ -36,19 +36,16 @@
 #include "nsIDocShell.h"
 #include "nsIInterfaceRequestorUtils.h"
 
 
 static const char *kPrintProgressDialogURL  = "chrome://global/content/printProgress.xul";
 static const char *kPrtPrvProgressDialogURL = "chrome://global/content/printPreviewProgress.xul";
 static const char *kPageSetupDialogURL      = "chrome://global/content/printPageSetup.xul";
 
-// Static Data 
-static HINSTANCE gInstance;
-
 /****************************************************************
  ************************* ParamBlock ***************************
  ****************************************************************/
 
 class ParamBlock {
 
 public:
     ParamBlock() 
@@ -91,17 +88,16 @@ nsPrintingPromptService::Init()
     return rv;
 }
 
 //-----------------------------------------------------------
 HWND
 nsPrintingPromptService::GetHWNDForDOMWindow(nsIDOMWindow *aWindow)
 {
     nsCOMPtr<nsIWebBrowserChrome> chrome;
-    HWND hWnd = NULL;
 
     // We might be embedded so check this path first
     if (mWatcher) {
         nsCOMPtr<nsIDOMWindow> fosterParent;
         if (!aWindow) 
         {   // it will be a dependent window. try to find a foster parent.
             mWatcher->GetActiveWindow(getter_AddRefs(fosterParent));
             aWindow = fosterParent;
--- a/gfx/2d/PathCG.h
+++ b/gfx/2d/PathCG.h
@@ -14,25 +14,23 @@ namespace gfx {
 
 class PathCG;
 
 class PathBuilderCG : public PathBuilder
 {
 public:
   // absorbs a reference of aPath
   PathBuilderCG(CGMutablePathRef aPath, FillRule aFillRule)
-    : mFigureActive(false)
-    , mFillRule(aFillRule)
+    : mFillRule(aFillRule)
   {
       mCGPath = aPath;
   }
 
   PathBuilderCG(FillRule aFillRule)
-    : mFigureActive(false)
-    , mFillRule(aFillRule)
+    : mFillRule(aFillRule)
   {
       mCGPath = CGPathCreateMutable();
   }
 
   virtual ~PathBuilderCG();
 
   virtual void MoveTo(const Point &aPoint);
   virtual void LineTo(const Point &aPoint);
@@ -49,17 +47,16 @@ public:
   virtual TemporaryRef<Path> Finish();
 
 private:
   friend class PathCG;
 
   void EnsureActive(const Point &aPoint);
 
   CGMutablePathRef mCGPath;
-  bool mFigureActive;
   Point mCurrentPoint;
   Point mBeginPoint;
   FillRule mFillRule;
 };
 
 class PathCG : public Path
 {
 public:
--- a/gfx/gl/GLContextProviderWGL.cpp
+++ b/gfx/gl/GLContextProviderWGL.cpp
@@ -214,17 +214,17 @@ WGLLibrary::EnsureInitialized(bool aUseM
     fMakeCurrent(curDC, curCtx);
 
     if (mHasRobustness) {
         fDeleteContext(mWindowGLContext);
 
         int attribs[] = {
             LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
             LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
-            NULL
+            0
         };
 
         mWindowGLContext = fCreateContextAttribs(mWindowDC, NULL, attribs);
         if (!mWindowGLContext) {
             mHasRobustness = false;
             mWindowGLContext = fCreateContext(mWindowDC);
         }
     }
@@ -498,20 +498,18 @@ GLContextWGL::ResizeOffscreen(const gfxI
         };
 
         HANDLE newbuf = sWGLLib[mLibType].fCreatePbuffer(sWGLLib[mLibType].GetWindowDC(), mPixelFormat,
                                                    aNewSize.width, aNewSize.height,
                                                    pbattrs);
         if (!newbuf)
             return false;
 
-        bool isCurrent = false;
         if (sWGLLib[mLibType].fGetCurrentContext() == mContext) {
             sWGLLib[mLibType].fMakeCurrent(NULL, NULL);
-            isCurrent = true;
         }
 
         sWGLLib[mLibType].fDestroyPbuffer(mPBuffer);
 
         mPBuffer = newbuf;
         mDC = sWGLLib[mLibType].fGetPbufferDC(mPBuffer);
 
         mOffscreenSize = aNewSize;
@@ -553,17 +551,17 @@ GLContextProviderWGL::CreateForWindow(ns
     HGLRC context;
 
     GLContextWGL *shareContext = GetGlobalContextWGL();
 
     if (sWGLLib[libToUse].HasRobustness()) {
         int attribs[] = {
             LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
             LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
-            NULL
+            0
         };
 
         context = sWGLLib[libToUse].fCreateContextAttribs(dc,
                                                     shareContext ? shareContext->Context() : nullptr,
                                                     attribs);
         if (!context && shareContext) {
             context = sWGLLib[libToUse].fCreateContextAttribs(dc, nullptr, attribs);
             if (context) {
@@ -673,27 +671,27 @@ CreatePBufferOffscreenContext(const gfxI
     HDC pbdc = sWGLLib[aLibToUse].fGetPbufferDC(pbuffer);
     NS_ASSERTION(pbdc, "expected a dc");
 
     HGLRC context;
     if (sWGLLib[aLibToUse].HasRobustness()) {
         int attribs[] = {
             LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
             LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
-            NULL
+            0
         };
 
         context = sWGLLib[aLibToUse].fCreateContextAttribs(pbdc, nullptr, attribs);
     } else {
         context = sWGLLib[aLibToUse].fCreateContext(pbdc);
     }
 
     if (!context) {
         sWGLLib[aLibToUse].fDestroyPbuffer(pbuffer);
-        return false;
+        return nullptr;
     }
 
     nsRefPtr<GLContextWGL> glContext = new GLContextWGL(aFormat,
                                                         nullptr,
                                                         pbuffer,
                                                         pbdc,
                                                         context,
                                                         chosenFormat,
@@ -719,17 +717,17 @@ CreateWindowOffscreenContext(const Conte
         return nullptr;
     }
     
     HGLRC context = sWGLLib[libToUse].fCreateContext(dc);
     if (sWGLLib[libToUse].HasRobustness()) {
         int attribs[] = {
             LOCAL_WGL_CONTEXT_FLAGS_ARB, LOCAL_WGL_CONTEXT_ROBUST_ACCESS_BIT_ARB,
             LOCAL_WGL_CONTEXT_RESET_NOTIFICATION_STRATEGY_ARB, LOCAL_WGL_LOSE_CONTEXT_ON_RESET_ARB,
-            NULL
+            0
         };
 
         context = sWGLLib[libToUse].fCreateContextAttribs(dc, shareContext->Context(), attribs);
     } else {
         context = sWGLLib[libToUse].fCreateContext(dc);
         if (context && shareContext &&
             !sWGLLib[libToUse].fShareLists(shareContext->Context(), context))
         {
@@ -816,17 +814,17 @@ GLContextProviderWGL::GetGlobalContext(c
         gGlobalContext[libToUse] = new GLContextWGL(ContextFormat(ContextFormat::BasicRGB24), 
                                           nullptr,
                                           sWGLLib[libToUse].GetWindowDC(), 
                                           sWGLLib[libToUse].GetWindowGLContext(),
                                           libToUse);
         if (!gGlobalContext[libToUse]->Init()) {
             NS_WARNING("Global context GLContext initialization failed?");
             gGlobalContext[libToUse] = nullptr;
-            return false;
+            return nullptr;
         }
 
         gGlobalContext[libToUse]->SetIsGlobalSharedContext(true);
     }
 
     return static_cast<GLContext*>(gGlobalContext[libToUse]);
 }
 
--- a/gfx/layers/FrameMetrics.h
+++ b/gfx/layers/FrameMetrics.h
@@ -41,20 +41,26 @@ public:
     , mDevPixelsPerCSSPixel(1)
     , mMayHaveTouchListeners(false)
   {}
 
   // Default copy ctor and operator= are fine
 
   bool operator==(const FrameMetrics& aOther) const
   {
-    return (mViewport.IsEqualEdges(aOther.mViewport) &&
-            mScrollOffset == aOther.mScrollOffset &&
-            mDisplayPort.IsEqualEdges(aOther.mDisplayPort) &&
-            mScrollId == aOther.mScrollId);
+    return mCompositionBounds.IsEqualEdges(aOther.mCompositionBounds) &&
+           mContentRect.IsEqualEdges(aOther.mContentRect) &&
+           mDisplayPort.IsEqualEdges(aOther.mDisplayPort) &&
+           mViewport.IsEqualEdges(aOther.mViewport) &&
+           mScrollOffset == aOther.mScrollOffset &&
+           mScrollId == aOther.mScrollId &&
+           mScrollableRect.IsEqualEdges(aOther.mScrollableRect) &&
+           mResolution == aOther.mResolution &&
+           mDevPixelsPerCSSPixel == aOther.mDevPixelsPerCSSPixel &&
+           mMayHaveTouchListeners == aOther.mMayHaveTouchListeners;
   }
   bool operator!=(const FrameMetrics& aOther) const
   {
     return !operator==(aOther);
   }
 
   bool IsDefault() const
   {
--- a/gfx/layers/Layers.cpp
+++ b/gfx/layers/Layers.cpp
@@ -493,16 +493,25 @@ Layer::SetAnimations(const AnimationArra
         endValue->SetFloatValue(segment.endState().get_float());
       }
     }
   }
 
   Mutated();
 }
 
+void
+Layer::ApplyPendingUpdatesToSubtree()
+{
+  ApplyPendingUpdatesForThisTransaction();
+  for (Layer* child = GetFirstChild(); child; child = child->GetNextSibling()) {
+    child->ApplyPendingUpdatesToSubtree();
+  }
+}
+
 bool
 Layer::CanUseOpaqueSurface()
 {
   // If the visible content in the layer is opaque, there is no need
   // for an alpha channel.
   if (GetContentFlags() & CONTENT_OPAQUE)
     return true;
   // Also, if this layer is the bottommost layer in a container which
@@ -660,16 +669,26 @@ Layer::GetLocalTransform()
     transform = mTransform;
   if (ContainerLayer* c = AsContainerLayer()) {
     transform.Scale(c->GetPreXScale(), c->GetPreYScale(), 1.0f);
   }
   transform.ScalePost(mPostXScale, mPostYScale, 1.0f);
   return transform;
 }
 
+void
+Layer::ApplyPendingUpdatesForThisTransaction()
+{
+  if (mPendingTransform && *mPendingTransform != mTransform) {
+    mTransform = *mPendingTransform;
+    Mutated();
+  }
+  mPendingTransform = nullptr;
+}
+
 const float
 Layer::GetLocalOpacity()
 {
    if (ShadowLayer* shadow = AsShadowLayer())
     return shadow->GetShadowOpacity();
   return mOpacity;
 }
 
--- a/gfx/layers/Layers.h
+++ b/gfx/layers/Layers.h
@@ -696,23 +696,37 @@ public:
    * CONSTRUCTION PHASE ONLY
    * Tell this layer what its transform should be. The transformation
    * is applied when compositing the layer into its parent container.
    * XXX Currently only transformations corresponding to 2D affine transforms
    * are supported.
    */
   void SetBaseTransform(const gfx3DMatrix& aMatrix)
   {
+    mPendingTransform = nullptr;
     if (mTransform == aMatrix) {
       return;
     }
     mTransform = aMatrix;
     Mutated();
   }
 
+  /**
+   * Can be called at any time.
+   *
+   * Like SetBaseTransform(), but can be called before the next
+   * transform (i.e. outside an open transaction).  Semantically, this
+   * method enqueues a new transform value to be set immediately after
+   * the next transaction is opened.
+   */
+  void SetBaseTransformForNextTransaction(const gfx3DMatrix& aMatrix)
+  {
+    mPendingTransform = new gfx3DMatrix(aMatrix);
+  }
+
   void SetPostScale(float aXScale, float aYScale)
   {
     mPostXScale = aXScale;
     mPostYScale = aYScale;
     Mutated();
   }
 
   /**
@@ -758,16 +772,25 @@ public:
   float GetPostXScale() { return mPostXScale; }
   float GetPostYScale() { return mPostYScale; }
   bool GetIsFixedPosition() { return mIsFixedPosition; }
   gfxPoint GetFixedPositionAnchor() { return mAnchor; }
   Layer* GetMaskLayer() { return mMaskLayer; }
 
   AnimationArray& GetAnimations() { return mAnimations; }
   InfallibleTArray<AnimData>& GetAnimationData() { return mAnimationData; }
+
+  /**
+   * DRAWING PHASE ONLY
+   *
+   * Apply pending changes to layers before drawing them, if those
+   * pending changes haven't been overridden by later changes.
+   */
+  void ApplyPendingUpdatesToSubtree();
+
   /**
    * DRAWING PHASE ONLY
    *
    * Write layer-subtype-specific attributes into aAttrs.  Used to
    * synchronize layer attributes to their shadows'.
    */
   virtual void FillSpecificAttributes(SpecificLayerAttributes& aAttrs) { }
 
@@ -974,16 +997,17 @@ public:
   void AddInvalidRect(const nsIntRect& aRect) { mInvalidRegion.Or(mInvalidRegion, aRect); }
 
   /**
    * Clear the invalid rect, marking the layer as being identical to what is currently
    * composited.
    */
   void ClearInvalidRect() { mInvalidRegion.SetEmpty(); }
 
+  void ApplyPendingUpdatesForThisTransaction();
 
 #ifdef DEBUG
   void SetDebugColorIndex(uint32_t aIndex) { mDebugColorIndex = aIndex; }
   uint32_t GetDebugColorIndex() { return mDebugColorIndex; }
 #endif
 
 protected:
   Layer(LayerManager* aManager, void* aImplData);
@@ -1028,16 +1052,20 @@ protected:
   ContainerLayer* mParent;
   Layer* mNextSibling;
   Layer* mPrevSibling;
   void* mImplData;
   nsRefPtr<Layer> mMaskLayer;
   gfx::UserData mUserData;
   nsIntRegion mVisibleRegion;
   gfx3DMatrix mTransform;
+  // A mutation of |mTransform| that we've queued to be applied at the
+  // end of the next transaction (if nothing else overrides it in the
+  // meantime).
+  nsAutoPtr<gfx3DMatrix> mPendingTransform;
   float mPostXScale;
   float mPostYScale;
   gfx3DMatrix mEffectiveTransform;
   AnimationArray mAnimations;
   InfallibleTArray<AnimData> mAnimationData;
   float mOpacity;
   nsIntRect mClipRect;
   nsIntRect mTileSourceRect;
--- a/gfx/layers/TiledLayerBuffer.h
+++ b/gfx/layers/TiledLayerBuffer.h
@@ -160,17 +160,17 @@ public:
    * prior to this being called. aTiledBuffer is copy constructed and
    * is retained until it has been uploaded/copyed and unlocked.
    */
   virtual void PaintedTiledLayerBuffer(const BasicTiledLayerBuffer* aTiledBuffer) = 0;
 };
 
 // Normal integer division truncates towards zero,
 // we instead want to floor to hangle negative numbers.
-static int floor_div(int a, int b)
+static inline int floor_div(int a, int b)
 {
   int rem = a % b;
   int div = a/b;
   if (rem == 0) {
     return div;
   } else {
     // If the signs are different substract 1.
     int sub;
@@ -360,17 +360,20 @@ TiledLayerBuffer<Derived, Tile>::Update(
 #endif
         y += height;
         continue;
       }
 
       int tileX = floor_div(x - newBufferOrigin.x, GetTileLength());
       int tileY = floor_div(y - newBufferOrigin.y, GetTileLength());
       int index = tileX * mRetainedHeight + tileY;
-      NS_ABORT_IF_FALSE(index >= 0 &&