Bug 1534395 - Rename TabChild to BrowserChild. r=nika
authorRyan Hunt <rhunt@eqrion.net>
Tue, 09 Apr 2019 17:39:01 -0500
changeset 529755 9813ce146bc725dd83e8ff6f41bfc36dd17d935b
parent 529754 9998ccf0c05f87940376b736fb587355acf03c2c
child 529756 5a2478c53c19d8bdc10539572bee37c4586dfdcc
push id11265
push userffxbld-merge
push dateMon, 13 May 2019 10:53:39 +0000
treeherdermozilla-beta@77e0fe8dbdd3 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewersnika
bugs1534395
milestone68.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 1534395 - Rename TabChild to BrowserChild. r=nika This commit renames TabChild to BrowserChild. Differential Revision: https://phabricator.services.mozilla.com/D28135
accessible/base/DocManager.cpp
accessible/base/NotificationController.cpp
accessible/generic/DocAccessible.cpp
accessible/ipc/win/DocAccessibleChild.cpp
accessible/ipc/win/DocAccessibleChild.h
accessible/windows/msaa/DocAccessibleWrap.cpp
browser/actors/BrowserTabChild.jsm
browser/base/content/content.js
browser/base/content/tab-content.js
browser/modules/AsyncTabSwitcher.jsm
devtools/server/actors/targets/browsing-context.js
docshell/base/nsDocShell.cpp
docshell/base/nsDocShell.h
docshell/base/nsDocShellTreeOwner.cpp
docshell/base/nsIDocShell.idl
docshell/shistory/ChildSHistory.cpp
dom/base/Document.cpp
dom/base/InProcessBrowserChildMessageManager.cpp
dom/base/InProcessBrowserChildMessageManager.h
dom/base/InProcessTabChildMessageManager.cpp
dom/base/InProcessTabChildMessageManager.h
dom/base/Navigator.cpp
dom/base/TabGroup.cpp
dom/base/TabGroup.h
dom/base/moz.build
dom/base/nsCCUncollectableMarker.cpp
dom/base/nsContentPermissionHelper.cpp
dom/base/nsContentPolicy.cpp
dom/base/nsContentUtils.cpp
dom/base/nsContentUtils.h
dom/base/nsDOMWindowUtils.cpp
dom/base/nsFocusManager.cpp
dom/base/nsFrameLoader.cpp
dom/base/nsFrameLoader.h
dom/base/nsFrameMessageManager.cpp
dom/base/nsGlobalWindowInner.cpp
dom/base/nsGlobalWindowInner.h
dom/base/nsGlobalWindowOuter.cpp
dom/base/nsWrapperCache.h
dom/base/test/browser_messagemanager_unload.js
dom/base/test/chrome/file_bug1139964.xul
dom/browser-element/BrowserElementChildPreload.js
dom/browser-element/BrowserElementParent.h
dom/canvas/CanvasUtils.cpp
dom/events/EventDispatcher.cpp
dom/events/EventStateManager.cpp
dom/events/test/test_bug1412775.xul
dom/indexedDB/ActorsChild.cpp
dom/indexedDB/IDBFactory.cpp
dom/indexedDB/IDBFactory.h
dom/interfaces/base/nsIRemoteTab.idl
dom/ipc/BrowserBridgeChild.cpp
dom/ipc/BrowserBridgeChild.h
dom/ipc/BrowserChild.cpp
dom/ipc/BrowserChild.h
dom/ipc/BrowserParent.cpp
dom/ipc/BrowserParent.h
dom/ipc/CoalescedMouseData.cpp
dom/ipc/CoalescedMouseData.h
dom/ipc/ContentChild.cpp
dom/ipc/ContentChild.h
dom/ipc/ContentParent.cpp
dom/ipc/ContentProcessManager.cpp
dom/ipc/PBrowser.ipdl
dom/ipc/PContent.ipdl
dom/ipc/PTabContext.ipdlh
dom/ipc/ProcessHangMonitor.cpp
dom/ipc/ProcessHangMonitor.h
dom/ipc/TabChild.cpp
dom/ipc/TabChild.h
dom/ipc/TabContext.cpp
dom/ipc/TabContext.h
dom/ipc/WindowGlobalChild.cpp
dom/ipc/WindowGlobalChild.h
dom/ipc/moz.build
dom/network/TCPServerSocketChild.cpp
dom/network/TCPSocketChild.cpp
dom/payments/PaymentRequestManager.cpp
dom/plugins/base/nsPluginInstanceOwner.cpp
dom/plugins/ipc/PluginWidgetChild.cpp
dom/security/nsCSPContext.cpp
dom/security/nsContentSecurityManager.cpp
dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp
dom/workers/WorkerLoadInfo.cpp
dom/workers/WorkerLoadInfo.h
dom/workers/WorkerPrivate.cpp
dom/workers/test/test_multi_sharedWorker_lifetimes.html
gfx/ipc/GPUProcessManager.cpp
gfx/layers/AnimationInfo.cpp
gfx/layers/apz/util/APZEventState.cpp
gfx/layers/apz/util/ContentProcessController.cpp
gfx/layers/apz/util/ContentProcessController.h
gfx/layers/apz/util/InputAPZContext.h
gfx/layers/client/ClientLayerManager.cpp
gfx/layers/ipc/APZCTreeManagerParent.cpp
gfx/layers/ipc/APZChild.cpp
gfx/layers/ipc/CompositorBridgeChild.cpp
gfx/layers/ipc/CompositorBridgeChild.h
gfx/layers/ipc/CompositorManagerChild.cpp
gfx/layers/ipc/PCompositorBridge.ipdl
gfx/layers/ipc/ShadowLayers.h
gfx/layers/wr/WebRenderLayerManager.cpp
hal/sandbox/SandboxHal.cpp
ipc/glue/BackgroundChildImpl.cpp
js/ipc/JavaScriptShared.cpp
js/xpconnect/src/XPCJSRuntime.cpp
layout/base/PresShell.cpp
layout/base/nsPresContext.cpp
layout/generic/nsPluginFrame.cpp
layout/painting/nsDisplayList.cpp
media/webrtc/signaling/src/peerconnection/PeerConnectionMedia.cpp
mobile/android/components/geckoview/GeckoViewHistory.cpp
netwerk/base/LoadInfo.cpp
netwerk/ipc/NeckoChild.cpp
netwerk/ipc/NeckoCommon.h
netwerk/protocol/ftp/FTPChannelChild.cpp
netwerk/protocol/http/HttpChannelChild.cpp
netwerk/protocol/websocket/WebSocketChannelChild.cpp
toolkit/components/perfmonitoring/PerformanceUtils.cpp
toolkit/components/places/History.cpp
toolkit/components/printingui/ipc/nsPrintingProxy.cpp
toolkit/components/windowwatcher/test/browser_new_content_window_chromeflags.js
toolkit/recordreplay/ipc/ParentGraphics.cpp
uriloader/exthandler/ExternalHelperAppChild.cpp
uriloader/exthandler/ExternalHelperAppChild.h
uriloader/exthandler/nsExternalHelperAppService.cpp
uriloader/prefetch/OfflineCacheUpdateChild.cpp
widget/EventMessageList.h
widget/PluginWidgetProxy.cpp
widget/PluginWidgetProxy.h
widget/PuppetWidget.cpp
widget/PuppetWidget.h
widget/android/GeckoEditableSupport.cpp
widget/android/GeckoEditableSupport.h
widget/android/nsAppShell.cpp
widget/nsBaseWidget.cpp
widget/nsColorPickerProxy.cpp
widget/nsDragServiceProxy.cpp
widget/nsFilePickerProxy.cpp
widget/nsIWidget.h
widget/windows/KeyboardLayout.cpp
widget/windows/nsWindow.cpp
--- a/accessible/base/DocManager.cpp
+++ b/accessible/base/DocManager.cpp
@@ -28,17 +28,17 @@
 #include "nsDocShellLoadTypes.h"
 #include "nsIChannel.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIWebNavigation.h"
 #include "nsServiceManagerUtils.h"
 #include "nsIWebProgress.h"
 #include "nsCoreUtils.h"
 #include "nsXULAppAPI.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 using namespace mozilla::dom;
 
 StaticAutoPtr<nsTArray<DocAccessibleParent*>> DocManager::sRemoteDocuments;
 nsRefPtrHashtable<nsPtrHashKey<const DocAccessibleParent>,
                   xpcAccessibleDocument>* DocManager::sRemoteXPCDocumentCache =
--- a/accessible/base/NotificationController.cpp
+++ b/accessible/base/NotificationController.cpp
@@ -6,17 +6,17 @@
 #include "NotificationController.h"
 
 #include "DocAccessible-inl.h"
 #include "DocAccessibleChild.h"
 #include "nsEventShell.h"
 #include "TextLeafAccessible.h"
 #include "TextUpdater.h"
 
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/PresShell.h"
 #include "mozilla/Telemetry.h"
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 using namespace mozilla::dom;
 
@@ -915,20 +915,20 @@ void NotificationController::WillRefresh
 
       ipcDoc = new DocAccessibleChild(childDoc, parentIPCDoc->Manager());
       childDoc->SetIPCDoc(ipcDoc);
 
 #if defined(XP_WIN)
       parentIPCDoc->ConstructChildDocInParentProcess(
           ipcDoc, id, AccessibleWrap::GetChildIDFor(childDoc));
 #else
-      nsCOMPtr<nsIBrowserChild> tabChild =
+      nsCOMPtr<nsIBrowserChild> browserChild =
           do_GetInterface(mDocument->DocumentNode()->GetDocShell());
-      if (tabChild) {
-        static_cast<TabChild*>(tabChild.get())
+      if (browserChild) {
+        static_cast<BrowserChild*>(browserChild.get())
             ->SendPDocAccessibleConstructor(ipcDoc, parentIPCDoc, id, 0, 0);
       }
 #endif
     }
   }
 
   mObservingState = eRefreshObserving;
   if (!mDocument) return;
--- a/accessible/generic/DocAccessible.cpp
+++ b/accessible/generic/DocAccessible.cpp
@@ -39,17 +39,17 @@
 #include "nsFocusManager.h"
 #include "mozilla/ArrayUtils.h"
 #include "mozilla/Assertions.h"
 #include "mozilla/EventStateManager.h"
 #include "mozilla/EventStates.h"
 #include "mozilla/HTMLEditor.h"
 #include "mozilla/PresShell.h"
 #include "mozilla/TextEditor.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/DocumentType.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/MutationEventBinding.h"
 
 using namespace mozilla;
 using namespace mozilla::a11y;
 
 ////////////////////////////////////////////////////////////////////////////////
@@ -1354,36 +1354,37 @@ void DocAccessible::NotifyOfLoading(bool
   FireDelayedEvent(stateEvent);
 }
 
 void DocAccessible::DoInitialUpdate() {
   if (nsCoreUtils::IsTabDocument(mDocumentNode)) {
     mDocFlags |= eTabDocument;
     if (IPCAccessibilityActive()) {
       nsIDocShell* docShell = mDocumentNode->GetDocShell();
-      if (RefPtr<dom::TabChild> tabChild = dom::TabChild::GetFrom(docShell)) {
+      if (RefPtr<dom::BrowserChild> browserChild =
+              dom::BrowserChild::GetFrom(docShell)) {
         DocAccessibleChild* ipcDoc = IPCDoc();
         if (!ipcDoc) {
-          ipcDoc = new DocAccessibleChild(this, tabChild);
+          ipcDoc = new DocAccessibleChild(this, browserChild);
           SetIPCDoc(ipcDoc);
 
 #if defined(XP_WIN)
           IAccessibleHolder holder(
               CreateHolderFromAccessible(WrapNotNull(this)));
           MOZ_ASSERT(!holder.IsNull());
           int32_t childID = AccessibleWrap::GetChildIDFor(this);
 #else
           int32_t holder = 0, childID = 0;
 #endif
-          tabChild->SendPDocAccessibleConstructor(ipcDoc, nullptr, 0, childID,
-                                                  holder);
+          browserChild->SendPDocAccessibleConstructor(ipcDoc, nullptr, 0,
+                                                      childID, holder);
         }
 
         if (IsRoot()) {
-          tabChild->SetTopLevelDocAccessibleChild(ipcDoc);
+          browserChild->SetTopLevelDocAccessibleChild(ipcDoc);
         }
       }
     }
   }
 
   mLoadState |= eTreeConstructed;
 
   // Set up a root element and ARIA role mapping.
--- a/accessible/ipc/win/DocAccessibleChild.cpp
+++ b/accessible/ipc/win/DocAccessibleChild.cpp
@@ -72,34 +72,34 @@ ipc::IPCResult DocAccessibleChild::RecvE
   return IPC_OK();
 }
 
 HWND DocAccessibleChild::GetNativeWindowHandle() const {
   if (mEmulatedWindowHandle) {
     return mEmulatedWindowHandle;
   }
 
-  auto tab = static_cast<dom::TabChild*>(Manager());
+  auto tab = static_cast<dom::BrowserChild*>(Manager());
   MOZ_ASSERT(tab);
   return reinterpret_cast<HWND>(tab->GetNativeWindowHandle());
 }
 
 void DocAccessibleChild::PushDeferredEvent(UniquePtr<DeferredEvent> aEvent) {
   DocAccessibleChild* topLevelIPCDoc = nullptr;
 
   if (mDoc && mDoc->IsRoot()) {
     topLevelIPCDoc = this;
   } else {
-    auto tabChild = static_cast<dom::TabChild*>(Manager());
-    if (!tabChild) {
+    auto browserChild = static_cast<dom::BrowserChild*>(Manager());
+    if (!browserChild) {
       return;
     }
 
     topLevelIPCDoc = static_cast<DocAccessibleChild*>(
-        tabChild->GetTopLevelDocAccessibleChild());
+        browserChild->GetTopLevelDocAccessibleChild());
   }
 
   if (topLevelIPCDoc) {
     topLevelIPCDoc->mDeferredEvents.AppendElement(std::move(aEvent));
   }
 }
 
 bool DocAccessibleChild::SendEvent(const uint64_t& aID, const uint32_t& aType) {
@@ -250,19 +250,19 @@ bool DocAccessibleChild::SendScrollingEv
       this, aID, aType, aScrollX, aScrollY, aMaxScrollX, aMaxScrollY));
   return true;
 }
 
 bool DocAccessibleChild::ConstructChildDocInParentProcess(
     DocAccessibleChild* aNewChildDoc, uint64_t aUniqueID, uint32_t aMsaaID) {
   if (IsConstructedInParentProcess()) {
     // We may send the constructor immediately
-    auto tabChild = static_cast<dom::TabChild*>(Manager());
-    MOZ_ASSERT(tabChild);
-    bool result = tabChild->SendPDocAccessibleConstructor(
+    auto browserChild = static_cast<dom::BrowserChild*>(Manager());
+    MOZ_ASSERT(browserChild);
+    bool result = browserChild->SendPDocAccessibleConstructor(
         aNewChildDoc, this, aUniqueID, aMsaaID, IAccessibleHolder());
     if (result) {
       aNewChildDoc->SetConstructedInParentProcess();
     }
     return result;
   }
 
   PushDeferredEvent(MakeUnique<SerializedChildDocConstructor>(
--- a/accessible/ipc/win/DocAccessibleChild.h
+++ b/accessible/ipc/win/DocAccessibleChild.h
@@ -4,17 +4,17 @@
  * 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 mozilla_a11y_DocAccessibleChild_h
 #define mozilla_a11y_DocAccessibleChild_h
 
 #include "mozilla/a11y/COMPtrTypes.h"
 #include "mozilla/a11y/DocAccessibleChildBase.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/mscom/Ptr.h"
 
 namespace mozilla {
 namespace a11y {
 
 /*
  * These objects handle content side communication for an accessible document,
  * and their lifetime is the same as the document they represent.
@@ -284,19 +284,20 @@ class DocAccessibleChild : public DocAcc
                                   DocAccessibleChild* aParentIPCDoc,
                                   uint64_t aUniqueID, uint32_t aMsaaID)
         : DeferredEvent(aParentIPCDoc),
           mIPCDoc(aIPCDoc),
           mUniqueID(aUniqueID),
           mMsaaID(aMsaaID) {}
 
     void Dispatch(DocAccessibleChild* aParentIPCDoc) override {
-      auto tabChild = static_cast<dom::TabChild*>(aParentIPCDoc->Manager());
-      MOZ_ASSERT(tabChild);
-      Unused << tabChild->SendPDocAccessibleConstructor(
+      auto browserChild =
+          static_cast<dom::BrowserChild*>(aParentIPCDoc->Manager());
+      MOZ_ASSERT(browserChild);
+      Unused << browserChild->SendPDocAccessibleConstructor(
           mIPCDoc, aParentIPCDoc, mUniqueID, mMsaaID, IAccessibleHolder());
       mIPCDoc->SetConstructedInParentProcess();
     }
 
     DocAccessibleChild* mIPCDoc;
     uint64_t mUniqueID;
     uint32_t mMsaaID;
   };
--- a/accessible/windows/msaa/DocAccessibleWrap.cpp
+++ b/accessible/windows/msaa/DocAccessibleWrap.cpp
@@ -3,17 +3,17 @@
 /* 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 "DocAccessibleWrap.h"
 
 #include "Compatibility.h"
 #include "mozilla/PresShell.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "DocAccessibleChild.h"
 #include "nsWinUtils.h"
 #include "Role.h"
 #include "RootAccessible.h"
 #include "sdnDocAccessible.h"
 #include "Statistics.h"
 
 #include "nsIDocShell.h"
--- a/browser/actors/BrowserTabChild.jsm
+++ b/browser/actors/BrowserTabChild.jsm
@@ -58,20 +58,20 @@ class BrowserTabChild extends ActorChild
       case "Browser:AppTab":
         if (this.docShell) {
           this.docShell.isAppTab = message.data.isAppTab;
         }
         break;
 
       case "Browser:HasSiblings":
         try {
-          let tabChild = this.docShell.QueryInterface(Ci.nsIInterfaceRequestor)
+          let browserChild = this.docShell.QueryInterface(Ci.nsIInterfaceRequestor)
                              .getInterface(Ci.nsIBrowserChild);
           let hasSiblings = message.data;
-          tabChild.hasSiblings = hasSiblings;
+          browserChild.hasSiblings = hasSiblings;
         } catch (e) {
         }
         break;
 
       // XXX(nika): Should we try to call this in the parent process instead?
       case "Browser:Reload":
         /* First, we'll try to use the session history object to reload so
          * that framesets are handled properly. If we're in a special
--- a/browser/base/content/content.js
+++ b/browser/base/content/content.js
@@ -6,17 +6,17 @@
 /* This content script should work in any browser or iframe and should not
  * depend on the frame being contained in tabbrowser. */
 
 /* eslint-env mozilla/frame-script */
 /* eslint no-unused-vars: ["error", {args: "none"}] */
 
 var {XPCOMUtils} = ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
 
-// TabChildGlobal
+// BrowserChildGlobal
 var global = this;
 
 XPCOMUtils.defineLazyModuleGetters(this, {
   ContentMetaHandler: "resource:///modules/ContentMetaHandler.jsm",
   LoginFormFactory: "resource://gre/modules/LoginFormFactory.jsm",
   InsecurePasswordUtils: "resource://gre/modules/InsecurePasswordUtils.jsm",
   ContextMenuChild: "resource:///actors/ContextMenuChild.jsm",
 });
--- a/browser/base/content/tab-content.js
+++ b/browser/base/content/tab-content.js
@@ -13,17 +13,17 @@ ChromeUtils.defineModuleGetter(this, "E1
   "resource://gre/modules/E10SUtils.jsm");
 ChromeUtils.defineModuleGetter(this, "BrowserUtils",
   "resource://gre/modules/BrowserUtils.jsm");
 
 var {ActorManagerChild} = ChromeUtils.import("resource://gre/modules/ActorManagerChild.jsm");
 
 ActorManagerChild.attach(this, "browsers");
 
-// TabChildGlobal
+// BrowserChildGlobal
 var global = this;
 
 // Keep a reference to the translation content handler to avoid it it being GC'ed.
 var trHandler = null;
 if (Services.prefs.getBoolPref("browser.translation.detectLanguage")) {
   var {TranslationContentHandler} = ChromeUtils.import("resource:///modules/translation/TranslationContentHandler.jsm");
   trHandler = new TranslationContentHandler(global, docShell);
 }
--- a/browser/modules/AsyncTabSwitcher.jsm
+++ b/browser/modules/AsyncTabSwitcher.jsm
@@ -331,17 +331,17 @@ class AsyncTabSwitcher {
   updateDisplay() {
     let requestedTabState = this.getTabState(this.requestedTab);
     let requestedBrowser = this.requestedTab.linkedBrowser;
 
     // It is often more desirable to show a blank tab when appropriate than
     // the tab switch spinner - especially since the spinner is usually
     // preceded by a perceived lag of TAB_SWITCH_TIMEOUT ms in the
     // tab switch. We can hide this lag, and hide the time being spent
-    // constructing TabChild's, layer trees, etc, by showing a blank
+    // constructing BrowserChild's, layer trees, etc, by showing a blank
     // tab instead and focusing it immediately.
     let shouldBeBlank = false;
     if (requestedBrowser.isRemoteBrowser) {
       // If a tab is remote and the window is not minimized, we can show a
       // blank tab instead of a spinner in the following cases:
       //
       // 1. The tab has just crashed, and we haven't started showing the
       //    tab crashed page yet (in this case, the RemoteTab is null)
--- a/devtools/server/actors/targets/browsing-context.js
+++ b/devtools/server/actors/targets/browsing-context.js
@@ -695,17 +695,17 @@ const browsingContextTargetPrototype = {
     } else if (topic == "webnavigation-destroy") {
       this._onDocShellDestroy(subject);
     }
   },
 
   _onDocShellCreated(docShell) {
     // (chrome-)webnavigation-create is fired very early during docshell
     // construction. In new root docshells within child processes, involving
-    // TabChild, this event is from within this call:
+    // BrowserChild, this event is from within this call:
     //   https://hg.mozilla.org/mozilla-central/annotate/74d7fb43bb44/dom/ipc/TabChild.cpp#l912
     // whereas the chromeEventHandler (and most likely other stuff) is set
     // later:
     //   https://hg.mozilla.org/mozilla-central/annotate/74d7fb43bb44/dom/ipc/TabChild.cpp#l944
     // So wait a tick before watching it:
     DevToolsUtils.executeSoon(() => {
       // Bug 1142752: sometimes, the docshell appears to be immediately
       // destroyed, bailout early to prevent random exceptions.
--- a/docshell/base/nsDocShell.cpp
+++ b/docshell/base/nsDocShell.cpp
@@ -52,17 +52,17 @@
 #include "mozilla/dom/PermissionMessageUtils.h"
 #include "mozilla/dom/PopupBlocker.h"
 #include "mozilla/dom/ProfileTimelineMarkerBinding.h"
 #include "mozilla/dom/ScreenOrientation.h"
 #include "mozilla/dom/ScriptSettings.h"
 #include "mozilla/dom/ServiceWorkerInterceptController.h"
 #include "mozilla/dom/ServiceWorkerUtils.h"
 #include "mozilla/dom/SessionStorageManager.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/TabGroup.h"
 #include "mozilla/dom/ToJSValue.h"
 #include "mozilla/dom/ChildSHistory.h"
 #include "mozilla/dom/nsCSPContext.h"
 #include "mozilla/dom/LoadURIOptionsBinding.h"
 
 #include "mozilla/net/ReferrerPolicy.h"
 #include "mozilla/net/UrlClassifierFeatureFactory.h"
@@ -655,17 +655,17 @@ nsDocShell::GetInterface(const nsIID& aI
     }
   } else if (aIID.Equals(NS_GET_IID(nsIDocShellTreeOwner))) {
     nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
     nsresult rv = GetTreeOwner(getter_AddRefs(treeOwner));
     if (NS_SUCCEEDED(rv) && treeOwner) {
       return treeOwner->QueryInterface(aIID, aSink);
     }
   } else if (aIID.Equals(NS_GET_IID(nsIBrowserChild))) {
-    *aSink = GetTabChild().take();
+    *aSink = GetBrowserChild().take();
     return *aSink ? NS_OK : NS_ERROR_FAILURE;
   } else {
     return nsDocLoader::GetInterface(aIID, aSink);
   }
 
   NS_IF_ADDREF(((nsISupports*)*aSink));
   return *aSink ? NS_OK : NS_NOINTERFACE;
 }
@@ -3190,28 +3190,31 @@ nsDocShell::SetTreeOwner(nsIDocShellTree
     NS_ENSURE_TRUE(child, NS_ERROR_FAILURE);
 
     if (child->ItemType() == mItemType) {
       child->SetTreeOwner(aTreeOwner);
     }
   }
 
   // If we're in the content process and have had a TreeOwner set on us, extract
-  // our TabChild actor. If we've already had our TabChild set, assert that it
-  // hasn't changed.
+  // our BrowserChild actor. If we've already had our BrowserChild set, assert
+  // that it hasn't changed.
   if (mTreeOwner && XRE_IsContentProcess()) {
-    nsCOMPtr<nsIBrowserChild> newTabChild = do_GetInterface(mTreeOwner);
-    MOZ_ASSERT(newTabChild, "No TabChild actor for tree owner in Content!");
-
-    if (mTabChild) {
-      nsCOMPtr<nsIBrowserChild> oldTabChild = do_QueryReferent(mTabChild);
-      MOZ_RELEASE_ASSERT(oldTabChild == newTabChild,
-                         "Cannot cahnge TabChild during nsDocShell lifetime!");
+    nsCOMPtr<nsIBrowserChild> newBrowserChild = do_GetInterface(mTreeOwner);
+    MOZ_ASSERT(newBrowserChild,
+               "No BrowserChild actor for tree owner in Content!");
+
+    if (mBrowserChild) {
+      nsCOMPtr<nsIBrowserChild> oldBrowserChild =
+          do_QueryReferent(mBrowserChild);
+      MOZ_RELEASE_ASSERT(
+          oldBrowserChild == newBrowserChild,
+          "Cannot cahnge BrowserChild during nsDocShell lifetime!");
     } else {
-      mTabChild = do_GetWeakReference(newTabChild);
+      mBrowserChild = do_GetWeakReference(newBrowserChild);
     }
   }
 
   // Our tree owner has changed. Recompute scriptability.
   //
   // Note that this is near-redundant with the recomputation in
   // SetDocLoaderParent(), but not so for the root DocShell, where the call to
   // SetTreeOwner() happens after the initial AddDocLoaderAsChildOfRoot(),
@@ -3678,18 +3681,18 @@ nsDocShell::GetDomWindow(mozIDOMWindowPr
   RefPtr<nsGlobalWindowOuter> window = mScriptGlobal;
   window.forget(aWindow);
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDocShell::GetMessageManager(ContentFrameMessageManager** aMessageManager) {
   RefPtr<ContentFrameMessageManager> mm;
-  if (RefPtr<TabChild> tabChild = TabChild::GetFrom(this)) {
-    mm = tabChild->GetMessageManager();
+  if (RefPtr<BrowserChild> browserChild = BrowserChild::GetFrom(this)) {
+    mm = browserChild->GetMessageManager();
   } else if (nsPIDOMWindowOuter* win = GetWindow()) {
     mm = win->GetMessageManager();
   }
   mm.forget(aMessageManager);
   return NS_OK;
 }
 
 NS_IMETHODIMP
@@ -5019,17 +5022,17 @@ nsDocShell::Destroy() {
     mSessionHistory->EvictLocalContentViewers();
     mSessionHistory = nullptr;
   }
 
   mBrowsingContext->Detach();
 
   SetTreeOwner(nullptr);
 
-  mTabChild = nullptr;
+  mBrowserChild = nullptr;
 
   mChromeEventHandler = nullptr;
 
   mOnePermittedSandboxedNavigator = nullptr;
 
   // required to break ref cycle
   mSecurityUI = nullptr;
 
@@ -9744,18 +9747,18 @@ nsresult nsDocShell::DoURILoad(nsDocShel
   if (contentPolicyType == nsIContentPolicy::TYPE_DOCUMENT) {
     loadingNode = nullptr;
     loadingPrincipal = nullptr;
     loadingWindow = mScriptGlobal;
     if (XRE_IsContentProcess()) {
       // In e10s the child process doesn't have access to the element that
       // contains the browsing context (because that element is in the chrome
       // process).
-      nsCOMPtr<nsIBrowserChild> tabChild = GetTabChild();
-      topLevelLoadingContext = ToSupports(tabChild);
+      nsCOMPtr<nsIBrowserChild> browserChild = GetBrowserChild();
+      topLevelLoadingContext = ToSupports(browserChild);
     } else {
       // This is for loading non-e10s tabs and toplevel windows of various
       // sorts.
       // For the toplevel window cases, requestingElement will be null.
       nsCOMPtr<Element> requestingElement =
           loadingWindow->GetFrameElementInternal();
       topLevelLoadingContext = requestingElement;
     }
@@ -13291,23 +13294,23 @@ nsDocShell::GetEditingSession(nsIEditing
     return NS_ERROR_FAILURE;
   }
 
   *aEditSession = do_AddRef(mEditorData->GetEditingSession()).take();
   return *aEditSession ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
-nsDocShell::GetScriptableTabChild(nsIBrowserChild** aTabChild) {
-  *aTabChild = GetTabChild().take();
-  return *aTabChild ? NS_OK : NS_ERROR_FAILURE;
-}
-
-already_AddRefed<nsIBrowserChild> nsDocShell::GetTabChild() {
-  nsCOMPtr<nsIBrowserChild> tc = do_QueryReferent(mTabChild);
+nsDocShell::GetScriptableBrowserChild(nsIBrowserChild** aBrowserChild) {
+  *aBrowserChild = GetBrowserChild().take();
+  return *aBrowserChild ? NS_OK : NS_ERROR_FAILURE;
+}
+
+already_AddRefed<nsIBrowserChild> nsDocShell::GetBrowserChild() {
+  nsCOMPtr<nsIBrowserChild> tc = do_QueryReferent(mBrowserChild);
   return tc.forget();
 }
 
 nsCommandManager* nsDocShell::GetCommandManager() {
   NS_ENSURE_SUCCESS(EnsureCommandHandler(), nullptr);
   return mCommandManager;
 }
 
@@ -13338,22 +13341,23 @@ nsDocShell::GetIsOnlyToplevelInTabGroup(
 
   *aResult = true;
   return NS_OK;
 }
 
 NS_IMETHODIMP
 nsDocShell::GetAwaitingLargeAlloc(bool* aResult) {
   MOZ_ASSERT(aResult);
-  nsCOMPtr<nsIBrowserChild> tabChild = GetTabChild();
-  if (!tabChild) {
+  nsCOMPtr<nsIBrowserChild> browserChild = GetBrowserChild();
+  if (!browserChild) {
     *aResult = false;
     return NS_OK;
   }
-  *aResult = static_cast<TabChild*>(tabChild.get())->IsAwaitingLargeAlloc();
+  *aResult =
+      static_cast<BrowserChild*>(browserChild.get())->IsAwaitingLargeAlloc();
   return NS_OK;
 }
 
 NS_IMETHODIMP_(void)
 nsDocShell::GetOriginAttributes(mozilla::OriginAttributes& aAttrs) {
   aAttrs = mOriginAttributes;
 }
 
--- a/docshell/base/nsDocShell.h
+++ b/docshell/base/nsDocShell.h
@@ -961,18 +961,18 @@ class nsDocShell final : public nsDocLoa
   uint64_t mContentWindowID;
   nsCOMPtr<nsIContentViewer> mContentViewer;
   nsCOMPtr<nsIWidget> mParentWidget;
   RefPtr<mozilla::dom::ChildSHistory> mSessionHistory;
   nsCOMPtr<nsIWebBrowserFind> mFind;
   RefPtr<nsCommandManager> mCommandManager;
   RefPtr<mozilla::dom::BrowsingContext> mBrowsingContext;
 
-  // Weak reference to our TabChild actor.
-  nsWeakPtr mTabChild;
+  // Weak reference to our BrowserChild actor.
+  nsWeakPtr mBrowserChild;
 
   // Dimensions of the docshell
   nsIntRect mBounds;
 
   /**
    * Content-Type Hint of the most-recently initiated load. Used for
    * session history entries.
    */
--- a/docshell/base/nsDocShellTreeOwner.cpp
+++ b/docshell/base/nsDocShellTreeOwner.cpp
@@ -351,29 +351,30 @@ nsDocShellTreeOwner::SizeShellTo(nsIDocS
 
   NS_ENSURE_STATE(mTreeOwner || webBrowserChrome);
 
   if (nsCOMPtr<nsIDocShellTreeOwner> treeOwner = mTreeOwner) {
     return treeOwner->SizeShellTo(aShellItem, aCX, aCY);
   }
 
   if (aShellItem == mWebBrowser->mDocShell) {
-    nsCOMPtr<nsIBrowserChild> tabChild = do_QueryInterface(webBrowserChrome);
-    if (tabChild) {
+    nsCOMPtr<nsIBrowserChild> browserChild =
+        do_QueryInterface(webBrowserChrome);
+    if (browserChild) {
       // The XUL window to resize is in the parent process, but there we
       // won't be able to get aShellItem to do the hack in
       // nsXULWindow::SizeShellTo, so let's send the width and height of
       // aShellItem too.
       nsCOMPtr<nsIBaseWindow> shellAsWin(do_QueryInterface(aShellItem));
       NS_ENSURE_TRUE(shellAsWin, NS_ERROR_FAILURE);
 
       int32_t width = 0;
       int32_t height = 0;
       shellAsWin->GetSize(&width, &height);
-      return tabChild->RemoteSizeShellTo(aCX, aCY, width, height);
+      return browserChild->RemoteSizeShellTo(aCX, aCY, width, height);
     }
     // XXX: this is weird, but we used to call a method here
     // (webBrowserChrome->SizeBrowserTo()) whose implementations all failed
     // like this, so...
     return NS_ERROR_NOT_IMPLEMENTED;
   }
 
   NS_ENSURE_TRUE(aShellItem, NS_ERROR_FAILURE);
@@ -879,20 +880,20 @@ nsDocShellTreeOwner::HandleEvent(Event* 
       if (linksCount >= 1) {
         nsCOMPtr<nsIPrincipal> triggeringPrincipal;
         handler->GetTriggeringPrincipal(dragEvent,
                                         getter_AddRefs(triggeringPrincipal));
         if (triggeringPrincipal) {
           nsCOMPtr<nsIWebBrowserChrome> webBrowserChrome =
               GetWebBrowserChrome();
           if (webBrowserChrome) {
-            nsCOMPtr<nsIBrowserChild> tabChild =
+            nsCOMPtr<nsIBrowserChild> browserChild =
                 do_QueryInterface(webBrowserChrome);
-            if (tabChild) {
-              nsresult rv = tabChild->RemoteDropLinks(linksCount, links);
+            if (browserChild) {
+              nsresult rv = browserChild->RemoteDropLinks(linksCount, links);
               for (uint32_t i = 0; i < linksCount; i++) {
                 NS_RELEASE(links[i]);
               }
               free(links);
               return rv;
             }
           }
           nsAutoString url;
--- a/docshell/base/nsIDocShell.idl
+++ b/docshell/base/nsIDocShell.idl
@@ -995,20 +995,20 @@ interface nsIDocShell : nsIDocShellTreeI
   void setOriginAttributes(in jsval aAttrs);
 
   /**
    * The editing session for this docshell.
    */
   readonly attribute nsIEditingSession editingSession;
 
   /**
-   * The tab child for this docshell.
+   * The browser child for this docshell.
    */
-  [binaryname(ScriptableTabChild)] readonly attribute nsIBrowserChild tabChild;
-  [noscript,notxpcom,nostdcall] BrowserChildRef GetTabChild();
+  [binaryname(ScriptableBrowserChild)] readonly attribute nsIBrowserChild browserChild;
+  [noscript,notxpcom,nostdcall] BrowserChildRef GetBrowserChild();
 
   [noscript,nostdcall,notxpcom] nsCommandManager GetCommandManager();
 
   cenum TouchEventsOverride: 8 {
     /**
      * Override platform/pref default behaviour and force-disable touch events.
      */
     TOUCHEVENTS_OVERRIDE_DISABLED = 0,
--- a/docshell/shistory/ChildSHistory.cpp
+++ b/docshell/shistory/ChildSHistory.cpp
@@ -78,17 +78,17 @@ NS_IMPL_CYCLE_COLLECTING_RELEASE(ChildSH
 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(ChildSHistory, mDocShell, mHistory)
 
 JSObject* ChildSHistory::WrapObject(JSContext* cx,
                                     JS::Handle<JSObject*> aGivenProto) {
   return ChildSHistory_Binding::Wrap(cx, this, aGivenProto);
 }
 
 nsISupports* ChildSHistory::GetParentObject() const {
-  // We want to get the TabChildMessageManager, which is the
+  // We want to get the BrowserChildMessageManager, which is the
   // messageManager on mDocShell.
   RefPtr<ContentFrameMessageManager> mm;
   if (mDocShell) {
     mm = mDocShell->GetMessageManager();
   }
   // else we must be unlinked... can that happen here?
   return ToSupports(mm);
 }
--- a/dom/base/Document.cpp
+++ b/dom/base/Document.cpp
@@ -230,17 +230,17 @@
 #include "mozilla/dom/DocumentTimeline.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/HTMLBodyElement.h"
 #include "mozilla/dom/HTMLInputElement.h"
 #include "mozilla/dom/ImageTracker.h"
 #include "mozilla/dom/MediaQueryList.h"
 #include "mozilla/dom/NodeFilterBinding.h"
 #include "mozilla/OwningNonNull.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/WebComponentsBinding.h"
 #include "mozilla/dom/CustomElementRegistryBinding.h"
 #include "mozilla/dom/CustomElementRegistry.h"
 #include "mozilla/dom/ServiceWorkerDescriptor.h"
 #include "mozilla/dom/TimeoutManager.h"
 #include "mozilla/ExtensionPolicyService.h"
 #include "nsFrame.h"
 #include "nsDOMCaretPosition.h"
rename from dom/base/InProcessTabChildMessageManager.cpp
rename to dom/base/InProcessBrowserChildMessageManager.cpp
--- a/dom/base/InProcessTabChildMessageManager.cpp
+++ b/dom/base/InProcessBrowserChildMessageManager.cpp
@@ -1,15 +1,15 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=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 "InProcessTabChildMessageManager.h"
+#include "InProcessBrowserChildMessageManager.h"
 #include "nsContentUtils.h"
 #include "nsDocShell.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsIInterfaceRequestorUtils.h"
 #include "nsIComponentManager.h"
 #include "nsIServiceManager.h"
 #include "nsComponentManagerUtils.h"
 #include "nsFrameLoader.h"
@@ -23,17 +23,17 @@
 #include "mozilla/dom/SameProcessMessageQueue.h"
 #include "mozilla/dom/ScriptLoader.h"
 #include "mozilla/dom/WindowProxyHolder.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 using namespace mozilla::dom::ipc;
 
-bool InProcessTabChildMessageManager::DoSendBlockingMessage(
+bool InProcessBrowserChildMessageManager::DoSendBlockingMessage(
     JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData,
     JS::Handle<JSObject*> aCpows, nsIPrincipal* aPrincipal,
     nsTArray<StructuredCloneData>* aRetVal, bool aIsSync) {
   SameProcessMessageQueue* queue = SameProcessMessageQueue::Get();
   queue->Flush();
 
   if (mChromeMessageManager) {
     SameProcessCpowHolder cpows(JS::RootingContext::get(aCx), aCpows);
@@ -45,46 +45,47 @@ bool InProcessTabChildMessageManager::Do
   return true;
 }
 
 class nsAsyncMessageToParent : public nsSameProcessAsyncMessageBase,
                                public SameProcessMessageQueue::Runnable {
  public:
   nsAsyncMessageToParent(JS::RootingContext* aRootingCx,
                          JS::Handle<JSObject*> aCpows,
-                         InProcessTabChildMessageManager* aTabChild)
+                         InProcessBrowserChildMessageManager* aBrowserChild)
       : nsSameProcessAsyncMessageBase(aRootingCx, aCpows),
-        mTabChild(aTabChild) {}
+        mBrowserChild(aBrowserChild) {}
 
   virtual nsresult HandleMessage() override {
-    RefPtr<nsFrameLoader> fl = mTabChild->GetFrameLoader();
-    ReceiveMessage(mTabChild->mOwner, fl, mTabChild->mChromeMessageManager);
+    RefPtr<nsFrameLoader> fl = mBrowserChild->GetFrameLoader();
+    ReceiveMessage(mBrowserChild->mOwner, fl,
+                   mBrowserChild->mChromeMessageManager);
     return NS_OK;
   }
-  RefPtr<InProcessTabChildMessageManager> mTabChild;
+  RefPtr<InProcessBrowserChildMessageManager> mBrowserChild;
 };
 
-nsresult InProcessTabChildMessageManager::DoSendAsyncMessage(
+nsresult InProcessBrowserChildMessageManager::DoSendAsyncMessage(
     JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData,
     JS::Handle<JSObject*> aCpows, nsIPrincipal* aPrincipal) {
   SameProcessMessageQueue* queue = SameProcessMessageQueue::Get();
   JS::RootingContext* rcx = JS::RootingContext::get(aCx);
   RefPtr<nsAsyncMessageToParent> ev =
       new nsAsyncMessageToParent(rcx, aCpows, this);
 
   nsresult rv = ev->Init(aMessage, aData, aPrincipal);
   if (NS_FAILED(rv)) {
     return rv;
   }
 
   queue->Push(ev);
   return NS_OK;
 }
 
-InProcessTabChildMessageManager::InProcessTabChildMessageManager(
+InProcessBrowserChildMessageManager::InProcessBrowserChildMessageManager(
     nsDocShell* aShell, nsIContent* aOwner, nsFrameMessageManager* aChrome)
     : ContentFrameMessageManager(new nsFrameMessageManager(this)),
       mDocShell(aShell),
       mLoadingScript(false),
       mPreventEventsEscaping(false),
       mOwner(aOwner),
       mChromeMessageManager(aChrome) {
   mozilla::HoldJSObjects(this);
@@ -94,83 +95,85 @@ InProcessTabChildMessageManager::InProce
   nsCOMPtr<nsIMozBrowserFrame> browserFrame = do_QueryInterface(mOwner);
   if (browserFrame) {
     mIsBrowserFrame = browserFrame->GetReallyIsBrowser();
   } else {
     mIsBrowserFrame = false;
   }
 }
 
-InProcessTabChildMessageManager::~InProcessTabChildMessageManager() {
+InProcessBrowserChildMessageManager::~InProcessBrowserChildMessageManager() {
   mAnonymousGlobalScopes.Clear();
   mozilla::DropJSObjects(this);
 }
 
 // This method isn't automatically forwarded safely because it's notxpcom, so
 // the IDL binding doesn't know what value to return.
-void InProcessTabChildMessageManager::MarkForCC() {
+void InProcessBrowserChildMessageManager::MarkForCC() {
   MarkScopesForCC();
   MessageManagerGlobal::MarkForCC();
 }
 
-NS_IMPL_CYCLE_COLLECTION_CLASS(InProcessTabChildMessageManager)
+NS_IMPL_CYCLE_COLLECTION_CLASS(InProcessBrowserChildMessageManager)
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(
-    InProcessTabChildMessageManager, DOMEventTargetHelper)
+    InProcessBrowserChildMessageManager, DOMEventTargetHelper)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMessageManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocShell)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(InProcessTabChildMessageManager,
-                                               DOMEventTargetHelper)
+NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(
+    InProcessBrowserChildMessageManager, DOMEventTargetHelper)
   tmp->nsMessageManagerScriptExecutor::Trace(aCallbacks, aClosure);
 NS_IMPL_CYCLE_COLLECTION_TRACE_END
 
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(InProcessTabChildMessageManager,
-                                                DOMEventTargetHelper)
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(
+    InProcessBrowserChildMessageManager, DOMEventTargetHelper)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mMessageManager)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mDocShell)
   tmp->nsMessageManagerScriptExecutor::Unlink();
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(InProcessTabChildMessageManager)
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(InProcessBrowserChildMessageManager)
   NS_INTERFACE_MAP_ENTRY(nsIMessageSender)
   NS_INTERFACE_MAP_ENTRY(nsIInProcessContentFrameMessageManager)
   NS_INTERFACE_MAP_ENTRY(ContentFrameMessageManager)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
 
-NS_IMPL_ADDREF_INHERITED(InProcessTabChildMessageManager, DOMEventTargetHelper)
-NS_IMPL_RELEASE_INHERITED(InProcessTabChildMessageManager, DOMEventTargetHelper)
+NS_IMPL_ADDREF_INHERITED(InProcessBrowserChildMessageManager,
+                         DOMEventTargetHelper)
+NS_IMPL_RELEASE_INHERITED(InProcessBrowserChildMessageManager,
+                          DOMEventTargetHelper)
 
-JSObject* InProcessTabChildMessageManager::WrapObject(
+JSObject* InProcessBrowserChildMessageManager::WrapObject(
     JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
   return ContentFrameMessageManager_Binding::Wrap(aCx, this, aGivenProto);
 }
 
-void InProcessTabChildMessageManager::CacheFrameLoader(
+void InProcessBrowserChildMessageManager::CacheFrameLoader(
     nsFrameLoader* aFrameLoader) {
   mFrameLoader = aFrameLoader;
 }
 
-Nullable<WindowProxyHolder> InProcessTabChildMessageManager::GetContent(
+Nullable<WindowProxyHolder> InProcessBrowserChildMessageManager::GetContent(
     ErrorResult& aError) {
   if (!mDocShell) {
     return nullptr;
   }
   return WindowProxyHolder(mDocShell->GetBrowsingContext());
 }
 
 already_AddRefed<nsIEventTarget>
-InProcessTabChildMessageManager::GetTabEventTarget() {
+InProcessBrowserChildMessageManager::GetTabEventTarget() {
   nsCOMPtr<nsIEventTarget> target = GetMainThreadEventTarget();
   return target.forget();
 }
 
-uint64_t InProcessTabChildMessageManager::ChromeOuterWindowID() {
+uint64_t InProcessBrowserChildMessageManager::ChromeOuterWindowID() {
   if (!mDocShell) {
     return 0;
   }
 
   nsCOMPtr<nsIDocShellTreeItem> root;
   nsresult rv = mDocShell->GetRootTreeItem(getter_AddRefs(root));
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return 0;
@@ -179,66 +182,66 @@ uint64_t InProcessTabChildMessageManager
   nsPIDOMWindowOuter* topWin = root->GetWindow();
   if (!topWin) {
     return 0;
   }
 
   return topWin->WindowID();
 }
 
-void InProcessTabChildMessageManager::FireUnloadEvent() {
+void InProcessBrowserChildMessageManager::FireUnloadEvent() {
   // We're called from Document::MaybeInitializeFinalizeFrameLoaders, so it
   // should be safe to run script.
   MOZ_ASSERT(nsContentUtils::IsSafeToRunScript());
 
   // Don't let the unload event propagate to chrome event handlers.
   mPreventEventsEscaping = true;
   DOMEventTargetHelper::DispatchTrustedEvent(NS_LITERAL_STRING("unload"));
 
   // Allow events fired during docshell destruction (pagehide, unload) to
   // propagate to the <browser> element since chrome code depends on this.
   mPreventEventsEscaping = false;
 }
 
-void InProcessTabChildMessageManager::DisconnectEventListeners() {
+void InProcessBrowserChildMessageManager::DisconnectEventListeners() {
   if (mDocShell) {
     if (nsCOMPtr<nsPIDOMWindowOuter> win = mDocShell->GetWindow()) {
       win->SetChromeEventHandler(win->GetChromeEventHandler());
     }
   }
   if (mListenerManager) {
     mListenerManager->Disconnect();
   }
 
   mDocShell = nullptr;
 }
 
-void InProcessTabChildMessageManager::Disconnect() {
+void InProcessBrowserChildMessageManager::Disconnect() {
   mChromeMessageManager = nullptr;
   mOwner = nullptr;
   if (mMessageManager) {
     static_cast<nsFrameMessageManager*>(mMessageManager.get())->Disconnect();
     mMessageManager = nullptr;
   }
 }
 
 NS_IMETHODIMP_(nsIContent*)
-InProcessTabChildMessageManager::GetOwnerContent() { return mOwner; }
+InProcessBrowserChildMessageManager::GetOwnerContent() { return mOwner; }
 
-void InProcessTabChildMessageManager::GetEventTargetParent(
+void InProcessBrowserChildMessageManager::GetEventTargetParent(
     EventChainPreVisitor& aVisitor) {
   aVisitor.mForceContentDispatch = true;
   aVisitor.mCanHandle = true;
 
 #ifdef DEBUG
   if (mOwner) {
     RefPtr<nsFrameLoaderOwner> owner = do_QueryObject(mOwner);
     RefPtr<nsFrameLoader> fl = owner->GetFrameLoader();
     if (fl) {
-      NS_ASSERTION(this == fl->GetTabChildMessageManager(),
+      NS_ASSERTION(this == fl->GetBrowserChildMessageManager(),
                    "Wrong event target!");
       NS_ASSERTION(fl->mMessageManager == mChromeMessageManager,
                    "Wrong message manager!");
     }
   }
 #endif
 
   if (mPreventEventsEscaping) {
@@ -258,47 +261,47 @@ void InProcessTabChildMessageManager::Ge
     }
   } else {
     aVisitor.SetParentTarget(mOwner, false);
   }
 }
 
 class nsAsyncScriptLoad : public Runnable {
  public:
-  nsAsyncScriptLoad(InProcessTabChildMessageManager* aTabChild,
+  nsAsyncScriptLoad(InProcessBrowserChildMessageManager* aBrowserChild,
                     const nsAString& aURL, bool aRunInGlobalScope)
       : mozilla::Runnable("nsAsyncScriptLoad"),
-        mTabChild(aTabChild),
+        mBrowserChild(aBrowserChild),
         mURL(aURL),
         mRunInGlobalScope(aRunInGlobalScope) {}
 
   NS_IMETHOD Run() override {
-    mTabChild->LoadFrameScript(mURL, mRunInGlobalScope);
+    mBrowserChild->LoadFrameScript(mURL, mRunInGlobalScope);
     return NS_OK;
   }
-  RefPtr<InProcessTabChildMessageManager> mTabChild;
+  RefPtr<InProcessBrowserChildMessageManager> mBrowserChild;
   nsString mURL;
   bool mRunInGlobalScope;
 };
 
-void InProcessTabChildMessageManager::LoadFrameScript(const nsAString& aURL,
-                                                      bool aRunInGlobalScope) {
+void InProcessBrowserChildMessageManager::LoadFrameScript(
+    const nsAString& aURL, bool aRunInGlobalScope) {
   if (!nsContentUtils::IsSafeToRunScript()) {
     nsContentUtils::AddScriptRunner(
         new nsAsyncScriptLoad(this, aURL, aRunInGlobalScope));
     return;
   }
   bool tmp = mLoadingScript;
   mLoadingScript = true;
   JS::Rooted<JSObject*> mm(mozilla::dom::RootingCx(), GetOrCreateWrapper());
   LoadScriptInternal(mm, aURL, !aRunInGlobalScope);
   mLoadingScript = tmp;
 }
 
 already_AddRefed<nsFrameLoader>
-InProcessTabChildMessageManager::GetFrameLoader() {
+InProcessBrowserChildMessageManager::GetFrameLoader() {
   RefPtr<nsFrameLoaderOwner> owner = do_QueryObject(mOwner);
   RefPtr<nsFrameLoader> fl = owner ? owner->GetFrameLoader() : nullptr;
   if (!fl) {
     fl = mFrameLoader;
   }
   return fl.forget();
 }
rename from dom/base/InProcessTabChildMessageManager.h
rename to dom/base/InProcessBrowserChildMessageManager.h
--- a/dom/base/InProcessTabChildMessageManager.h
+++ b/dom/base/InProcessBrowserChildMessageManager.h
@@ -1,16 +1,16 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=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/. */
 
-#ifndef nsInProcessTabChildGlobal_h
-#define nsInProcessTabChildGlobal_h
+#ifndef nsInProcessBrowserChildGlobal_h
+#define nsInProcessBrowserChildGlobal_h
 
 #include "mozilla/Attributes.h"
 #include "mozilla/DOMEventTargetHelper.h"
 #include "mozilla/RefPtr.h"
 #include "mozilla/dom/ContentFrameMessageManager.h"
 #include "nsCOMPtr.h"
 #include "nsFrameMessageManager.h"
 #include "nsIScriptContext.h"
@@ -24,46 +24,46 @@
 
 namespace mozilla {
 class EventChainPreVisitor;
 
 namespace dom {
 
 /**
  * This class implements a ContentFrameMessageManager for use by frame loaders
- * in the parent process. It is bound to a DocShell rather than a TabChild, and
- * does not use any IPC infrastructure for its message passing.
+ * in the parent process. It is bound to a DocShell rather than a BrowserChild,
+ * and does not use any IPC infrastructure for its message passing.
  */
 
-class InProcessTabChildMessageManager final
+class InProcessBrowserChildMessageManager final
     : public ContentFrameMessageManager,
       public nsMessageManagerScriptExecutor,
       public nsIInProcessContentFrameMessageManager,
       public nsSupportsWeakReference,
       public mozilla::dom::ipc::MessageManagerCallback {
   typedef mozilla::dom::ipc::StructuredCloneData StructuredCloneData;
 
  private:
-  InProcessTabChildMessageManager(nsDocShell* aShell, nsIContent* aOwner,
-                                  nsFrameMessageManager* aChrome);
+  InProcessBrowserChildMessageManager(nsDocShell* aShell, nsIContent* aOwner,
+                                      nsFrameMessageManager* aChrome);
 
  public:
-  static already_AddRefed<InProcessTabChildMessageManager> Create(
+  static already_AddRefed<InProcessBrowserChildMessageManager> Create(
       nsDocShell* aShell, nsIContent* aOwner, nsFrameMessageManager* aChrome) {
-    RefPtr<InProcessTabChildMessageManager> mm =
-        new InProcessTabChildMessageManager(aShell, aOwner, aChrome);
+    RefPtr<InProcessBrowserChildMessageManager> mm =
+        new InProcessBrowserChildMessageManager(aShell, aOwner, aChrome);
 
     NS_ENSURE_TRUE(mm->Init(), nullptr);
 
     return mm.forget();
   }
 
   NS_DECL_ISUPPORTS_INHERITED
   NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(
-      InProcessTabChildMessageManager, DOMEventTargetHelper)
+      InProcessBrowserChildMessageManager, DOMEventTargetHelper)
 
   void MarkForCC();
 
   virtual JSObject* WrapObject(JSContext* aCx,
                                JS::Handle<JSObject*> aGivenProto) override;
 
   Nullable<WindowProxyHolder> GetContent(ErrorResult& aError) override;
   virtual already_AddRefed<nsIDocShell> GetDocShell(
@@ -112,17 +112,17 @@ class InProcessTabChildMessageManager fi
   }
   void SetChromeMessageManager(nsFrameMessageManager* aParent) {
     mChromeMessageManager = aParent;
   }
 
   already_AddRefed<nsFrameLoader> GetFrameLoader();
 
  protected:
-  virtual ~InProcessTabChildMessageManager();
+  virtual ~InProcessBrowserChildMessageManager();
 
   RefPtr<nsDocShell> mDocShell;
   bool mLoadingScript;
 
   // Is this the message manager for an in-process <iframe mozbrowser>? This
   // affects where events get sent, so it affects GetEventTargetParent.
   bool mIsBrowserFrame;
   bool mPreventEventsEscaping;
--- a/dom/base/Navigator.cpp
+++ b/dom/base/Navigator.cpp
@@ -70,17 +70,17 @@
 #include "nsIHttpChannel.h"
 #include "nsIHttpChannelInternal.h"
 #include "nsStreamUtils.h"
 #include "WidgetUtils.h"
 #include "nsIPresentationService.h"
 #include "nsIScriptError.h"
 
 #include "nsIExternalProtocolHandler.h"
-#include "TabChild.h"
+#include "BrowserChild.h"
 #include "URIUtils.h"
 
 #include "mozilla/dom/MediaDevices.h"
 #include "MediaManager.h"
 
 #include "nsIDOMGlobalPropertyInitializer.h"
 #include "nsJSUtils.h"
 
@@ -969,18 +969,19 @@ void Navigator::RegisterProtocolHandler(
   CheckProtocolHandlerAllowed(aScheme, handlerURI, docURI, aRv);
   if (aRv.Failed()) {
     return;
   }
 
   if (XRE_IsContentProcess()) {
     nsAutoString scheme(aScheme);
     nsAutoString title(aTitle);
-    RefPtr<TabChild> tabChild = TabChild::GetFrom(mWindow);
-    tabChild->SendRegisterProtocolHandler(scheme, handlerURI, title, docURI);
+    RefPtr<BrowserChild> browserChild = BrowserChild::GetFrom(mWindow);
+    browserChild->SendRegisterProtocolHandler(scheme, handlerURI, title,
+                                              docURI);
     return;
   }
 
   nsCOMPtr<nsIWebProtocolHandlerRegistrar> registrar =
       do_GetService(NS_WEBPROTOCOLHANDLERREGISTRAR_CONTRACTID);
   if (registrar) {
     aRv = registrar->RegisterProtocolHandler(aScheme, handlerURI, aTitle,
                                              docURI, mWindow->GetOuterWindow());
--- a/dom/base/TabGroup.cpp
+++ b/dom/base/TabGroup.cpp
@@ -2,17 +2,17 @@
 /* vim: set ts=8 sts=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 "mozilla/dom/TabGroup.h"
 
 #include "mozilla/dom/ContentChild.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/DocGroup.h"
 #include "mozilla/dom/TimeoutManager.h"
 #include "mozilla/AbstractThread.h"
 #include "mozilla/ClearOnShutdown.h"
 #include "mozilla/StaticPtr.h"
 #include "mozilla/Telemetry.h"
 #include "mozilla/ThrottledEventQueue.h"
 #include "nsIDocShell.h"
@@ -92,34 +92,34 @@ TabGroup* TabGroup::GetChromeTabGroup() 
     sChromeTabGroup = new TabGroup(true /* chrome tab group */);
     ClearOnShutdown(&sChromeTabGroup);
   }
   return sChromeTabGroup;
 }
 
 /* static */
 TabGroup* TabGroup::GetFromWindow(mozIDOMWindowProxy* aWindow) {
-  if (TabChild* tabChild = TabChild::GetFrom(aWindow)) {
-    return tabChild->TabGroup();
+  if (BrowserChild* browserChild = BrowserChild::GetFrom(aWindow)) {
+    return browserChild->TabGroup();
   }
 
   return nullptr;
 }
 
 /* static */
-TabGroup* TabGroup::GetFromActor(TabChild* aTabChild) {
+TabGroup* TabGroup::GetFromActor(BrowserChild* aBrowserChild) {
   MOZ_RELEASE_ASSERT(NS_IsMainThread());
 
   // Middleman processes do not assign event targets to their tab children.
   if (recordreplay::IsMiddleman()) {
     return GetChromeTabGroup();
   }
 
   nsCOMPtr<nsIEventTarget> target =
-      aTabChild->Manager()->GetEventTargetFor(aTabChild);
+      aBrowserChild->Manager()->GetEventTargetFor(aBrowserChild);
   if (!target) {
     return nullptr;
   }
 
   // We have an event target. We assume the IPC code created it via
   // TabGroup::CreateEventTarget.
   RefPtr<SchedulerGroup> group = SchedulerGroup::FromEventTarget(target);
   MOZ_RELEASE_ASSERT(group);
--- a/dom/base/TabGroup.h
+++ b/dom/base/TabGroup.h
@@ -20,17 +20,17 @@
 class mozIDOMWindowProxy;
 class nsIDocShellTreeItem;
 class nsPIDOMWindowOuter;
 
 namespace mozilla {
 class AbstractThread;
 namespace dom {
 class Document;
-class TabChild;
+class BrowserChild;
 
 // Two browsing contexts are considered "related" if they are reachable from one
 // another through window.opener, window.parent, or window.frames. This is the
 // spec concept of a "unit of related browsing contexts"
 //
 // Two browsing contexts are considered "similar-origin" if they can be made to
 // have the same origin by setting document.domain. This is the spec concept of
 // a "unit of similar-origin related browsing contexts"
@@ -38,17 +38,17 @@ class TabChild;
 // A TabGroup is a set of browsing contexts which are all "related". Within a
 // TabGroup, browsing contexts are broken into "similar-origin" DocGroups. In
 // more detail, a DocGroup is actually a collection of documents, and a
 // TabGroup is a collection of DocGroups. A TabGroup typically will contain
 // (through its DocGroups) the documents from one or more tabs related by
 // window.opener. A DocGroup is a member of exactly one TabGroup.
 
 class DocGroup;
-class TabChild;
+class BrowserChild;
 
 class TabGroup final : public SchedulerGroup,
                        public LinkedListElement<TabGroup> {
  private:
   class HashEntry : public nsCStringHashKey {
    public:
     // NOTE: Weak reference. The DocGroup destructor removes itself from its
     // owning TabGroup.
@@ -62,21 +62,21 @@ class TabGroup final : public SchedulerG
   typedef DocGroupMap::Iterator Iterator;
 
   friend class DocGroup;
 
   NS_INLINE_DECL_THREADSAFE_REFCOUNTING(TabGroup, override)
 
   static TabGroup* GetChromeTabGroup();
 
-  // Checks if the TabChild already has a TabGroup assigned to it in
+  // Checks if the BrowserChild already has a TabGroup assigned to it in
   // IPDL. Returns this TabGroup if it does. This could happen if the parent
   // process created the PBrowser and we needed to assign a TabGroup immediately
   // upon receiving the IPDL message. This method is main thread only.
-  static TabGroup* GetFromActor(TabChild* aTabChild);
+  static TabGroup* GetFromActor(BrowserChild* aBrowserChild);
 
   static TabGroup* GetFromWindow(mozIDOMWindowProxy* aWindow);
 
   explicit TabGroup(bool aIsChrome = false);
 
   // Get the docgroup for the corresponding doc group key.
   // Returns null if the given key hasn't been seen yet.
   already_AddRefed<DocGroup> GetDocGroup(const nsACString& aKey);
--- a/dom/base/moz.build
+++ b/dom/base/moz.build
@@ -294,17 +294,17 @@ UNIFIED_SOURCES += [
     'FormData.cpp',
     'FragmentOrElement.cpp',
     'GeneratedImageContent.cpp',
     'IdleDeadline.cpp',
     'IdleRequest.cpp',
     'IDTracker.cpp',
     'ImageEncoder.cpp',
     'ImageTracker.cpp',
-    'InProcessTabChildMessageManager.cpp',
+    'InProcessBrowserChildMessageManager.cpp',
     'IntlUtils.cpp',
     'Link.cpp',
     'Location.cpp',
     'MaybeCrossOriginObject.cpp',
     'MessageBroadcaster.cpp',
     'MessageListenerManager.cpp',
     'MessageManagerGlobal.cpp',
     'MessageSender.cpp',
--- a/dom/base/nsCCUncollectableMarker.cpp
+++ b/dom/base/nsCCUncollectableMarker.cpp
@@ -6,17 +6,17 @@
 
 #include "nsCCUncollectableMarker.h"
 #include "nsIObserverService.h"
 #include "nsIDocShell.h"
 #include "nsServiceManagerUtils.h"
 #include "nsIContentViewer.h"
 #include "mozilla/dom/Document.h"
 #include "XULDocument.h"
-#include "InProcessTabChildMessageManager.h"
+#include "InProcessBrowserChildMessageManager.h"
 #include "nsIWindowMediator.h"
 #include "nsPIDOMWindow.h"
 #include "nsIWebNavigation.h"
 #include "nsISHistory.h"
 #include "nsISHEntry.h"
 #include "nsIWindowWatcher.h"
 #include "mozilla/Services.h"
 #include "nsIXULWindow.h"
@@ -29,17 +29,17 @@
 #include "mozilla/CycleCollectedJSContext.h"
 #include "mozilla/CycleCollectedJSRuntime.h"
 #include "mozilla/EventListenerManager.h"
 #include "mozilla/dom/ChromeMessageBroadcaster.h"
 #include "mozilla/dom/ContentFrameMessageManager.h"
 #include "mozilla/dom/ContentProcessMessageManager.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/ParentProcessMessageManager.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/TimeoutManager.h"
 #include "xpcpublic.h"
 #include "nsObserverService.h"
 #include "nsFocusManager.h"
 #include "nsIInterfaceRequestorUtils.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
@@ -81,18 +81,18 @@ nsresult nsCCUncollectableMarker::Init()
   sInited = true;
 
   return NS_OK;
 }
 
 static void MarkChildMessageManagers(MessageBroadcaster* aMM) {
   aMM->MarkForCC();
 
-  uint32_t tabChildCount = aMM->ChildCount();
-  for (uint32_t j = 0; j < tabChildCount; ++j) {
+  uint32_t browserChildCount = aMM->ChildCount();
+  for (uint32_t j = 0; j < browserChildCount; ++j) {
     RefPtr<MessageListenerManager> childMM = aMM->GetChildAt(j);
     if (!childMM) {
       continue;
     }
 
     RefPtr<MessageBroadcaster> strongNonLeafMM =
         MessageBroadcaster::From(childMM);
     MessageBroadcaster* nonLeafMM = strongNonLeafMM;
@@ -109,17 +109,18 @@ static void MarkChildMessageManagers(Mes
 
     tabMM->MarkForCC();
 
     // XXX hack warning, but works, since we know that
     //    callback is frameloader.
     mozilla::dom::ipc::MessageManagerCallback* cb = tabMM->GetCallback();
     if (cb) {
       nsFrameLoader* fl = static_cast<nsFrameLoader*>(cb);
-      InProcessTabChildMessageManager* et = fl->GetTabChildMessageManager();
+      InProcessBrowserChildMessageManager* et =
+          fl->GetBrowserChildMessageManager();
       if (!et) {
         continue;
       }
       et->MarkForCC();
       EventListenerManager* elm = et->GetExistingListenerManager();
       if (elm) {
         elm->MarkForCC();
       }
@@ -267,19 +268,20 @@ void MarkDocShell(nsIDocShellTreeItem* a
 void MarkWindowList(nsISimpleEnumerator* aWindowList, bool aCleanupJS) {
   nsCOMPtr<nsISupports> iter;
   while (NS_SUCCEEDED(aWindowList->GetNext(getter_AddRefs(iter))) && iter) {
     if (nsCOMPtr<nsPIDOMWindowOuter> window = do_QueryInterface(iter)) {
       nsCOMPtr<nsIDocShell> rootDocShell = window->GetDocShell();
 
       MarkDocShell(rootDocShell, aCleanupJS);
 
-      RefPtr<TabChild> tabChild = TabChild::GetFrom(rootDocShell);
-      if (tabChild) {
-        RefPtr<TabChildMessageManager> mm = tabChild->GetMessageManager();
+      RefPtr<BrowserChild> browserChild = BrowserChild::GetFrom(rootDocShell);
+      if (browserChild) {
+        RefPtr<BrowserChildMessageManager> mm =
+            browserChild->GetMessageManager();
         if (mm) {
           // MarkForCC ends up calling UnmarkGray on message listeners, which
           // TraceBlackJS can't do yet.
           mm->MarkForCC();
         }
       }
     }
   }
@@ -476,29 +478,30 @@ void mozilla::dom::TraceBlackJS(JSTracer
             EventListenerManager* elm = inner->GetExistingListenerManager();
             if (elm) {
               elm->TraceListeners(aTrc);
             }
           }
         }
 
         if (window->IsRootOuterWindow()) {
-          // In child process trace all the TabChildMessageManagers.
-          // Since there is one root outer window per TabChildMessageManager, we
-          // need to look for only those windows, not all.
+          // In child process trace all the BrowserChildMessageManagers.
+          // Since there is one root outer window per
+          // BrowserChildMessageManager, we need to look for only those windows,
+          // not all.
           nsIDocShell* ds = window->GetDocShell();
           if (ds) {
-            nsCOMPtr<nsIBrowserChild> tabChild = ds->GetTabChild();
-            if (tabChild) {
+            nsCOMPtr<nsIBrowserChild> browserChild = ds->GetBrowserChild();
+            if (browserChild) {
               RefPtr<ContentFrameMessageManager> mm;
-              tabChild->GetMessageManager(getter_AddRefs(mm));
+              browserChild->GetMessageManager(getter_AddRefs(mm));
               if (mm) {
-                nsCOMPtr<nsISupports> tabChildAsSupports =
-                    do_QueryInterface(tabChild);
-                mozilla::TraceScriptHolder(tabChildAsSupports, aTrc);
+                nsCOMPtr<nsISupports> browserChildAsSupports =
+                    do_QueryInterface(browserChild);
+                mozilla::TraceScriptHolder(browserChildAsSupports, aTrc);
                 EventListenerManager* elm = mm->GetExistingListenerManager();
                 if (elm) {
                   elm->TraceListeners(aTrc);
                 }
                 // As of now there isn't an easy way to trace message listeners.
               }
             }
           }
--- a/dom/base/nsContentPermissionHelper.cpp
+++ b/dom/base/nsContentPermissionHelper.cpp
@@ -11,17 +11,17 @@
 #include "mozilla/dom/ContentParent.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/PContentPermission.h"
 #include "mozilla/dom/Performance.h"
 #include "mozilla/dom/PermissionMessageUtils.h"
 #include "mozilla/dom/PContentPermissionRequestParent.h"
 #include "mozilla/dom/ScriptSettings.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/BrowserParent.h"
 #include "mozilla/Attributes.h"
 #include "mozilla/EventStateManager.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Unused.h"
 #include "nsComponentManagerUtils.h"
 #include "nsArrayUtils.h"
 #include "nsIMutableArray.h"
@@ -347,17 +347,17 @@ nsresult nsContentPermissionUtils::AskPe
 
   // for content process
   if (XRE_IsContentProcess()) {
     RefPtr<RemotePermissionRequest> req =
         new RemotePermissionRequest(aRequest, aWindow);
 
     MOZ_ASSERT(NS_IsMainThread());  // IPC can only be execute on main thread.
 
-    TabChild* child = TabChild::GetFrom(aWindow->GetDocShell());
+    BrowserChild* child = BrowserChild::GetFrom(aWindow->GetDocShell());
     NS_ENSURE_TRUE(child, NS_ERROR_FAILURE);
 
     nsCOMPtr<nsIArray> typeArray;
     nsresult rv = aRequest->GetTypes(getter_AddRefs(typeArray));
     NS_ENSURE_SUCCESS(rv, rv);
 
     nsTArray<PermissionRequest> permArray;
     ConvertArrayToPermissionRequest(typeArray, permArray);
--- a/dom/base/nsContentPolicy.cpp
+++ b/dom/base/nsContentPolicy.cpp
@@ -81,19 +81,20 @@ inline nsresult nsContentPolicy::CheckPo
   MOZ_ASSERT(decision, "Null out pointer");
   WARN_IF_URI_UNINITIALIZED(contentLocation, "Request URI");
   WARN_IF_URI_UNINITIALIZED(requestingLocation, "Requesting URI");
 
 #ifdef DEBUG
   {
     nsCOMPtr<nsINode> node(do_QueryInterface(requestingContext));
     nsCOMPtr<nsIDOMWindow> window(do_QueryInterface(requestingContext));
-    nsCOMPtr<nsIBrowserChild> tabChild(do_QueryInterface(requestingContext));
-    NS_ASSERTION(!requestingContext || node || window || tabChild,
-                 "Context should be a DOM node, DOM window or a tabChild!");
+    nsCOMPtr<nsIBrowserChild> browserChild(
+        do_QueryInterface(requestingContext));
+    NS_ASSERTION(!requestingContext || node || window || browserChild,
+                 "Context should be a DOM node, DOM window or a browserChild!");
   }
 #endif
 
   /*
    * There might not be a requestinglocation. This can happen for
    * iframes with an image as src. Get the uri from the dom node.
    * See bug 254510
    */
--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -224,24 +224,24 @@
 #include "nsViewManager.h"
 #include "nsViewportInfo.h"
 #include "nsWidgetsCID.h"
 #include "nsIWindowProvider.h"
 #include "nsWrapperCacheInlines.h"
 #include "nsXULPopupManager.h"
 #include "xpcprivate.h"  // nsXPConnect
 #include "HTMLSplitOnSpacesTokenizer.h"
-#include "InProcessTabChildMessageManager.h"
+#include "InProcessBrowserChildMessageManager.h"
 #include "nsContentTypeParser.h"
 #include "nsICookiePermission.h"
 #include "nsICookieService.h"
 #include "ThirdPartyUtil.h"
 #include "mozilla/EnumSet.h"
 #include "mozilla/BloomFilter.h"
-#include "TabChild.h"
+#include "BrowserChild.h"
 #include "mozilla/dom/DocGroup.h"
 #include "mozilla/dom/TabGroup.h"
 #include "nsIWebNavigationInfo.h"
 #include "nsPluginHost.h"
 #include "nsIBrowser.h"
 #include "mozilla/HangAnnotations.h"
 #include "mozilla/Encoding.h"
 #include "nsXULElement.h"
@@ -7225,18 +7225,18 @@ nsresult nsContentUtils::GetHostOrIPv6Wi
   }
   CopyUTF8toUTF16(hostname, aHost);
   return NS_OK;
 }
 
 bool nsContentUtils::CallOnAllRemoteChildren(
     MessageBroadcaster* aManager, CallOnRemoteChildFunction aCallback,
     void* aArg) {
-  uint32_t tabChildCount = aManager->ChildCount();
-  for (uint32_t j = 0; j < tabChildCount; ++j) {
+  uint32_t browserChildCount = aManager->ChildCount();
+  for (uint32_t j = 0; j < browserChildCount; ++j) {
     RefPtr<MessageListenerManager> childMM = aManager->GetChildAt(j);
     if (!childMM) {
       continue;
     }
 
     RefPtr<MessageBroadcaster> nonLeafMM = MessageBroadcaster::From(childMM);
     if (nonLeafMM) {
       if (CallOnAllRemoteChildren(nonLeafMM, aCallback, aArg)) {
@@ -7297,17 +7297,17 @@ void nsContentUtils::SetKeyboardIndicato
                           (void*)&stateInfo);
 }
 
 nsresult nsContentUtils::IPCTransferableToTransferable(
     const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData,
     nsIPrincipal* aRequestingPrincipal,
     const nsContentPolicyType& aContentPolicyType,
     nsITransferable* aTransferable, mozilla::dom::ContentParent* aContentParent,
-    mozilla::dom::TabChild* aTabChild) {
+    mozilla::dom::BrowserChild* aBrowserChild) {
   nsresult rv;
 
   const nsTArray<IPCDataTransferItem>& items = aDataTransfer.items();
   for (const auto& item : items) {
     aTransferable->AddDataFlavor(item.flavor().get());
 
     if (item.data().type() == IPCDataTransferData::TnsString) {
       nsCOMPtr<nsISupportsString> dataWrapper =
@@ -7343,18 +7343,18 @@ nsresult nsContentUtils::IPCTransferable
 
         rv = aTransferable->SetTransferData(item.flavor().get(), dataWrapper);
 
         NS_ENSURE_SUCCESS(rv, rv);
       }
 
       if (aContentParent) {
         Unused << aContentParent->DeallocShmem(item.data().get_Shmem());
-      } else if (aTabChild) {
-        Unused << aTabChild->DeallocShmem(item.data().get_Shmem());
+      } else if (aBrowserChild) {
+        Unused << aBrowserChild->DeallocShmem(item.data().get_Shmem());
       }
     }
   }
 
   aTransferable->SetIsPrivateData(aIsPrivateData);
   aTransferable->SetRequestingPrincipal(aRequestingPrincipal);
   aTransferable->SetContentPolicyType(aContentPolicyType);
   return NS_OK;
@@ -9286,21 +9286,21 @@ void nsContentUtils::GetPresentationURL(
   }
 
   if (XRE_IsContentProcess()) {
     nsCOMPtr<nsIDocShellTreeItem> sameTypeRoot;
     aDocShell->GetSameTypeRootTreeItem(getter_AddRefs(sameTypeRoot));
     nsCOMPtr<nsIDocShellTreeItem> root;
     aDocShell->GetRootTreeItem(getter_AddRefs(root));
     if (sameTypeRoot.get() == root.get()) {
-      // presentation URL is stored in TabChild for the top most
+      // presentation URL is stored in BrowserChild for the top most
       // <iframe mozbrowser> in content process.
-      TabChild* tabChild = TabChild::GetFrom(aDocShell);
-      if (tabChild) {
-        aPresentationUrl = tabChild->PresentationURL();
+      BrowserChild* browserChild = BrowserChild::GetFrom(aDocShell);
+      if (browserChild) {
+        aPresentationUrl = browserChild->PresentationURL();
       }
       return;
     }
   }
 
   nsCOMPtr<nsILoadContext> loadContext(do_QueryInterface(aDocShell));
   RefPtr<Element> topFrameElt;
   loadContext->GetTopFrameElement(getter_AddRefs(topFrameElt));
@@ -9828,23 +9828,24 @@ bool nsContentUtils::AttemptLargeAllocat
   rv = aChannel->GetRequestMethod(requestMethod);
   NS_ENSURE_SUCCESS(rv, false);
 
   if (NS_WARN_IF(!requestMethod.LowerCaseEqualsLiteral("get"))) {
     outer->SetLargeAllocStatus(LargeAllocStatus::NON_GET);
     return false;
   }
 
-  TabChild* tabChild = TabChild::GetFrom(outer);
-  NS_ENSURE_TRUE(tabChild, false);
-
-  if (tabChild->IsAwaitingLargeAlloc()) {
+  BrowserChild* browserChild = BrowserChild::GetFrom(outer);
+  NS_ENSURE_TRUE(browserChild, false);
+
+  if (browserChild->IsAwaitingLargeAlloc()) {
     NS_WARNING(
-        "In a Large-Allocation TabChild, ignoring Large-Allocation header!");
-    tabChild->StopAwaitingLargeAlloc();
+        "In a Large-Allocation BrowserChild, ignoring Large-Allocation "
+        "header!");
+    browserChild->StopAwaitingLargeAlloc();
     outer->SetLargeAllocStatus(LargeAllocStatus::SUCCESS);
     return false;
   }
 
   // On Win32 systems, we want to behave differently, so set the isWin32 bool to
   // be true iff we are on win32.
 #if defined(XP_WIN) && defined(_X86_)
   const bool isWin32 = true;
@@ -10555,29 +10556,29 @@ bool nsContentUtils::ContentIsLink(nsICo
   }
 
   return aContent->AsElement()->AttrValueIs(kNameSpaceID_XLink, nsGkAtoms::type,
                                             nsGkAtoms::simple, eCaseMatters);
 }
 
 /* static */
 already_AddRefed<ContentFrameMessageManager>
-nsContentUtils::TryGetTabChildGlobal(nsISupports* aFrom) {
+nsContentUtils::TryGetBrowserChildGlobal(nsISupports* aFrom) {
   RefPtr<nsFrameLoaderOwner> frameLoaderOwner = do_QueryObject(aFrom);
   if (!frameLoaderOwner) {
     return nullptr;
   }
 
   RefPtr<nsFrameLoader> frameLoader = frameLoaderOwner->GetFrameLoader();
   if (!frameLoader) {
     return nullptr;
   }
 
   RefPtr<ContentFrameMessageManager> manager =
-      frameLoader->GetTabChildMessageManager();
+      frameLoader->GetBrowserChildMessageManager();
   return manager.forget();
 }
 
 /* static */
 uint32_t nsContentUtils::InnerOrOuterWindowCreated() {
   MOZ_ASSERT(NS_IsMainThread());
   ++sInnerOrOuterWindowCount;
   return ++sInnerOrOuterWindowSerialCounter;
--- a/dom/base/nsContentUtils.h
+++ b/dom/base/nsContentUtils.h
@@ -142,17 +142,17 @@ class HTMLInputElement;
 class IPCDataTransfer;
 class IPCDataTransferItem;
 struct LifecycleCallbackArgs;
 struct LifecycleAdoptedCallbackArgs;
 class MessageBroadcaster;
 class NodeInfo;
 class ContentChild;
 class ContentParent;
-class TabChild;
+class BrowserChild;
 class Selection;
 class BrowserParent;
 }  // namespace dom
 
 namespace ipc {
 class Shmem;
 class IShmemAllocator;
 }  // namespace ipc
@@ -2844,17 +2844,17 @@ class nsContentUtils {
   static bool IsFlavorImage(const nsACString& aFlavor);
 
   static nsresult IPCTransferableToTransferable(
       const mozilla::dom::IPCDataTransfer& aDataTransfer,
       const bool& aIsPrivateData, nsIPrincipal* aRequestingPrincipal,
       const nsContentPolicyType& aContentPolicyType,
       nsITransferable* aTransferable,
       mozilla::dom::ContentParent* aContentParent,
-      mozilla::dom::TabChild* aTabChild);
+      mozilla::dom::BrowserChild* aBrowserChild);
 
   static void TransferablesToIPCTransferables(
       nsIArray* aTransferables, nsTArray<mozilla::dom::IPCDataTransfer>& aIPC,
       bool aInSyncMessage, mozilla::dom::ContentChild* aChild,
       mozilla::dom::ContentParent* aParent);
 
   static void TransferableToIPCTransferable(
       nsITransferable* aTransferable,
@@ -3326,17 +3326,17 @@ class nsContentUtils {
    */
   static bool IsMessageInputEvent(const IPC::Message& aMsg);
 
   static void AsyncPrecreateStringBundles();
 
   static bool ContentIsLink(nsIContent* aContent);
 
   static already_AddRefed<mozilla::dom::ContentFrameMessageManager>
-  TryGetTabChildGlobal(nsISupports* aFrom);
+  TryGetBrowserChildGlobal(nsISupports* aFrom);
 
   // Get a serial number for a newly created inner or outer window.
   static uint32_t InnerOrOuterWindowCreated();
   // Record that an inner or outer window has been destroyed.
   static void InnerOrOuterWindowDestroyed();
   // Get the current number of inner or outer windows.
   static int32_t GetCurrentInnerOrOuterWindowCount() {
     return sInnerOrOuterWindowCount;
--- a/dom/base/nsDOMWindowUtils.cpp
+++ b/dom/base/nsDOMWindowUtils.cpp
@@ -68,17 +68,17 @@
 #  include <gdk/gdkx.h>
 #endif
 
 #include "Layers.h"
 #include "gfxPrefs.h"
 
 #include "mozilla/dom/AudioDeviceInfo.h"
 #include "mozilla/dom/Element.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/IDBFactoryBinding.h"
 #include "mozilla/dom/IDBMutableFileBinding.h"
 #include "mozilla/dom/IDBMutableFile.h"
 #include "mozilla/dom/IndexedDatabaseManager.h"
 #include "mozilla/dom/PermissionMessageUtils.h"
 #include "mozilla/dom/Text.h"
 #include "mozilla/dom/quota/PersistenceType.h"
 #include "mozilla/dom/quota/QuotaManager.h"
--- a/dom/base/nsFocusManager.cpp
+++ b/dom/base/nsFocusManager.cpp
@@ -33,17 +33,17 @@
 #include "nsXULPopupManager.h"
 #include "nsMenuPopupFrame.h"
 #include "nsIScriptObjectPrincipal.h"
 #include "nsIPrincipal.h"
 #include "nsIObserverService.h"
 #include "nsIObjectFrame.h"
 #include "nsBindingManager.h"
 #include "nsStyleCoord.h"
-#include "TabChild.h"
+#include "BrowserChild.h"
 #include "nsFrameLoader.h"
 #include "nsNumberControlFrame.h"
 #include "nsNetUtil.h"
 #include "nsRange.h"
 
 #include "mozilla/AccessibleCaretEventHub.h"
 #include "mozilla/ContentEvents.h"
 #include "mozilla/dom/Element.h"
@@ -832,18 +832,18 @@ nsFocusManager::WindowShown(mozIDOMWindo
       if (doc && doc->GetDocumentURI()) {
         LOGFOCUS((" Focused Window: %s",
                   doc->GetDocumentURI()->GetSpecOrDefault().get()));
       }
     }
   }
 
   if (nsIDocShell* docShell = window->GetDocShell()) {
-    if (nsCOMPtr<nsIBrowserChild> child = docShell->GetTabChild()) {
-      bool active = static_cast<TabChild*>(child.get())->ParentIsActive();
+    if (nsCOMPtr<nsIBrowserChild> child = docShell->GetBrowserChild()) {
+      bool active = static_cast<BrowserChild*>(child.get())->ParentIsActive();
       ActivateOrDeactivate(window, active);
     }
   }
 
   if (mFocusedWindow != window) return NS_OK;
 
   if (aNeedsFocus) {
     nsCOMPtr<nsPIDOMWindowOuter> currentWindow;
@@ -1609,19 +1609,19 @@ bool nsFocusManager::Blur(nsPIDOMWindowO
     // plugin. But don't do this if we are blurring due to the window being
     // lowered, otherwise, the parent window can get raised again.
     if (mActiveWindow) {
       nsIFrame* contentFrame = element->GetPrimaryFrame();
       nsIObjectFrame* objectFrame = do_QueryFrame(contentFrame);
       if (aAdjustWidgets && objectFrame && !sTestMode) {
         if (XRE_IsContentProcess()) {
           // set focus to the top level window via the chrome process.
-          nsCOMPtr<nsIBrowserChild> tabChild = docShell->GetTabChild();
-          if (tabChild) {
-            static_cast<TabChild*>(tabChild.get())
+          nsCOMPtr<nsIBrowserChild> browserChild = docShell->GetBrowserChild();
+          if (browserChild) {
+            static_cast<BrowserChild*>(browserChild.get())
                 ->SendDispatchFocusToTopLevelWindow();
           }
         } else {
           // note that the presshell's widget is being retrieved here, not the
           // one for the object frame.
           nsViewManager* vm = presShell->GetViewManager();
           if (vm) {
             nsCOMPtr<nsIWidget> widget;
--- a/dom/base/nsFrameLoader.cpp
+++ b/dom/base/nsFrameLoader.cpp
@@ -60,17 +60,17 @@
 #include "nsNetUtil.h"
 
 #include "nsGkAtoms.h"
 #include "nsNameSpaceManager.h"
 
 #include "nsThreadUtils.h"
 
 #include "nsIDOMChromeWindow.h"
-#include "InProcessTabChildMessageManager.h"
+#include "InProcessBrowserChildMessageManager.h"
 
 #include "Layers.h"
 #include "ClientLayerManager.h"
 
 #include "ContentParent.h"
 #include "BrowserParent.h"
 #include "mozilla/AsyncEventDispatcher.h"
 #include "mozilla/BasePrincipal.h"
@@ -1702,25 +1702,25 @@ nsresult nsFrameLoader::SwapWithOtherLoa
 
   ourWindow->SetFrameElementInternal(otherFrameElement);
   otherWindow->SetFrameElementInternal(ourFrameElement);
 
   RefPtr<nsFrameMessageManager> ourMessageManager = mMessageManager;
   RefPtr<nsFrameMessageManager> otherMessageManager = aOther->mMessageManager;
   // Swap pointers in child message managers.
   if (mChildMessageManager) {
-    InProcessTabChildMessageManager* tabChild = mChildMessageManager;
-    tabChild->SetOwner(otherContent);
-    tabChild->SetChromeMessageManager(otherMessageManager);
+    InProcessBrowserChildMessageManager* browserChild = mChildMessageManager;
+    browserChild->SetOwner(otherContent);
+    browserChild->SetChromeMessageManager(otherMessageManager);
   }
   if (aOther->mChildMessageManager) {
-    InProcessTabChildMessageManager* otherTabChild =
+    InProcessBrowserChildMessageManager* otherBrowserChild =
         aOther->mChildMessageManager;
-    otherTabChild->SetOwner(ourContent);
-    otherTabChild->SetChromeMessageManager(ourMessageManager);
+    otherBrowserChild->SetOwner(ourContent);
+    otherBrowserChild->SetChromeMessageManager(ourMessageManager);
   }
   // Swap and setup things in parent message managers.
   if (mMessageManager) {
     mMessageManager->SetCallback(aOther);
   }
   if (aOther->mMessageManager) {
     aOther->mMessageManager->SetCallback(this);
   }
@@ -1907,17 +1907,17 @@ nsresult nsFrameLoaderDestroyRunnable::R
   return NS_OK;
 }
 
 void nsFrameLoader::DestroyDocShell() {
   // This code runs after the frameloader has been detached from the <browser>
   // element. We postpone this work because we may not be allowed to run
   // script at that time.
 
-  // Ask the TabChild to fire the frame script "unload" event, destroy its
+  // Ask the BrowserChild to fire the frame script "unload" event, destroy its
   // docshell, and finally destroy the PBrowser actor. This eventually leads to
   // nsFrameLoader::DestroyComplete being called.
   if (mBrowserParent) {
     mBrowserParent->Destroy();
   }
 
   if (mBrowserBridgeChild) {
     Unused << mBrowserBridgeChild->Send__delete__(mBrowserBridgeChild);
@@ -2874,45 +2874,45 @@ nsresult nsFrameLoader::CreateStaticClon
 
 bool nsFrameLoader::DoLoadMessageManagerScript(const nsAString& aURL,
                                                bool aRunInGlobalScope) {
   auto* browserParent = BrowserParent::GetFrom(GetRemoteBrowser());
   if (browserParent) {
     return browserParent->SendLoadRemoteScript(nsString(aURL),
                                                aRunInGlobalScope);
   }
-  RefPtr<InProcessTabChildMessageManager> tabChild =
-      GetTabChildMessageManager();
-  if (tabChild) {
-    tabChild->LoadFrameScript(aURL, aRunInGlobalScope);
+  RefPtr<InProcessBrowserChildMessageManager> browserChild =
+      GetBrowserChildMessageManager();
+  if (browserChild) {
+    browserChild->LoadFrameScript(aURL, aRunInGlobalScope);
   }
   return true;
 }
 
 class nsAsyncMessageToChild : public nsSameProcessAsyncMessageBase,
                               public Runnable {
  public:
   nsAsyncMessageToChild(JS::RootingContext* aRootingCx,
                         JS::Handle<JSObject*> aCpows,
                         nsFrameLoader* aFrameLoader)
       : nsSameProcessAsyncMessageBase(aRootingCx, aCpows),
         mozilla::Runnable("nsAsyncMessageToChild"),
         mFrameLoader(aFrameLoader) {}
 
   NS_IMETHOD Run() override {
-    InProcessTabChildMessageManager* tabChild =
+    InProcessBrowserChildMessageManager* browserChild =
         mFrameLoader->mChildMessageManager;
     // Since bug 1126089, messages can arrive even when the docShell is
     // destroyed. Here we make sure that those messages are not delivered.
-    if (tabChild && tabChild->GetInnerManager() &&
+    if (browserChild && browserChild->GetInnerManager() &&
         mFrameLoader->GetExistingDocShell()) {
       JS::Rooted<JSObject*> kungFuDeathGrip(dom::RootingCx(),
-                                            tabChild->GetWrapper());
-      ReceiveMessage(static_cast<EventTarget*>(tabChild), mFrameLoader,
-                     tabChild->GetInnerManager());
+                                            browserChild->GetWrapper());
+      ReceiveMessage(static_cast<EventTarget*>(browserChild), mFrameLoader,
+                     browserChild->GetInnerManager());
     }
     return NS_OK;
   }
   RefPtr<nsFrameLoader> mFrameLoader;
 };
 
 nsresult nsFrameLoader::DoSendAsyncMessage(JSContext* aCx,
                                            const nsAString& aMessage,
@@ -3005,17 +3005,17 @@ nsresult nsFrameLoader::EnsureMessageMan
     if (NS_FAILED(rv)) {
       return rv;
     }
     MOZ_ASSERT(GetDocShell(),
                "MaybeCreateDocShell succeeded, but null docShell");
     if (!GetDocShell()) {
       return NS_ERROR_FAILURE;
     }
-    mChildMessageManager = InProcessTabChildMessageManager::Create(
+    mChildMessageManager = InProcessBrowserChildMessageManager::Create(
         GetDocShell(), mOwnerContent, mMessageManager);
     NS_ENSURE_TRUE(mChildMessageManager, NS_ERROR_UNEXPECTED);
   }
   return NS_OK;
 }
 
 nsresult nsFrameLoader::ReallyLoadFrameScripts() {
   nsresult rv = EnsureMessageManager();
--- a/dom/base/nsFrameLoader.h
+++ b/dom/base/nsFrameLoader.h
@@ -47,17 +47,17 @@ class nsIWebProgressListener;
 
 namespace mozilla {
 
 class OriginAttributes;
 
 namespace dom {
 class ChromeMessageSender;
 class ContentParent;
-class InProcessTabChildMessageManager;
+class InProcessBrowserChildMessageManager;
 class MessageSender;
 class PBrowserParent;
 class ProcessMessageManager;
 class Promise;
 class BrowserParent;
 class MutableTabContext;
 class BrowserBridgeChild;
 class RemoteFrameChild;
@@ -116,18 +116,18 @@ class nsFrameLoader final : public nsStu
   nsresult CheckForRecursiveLoad(nsIURI* aURI);
   nsresult ReallyStartLoading();
   void StartDestroy();
   void DestroyDocShell();
   void DestroyComplete();
   nsIDocShell* GetExistingDocShell() const {
     return mBrowsingContext ? mBrowsingContext->GetDocShell() : nullptr;
   }
-  mozilla::dom::InProcessTabChildMessageManager* GetTabChildMessageManager()
-      const {
+  mozilla::dom::InProcessBrowserChildMessageManager*
+  GetBrowserChildMessageManager() const {
     return mChildMessageManager;
   }
   nsresult CreateStaticClone(nsFrameLoader* aDest);
   nsresult UpdatePositionAndSize(nsSubDocumentFrame* aIFrame);
 
   // WebIDL methods
 
   nsDocShell* GetDocShell(mozilla::ErrorResult& aRv);
@@ -367,17 +367,18 @@ class nsFrameLoader final : public nsStu
   // Properly retrieves documentSize of any subdocument type.
   nsresult GetWindowDimensions(nsIntRect& aRect);
 
   virtual mozilla::dom::ProcessMessageManager* GetProcessMessageManager()
       const override;
 
   // public because a callback needs these.
   RefPtr<mozilla::dom::ChromeMessageSender> mMessageManager;
-  RefPtr<mozilla::dom::InProcessTabChildMessageManager> mChildMessageManager;
+  RefPtr<mozilla::dom::InProcessBrowserChildMessageManager>
+      mChildMessageManager;
 
   virtual JSObject* WrapObject(JSContext* cx,
                                JS::Handle<JSObject*> aGivenProto) override;
 
  private:
   nsFrameLoader(mozilla::dom::Element* aOwner,
                 mozilla::dom::BrowsingContext* aBrowsingContext,
                 bool aNetworkCreated);
--- a/dom/base/nsFrameMessageManager.cpp
+++ b/dom/base/nsFrameMessageManager.cpp
@@ -739,17 +739,17 @@ void nsFrameMessageManager::ReceiveMessa
       if (aTargetFrameLoader) {
         argument.mTargetFrameLoader.Construct(*aTargetFrameLoader);
       }
 
       JS::Rooted<JS::Value> thisValue(cx, JS::UndefinedValue());
 
       if (JS::IsCallable(object)) {
         // A small hack to get 'this' value right on content side where
-        // messageManager is wrapped in TabChildMessageManager's global.
+        // messageManager is wrapped in BrowserChildMessageManager's global.
         nsCOMPtr<nsISupports> defaultThisValue;
         if (mChrome) {
           defaultThisValue = do_QueryObject(this);
         } else {
           defaultThisValue = aTarget;
         }
         js::AssertSameCompartment(cx, object);
         aError = nsContentUtils::WrapNative(cx, defaultThisValue, &thisValue);
--- a/dom/base/nsGlobalWindowInner.cpp
+++ b/dom/base/nsGlobalWindowInner.cpp
@@ -900,17 +900,17 @@ nsGlobalWindowInner::nsGlobalWindowInner
   RefPtr<StorageNotifierService> sns = StorageNotifierService::GetOrCreate();
   if (sns) {
     sns->Register(mObserver);
   }
 
   if (XRE_IsContentProcess()) {
     nsCOMPtr<nsIDocShell> docShell = GetDocShell();
     if (docShell) {
-      mTabChild = docShell->GetTabChild();
+      mBrowserChild = docShell->GetBrowserChild();
     }
   }
 
   // We could have failed the first time through trying
   // to create the entropy collector, so we should
   // try to get one until we succeed.
 
   static bool sFirstTime = true;
@@ -1175,20 +1175,20 @@ void nsGlobalWindowInner::FreeInnerObjec
   DisableVRUpdates();
   mHasVREvents = false;
   mHasVRDisplayActivateEvents = false;
   mVRDisplays.Clear();
 
   // This breaks a cycle between the window and the ClientSource object.
   mClientSource.reset();
 
-  if (mTabChild) {
+  if (mBrowserChild) {
     // Remove any remaining listeners, and reset mBeforeUnloadListenerCount.
     for (int i = 0; i < mBeforeUnloadListenerCount; ++i) {
-      mTabChild->BeforeUnloadRemoved();
+      mBrowserChild->BeforeUnloadRemoved();
     }
     mBeforeUnloadListenerCount = 0;
   }
 
   // If we have any promiseDocumentFlushed callbacks, fire them now so
   // that the Promises can resolve.
   CallDocumentFlushedResolvers();
   mObservingDidRefresh = false;
@@ -1354,17 +1354,17 @@ NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mCustomElements)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSharedWorkers)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mLocalStorage)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mSessionStorage)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mApplicationCache)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIndexedDB)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocumentPrincipal)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDocumentStoragePrincipal)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTabChild)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowserChild)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mDoc)
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mIdleRequestExecutor)
   for (IdleRequest* request : tmp->mIdleRequestCallbacks) {
     cb.NoteNativeChild(request, NS_CYCLE_COLLECTION_PARTICIPANT(IdleRequest));
   }
 
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mClientSource)
@@ -1458,17 +1458,17 @@ NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(ns
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mApplicationCache)
   }
   if (tmp->mIndexedDB) {
     tmp->mIndexedDB->DisconnectFromGlobal(tmp);
     NS_IMPL_CYCLE_COLLECTION_UNLINK(mIndexedDB)
   }
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mDocumentPrincipal)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mDocumentStoragePrincipal)
-  NS_IMPL_CYCLE_COLLECTION_UNLINK(mTabChild)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowserChild)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mDoc)
 
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mGamepads)
 
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mCacheStorage)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mVRDisplays)
 
   // Unlink stuff from nsPIDOMWindow
@@ -1609,21 +1609,21 @@ void nsGlobalWindowInner::InnerSetNewDoc
 
   // This must be called after nullifying the internal objects because here we
   // could recreate them, calling the getter methods, and store them into the JS
   // slots. If we nullify them after, the slot values and the objects will be
   // out of sync.
   ClearDocumentDependentSlots(aCx);
 
   // FIXME: Currently, devtools can crete a fallback webextension window global
-  // in the content process which does not have a corresponding TabChild actor.
-  // This means we have no actor to be our parent. (Bug 1498293)
+  // in the content process which does not have a corresponding BrowserChild
+  // actor. This means we have no actor to be our parent. (Bug 1498293)
   MOZ_DIAGNOSTIC_ASSERT(!mWindowGlobalChild,
                         "Shouldn't have created WindowGlobalChild yet!");
-  if (XRE_IsParentProcess() || mTabChild) {
+  if (XRE_IsParentProcess() || mBrowserChild) {
     mWindowGlobalChild = WindowGlobalChild::Create(this);
   }
 
   if (ShouldResetBrowsingContextUserGestureActivation()) {
     Window()->NotifyResetUserGestureActivation();
   }
 
 #ifdef DEBUG
@@ -1828,28 +1828,28 @@ void nsGlobalWindowInner::UpdateParentTa
 
   // Try to get our frame element's tab child global (its in-process message
   // manager).  If that fails, fall back to the chrome event handler's tab
   // child global, and if it doesn't have one, just use the chrome event
   // handler itself.
 
   nsCOMPtr<Element> frameElement = GetOuterWindow()->GetFrameElementInternal();
   nsCOMPtr<EventTarget> eventTarget =
-      nsContentUtils::TryGetTabChildGlobal(frameElement);
+      nsContentUtils::TryGetBrowserChildGlobal(frameElement);
 
   if (!eventTarget) {
     nsGlobalWindowOuter* topWin = GetScriptableTopInternal();
     if (topWin) {
       frameElement = topWin->GetFrameElementInternal();
-      eventTarget = nsContentUtils::TryGetTabChildGlobal(frameElement);
+      eventTarget = nsContentUtils::TryGetBrowserChildGlobal(frameElement);
     }
   }
 
   if (!eventTarget) {
-    eventTarget = nsContentUtils::TryGetTabChildGlobal(mChromeEventHandler);
+    eventTarget = nsContentUtils::TryGetBrowserChildGlobal(mChromeEventHandler);
   }
 
   if (!eventTarget) {
     eventTarget = mChromeEventHandler;
   }
 
   mParentTarget = eventTarget;
 }
@@ -4612,17 +4612,17 @@ nsGlobalWindowInner::ShowSlowScriptDialo
   }
   mHasHadSlowScript = true;
 
   if (XRE_IsContentProcess() && ProcessHangMonitor::Get()) {
     ProcessHangMonitor::SlowScriptAction action;
     RefPtr<ProcessHangMonitor> monitor = ProcessHangMonitor::Get();
     nsIDocShell* docShell = GetDocShell();
     nsCOMPtr<nsIBrowserChild> child =
-        docShell ? docShell->GetTabChild() : nullptr;
+        docShell ? docShell->GetBrowserChild() : nullptr;
     action = monitor->NotifySlowScript(child, filename.get(), aAddonId);
     if (action == ProcessHangMonitor::Terminate) {
       return KillSlowScript;
     }
     if (action == ProcessHangMonitor::TerminateGlobal) {
       return KillScriptGlobal;
     }
 
@@ -5835,21 +5835,21 @@ void nsGlobalWindowInner::EventListenerA
       aType == nsGkAtoms::onvrdisplaypresentchange) {
     NotifyVREventListenerAdded();
   }
 
   if (aType == nsGkAtoms::onvrdisplayactivate) {
     mHasVRDisplayActivateEvents = true;
   }
 
-  if (aType == nsGkAtoms::onbeforeunload && mTabChild &&
+  if (aType == nsGkAtoms::onbeforeunload && mBrowserChild &&
       (!mDoc || !(mDoc->GetSandboxFlags() & SANDBOXED_MODALS))) {
     mBeforeUnloadListenerCount++;
     MOZ_ASSERT(mBeforeUnloadListenerCount > 0);
-    mTabChild->BeforeUnloadAdded();
+    mBrowserChild->BeforeUnloadAdded();
   }
 
   // We need to initialize localStorage in order to receive notifications.
   if (aType == nsGkAtoms::onstorage) {
     ErrorResult rv;
     GetLocalStorage(rv);
     rv.SuppressException();
 
@@ -5858,21 +5858,21 @@ void nsGlobalWindowInner::EventListenerA
       auto object = static_cast<LSObject*>(mLocalStorage.get());
 
       Unused << NS_WARN_IF(NS_FAILED(object->EnsureObserver()));
     }
   }
 }
 
 void nsGlobalWindowInner::EventListenerRemoved(nsAtom* aType) {
-  if (aType == nsGkAtoms::onbeforeunload && mTabChild &&
+  if (aType == nsGkAtoms::onbeforeunload && mBrowserChild &&
       (!mDoc || !(mDoc->GetSandboxFlags() & SANDBOXED_MODALS))) {
     mBeforeUnloadListenerCount--;
     MOZ_ASSERT(mBeforeUnloadListenerCount >= 0);
-    mTabChild->BeforeUnloadRemoved();
+    mBrowserChild->BeforeUnloadRemoved();
   }
 
   if (aType == nsGkAtoms::onstorage) {
     if (NextGenLocalStorageEnabled() && mLocalStorage &&
         mLocalStorage->Type() == Storage::eLocalStorage &&
         // The remove event is fired even if this isn't the last listener, so
         // only remove if there are no other listeners left.
         mListenerManager &&
--- a/dom/base/nsGlobalWindowInner.h
+++ b/dom/base/nsGlobalWindowInner.h
@@ -1293,18 +1293,18 @@ class nsGlobalWindowInner final : public
 
   nsTObserverArray<RefPtr<mozilla::dom::SharedWorker>> mSharedWorkers;
 
   RefPtr<mozilla::dom::VisualViewport> mVisualViewport;
 
   nsCOMPtr<nsIPrincipal> mDocumentPrincipal;
   nsCOMPtr<nsIPrincipal> mDocumentStoragePrincipal;
 
-  // mTabChild is only ever populated in the content process.
-  nsCOMPtr<nsIBrowserChild> mTabChild;
+  // mBrowserChild is only ever populated in the content process.
+  nsCOMPtr<nsIBrowserChild> mBrowserChild;
 
   uint32_t mSuspendDepth;
   uint32_t mFreezeDepth;
 
 #ifdef DEBUG
   uint32_t mSerial;
 #endif
 
--- a/dom/base/nsGlobalWindowOuter.cpp
+++ b/dom/base/nsGlobalWindowOuter.cpp
@@ -2560,28 +2560,29 @@ void nsGlobalWindowOuter::UpdateParentTa
   // mMessageManager as well, which inner windows don't have.
 
   // Try to get our frame element's tab child global (its in-process message
   // manager).  If that fails, fall back to the chrome event handler's tab
   // child global, and if it doesn't have one, just use the chrome event
   // handler itself.
 
   nsCOMPtr<Element> frameElement = GetFrameElementInternal();
-  mMessageManager = nsContentUtils::TryGetTabChildGlobal(frameElement);
+  mMessageManager = nsContentUtils::TryGetBrowserChildGlobal(frameElement);
 
   if (!mMessageManager) {
     nsGlobalWindowOuter* topWin = GetScriptableTopInternal();
     if (topWin) {
       frameElement = topWin->GetFrameElementInternal();
-      mMessageManager = nsContentUtils::TryGetTabChildGlobal(frameElement);
+      mMessageManager = nsContentUtils::TryGetBrowserChildGlobal(frameElement);
     }
   }
 
   if (!mMessageManager) {
-    mMessageManager = nsContentUtils::TryGetTabChildGlobal(mChromeEventHandler);
+    mMessageManager =
+        nsContentUtils::TryGetBrowserChildGlobal(mChromeEventHandler);
   }
 
   if (mMessageManager) {
     mParentTarget = mMessageManager;
   } else {
     mParentTarget = mChromeEventHandler;
   }
 }
@@ -4646,17 +4647,17 @@ bool nsGlobalWindowOuter::CanMoveResizeW
     if (!CanSetProperty("dom.disable_window_move_resize")) {
       return false;
     }
 
     // Ignore the request if we have more than one tab in the window.
     if (XRE_IsContentProcess()) {
       nsCOMPtr<nsIDocShell> docShell = GetDocShell();
       if (docShell) {
-        nsCOMPtr<nsIBrowserChild> child = docShell->GetTabChild();
+        nsCOMPtr<nsIBrowserChild> child = docShell->GetBrowserChild();
         bool hasSiblings = true;
         if (child && NS_SUCCEEDED(child->GetHasSiblings(&hasSiblings)) &&
             hasSiblings) {
           return false;
         }
       }
     } else {
       nsCOMPtr<nsIDocShellTreeOwner> treeOwner = GetTreeOwner();
@@ -6459,37 +6460,37 @@ Element* nsGlobalWindowOuter::GetRealFra
  */
 Element* nsGlobalWindowOuter::GetFrameElement() {
   FORWARD_TO_INNER(GetFrameElement, (), nullptr);
 }
 
 namespace {
 class ChildCommandDispatcher : public Runnable {
  public:
-  ChildCommandDispatcher(nsPIWindowRoot* aRoot, nsIBrowserChild* aTabChild,
+  ChildCommandDispatcher(nsPIWindowRoot* aRoot, nsIBrowserChild* aBrowserChild,
                          const nsAString& aAction)
       : mozilla::Runnable("ChildCommandDispatcher"),
         mRoot(aRoot),
-        mTabChild(aTabChild),
+        mBrowserChild(aBrowserChild),
         mAction(aAction) {}
 
   NS_IMETHOD Run() override {
     nsTArray<nsCString> enabledCommands, disabledCommands;
     mRoot->GetEnabledDisabledCommands(enabledCommands, disabledCommands);
     if (enabledCommands.Length() || disabledCommands.Length()) {
-      mTabChild->EnableDisableCommands(mAction, enabledCommands,
-                                       disabledCommands);
+      mBrowserChild->EnableDisableCommands(mAction, enabledCommands,
+                                           disabledCommands);
     }
 
     return NS_OK;
   }
 
  private:
   nsCOMPtr<nsPIWindowRoot> mRoot;
-  nsCOMPtr<nsIBrowserChild> mTabChild;
+  nsCOMPtr<nsIBrowserChild> mBrowserChild;
   nsString mAction;
 };
 
 class CommandDispatcher : public Runnable {
  public:
   CommandDispatcher(nsIDOMXULCommandDispatcher* aDispatcher,
                     const nsAString& aAction)
       : mozilla::Runnable("CommandDispatcher"),
@@ -6502,17 +6503,17 @@ class CommandDispatcher : public Runnabl
   nsString mAction;
 };
 }  // anonymous namespace
 
 void nsGlobalWindowOuter::UpdateCommands(const nsAString& anAction,
                                          Selection* aSel, int16_t aReason) {
   // If this is a child process, redirect to the parent process.
   if (nsIDocShell* docShell = GetDocShell()) {
-    if (nsCOMPtr<nsIBrowserChild> child = docShell->GetTabChild()) {
+    if (nsCOMPtr<nsIBrowserChild> child = docShell->GetBrowserChild()) {
       nsCOMPtr<nsPIWindowRoot> root = GetTopWindowRoot();
       if (root) {
         nsContentUtils::AddScriptRunner(
             new ChildCommandDispatcher(root, child, anAction));
       }
       return;
     }
   }
--- a/dom/base/nsWrapperCache.h
+++ b/dom/base/nsWrapperCache.h
@@ -12,18 +12,18 @@
 #include "js/Id.h"     // must come before js/RootingAPI.h
 #include "js/Value.h"  // must come before js/RootingAPI.h
 #include "js/RootingAPI.h"
 #include "js/TracingAPI.h"
 
 namespace mozilla {
 namespace dom {
 class ContentProcessMessageManager;
-class InProcessTabChildMessageManager;
-class TabChildMessageManager;
+class InProcessBrowserChildMessageManager;
+class BrowserChildMessageManager;
 }  // namespace dom
 }  // namespace mozilla
 class SandboxPrivate;
 class nsWindowRoot;
 
 #define NS_WRAPPERCACHE_IID                          \
   {                                                  \
     0x6f3179a1, 0x36f7, 0x4a5c, {                    \
--- a/dom/base/test/browser_messagemanager_unload.js
+++ b/dom/base/test/browser_messagemanager_unload.js
@@ -37,17 +37,17 @@ function frameScript()
     addEventListener("pagehide", eventHandler, true);
     Services.obs.addObserver(onOuterWindowDestroyed, "outer-window-destroyed");
 
     sendAsyncMessage("Test:Ready");
   }, true);
 }
 
 const EXPECTED = [
-  // Unload events on the TabChildGlobal. These come first so that the
+  // Unload events on the BrowserChildGlobal. These come first so that the
   // docshell is available.
   ["unload", false, 2],
   ["unload", false, 2],
 
   // pagehide and unload events for the top-level page.
   ["pagehide", true, 1],
   ["pagehide", true, 3],
   ["unload", true, 1],
--- a/dom/base/test/chrome/file_bug1139964.xul
+++ b/dom/base/test/chrome/file_bug1139964.xul
@@ -35,19 +35,19 @@ https://bugzilla.mozilla.org/show_bug.cg
     ok(m.data.hasWindow, "ProcessGlobal should have Window object in the global scope!");
 
     messageManager.addMessageListener(msgName, tabListener)
     messageManager.loadFrameScript("data:,(" + mmScriptForPromiseTest.toString() + ")()", true);
   }
 
   function tabListener(m) {
     messageManager.removeMessageListener(msgName, tabListener);
-    ok(m.data.hasPromise, "TabChildGlobal should have Promise object in the global scope!");
-    ok(m.data.hasTextEncoder, "TabChildGlobal should have TextEncoder object in the global scope!");
-    ok(m.data.hasWindow, "TabChildGlobal should have Window object in the global scope!");
+    ok(m.data.hasPromise, "BrowserChildGlobal should have Promise object in the global scope!");
+    ok(m.data.hasTextEncoder, "BrowserChildGlobal should have TextEncoder object in the global scope!");
+    ok(m.data.hasWindow, "BrowserChildGlobal should have Window object in the global scope!");
 
     opener.setTimeout("done()", 0);
     window.close();
   }
 
   function run() {
     ppm.addMessageListener(msgName, processListener)
     ppm.loadProcessScript("data:,(" + mmScriptForPromiseTest.toString() + ")()", true);
--- a/dom/browser-element/BrowserElementChildPreload.js
+++ b/dom/browser-element/BrowserElementChildPreload.js
@@ -128,17 +128,17 @@ BrowserElementChild.prototype = {
             .addProgressListener(this._progressListener,
                                  Ci.nsIWebProgress.NOTIFY_LOCATION |
                                  Ci.nsIWebProgress.NOTIFY_SECURITY |
                                  Ci.nsIWebProgress.NOTIFY_STATE_WINDOW);
 
     let webNavigation = docShell.QueryInterface(Ci.nsIWebNavigation);
     if (!webNavigation.sessionHistory) {
       // XXX(nika): I don't think this code should ever be hit? We should run
-      // TabChild::Init before we run this code which will perform this setup
+      // BrowserChild::Init before we run this code which will perform this setup
       // for us.
       docShell.initSessionHistory();
     }
 
     // This is necessary to get security web progress notifications.
     var securityUI = Cc["@mozilla.org/secure_browser_ui;1"]
                        .createInstance(Ci.nsISecureBrowserUI);
     securityUI.init(docShell);
@@ -168,17 +168,17 @@ BrowserElementChild.prototype = {
 
     OBSERVED_EVENTS.forEach((aTopic) => {
       Services.obs.addObserver(this, aTopic);
     });
   },
 
   /**
    * Shut down the frame's side of the browser API.  This is called when:
-   *   - our TabChildGlobal starts to die
+   *   - our BrowserChildGlobal starts to die
    *   - the content is moved to frame without the browser API
    * This is not called when the page inside |content| unloads.
    */
   destroy() {
     debug("Destroying");
     this._shuttingDown = true;
 
     BrowserElementPromptService.unmapWindowToBrowserElementChild(content);
@@ -777,17 +777,17 @@ BrowserElementChild.prototype = {
     menuData.screenX = e.screenX;
     menuData.screenY = e.screenY;
 
     // The value returned by the contextmenu sync call is true if the embedder
     // called preventDefault() on its contextmenu event.
     //
     // We call preventDefault() on our contextmenu event if the embedder called
     // preventDefault() on /its/ contextmenu event.  This way, if the embedder
-    // ignored the contextmenu event, TabChild will fire a click.
+    // ignored the contextmenu event, BrowserChild will fire a click.
     if (sendSyncMsg("contextmenu", menuData)[0]) {
       e.preventDefault();
     } else {
       this._ctxHandlers = {};
     }
   },
 
   _getSystemCtxMenuData(elem) {
--- a/dom/browser-element/BrowserElementParent.h
+++ b/dom/browser-element/BrowserElementParent.h
@@ -74,17 +74,17 @@ class BrowserElementParent {
    * iframe element) into the DOM somewhere.
    *
    * 3) If the embedder accepted the window.open request, we return true and
    *    set aPopupBrowserParent's frame element to event.detail.frameElement.
    *    Otherwise, we return false.
    *
    * @param aURL the URL the new window should load.  The empty string is
    *             allowed.
-   * @param aOpenerBrowserParent the BrowserParent whose TabChild called
+   * @param aOpenerBrowserParent the BrowserParent whose BrowserChild called
    * window.open.
    * @param aPopupBrowserParent the BrowserParent inside which the opened window
    * will live.
    * @return an OpenWindowresult that describes whether the embedder added the
    *         frame to a document and whether it called preventDefault to prevent
    *         the platform from handling the open request.
    */
   static OpenWindowResult OpenWindowOOP(
--- a/dom/canvas/CanvasUtils.cpp
+++ b/dom/canvas/CanvasUtils.cpp
@@ -7,17 +7,17 @@
 #include <stdarg.h>
 
 #include "nsIServiceManager.h"
 
 #include "nsIConsoleService.h"
 #include "nsICanvasRenderingContextInternal.h"
 #include "nsIHTMLCollection.h"
 #include "mozilla/dom/HTMLCanvasElement.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/EventStateManager.h"
 #include "mozilla/StaticPrefs.h"
 #include "nsIPrincipal.h"
 
 #include "nsGfxCIID.h"
 
 #include "nsTArray.h"
 
@@ -173,20 +173,20 @@ bool IsImageExtractionAllowed(Document* 
       message.AppendPrintf(" %s:%u.", scriptFile.get(), scriptLine);
     }
     nsContentUtils::LogMessageToConsole(message.get());
   }
 
   // Prompt the user (asynchronous).
   nsPIDOMWindowOuter* win = aDocument->GetWindow();
   if (XRE_IsContentProcess()) {
-    TabChild* tabChild = TabChild::GetFrom(win);
-    if (tabChild) {
-      tabChild->SendShowCanvasPermissionPrompt(topLevelDocURISpec,
-                                               isAutoBlockCanvas);
+    BrowserChild* browserChild = BrowserChild::GetFrom(win);
+    if (browserChild) {
+      browserChild->SendShowCanvasPermissionPrompt(topLevelDocURISpec,
+                                                   isAutoBlockCanvas);
     }
   } else {
     nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
     if (obs) {
       obs->NotifyObservers(win,
                            isAutoBlockCanvas
                                ? TOPIC_CANVAS_PERMISSIONS_PROMPT_HIDE_DOORHANGER
                                : TOPIC_CANVAS_PERMISSIONS_PROMPT,
--- a/dom/events/EventDispatcher.cpp
+++ b/dom/events/EventDispatcher.cpp
@@ -781,18 +781,18 @@ nsresult EventDispatcher::Dispatch(nsISu
       // If we can't dispatch the event to chrome, do nothing.
       EventTarget* piTarget = win ? win->GetParentTarget() : nullptr;
       if (!piTarget) {
         return NS_OK;
       }
 
       // Set the target to be the original dispatch target,
       aEvent->mTarget = target;
-      // but use chrome event handler or TabChildMessageManager for event target
-      // chain.
+      // but use chrome event handler or BrowserChildMessageManager for event
+      // target chain.
       target = piTarget;
     } else if (NS_WARN_IF(!doc)) {
       return NS_ERROR_UNEXPECTED;
     }
   }
 
 #ifdef DEBUG
   if (NS_IsMainThread() && aEvent->mMessage != eVoidEvent &&
--- a/dom/events/EventStateManager.cpp
+++ b/dom/events/EventStateManager.cpp
@@ -19,17 +19,17 @@
 #include "mozilla/TextEditor.h"
 #include "mozilla/TextEvents.h"
 #include "mozilla/TouchEvents.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/dom/DragEvent.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/FrameLoaderBinding.h"
 #include "mozilla/dom/MouseEventBinding.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/BrowserParent.h"
 #include "mozilla/dom/UIEvent.h"
 #include "mozilla/dom/UIEventBinding.h"
 #include "mozilla/dom/WheelEventBinding.h"
 
 #include "ContentEventHandler.h"
 #include "IMEContentObserver.h"
 #include "WheelHandlingHelper.h"
@@ -654,17 +654,17 @@ nsresult EventStateManager::PreHandleEve
 
     case eKeyPress: {
       WidgetKeyboardEvent* keyEvent = aEvent->AsKeyboardEvent();
       if (keyEvent->ModifiersMatchWithAccessKey(AccessKeyType::eChrome) ||
           keyEvent->ModifiersMatchWithAccessKey(AccessKeyType::eContent)) {
         // If the eKeyPress event will be sent to a remote process, this
         // process needs to wait reply from the remote process for checking if
         // preceding eKeyDown event is consumed.  If preceding eKeyDown event
-        // is consumed in the remote process, TabChild won't send the event
+        // is consumed in the remote process, BrowserChild won't send the event
         // back to this process.  So, only when this process receives a reply
         // eKeyPress event in BrowserParent, we should handle accesskey in this
         // process.
         if (IsRemoteTarget(GetFocusedContent())) {
           // However, if there is no accesskey target for the key combination,
           // we don't need to wait reply from the remote process.  Otherwise,
           // Mark the event as waiting reply from remote process and stop
           // propagation in this process.
@@ -1026,17 +1026,17 @@ bool EventStateManager::LookForAccessKey
         }
 
         if (focusChanged && aIsTrustedEvent) {
           // If this is a child process, inform the parent that we want the
           // focus, but pass false since we don't want to change the window
           // order.
           nsIDocShell* docShell = mPresContext->GetDocShell();
           nsCOMPtr<nsIBrowserChild> child =
-              docShell ? docShell->GetTabChild() : nullptr;
+              docShell ? docShell->GetBrowserChild() : nullptr;
           if (child) {
             child->SendRequestFocus(false);
           }
         }
 
         return true;
       }
     }
@@ -2036,26 +2036,26 @@ bool EventStateManager::DoDefaultDragSta
 nsresult EventStateManager::GetContentViewer(nsIContentViewer** aCv) {
   *aCv = nullptr;
 
   nsPIDOMWindowOuter* window = mDocument->GetWindow();
   if (!window) return NS_ERROR_FAILURE;
   nsCOMPtr<nsPIDOMWindowOuter> rootWindow = window->GetPrivateRoot();
   if (!rootWindow) return NS_ERROR_FAILURE;
 
-  TabChild* tabChild = TabChild::GetFrom(rootWindow);
-  if (!tabChild) {
+  BrowserChild* browserChild = BrowserChild::GetFrom(rootWindow);
+  if (!browserChild) {
     nsIFocusManager* fm = nsFocusManager::GetFocusManager();
     if (!fm) return NS_ERROR_FAILURE;
 
     nsCOMPtr<mozIDOMWindowProxy> activeWindow;
     fm->GetActiveWindow(getter_AddRefs(activeWindow));
     if (rootWindow != activeWindow) return NS_OK;
   } else {
-    if (!tabChild->ParentIsActive()) return NS_OK;
+    if (!browserChild->ParentIsActive()) return NS_OK;
   }
 
   nsCOMPtr<nsPIDOMWindowOuter> contentWindow =
       nsGlobalWindowOuter::Cast(rootWindow)->GetContent();
   if (!contentWindow) return NS_ERROR_FAILURE;
 
   Document* doc = contentWindow->GetDoc();
   if (!doc) return NS_ERROR_FAILURE;
--- a/dom/events/test/test_bug1412775.xul
+++ b/dom/events/test/test_bug1412775.xul
@@ -25,17 +25,17 @@ https://bugzilla.mozilla.org/show_bug.cg
       var e = new d.defaultView.Event("foo");
       var didCallChromeSide = false;
       var didCallContentSide = false;
       b.addEventListener("foo", function(e) {
         didCallChromeSide = true;
         var path = e.composedPath();
         var mm = d.defaultView.docShell.messageManager;
         is(path.length, 5, "Should have 5 items in composedPath in chrome.");
-        is(path[0], mm, "TabChildGlobal is the chrome handler.");
+        is(path[0], mm, "BrowserChildGlobal is the chrome handler.");
         is(path[1], b, "browser element should be in the path.");
         is(path[2], b.parentNode, "window element should be in the path.");
         is(path[3], win.document, "Document object should be in the path.");
         is(path[4], win, "Window object should be in the path.");
       }, true, true);
       d.addEventListener("foo", function(e) {
         didCallContentSide = true;;
         var path = e.composedPath();
--- a/dom/indexedDB/ActorsChild.cpp
+++ b/dom/indexedDB/ActorsChild.cpp
@@ -21,17 +21,17 @@
 #include "IndexedDatabaseInlines.h"
 #include "mozilla/BasicEvents.h"
 #include "mozilla/CycleCollectedJSRuntime.h"
 #include "mozilla/Maybe.h"
 #include "mozilla/TypeTraits.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/PermissionMessageUtils.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/indexedDB/PBackgroundIDBDatabaseFileChild.h"
 #include "mozilla/dom/ipc/PendingIPCBlobChild.h"
 #include "mozilla/dom/IPCBlobUtils.h"
 #include "mozilla/dom/WorkerPrivate.h"
 #include "mozilla/dom/WorkerRunnable.h"
 #include "mozilla/Encoding.h"
 #include "mozilla/ipc/BackgroundUtils.h"
 #include "mozilla/TaskQueue.h"
@@ -939,23 +939,23 @@ class WorkerPermissionChallenge final : 
 
       MOZ_ASSERT(permission == PermissionRequestBase::kPermissionAllowed ||
                  permission == PermissionRequestBase::kPermissionDenied ||
                  permission == PermissionRequestBase::kPermissionPrompt);
 
       return permission != PermissionRequestBase::kPermissionPrompt;
     }
 
-    TabChild* tabChild = TabChild::GetFrom(window);
-    MOZ_ASSERT(tabChild);
+    BrowserChild* browserChild = BrowserChild::GetFrom(window);
+    MOZ_ASSERT(browserChild);
 
     IPC::Principal ipcPrincipal(principal);
 
     RefPtr<WorkerPermissionChallenge> self(this);
-    tabChild->SendIndexedDBPermissionRequest(ipcPrincipal)
+    browserChild->SendIndexedDBPermissionRequest(ipcPrincipal)
         ->Then(
             GetCurrentThreadSerialEventTarget(), __func__,
             [self](const uint32_t& aPermission) { self->OperationCompleted(); },
             [](const mozilla::ipc::ResponseRejectReason) {});
     return false;
   }
 
  private:
@@ -1709,22 +1709,22 @@ mozilla::ipc::IPCResult BackgroundFactor
                permission == PermissionRequestBase::kPermissionPrompt);
 
     if (permission != PermissionRequestBase::kPermissionPrompt) {
       SendPermissionRetry();
     }
     return IPC_OK();
   }
 
-  RefPtr<TabChild> tabChild = mFactory->GetTabChild();
-  MOZ_ASSERT(tabChild);
+  RefPtr<BrowserChild> browserChild = mFactory->GetBrowserChild();
+  MOZ_ASSERT(browserChild);
 
   IPC::Principal ipcPrincipal(principal);
 
-  tabChild->SendIndexedDBPermissionRequest(ipcPrincipal)
+  browserChild->SendIndexedDBPermissionRequest(ipcPrincipal)
       ->Then(
           GetCurrentThreadSerialEventTarget(), __func__,
           [this](const uint32_t& aPermission) {
             this->AssertIsOnOwningThread();
             MaybeCollectGarbageOnIPCMessage();
             this->SendPermissionRetry();
           },
           [](const mozilla::ipc::ResponseRejectReason) {});
--- a/dom/indexedDB/IDBFactory.cpp
+++ b/dom/indexedDB/IDBFactory.cpp
@@ -10,17 +10,17 @@
 #include "IDBRequest.h"
 #include "IndexedDatabaseManager.h"
 #include "mozilla/ErrorResult.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/SystemGroup.h"
 #include "mozilla/dom/BindingDeclarations.h"
 #include "mozilla/dom/IDBFactoryBinding.h"
 #include "mozilla/dom/quota/QuotaManager.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/ipc/BackgroundChild.h"
 #include "mozilla/ipc/BackgroundUtils.h"
 #include "mozilla/ipc/PBackground.h"
 #include "mozilla/ipc/PBackgroundChild.h"
 #include "mozilla/StaticPrefs.h"
 #include "mozilla/Telemetry.h"
 #include "mozIThirdPartyUtil.h"
 #include "nsAboutProtocolUtils.h"
@@ -138,17 +138,17 @@ nsresult IDBFactory::CreateForWindow(nsP
   nsCOMPtr<nsILoadContext> loadContext = do_QueryInterface(webNav);
 
   RefPtr<IDBFactory> factory = new IDBFactory();
   factory->mPrincipalInfo = std::move(principalInfo);
 
   factory->mGlobal = do_QueryInterface(aWindow);
   MOZ_ASSERT(factory->mGlobal);
 
-  factory->mTabChild = TabChild::GetFrom(aWindow);
+  factory->mBrowserChild = BrowserChild::GetFrom(aWindow);
   factory->mEventTarget =
       nsGlobalWindowInner::Cast(aWindow)->EventTargetFor(TaskCategory::Other);
   factory->mInnerWindowID = aWindow->WindowID();
   factory->mPrivateBrowsingMode =
       loadContext && loadContext->UsePrivateBrowsing();
 
   factory.forget(aFactory);
   return NS_OK;
@@ -829,24 +829,24 @@ NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTION_CLASS(IDBFactory)
 
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(IDBFactory)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mGlobal)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTabChild)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowserChild)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mEventTarget)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
 NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(IDBFactory)
   NS_IMPL_CYCLE_COLLECTION_UNLINK_PRESERVED_WRAPPER
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mGlobal)
-  NS_IMPL_CYCLE_COLLECTION_UNLINK(mTabChild)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowserChild)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mEventTarget)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
 NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(IDBFactory)
   NS_IMPL_CYCLE_COLLECTION_TRACE_PRESERVED_WRAPPER
 NS_IMPL_CYCLE_COLLECTION_TRACE_END
 
 JSObject* IDBFactory::WrapObject(JSContext* aCx,
--- a/dom/indexedDB/IDBFactory.h
+++ b/dom/indexedDB/IDBFactory.h
@@ -35,17 +35,17 @@ class PrincipalInfo;
 }  // namespace ipc
 
 namespace dom {
 
 struct IDBOpenDBOptions;
 class IDBOpenDBRequest;
 template <typename>
 class Optional;
-class TabChild;
+class BrowserChild;
 enum class CallerType : uint32_t;
 
 namespace indexedDB {
 class BackgroundFactoryChild;
 class FactoryRequestParams;
 class LoggingInfo;
 }  // namespace indexedDB
 
@@ -58,17 +58,17 @@ class IDBFactory final : public nsISuppo
   struct PendingRequestInfo;
 
   nsAutoPtr<PrincipalInfo> mPrincipalInfo;
 
   nsCOMPtr<nsIGlobalObject> mGlobal;
 
   // This will only be set if the factory belongs to a window in a child
   // process.
-  RefPtr<TabChild> mTabChild;
+  RefPtr<BrowserChild> mBrowserChild;
 
   indexedDB::BackgroundFactoryChild* mBackgroundActor;
 
   // It is either set to a DocGroup-specific EventTarget if created by
   // CreateForWindow() or set to GetCurrentThreadEventTarget() otherwise.
   nsCOMPtr<nsIEventTarget> mEventTarget;
 
   uint64_t mInnerWindowID;
@@ -120,17 +120,17 @@ class IDBFactory final : public nsISuppo
   // Note: A non-closed database or a pending IDBOpenRequest could block
   // IDB operations in other window.
   void UpdateActiveDatabaseCount(int32_t aDelta);
 
   void IncrementParentLoggingRequestSerialNumber();
 
   nsIGlobalObject* GetParentObject() const { return mGlobal; }
 
-  TabChild* GetTabChild() const { return mTabChild; }
+  BrowserChild* GetBrowserChild() const { return mBrowserChild; }
 
   PrincipalInfo* GetPrincipalInfo() const {
     AssertIsOnOwningThread();
 
     return mPrincipalInfo;
   }
 
   uint64_t InnerWindowID() const {
--- a/dom/interfaces/base/nsIRemoteTab.idl
+++ b/dom/interfaces/base/nsIRemoteTab.idl
@@ -70,17 +70,17 @@ interface nsIRemoteTab : nsISupports
 
   /**
    * Ensures that the content process which has this remote tab has all of the
    * permissions required to load a document with the given principal.
    */
   void transmitPermissionsForPrincipal(in nsIPrincipal aPrincipal);
 
   /**
-   * True if any of the frames loaded in the TabChild have registered
+   * True if any of the frames loaded in the tab have registered
    * an onbeforeunload event handler.
    */
   readonly attribute boolean hasBeforeUnload;
 
   /**
    * The frame element which currently embeds this nsIRemoteTab object.
    */
   readonly attribute Element ownerElement;
--- a/dom/ipc/BrowserBridgeChild.cpp
+++ b/dom/ipc/BrowserBridgeChild.cpp
@@ -26,25 +26,25 @@ BrowserBridgeChild::BrowserBridgeChild(n
 
 BrowserBridgeChild::~BrowserBridgeChild() {}
 
 already_AddRefed<BrowserBridgeChild> BrowserBridgeChild::Create(
     nsFrameLoader* aFrameLoader, const TabContext& aContext,
     const nsString& aRemoteType, BrowsingContext* aBrowsingContext) {
   MOZ_ASSERT(XRE_IsContentProcess());
 
-  // Determine our embedder's TabChild actor.
+  // Determine our embedder's BrowserChild actor.
   RefPtr<Element> owner = aFrameLoader->GetOwnerContent();
   MOZ_DIAGNOSTIC_ASSERT(owner);
 
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(owner->GetOwnerGlobal());
   MOZ_DIAGNOSTIC_ASSERT(docShell);
 
-  RefPtr<TabChild> tabChild = TabChild::GetFrom(docShell);
-  MOZ_DIAGNOSTIC_ASSERT(tabChild);
+  RefPtr<BrowserChild> browserChild = BrowserChild::GetFrom(docShell);
+  MOZ_DIAGNOSTIC_ASSERT(browserChild);
 
   uint32_t chromeFlags = 0;
 
   nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
   if (docShell) {
     docShell->GetTreeOwner(getter_AddRefs(treeOwner));
   }
   if (treeOwner) {
@@ -61,18 +61,18 @@ already_AddRefed<BrowserBridgeChild> Bro
     chromeFlags |= nsIWebBrowserChrome::CHROME_PRIVATE_WINDOW;
   }
   if (docShell->GetAffectPrivateSessionLifetime()) {
     chromeFlags |= nsIWebBrowserChrome::CHROME_PRIVATE_LIFETIME;
   }
 
   RefPtr<BrowserBridgeChild> browserBridge =
       new BrowserBridgeChild(aFrameLoader, aBrowsingContext);
-  // Reference is freed in TabChild::DeallocPBrowserBridgeChild.
-  tabChild->SendPBrowserBridgeConstructor(
+  // Reference is freed in BrowserChild::DeallocPBrowserBridgeChild.
+  browserChild->SendPBrowserBridgeConstructor(
       do_AddRef(browserBridge).take(),
       PromiseFlatString(aContext.PresentationURL()), aRemoteType,
       aBrowsingContext, chromeFlags);
   browserBridge->mIPCOpen = true;
 
   return browserBridge.forget();
 }
 
--- a/dom/ipc/BrowserBridgeChild.h
+++ b/dom/ipc/BrowserBridgeChild.h
@@ -3,32 +3,32 @@
 /* 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 mozilla_dom_BrowserBridgeChild_h
 #define mozilla_dom_BrowserBridgeChild_h
 
 #include "mozilla/dom/PBrowserBridgeChild.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 
 namespace mozilla {
 namespace dom {
 class BrowsingContext;
 
 /**
  * Child side for a remote frame.
  */
 class BrowserBridgeChild : public PBrowserBridgeChild {
  public:
   NS_INLINE_DECL_REFCOUNTING(BrowserBridgeChild);
 
-  TabChild* Manager() {
+  BrowserChild* Manager() {
     MOZ_ASSERT(mIPCOpen);
-    return static_cast<TabChild*>(PBrowserBridgeChild::Manager());
+    return static_cast<BrowserChild*>(PBrowserBridgeChild::Manager());
   }
 
   mozilla::layers::LayersId GetLayersId() { return mLayersId; }
 
   BrowsingContext* GetBrowsingContext() { return mBrowsingContext; }
 
   // XXX(nika): We should have a load context here. (bug 1532664)
   nsILoadContext* GetLoadContext() { return nullptr; }
rename from dom/ipc/TabChild.cpp
rename to dom/ipc/BrowserChild.cpp
--- a/dom/ipc/TabChild.cpp
+++ b/dom/ipc/BrowserChild.cpp
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=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 "TabChild.h"
+#include "BrowserChild.h"
 
 #include "gfxPrefs.h"
 #ifdef ACCESSIBILITY
 #  include "mozilla/a11y/DocAccessibleChild.h"
 #endif
 #include "Layers.h"
 #include "ContentChild.h"
 #include "BrowserParent.h"
@@ -158,86 +158,87 @@ using namespace mozilla::docshell;
 using namespace mozilla::widget;
 using namespace mozilla::jsipc;
 using mozilla::layers::GeckoContentController;
 
 NS_IMPL_ISUPPORTS(ContentListener, nsIDOMEventListener)
 
 static const char BEFORE_FIRST_PAINT[] = "before-first-paint";
 
-nsTHashtable<nsPtrHashKey<TabChild>>* TabChild::sVisibleTabs;
-
-typedef nsDataHashtable<nsUint64HashKey, TabChild*> TabChildMap;
-static TabChildMap* sTabChildren;
-StaticMutex sTabChildrenMutex;
-
-TabChildBase::TabChildBase() : mTabChildMessageManager(nullptr) {}
-
-TabChildBase::~TabChildBase() { mAnonymousGlobalScopes.Clear(); }
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(TabChildBase)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(TabChildBase)
-  NS_IMPL_CYCLE_COLLECTION_UNLINK(mTabChildMessageManager)
+nsTHashtable<nsPtrHashKey<BrowserChild>>* BrowserChild::sVisibleTabs;
+
+typedef nsDataHashtable<nsUint64HashKey, BrowserChild*> BrowserChildMap;
+static BrowserChildMap* sBrowserChildren;
+StaticMutex sBrowserChildrenMutex;
+
+BrowserChildBase::BrowserChildBase() : mBrowserChildMessageManager(nullptr) {}
+
+BrowserChildBase::~BrowserChildBase() { mAnonymousGlobalScopes.Clear(); }
+
+NS_IMPL_CYCLE_COLLECTION_CLASS(BrowserChildBase)
+
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN(BrowserChildBase)
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowserChildMessageManager)
   tmp->nsMessageManagerScriptExecutor::Unlink();
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mWebBrowserChrome)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(TabChildBase)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTabChildMessageManager)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN(BrowserChildBase)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowserChildMessageManager)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWebBrowserChrome)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(TabChildBase)
+NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN(BrowserChildBase)
   tmp->nsMessageManagerScriptExecutor::Trace(aCallbacks, aClosure);
 NS_IMPL_CYCLE_COLLECTION_TRACE_END
 
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TabChildBase)
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BrowserChildBase)
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
-NS_IMPL_CYCLE_COLLECTING_ADDREF(TabChildBase)
-NS_IMPL_CYCLE_COLLECTING_RELEASE(TabChildBase)
-
-already_AddRefed<Document> TabChildBase::GetTopLevelDocument() const {
+NS_IMPL_CYCLE_COLLECTING_ADDREF(BrowserChildBase)
+NS_IMPL_CYCLE_COLLECTING_RELEASE(BrowserChildBase)
+
+already_AddRefed<Document> BrowserChildBase::GetTopLevelDocument() const {
   nsCOMPtr<Document> doc;
   WebNavigation()->GetDocument(getter_AddRefs(doc));
   return doc.forget();
 }
 
-PresShell* TabChildBase::GetTopLevelPresShell() const {
+PresShell* BrowserChildBase::GetTopLevelPresShell() const {
   if (RefPtr<Document> doc = GetTopLevelDocument()) {
     return doc->GetPresShell();
   }
   return nullptr;
 }
 
-void TabChildBase::DispatchMessageManagerMessage(const nsAString& aMessageName,
-                                                 const nsAString& aJSONData) {
+void BrowserChildBase::DispatchMessageManagerMessage(
+    const nsAString& aMessageName, const nsAString& aJSONData) {
   AutoSafeJSContext cx;
   JS::Rooted<JS::Value> json(cx, JS::NullValue());
   dom::ipc::StructuredCloneData data;
   if (JS_ParseJSON(cx, static_cast<const char16_t*>(aJSONData.BeginReading()),
                    aJSONData.Length(), &json)) {
     ErrorResult rv;
     data.Write(cx, json, rv);
     if (NS_WARN_IF(rv.Failed())) {
       rv.SuppressException();
       return;
     }
   }
 
-  RefPtr<TabChildMessageManager> kungFuDeathGrip(mTabChildMessageManager);
+  RefPtr<BrowserChildMessageManager> kungFuDeathGrip(
+      mBrowserChildMessageManager);
   RefPtr<nsFrameMessageManager> mm = kungFuDeathGrip->GetMessageManager();
   mm->ReceiveMessage(static_cast<EventTarget*>(kungFuDeathGrip), nullptr,
                      aMessageName, false, &data, nullptr, nullptr, nullptr,
                      IgnoreErrors());
 }
 
-bool TabChildBase::UpdateFrameHandler(const RepaintRequest& aRequest) {
+bool BrowserChildBase::UpdateFrameHandler(const RepaintRequest& aRequest) {
   MOZ_ASSERT(aRequest.GetScrollId() != ScrollableLayerGuid::NULL_SCROLL_ID);
 
   if (aRequest.IsRootContent()) {
     if (PresShell* presShell = GetTopLevelPresShell()) {
       // Guard against stale updates (updates meant for a pres shell which
       // has since been torn down and destroyed).
       if (aRequest.GetPresShellId() == presShell->GetPresShellId()) {
         ProcessUpdateFrame(aRequest);
@@ -248,129 +249,130 @@ bool TabChildBase::UpdateFrameHandler(co
     // aRequest.mIsRoot is false, so we are trying to update a subframe.
     // This requires special handling.
     APZCCallbackHelper::UpdateSubFrame(aRequest);
     return true;
   }
   return true;
 }
 
-void TabChildBase::ProcessUpdateFrame(const RepaintRequest& aRequest) {
-  if (!mTabChildMessageManager) {
+void BrowserChildBase::ProcessUpdateFrame(const RepaintRequest& aRequest) {
+  if (!mBrowserChildMessageManager) {
     return;
   }
 
   APZCCallbackHelper::UpdateRootFrame(aRequest);
 }
 
 NS_IMETHODIMP
 ContentListener::HandleEvent(Event* aEvent) {
   RemoteDOMEvent remoteEvent;
   remoteEvent.mEvent = aEvent;
   NS_ENSURE_STATE(remoteEvent.mEvent);
-  mTabChild->SendEvent(remoteEvent);
+  mBrowserChild->SendEvent(remoteEvent);
   return NS_OK;
 }
 
-class TabChild::DelayedDeleteRunnable final : public Runnable,
-                                              public nsIRunnablePriority {
-  RefPtr<TabChild> mTabChild;
+class BrowserChild::DelayedDeleteRunnable final : public Runnable,
+                                                  public nsIRunnablePriority {
+  RefPtr<BrowserChild> mBrowserChild;
 
   // In order to ensure that this runnable runs after everything that could
   // possibly touch this tab, we send it through the event queue twice. The
   // first time it runs at normal priority and the second time it runs at
   // input priority. This ensures that it runs after all events that were in
   // either queue at the time it was first dispatched. mReadyToDelete starts
   // out false (when it runs at normal priority) and is then set to true.
   bool mReadyToDelete = false;
 
  public:
-  explicit DelayedDeleteRunnable(TabChild* aTabChild)
-      : Runnable("TabChild::DelayedDeleteRunnable"), mTabChild(aTabChild) {
+  explicit DelayedDeleteRunnable(BrowserChild* aBrowserChild)
+      : Runnable("BrowserChild::DelayedDeleteRunnable"),
+        mBrowserChild(aBrowserChild) {
     MOZ_ASSERT(NS_IsMainThread());
-    MOZ_ASSERT(aTabChild);
+    MOZ_ASSERT(aBrowserChild);
   }
 
   NS_DECL_ISUPPORTS_INHERITED
 
  private:
   ~DelayedDeleteRunnable() {
     MOZ_ASSERT(NS_IsMainThread());
-    MOZ_ASSERT(!mTabChild);
+    MOZ_ASSERT(!mBrowserChild);
   }
 
   NS_IMETHOD GetPriority(uint32_t* aPriority) override {
     *aPriority = mReadyToDelete ? nsIRunnablePriority::PRIORITY_INPUT
                                 : nsIRunnablePriority::PRIORITY_NORMAL;
     return NS_OK;
   }
 
   NS_IMETHOD
   Run() override {
     MOZ_ASSERT(NS_IsMainThread());
-    MOZ_ASSERT(mTabChild);
+    MOZ_ASSERT(mBrowserChild);
 
     if (!mReadyToDelete) {
       // This time run this runnable at input priority.
       mReadyToDelete = true;
       MOZ_ALWAYS_SUCCEEDS(NS_DispatchToCurrentThread(this));
       return NS_OK;
     }
 
     // Check in case ActorDestroy was called after RecvDestroy message.
     // Middleman processes with their own recording child process avoid
     // sending a delete message, so that the parent process does not
     // receive two deletes for the same actor.
-    if (mTabChild->IPCOpen() &&
+    if (mBrowserChild->IPCOpen() &&
         !recordreplay::parent::IsMiddlemanWithRecordingChild()) {
-      Unused << PBrowserChild::Send__delete__(mTabChild);
+      Unused << PBrowserChild::Send__delete__(mBrowserChild);
     }
 
-    mTabChild = nullptr;
+    mBrowserChild = nullptr;
     return NS_OK;
   }
 };
 
-NS_IMPL_ISUPPORTS_INHERITED(TabChild::DelayedDeleteRunnable, Runnable,
+NS_IMPL_ISUPPORTS_INHERITED(BrowserChild::DelayedDeleteRunnable, Runnable,
                             nsIRunnablePriority)
 
 namespace {
-std::map<TabId, RefPtr<TabChild>>& NestedTabChildMap() {
+std::map<TabId, RefPtr<BrowserChild>>& NestedBrowserChildMap() {
   MOZ_ASSERT(NS_IsMainThread());
-  static std::map<TabId, RefPtr<TabChild>> sNestedTabChildMap;
-  return sNestedTabChildMap;
+  static std::map<TabId, RefPtr<BrowserChild>> sNestedBrowserChildMap;
+  return sNestedBrowserChildMap;
 }
 }  // namespace
 
-already_AddRefed<TabChild> TabChild::FindTabChild(const TabId& aTabId) {
-  auto iter = NestedTabChildMap().find(aTabId);
-  if (iter == NestedTabChildMap().end()) {
+already_AddRefed<BrowserChild> BrowserChild::FindBrowserChild(
+    const TabId& aTabId) {
+  auto iter = NestedBrowserChildMap().find(aTabId);
+  if (iter == NestedBrowserChildMap().end()) {
     return nullptr;
   }
-  RefPtr<TabChild> tabChild = iter->second;
-  return tabChild.forget();
+  RefPtr<BrowserChild> browserChild = iter->second;
+  return browserChild.forget();
 }
 
 /*static*/
-already_AddRefed<TabChild> TabChild::Create(ContentChild* aManager,
-                                            const TabId& aTabId,
-                                            const TabId& aSameTabGroupAs,
-                                            const TabContext& aContext,
-                                            BrowsingContext* aBrowsingContext,
-                                            uint32_t aChromeFlags) {
-  RefPtr<TabChild> groupChild = FindTabChild(aSameTabGroupAs);
+already_AddRefed<BrowserChild> BrowserChild::Create(
+    ContentChild* aManager, const TabId& aTabId, const TabId& aSameTabGroupAs,
+    const TabContext& aContext, BrowsingContext* aBrowsingContext,
+    uint32_t aChromeFlags) {
+  RefPtr<BrowserChild> groupChild = FindBrowserChild(aSameTabGroupAs);
   dom::TabGroup* group = groupChild ? groupChild->TabGroup() : nullptr;
-  RefPtr<TabChild> iframe = new TabChild(aManager, aTabId, group, aContext,
-                                         aBrowsingContext, aChromeFlags);
+  RefPtr<BrowserChild> iframe = new BrowserChild(
+      aManager, aTabId, group, aContext, aBrowsingContext, aChromeFlags);
   return iframe.forget();
 }
 
-TabChild::TabChild(ContentChild* aManager, const TabId& aTabId,
-                   dom::TabGroup* aTabGroup, const TabContext& aContext,
-                   BrowsingContext* aBrowsingContext, uint32_t aChromeFlags)
+BrowserChild::BrowserChild(ContentChild* aManager, const TabId& aTabId,
+                           dom::TabGroup* aTabGroup, const TabContext& aContext,
+                           BrowsingContext* aBrowsingContext,
+                           uint32_t aChromeFlags)
     : TabContext(aContext),
       mTabGroup(aTabGroup),
       mManager(aManager),
       mBrowsingContext(aBrowsingContext),
       mChromeFlags(aChromeFlags),
       mMaxTouchPoints(0),
       mLayersId{0},
       mBeforeUnloadListeners(0),
@@ -407,53 +409,53 @@ TabChild::TabChild(ContentChild* aManage
     mPendingDocShellBlockers(0), mWidgetNativeData(0) {
   mozilla::HoldJSObjects(this);
 
   nsWeakPtr weakPtrThis(do_GetWeakReference(
       static_cast<nsIBrowserChild*>(this)));  // for capture by the lambda
   mSetAllowedTouchBehaviorCallback =
       [weakPtrThis](uint64_t aInputBlockId,
                     const nsTArray<TouchBehaviorFlags>& aFlags) {
-        if (nsCOMPtr<nsIBrowserChild> tabChild =
+        if (nsCOMPtr<nsIBrowserChild> browserChild =
                 do_QueryReferent(weakPtrThis)) {
-          static_cast<TabChild*>(tabChild.get())
+          static_cast<BrowserChild*>(browserChild.get())
               ->SetAllowedTouchBehavior(aInputBlockId, aFlags);
         }
       };
 
-  // preloaded TabChild should not be added to child map
+  // preloaded BrowserChild should not be added to child map
   if (mUniqueId) {
-    MOZ_ASSERT(NestedTabChildMap().find(mUniqueId) ==
-               NestedTabChildMap().end());
-    NestedTabChildMap()[mUniqueId] = this;
+    MOZ_ASSERT(NestedBrowserChildMap().find(mUniqueId) ==
+               NestedBrowserChildMap().end());
+    NestedBrowserChildMap()[mUniqueId] = this;
   }
   mCoalesceMouseMoveEvents =
       Preferences::GetBool("dom.event.coalesce_mouse_move");
   if (mCoalesceMouseMoveEvents) {
     mCoalescedMouseEventFlusher = new CoalescedMouseMoveFlusher(this);
   }
 }
 
-const CompositorOptions& TabChild::GetCompositorOptions() const {
+const CompositorOptions& BrowserChild::GetCompositorOptions() const {
   // If you're calling this before mCompositorOptions is set, well.. don't.
   MOZ_ASSERT(mCompositorOptions);
   return mCompositorOptions.ref();
 }
 
-bool TabChild::AsyncPanZoomEnabled() const {
+bool BrowserChild::AsyncPanZoomEnabled() const {
   // This might get called by the TouchEvent::PrefEnabled code before we have
   // mCompositorOptions populated (bug 1370089). In that case we just assume
-  // APZ is enabled because we're in a content process (because TabChild) and
-  // APZ is probably going to be enabled here since e10s is enabled.
+  // APZ is enabled because we're in a content process (because BrowserChild)
+  // and APZ is probably going to be enabled here since e10s is enabled.
   return mCompositorOptions ? mCompositorOptions->UseAPZ() : true;
 }
 
 NS_IMETHODIMP
-TabChild::Observe(nsISupports* aSubject, const char* aTopic,
-                  const char16_t* aData) {
+BrowserChild::Observe(nsISupports* aSubject, const char* aTopic,
+                      const char16_t* aData) {
   if (!strcmp(aTopic, BEFORE_FIRST_PAINT)) {
     if (AsyncPanZoomEnabled()) {
       nsCOMPtr<Document> subject(do_QueryInterface(aSubject));
       nsCOMPtr<Document> doc(GetTopLevelDocument());
 
       if (subject == doc) {
         RefPtr<PresShell> presShell = doc->GetPresShell();
         if (presShell) {
@@ -463,55 +465,55 @@ TabChild::Observe(nsISupports* aSubject,
         APZCCallbackHelper::InitializeRootDisplayport(presShell);
       }
     }
   }
 
   return NS_OK;
 }
 
-void TabChild::ContentReceivedInputBlock(const ScrollableLayerGuid& aGuid,
-                                         uint64_t aInputBlockId,
-                                         bool aPreventDefault) const {
+void BrowserChild::ContentReceivedInputBlock(const ScrollableLayerGuid& aGuid,
+                                             uint64_t aInputBlockId,
+                                             bool aPreventDefault) const {
   if (mApzcTreeManager) {
     mApzcTreeManager->ContentReceivedInputBlock(aInputBlockId, aPreventDefault);
   }
 }
 
-void TabChild::SetTargetAPZC(
+void BrowserChild::SetTargetAPZC(
     uint64_t aInputBlockId,
     const nsTArray<SLGuidAndRenderRoot>& aTargets) const {
   if (mApzcTreeManager) {
     mApzcTreeManager->SetTargetAPZC(aInputBlockId, aTargets);
   }
 }
 
-void TabChild::SetAllowedTouchBehavior(
+void BrowserChild::SetAllowedTouchBehavior(
     uint64_t aInputBlockId,
     const nsTArray<TouchBehaviorFlags>& aTargets) const {
   if (mApzcTreeManager) {
     mApzcTreeManager->SetAllowedTouchBehavior(aInputBlockId, aTargets);
   }
 }
 
-bool TabChild::DoUpdateZoomConstraints(
+bool BrowserChild::DoUpdateZoomConstraints(
     const uint32_t& aPresShellId, const ViewID& aViewId,
     const Maybe<ZoomConstraints>& aConstraints) {
   if (!mApzcTreeManager || mDestroyed) {
     return false;
   }
 
   SLGuidAndRenderRoot guid = SLGuidAndRenderRoot(
       mLayersId, aPresShellId, aViewId, gfxUtils::GetContentRenderRoot());
 
   mApzcTreeManager->UpdateZoomConstraints(guid, aConstraints);
   return true;
 }
 
-nsresult TabChild::Init(mozIDOMWindowProxy* aParent) {
+nsresult BrowserChild::Init(mozIDOMWindowProxy* aParent) {
   MOZ_DIAGNOSTIC_ASSERT(mTabGroup);
 
   nsCOMPtr<nsIWidget> widget = nsIWidget::CreatePuppetWidget(this);
   mPuppetWidget = static_cast<PuppetWidget*>(widget.get());
   if (!mPuppetWidget) {
     NS_ERROR("couldn't create fake widget");
     return NS_ERROR_FAILURE;
   }
@@ -591,36 +593,36 @@ nsresult TabChild::Init(mozIDOMWindowPro
       window->GetDocShell(),
       !!(mChromeFlags & nsIWebBrowserChrome::CHROME_SCROLLBARS));
 
   nsWeakPtr weakPtrThis = do_GetWeakReference(
       static_cast<nsIBrowserChild*>(this));  // for capture by the lambda
   ContentReceivedInputBlockCallback callback(
       [weakPtrThis](const ScrollableLayerGuid& aGuid, uint64_t aInputBlockId,
                     bool aPreventDefault) {
-        if (nsCOMPtr<nsIBrowserChild> tabChild =
+        if (nsCOMPtr<nsIBrowserChild> browserChild =
                 do_QueryReferent(weakPtrThis)) {
-          static_cast<TabChild*>(tabChild.get())
+          static_cast<BrowserChild*>(browserChild.get())
               ->ContentReceivedInputBlock(aGuid, aInputBlockId,
                                           aPreventDefault);
         }
       });
   mAPZEventState = new APZEventState(mPuppetWidget, std::move(callback));
 
   mIPCOpen = true;
 
   // Recording/replaying processes use their own compositor.
   if (recordreplay::IsRecordingOrReplaying()) {
     mPuppetWidget->CreateCompositor();
   }
 
   return NS_OK;
 }
 
-void TabChild::NotifyTabContextUpdated(bool aIsPreallocated) {
+void BrowserChild::NotifyTabContextUpdated(bool aIsPreallocated) {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   MOZ_ASSERT(docShell);
 
   if (!docShell) {
     return;
   }
 
   UpdateFrameType();
@@ -630,85 +632,87 @@ void TabChild::NotifyTabContextUpdated(b
   }
 
   // Set SANDBOXED_AUXILIARY_NAVIGATION flag if this is a receiver page.
   if (!PresentationURL().IsEmpty()) {
     docShell->SetSandboxFlags(SANDBOXED_AUXILIARY_NAVIGATION);
   }
 }
 
-void TabChild::UpdateFrameType() {
+void BrowserChild::UpdateFrameType() {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   MOZ_ASSERT(docShell);
 
   // TODO: Bug 1252794 - remove frameType from nsIDocShell.idl
   docShell->SetFrameType(IsMozBrowserElement()
                              ? nsIDocShell::FRAME_TYPE_BROWSER
                              : nsIDocShell::FRAME_TYPE_REGULAR);
 }
 
-NS_IMPL_CYCLE_COLLECTION_CLASS(TabChild)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(TabChild, TabChildBase)
+NS_IMPL_CYCLE_COLLECTION_CLASS(BrowserChild)
+
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(BrowserChild, BrowserChildBase)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mStatusFilter)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mWebNav)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowsingContext)
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(TabChild, TabChildBase)
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(BrowserChild,
+                                                  BrowserChildBase)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mStatusFilter)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mWebNav)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowsingContext)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
-NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(TabChild, TabChildBase)
+NS_IMPL_CYCLE_COLLECTION_TRACE_BEGIN_INHERITED(BrowserChild, BrowserChildBase)
 NS_IMPL_CYCLE_COLLECTION_TRACE_END
 
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TabChild)
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BrowserChild)
   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome)
   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChrome2)
   NS_INTERFACE_MAP_ENTRY(nsIEmbeddingSiteWindow)
   NS_INTERFACE_MAP_ENTRY(nsIWebBrowserChromeFocus)
   NS_INTERFACE_MAP_ENTRY(nsIInterfaceRequestor)
   NS_INTERFACE_MAP_ENTRY(nsIWindowProvider)
   NS_INTERFACE_MAP_ENTRY(nsIBrowserChild)
   NS_INTERFACE_MAP_ENTRY(nsIObserver)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
   NS_INTERFACE_MAP_ENTRY(nsITooltipListener)
   NS_INTERFACE_MAP_ENTRY(nsIWebProgressListener)
-NS_INTERFACE_MAP_END_INHERITING(TabChildBase)
-
-NS_IMPL_ADDREF_INHERITED(TabChild, TabChildBase);
-NS_IMPL_RELEASE_INHERITED(TabChild, TabChildBase);
+NS_INTERFACE_MAP_END_INHERITING(BrowserChildBase)
+
+NS_IMPL_ADDREF_INHERITED(BrowserChild, BrowserChildBase);
+NS_IMPL_RELEASE_INHERITED(BrowserChild, BrowserChildBase);
 
 NS_IMETHODIMP
-TabChild::SetStatus(uint32_t aStatusType, const char16_t* aStatus) {
+BrowserChild::SetStatus(uint32_t aStatusType, const char16_t* aStatus) {
   return SetStatusWithContext(
       aStatusType,
       aStatus ? static_cast<const nsString&>(nsDependentString(aStatus))
               : EmptyString(),
       nullptr);
 }
 
 NS_IMETHODIMP
-TabChild::GetChromeFlags(uint32_t* aChromeFlags) {
+BrowserChild::GetChromeFlags(uint32_t* aChromeFlags) {
   *aChromeFlags = mChromeFlags;
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::SetChromeFlags(uint32_t aChromeFlags) {
+BrowserChild::SetChromeFlags(uint32_t aChromeFlags) {
   NS_WARNING("trying to SetChromeFlags from content process?");
 
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
-TabChild::RemoteSizeShellTo(int32_t aWidth, int32_t aHeight,
-                            int32_t aShellItemWidth, int32_t aShellItemHeight) {
+BrowserChild::RemoteSizeShellTo(int32_t aWidth, int32_t aHeight,
+                                int32_t aShellItemWidth,
+                                int32_t aShellItemHeight) {
   nsCOMPtr<nsIDocShell> ourDocShell = do_GetInterface(WebNavigation());
   nsCOMPtr<nsIBaseWindow> docShellAsWin(do_QueryInterface(ourDocShell));
   NS_ENSURE_STATE(docShellAsWin);
 
   int32_t width, height;
   docShellAsWin->GetSize(&width, &height);
 
   uint32_t flags = 0;
@@ -722,17 +726,18 @@ TabChild::RemoteSizeShellTo(int32_t aWid
 
   bool sent = SendSizeShellTo(flags, aWidth, aHeight, aShellItemWidth,
                               aShellItemHeight);
 
   return sent ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
-TabChild::RemoteDropLinks(uint32_t aLinksCount, nsIDroppedLinkItem** aLinks) {
+BrowserChild::RemoteDropLinks(uint32_t aLinksCount,
+                              nsIDroppedLinkItem** aLinks) {
   nsTArray<nsString> linksArray;
   nsresult rv = NS_OK;
   for (uint32_t i = 0; i < aLinksCount; i++) {
     nsString tmp;
     rv = aLinks[i]->GetUrl(tmp);
     if (NS_FAILED(rv)) {
       return rv;
     }
@@ -751,42 +756,42 @@ TabChild::RemoteDropLinks(uint32_t aLink
     linksArray.AppendElement(tmp);
   }
   bool sent = SendDropLinks(linksArray);
 
   return sent ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
-TabChild::ShowAsModal() {
-  NS_WARNING("TabChild::ShowAsModal not supported in TabChild");
+BrowserChild::ShowAsModal() {
+  NS_WARNING("BrowserChild::ShowAsModal not supported in BrowserChild");
 
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
-TabChild::IsWindowModal(bool* aRetVal) {
+BrowserChild::IsWindowModal(bool* aRetVal) {
   *aRetVal = false;
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::SetStatusWithContext(uint32_t aStatusType,
-                               const nsAString& aStatusText,
-                               nsISupports* aStatusContext) {
+BrowserChild::SetStatusWithContext(uint32_t aStatusType,
+                                   const nsAString& aStatusText,
+                                   nsISupports* aStatusContext) {
   // We can only send the status after the ipc machinery is set up
   if (IPCOpen()) {
     SendSetStatus(aStatusType, nsString(aStatusText));
   }
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::SetDimensions(uint32_t aFlags, int32_t aX, int32_t aY, int32_t aCx,
-                        int32_t aCy) {
+BrowserChild::SetDimensions(uint32_t aFlags, int32_t aX, int32_t aY,
+                            int32_t aCx, int32_t aCy) {
   // The parent is in charge of the dimension changes. If JS code wants to
   // change the dimensions (moveTo, screenX, etc.) we send a message to the
   // parent about the new requested dimension, the parent does the resize/move
   // then send a message to the child to update itself. For APIs like screenX
   // this function is called with the current value for the non-changed values.
   // In a series of calls like window.screenX = 10; window.screenY = 10; for
   // the second call, since screenX is not yet updated we might accidentally
   // reset back screenX to it's old value. To avoid this if a parameter did not
@@ -811,18 +816,18 @@ TabChild::SetDimensions(uint32_t aFlags,
   }
 
   Unused << SendSetDimensions(aFlags, aX, aY, aCx, aCy);
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::GetDimensions(uint32_t aFlags, int32_t* aX, int32_t* aY, int32_t* aCx,
-                        int32_t* aCy) {
+BrowserChild::GetDimensions(uint32_t aFlags, int32_t* aX, int32_t* aY,
+                            int32_t* aCx, int32_t* aCy) {
   ScreenIntRect rect = GetOuterRect();
   if (aX) {
     *aX = rect.x;
   }
   if (aY) {
     *aY = rect.y;
   }
   if (aCx) {
@@ -831,85 +836,86 @@ TabChild::GetDimensions(uint32_t aFlags,
   if (aCy) {
     *aCy = rect.height;
   }
 
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::SetFocus() { return NS_ERROR_NOT_IMPLEMENTED; }
+BrowserChild::SetFocus() { return NS_ERROR_NOT_IMPLEMENTED; }
 
 NS_IMETHODIMP
-TabChild::GetVisibility(bool* aVisibility) {
+BrowserChild::GetVisibility(bool* aVisibility) {
   *aVisibility = true;
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::SetVisibility(bool aVisibility) {
+BrowserChild::SetVisibility(bool aVisibility) {
   // should the platform support this? Bug 666365
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::GetTitle(nsAString& aTitle) {
-  NS_WARNING("TabChild::GetTitle not supported in TabChild");
+BrowserChild::GetTitle(nsAString& aTitle) {
+  NS_WARNING("BrowserChild::GetTitle not supported in BrowserChild");
 
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
-TabChild::SetTitle(const nsAString& aTitle) {
+BrowserChild::SetTitle(const nsAString& aTitle) {
   // JavaScript sends the "DOMTitleChanged" event to the parent
   // via the message manager.
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::GetSiteWindow(void** aSiteWindow) {
-  NS_WARNING("TabChild::GetSiteWindow not supported in TabChild");
+BrowserChild::GetSiteWindow(void** aSiteWindow) {
+  NS_WARNING("BrowserChild::GetSiteWindow not supported in BrowserChild");
 
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
 NS_IMETHODIMP
-TabChild::Blur() { return NS_ERROR_NOT_IMPLEMENTED; }
+BrowserChild::Blur() { return NS_ERROR_NOT_IMPLEMENTED; }
 
 NS_IMETHODIMP
-TabChild::FocusNextElement(bool aForDocumentNavigation) {
+BrowserChild::FocusNextElement(bool aForDocumentNavigation) {
   SendMoveFocus(true, aForDocumentNavigation);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::FocusPrevElement(bool aForDocumentNavigation) {
+BrowserChild::FocusPrevElement(bool aForDocumentNavigation) {
   SendMoveFocus(false, aForDocumentNavigation);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::GetInterface(const nsIID& aIID, void** aSink) {
+BrowserChild::GetInterface(const nsIID& aIID, void** aSink) {
   if (aIID.Equals(NS_GET_IID(nsIWebBrowserChrome3))) {
     NS_IF_ADDREF(((nsISupports*)(*aSink = mWebBrowserChrome)));
     return NS_OK;
   }
 
   // XXXbz should we restrict the set of interfaces we hand out here?
   // See bug 537429
   return QueryInterface(aIID, aSink);
 }
 
 NS_IMETHODIMP
-TabChild::ProvideWindow(mozIDOMWindowProxy* aParent, uint32_t aChromeFlags,
-                        bool aCalledFromJS, bool aPositionSpecified,
-                        bool aSizeSpecified, nsIURI* aURI,
-                        const nsAString& aName, const nsACString& aFeatures,
-                        bool aForceNoOpener, nsDocShellLoadState* aLoadState,
-                        bool* aWindowIsNew, mozIDOMWindowProxy** aReturn) {
+BrowserChild::ProvideWindow(mozIDOMWindowProxy* aParent, uint32_t aChromeFlags,
+                            bool aCalledFromJS, bool aPositionSpecified,
+                            bool aSizeSpecified, nsIURI* aURI,
+                            const nsAString& aName, const nsACString& aFeatures,
+                            bool aForceNoOpener,
+                            nsDocShellLoadState* aLoadState, bool* aWindowIsNew,
+                            mozIDOMWindowProxy** aReturn) {
   *aReturn = nullptr;
 
   // If aParent is inside an <iframe mozbrowser> and this isn't a request to
   // open a modal-type window, we're going to create a new <iframe mozbrowser>
   // and return its window here.
   nsCOMPtr<nsIDocShell> docshell = do_GetInterface(aParent);
   bool iframeMoz =
       (docshell && docshell->GetIsInMozBrowser() &&
@@ -936,17 +942,17 @@ TabChild::ProvideWindow(mozIDOMWindowPro
   // code back to our caller.
   ContentChild* cc = ContentChild::GetSingleton();
   return cc->ProvideWindowCommon(
       this, aParent, iframeMoz, aChromeFlags, aCalledFromJS, aPositionSpecified,
       aSizeSpecified, aURI, aName, aFeatures, aForceNoOpener, aLoadState,
       aWindowIsNew, aReturn);
 }
 
-void TabChild::DestroyWindow() {
+void BrowserChild::DestroyWindow() {
   if (mBrowsingContext) {
     mBrowsingContext = nullptr;
   }
 
   if (mStatusFilter) {
     if (nsCOMPtr<nsIWebProgress> webProgress =
             do_QueryInterface(WebNavigation())) {
       webProgress->RemoveProgressListener(mStatusFilter);
@@ -974,56 +980,56 @@ void TabChild::DestroyWindow() {
 
   if (mPuppetWidget) {
     mPuppetWidget->Destroy();
   }
 
   mLayersConnected = Nothing();
 
   if (mLayersId.IsValid()) {
-    StaticMutexAutoLock lock(sTabChildrenMutex);
-
-    MOZ_ASSERT(sTabChildren);
-    sTabChildren->Remove(uint64_t(mLayersId));
-    if (!sTabChildren->Count()) {
-      delete sTabChildren;
-      sTabChildren = nullptr;
+    StaticMutexAutoLock lock(sBrowserChildrenMutex);
+
+    MOZ_ASSERT(sBrowserChildren);
+    sBrowserChildren->Remove(uint64_t(mLayersId));
+    if (!sBrowserChildren->Count()) {
+      delete sBrowserChildren;
+      sBrowserChildren = nullptr;
     }
     mLayersId = layers::LayersId{0};
   }
 }
 
-void TabChild::ActorDestroy(ActorDestroyReason why) {
+void BrowserChild::ActorDestroy(ActorDestroyReason why) {
   mIPCOpen = false;
 
   DestroyWindow();
 
-  if (mTabChildMessageManager) {
+  if (mBrowserChildMessageManager) {
     // We should have a message manager if the global is alive, but it
     // seems sometimes we don't.  Assert in aurora/nightly, but don't
     // crash in release builds.
-    MOZ_DIAGNOSTIC_ASSERT(mTabChildMessageManager->GetMessageManager());
-    if (mTabChildMessageManager->GetMessageManager()) {
-      // The messageManager relays messages via the TabChild which
+    MOZ_DIAGNOSTIC_ASSERT(mBrowserChildMessageManager->GetMessageManager());
+    if (mBrowserChildMessageManager->GetMessageManager()) {
+      // The messageManager relays messages via the BrowserChild which
       // no longer exists.
-      mTabChildMessageManager->DisconnectMessageManager();
+      mBrowserChildMessageManager->DisconnectMessageManager();
     }
   }
 
   CompositorBridgeChild* compositorChild = CompositorBridgeChild::Get();
   if (compositorChild) {
     compositorChild->CancelNotifyAfterRemotePaint(this);
   }
 
   if (GetTabId() != 0) {
-    NestedTabChildMap().erase(GetTabId());
+    NestedBrowserChildMap().erase(GetTabId());
   }
 }
 
-TabChild::~TabChild() {
+BrowserChild::~BrowserChild() {
   if (sVisibleTabs) {
     sVisibleTabs->RemoveEntry(this);
     if (sVisibleTabs->IsEmpty()) {
       delete sVisibleTabs;
       sVisibleTabs = nullptr;
     }
   }
 
@@ -1032,21 +1038,21 @@ TabChild::~TabChild() {
   nsCOMPtr<nsIWebBrowser> webBrowser = do_QueryInterface(WebNavigation());
   if (webBrowser) {
     webBrowser->SetContainerWindow(nullptr);
   }
 
   mozilla::DropJSObjects(this);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvLoadURL(const nsCString& aURI,
-                                              const ShowInfo& aInfo) {
+mozilla::ipc::IPCResult BrowserChild::RecvLoadURL(const nsCString& aURI,
+                                                  const ShowInfo& aInfo) {
   if (!mDidLoadURLInit) {
     mDidLoadURLInit = true;
-    if (!InitTabChildMessageManager()) {
+    if (!InitBrowserChildMessageManager()) {
       return IPC_FAIL_NO_REASON(this);
     }
 
     ApplyShowInfo(aInfo);
   }
 
   LoadURIOptions loadURIOptions;
   loadURIOptions.mTriggeringPrincipal = nsContentUtils::GetSystemPrincipal();
@@ -1067,41 +1073,41 @@ mozilla::ipc::IPCResult TabChild::RecvLo
     nsDocShell::Cast(docShell)->MaybeClearStorageAccessFlag();
   }
 
   CrashReporter::AnnotateCrashReport(CrashReporter::Annotation::URL, aURI);
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvResumeLoad(
+mozilla::ipc::IPCResult BrowserChild::RecvResumeLoad(
     const uint64_t& aPendingSwitchID, const ShowInfo& aInfo) {
   if (!mDidLoadURLInit) {
     mDidLoadURLInit = true;
-    if (!InitTabChildMessageManager()) {
+    if (!InitBrowserChildMessageManager()) {
       return IPC_FAIL_NO_REASON(this);
     }
 
     ApplyShowInfo(aInfo);
   }
 
   nsresult rv = WebNavigation()->ResumeRedirectedLoad(aPendingSwitchID, -1);
   if (NS_FAILED(rv)) {
     NS_WARNING("WebNavigation()->ResumeRedirectedLoad failed");
   }
 
   return IPC_OK();
 }
 
-void TabChild::DoFakeShow(const ShowInfo& aShowInfo) {
+void BrowserChild::DoFakeShow(const ShowInfo& aShowInfo) {
   RecvShow(ScreenIntSize(0, 0), aShowInfo, mParentIsActive, nsSizeMode_Normal);
   mDidFakeShow = true;
 }
 
-void TabChild::ApplyShowInfo(const ShowInfo& aInfo) {
+void BrowserChild::ApplyShowInfo(const ShowInfo& aInfo) {
   // Even if we already set real show info, the dpi / rounding & scale may still
   // be invalid (if BrowserParent wasn't able to get widget it would just send
   // 0). So better to always set up-to-date values here.
   if (aInfo.dpi() > 0) {
     mPuppetWidget->UpdateBackingScaleCache(aInfo.dpi(), aInfo.widgetRounding(),
                                            aInfo.defaultScale());
   }
 
@@ -1144,32 +1150,32 @@ void TabChild::ApplyShowInfo(const ShowI
           nsDocShell::Cast(docShell)->SetOriginAttributes(attrs);
         }
       }
     }
   }
   mIsTransparent = aInfo.isTransparent();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvShow(const ScreenIntSize& aSize,
-                                           const ShowInfo& aInfo,
-                                           const bool& aParentIsActive,
-                                           const nsSizeMode& aSizeMode) {
+mozilla::ipc::IPCResult BrowserChild::RecvShow(const ScreenIntSize& aSize,
+                                               const ShowInfo& aInfo,
+                                               const bool& aParentIsActive,
+                                               const nsSizeMode& aSizeMode) {
   bool res = true;
 
   mPuppetWidget->SetSizeMode(aSizeMode);
   if (!mDidFakeShow) {
     nsCOMPtr<nsIBaseWindow> baseWindow = do_QueryInterface(WebNavigation());
     if (!baseWindow) {
       NS_ERROR("WebNavigation() doesn't QI to nsIBaseWindow");
       return IPC_FAIL_NO_REASON(this);
     }
 
     baseWindow->SetVisibility(true);
-    res = InitTabChildMessageManager();
+    res = InitBrowserChildMessageManager();
   }
 
   ApplyShowInfo(aInfo);
   RecvParentActivated(aParentIsActive);
 
   if (!res) {
     return IPC_FAIL_NO_REASON(this);
   }
@@ -1179,26 +1185,26 @@ mozilla::ipc::IPCResult TabChild::RecvSh
   // paints later on (the usual place where checkpoints occur).
   if (recordreplay::IsRecordingOrReplaying()) {
     recordreplay::child::CreateCheckpoint();
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvInitRendering(
+mozilla::ipc::IPCResult BrowserChild::RecvInitRendering(
     const TextureFactoryIdentifier& aTextureFactoryIdentifier,
     const layers::LayersId& aLayersId,
     const CompositorOptions& aCompositorOptions, const bool& aLayersConnected) {
   mLayersConnected = Some(aLayersConnected);
   InitRenderingState(aTextureFactoryIdentifier, aLayersId, aCompositorOptions);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvUpdateDimensions(
+mozilla::ipc::IPCResult BrowserChild::RecvUpdateDimensions(
     const DimensionInfo& aDimensionInfo) {
   // When recording/replaying we need to make sure the dimensions are up to
   // date on the compositor used in this process.
   if (mLayersConnected.isNothing() && !recordreplay::IsRecordingOrReplaying()) {
     return IPC_OK();
   }
 
   mUnscaledOuterRect = aDimensionInfo.rect();
@@ -1224,58 +1230,59 @@ mozilla::ipc::IPCResult TabChild::RecvUp
 
   mPuppetWidget->Resize(screenRect.x + mClientOffset.x + mChromeOffset.x,
                         screenRect.y + mClientOffset.y + mChromeOffset.y,
                         screenSize.width, screenSize.height, true);
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSizeModeChanged(
+mozilla::ipc::IPCResult BrowserChild::RecvSizeModeChanged(
     const nsSizeMode& aSizeMode) {
   mPuppetWidget->SetSizeMode(aSizeMode);
   if (!mPuppetWidget->IsVisible()) {
     return IPC_OK();
   }
   nsCOMPtr<Document> document(GetTopLevelDocument());
   nsPresContext* presContext = document->GetPresContext();
   if (presContext) {
     presContext->SizeModeChanged(aSizeMode);
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvChildToParentMatrix(
+mozilla::ipc::IPCResult BrowserChild::RecvChildToParentMatrix(
     const mozilla::gfx::Matrix4x4& aMatrix) {
   mChildToParentConversionMatrix =
       Some(LayoutDeviceToLayoutDeviceMatrix4x4::FromUnknownMatrix(aMatrix));
   return IPC_OK();
 }
 
-bool TabChild::UpdateFrame(const RepaintRequest& aRequest) {
-  return TabChildBase::UpdateFrameHandler(aRequest);
+bool BrowserChild::UpdateFrame(const RepaintRequest& aRequest) {
+  return BrowserChildBase::UpdateFrameHandler(aRequest);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSuppressDisplayport(
+mozilla::ipc::IPCResult BrowserChild::RecvSuppressDisplayport(
     const bool& aEnabled) {
   if (RefPtr<PresShell> presShell = GetTopLevelPresShell()) {
     presShell->SuppressDisplayport(aEnabled);
   }
   return IPC_OK();
 }
 
-void TabChild::HandleDoubleTap(const CSSPoint& aPoint,
-                               const Modifiers& aModifiers,
-                               const ScrollableLayerGuid& aGuid) {
-  TABC_LOG(
-      "Handling double tap at %s with %p %p\n", Stringify(aPoint).c_str(),
-      mTabChildMessageManager ? mTabChildMessageManager->GetWrapper() : nullptr,
-      mTabChildMessageManager.get());
-
-  if (!mTabChildMessageManager) {
+void BrowserChild::HandleDoubleTap(const CSSPoint& aPoint,
+                                   const Modifiers& aModifiers,
+                                   const ScrollableLayerGuid& aGuid) {
+  TABC_LOG("Handling double tap at %s with %p %p\n", Stringify(aPoint).c_str(),
+           mBrowserChildMessageManager
+               ? mBrowserChildMessageManager->GetWrapper()
+               : nullptr,
+           mBrowserChildMessageManager.get());
+
+  if (!mBrowserChildMessageManager) {
     return;
   }
 
   // Note: there is nothing to do with the modifiers here, as we are not
   // synthesizing any sort of mouse event.
   RefPtr<Document> document = GetTopLevelDocument();
   CSSRect zoomToRect = CalculateRectToZoomTo(document, aPoint);
   // The double-tap can be dispatched by any scroll frame (so |aGuid| could be
@@ -1289,180 +1296,181 @@ void TabChild::HandleDoubleTap(const CSS
       mApzcTreeManager) {
     SLGuidAndRenderRoot guid(mLayersId, presShellId, viewId,
                              gfxUtils::GetContentRenderRoot());
 
     mApzcTreeManager->ZoomToRect(guid, zoomToRect, DEFAULT_BEHAVIOR);
   }
 }
 
-mozilla::ipc::IPCResult TabChild::RecvHandleTap(
+mozilla::ipc::IPCResult BrowserChild::RecvHandleTap(
     const GeckoContentController::TapType& aType,
     const LayoutDevicePoint& aPoint, const Modifiers& aModifiers,
     const ScrollableLayerGuid& aGuid, const uint64_t& aInputBlockId) {
   // IPDL doesn't hold a strong reference to protocols as they're not required
   // to be refcounted. This function can run script, which may trigger a nested
   // event loop, which may release this, so we hold a strong reference here.
-  RefPtr<TabChild> kungFuDeathGrip(this);
+  RefPtr<BrowserChild> kungFuDeathGrip(this);
   RefPtr<PresShell> presShell = GetTopLevelPresShell();
   if (!presShell) {
     return IPC_OK();
   }
   if (!presShell->GetPresContext()) {
     return IPC_OK();
   }
   CSSToLayoutDeviceScale scale(
       presShell->GetPresContext()->CSSToDevPixelScale());
   CSSPoint point =
       APZCCallbackHelper::ApplyCallbackTransform(aPoint / scale, aGuid);
 
   switch (aType) {
     case GeckoContentController::TapType::eSingleTap:
-      if (mTabChildMessageManager) {
+      if (mBrowserChildMessageManager) {
         mAPZEventState->ProcessSingleTap(point, scale, aModifiers, aGuid, 1);
       }
       break;
     case GeckoContentController::TapType::eDoubleTap:
       HandleDoubleTap(point, aModifiers, aGuid);
       break;
     case GeckoContentController::TapType::eSecondTap:
-      if (mTabChildMessageManager) {
+      if (mBrowserChildMessageManager) {
         mAPZEventState->ProcessSingleTap(point, scale, aModifiers, aGuid, 2);
       }
       break;
     case GeckoContentController::TapType::eLongTap:
-      if (mTabChildMessageManager) {
+      if (mBrowserChildMessageManager) {
         RefPtr<APZEventState> eventState(mAPZEventState);
         eventState->ProcessLongTap(presShell, point, scale, aModifiers, aGuid,
                                    aInputBlockId);
       }
       break;
     case GeckoContentController::TapType::eLongTapUp:
-      if (mTabChildMessageManager) {
+      if (mBrowserChildMessageManager) {
         RefPtr<APZEventState> eventState(mAPZEventState);
         eventState->ProcessLongTapUp(presShell, point, scale, aModifiers);
       }
       break;
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityHandleTap(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityHandleTap(
     const GeckoContentController::TapType& aType,
     const LayoutDevicePoint& aPoint, const Modifiers& aModifiers,
     const ScrollableLayerGuid& aGuid, const uint64_t& aInputBlockId) {
   // IPDL doesn't hold a strong reference to protocols as they're not required
   // to be refcounted. This function can run script, which may trigger a nested
   // event loop, which may release this, so we hold a strong reference here.
-  RefPtr<TabChild> kungFuDeathGrip(this);
+  RefPtr<BrowserChild> kungFuDeathGrip(this);
   return RecvHandleTap(aType, aPoint, aModifiers, aGuid, aInputBlockId);
 }
 
-bool TabChild::NotifyAPZStateChange(
+bool BrowserChild::NotifyAPZStateChange(
     const ViewID& aViewId,
     const layers::GeckoContentController::APZStateChange& aChange,
     const int& aArg) {
   mAPZEventState->ProcessAPZStateChange(aViewId, aChange, aArg);
   if (aChange ==
       layers::GeckoContentController::APZStateChange::eTransformEnd) {
     // This is used by tests to determine when the APZ is done doing whatever
     // it's doing. XXX generify this as needed when writing additional tests.
     nsCOMPtr<nsIObserverService> observerService =
         mozilla::services::GetObserverService();
     observerService->NotifyObservers(nullptr, "APZ:TransformEnd", nullptr);
   }
   return true;
 }
 
-void TabChild::StartScrollbarDrag(
+void BrowserChild::StartScrollbarDrag(
     const layers::AsyncDragMetrics& aDragMetrics) {
   SLGuidAndRenderRoot guid(mLayersId, aDragMetrics.mPresShellId,
                            aDragMetrics.mViewId,
                            gfxUtils::GetContentRenderRoot());
 
   if (mApzcTreeManager) {
     mApzcTreeManager->StartScrollbarDrag(guid, aDragMetrics);
   }
 }
 
-void TabChild::ZoomToRect(const uint32_t& aPresShellId,
-                          const ScrollableLayerGuid::ViewID& aViewId,
-                          const CSSRect& aRect, const uint32_t& aFlags) {
+void BrowserChild::ZoomToRect(const uint32_t& aPresShellId,
+                              const ScrollableLayerGuid::ViewID& aViewId,
+                              const CSSRect& aRect, const uint32_t& aFlags) {
   SLGuidAndRenderRoot guid(mLayersId, aPresShellId, aViewId,
                            gfxUtils::GetContentRenderRoot());
 
   if (mApzcTreeManager) {
     mApzcTreeManager->ZoomToRect(guid, aRect, aFlags);
   }
 }
 
-mozilla::ipc::IPCResult TabChild::RecvActivate() {
+mozilla::ipc::IPCResult BrowserChild::RecvActivate() {
   MOZ_ASSERT(mWebBrowser);
   // Ensure that the PresShell exists, otherwise focusing
   // is definitely not going to work. GetPresShell should
   // create a PresShell if one doesn't exist yet.
   RefPtr<PresShell> presShell = GetTopLevelPresShell();
   MOZ_ASSERT(presShell);
   Unused << presShell;
 
   mWebBrowser->FocusActivate();
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvDeactivate() {
+mozilla::ipc::IPCResult BrowserChild::RecvDeactivate() {
   MOZ_ASSERT(mWebBrowser);
   mWebBrowser->FocusDeactivate();
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvParentActivated(const bool& aActivated) {
+mozilla::ipc::IPCResult BrowserChild::RecvParentActivated(
+    const bool& aActivated) {
   mParentIsActive = aActivated;
 
   nsFocusManager* fm = nsFocusManager::GetFocusManager();
   NS_ENSURE_TRUE(fm, IPC_OK());
 
   nsCOMPtr<nsPIDOMWindowOuter> window = do_GetInterface(WebNavigation());
   fm->ParentActivated(window, aActivated);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSetKeyboardIndicators(
+mozilla::ipc::IPCResult BrowserChild::RecvSetKeyboardIndicators(
     const UIStateChangeType& aShowAccelerators,
     const UIStateChangeType& aShowFocusRings) {
   nsCOMPtr<nsPIDOMWindowOuter> window = do_GetInterface(WebNavigation());
   NS_ENSURE_TRUE(window, IPC_OK());
 
   window->SetKeyboardIndicators(aShowAccelerators, aShowFocusRings);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvStopIMEStateManagement() {
+mozilla::ipc::IPCResult BrowserChild::RecvStopIMEStateManagement() {
   IMEStateManager::StopIMEStateManagement();
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvMouseEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvMouseEvent(
     const nsString& aType, const float& aX, const float& aY,
     const int32_t& aButton, const int32_t& aClickCount,
     const int32_t& aModifiers, const bool& aIgnoreRootScrollFrame) {
   // IPDL doesn't hold a strong reference to protocols as they're not required
   // to be refcounted. This function can run script, which may trigger a nested
   // event loop, which may release this, so we hold a strong reference here.
-  RefPtr<TabChild> kungFuDeathGrip(this);
+  RefPtr<BrowserChild> kungFuDeathGrip(this);
   RefPtr<PresShell> presShell = GetTopLevelPresShell();
   APZCCallbackHelper::DispatchMouseEvent(
       presShell, aType, CSSPoint(aX, aY), aButton, aClickCount, aModifiers,
       aIgnoreRootScrollFrame, MouseEvent_Binding::MOZ_SOURCE_UNKNOWN,
       0 /* Use the default value here. */);
   return IPC_OK();
 }
 
-void TabChild::ProcessPendingCoalescedMouseDataAndDispatchEvents() {
+void BrowserChild::ProcessPendingCoalescedMouseDataAndDispatchEvents() {
   if (!mCoalesceMouseMoveEvents || !mCoalescedMouseEventFlusher) {
-    // We don't enable mouse coalescing or we are destroying TabChild.
+    // We don't enable mouse coalescing or we are destroying BrowserChild.
     return;
   }
 
   // We may reentry the event loop and push more data to
   // mToBeDispatchedMouseData while dispatching an event.
 
   // We may have some pending coalesced data while dispatch an event and reentry
   // the event loop. In that case we don't have chance to consume the remainding
@@ -1486,26 +1494,26 @@ void TabChild::ProcessPendingCoalescedMo
   }
   // mCoalescedMouseEventFlusher may be destroyed when reentrying the event
   // loop.
   if (mCoalescedMouseEventFlusher) {
     mCoalescedMouseEventFlusher->RemoveObserver();
   }
 }
 
-LayoutDeviceToLayoutDeviceMatrix4x4 TabChild::GetChildToParentConversionMatrix()
-    const {
+LayoutDeviceToLayoutDeviceMatrix4x4
+BrowserChild::GetChildToParentConversionMatrix() const {
   if (mChildToParentConversionMatrix) {
     return *mChildToParentConversionMatrix;
   }
   LayoutDevicePoint offset(GetChromeOffset());
   return LayoutDeviceToLayoutDeviceMatrix4x4::Translation(offset);
 }
 
-void TabChild::FlushAllCoalescedMouseData() {
+void BrowserChild::FlushAllCoalescedMouseData() {
   MOZ_ASSERT(mCoalesceMouseMoveEvents);
 
   // Move all entries from mCoalescedMouseData to mToBeDispatchedMouseData.
   for (auto iter = mCoalescedMouseData.Iter(); !iter.Done(); iter.Next()) {
     CoalescedMouseData* data = iter.UserData();
     if (!data || data->IsEmpty()) {
       continue;
     }
@@ -1513,17 +1521,17 @@ void TabChild::FlushAllCoalescedMouseDat
         MakeUnique<CoalescedMouseData>();
 
     dispatchData->RetrieveDataFrom(*data);
     mToBeDispatchedMouseData.Push(dispatchData.release());
   }
   mCoalescedMouseData.Clear();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRealMouseMoveEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvRealMouseMoveEvent(
     const WidgetMouseEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   if (mCoalesceMouseMoveEvents && mCoalescedMouseEventFlusher) {
     CoalescedMouseData* data =
         mCoalescedMouseData.LookupOrAdd(aEvent.pointerId);
     MOZ_ASSERT(data);
     if (data->CanCoalesce(aEvent, aGuid, aInputBlockId)) {
       data->Coalesce(aEvent, aGuid, aInputBlockId);
@@ -1548,38 +1556,38 @@ mozilla::ipc::IPCResult TabChild::RecvRe
     ProcessPendingCoalescedMouseDataAndDispatchEvents();
     mCoalescedMouseEventFlusher->StartObserver();
   } else if (!RecvRealMouseButtonEvent(aEvent, aGuid, aInputBlockId)) {
     return IPC_FAIL_NO_REASON(this);
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityRealMouseMoveEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityRealMouseMoveEvent(
     const WidgetMouseEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   return RecvRealMouseMoveEvent(aEvent, aGuid, aInputBlockId);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSynthMouseMoveEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvSynthMouseMoveEvent(
     const WidgetMouseEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   if (!RecvRealMouseButtonEvent(aEvent, aGuid, aInputBlockId)) {
     return IPC_FAIL_NO_REASON(this);
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPrioritySynthMouseMoveEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPrioritySynthMouseMoveEvent(
     const WidgetMouseEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   return RecvSynthMouseMoveEvent(aEvent, aGuid, aInputBlockId);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRealMouseButtonEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvRealMouseButtonEvent(
     const WidgetMouseEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   if (mCoalesceMouseMoveEvents && mCoalescedMouseEventFlusher &&
       aEvent.mMessage != eMouseMove) {
     // When receiving a mouse event other than mousemove, we have to dispatch
     // all coalesced events before it. However, we can't dispatch all pending
     // coalesced events directly because we may reentry the event loop while
     // dispatching. To make sure we won't dispatch disorder events, we move all
@@ -1596,19 +1604,19 @@ mozilla::ipc::IPCResult TabChild::RecvRe
 
     ProcessPendingCoalescedMouseDataAndDispatchEvents();
     return IPC_OK();
   }
   HandleRealMouseButtonEvent(aEvent, aGuid, aInputBlockId);
   return IPC_OK();
 }
 
-void TabChild::HandleRealMouseButtonEvent(const WidgetMouseEvent& aEvent,
-                                          const ScrollableLayerGuid& aGuid,
-                                          const uint64_t& aInputBlockId) {
+void BrowserChild::HandleRealMouseButtonEvent(const WidgetMouseEvent& aEvent,
+                                              const ScrollableLayerGuid& aGuid,
+                                              const uint64_t& aInputBlockId) {
   // Mouse events like eMouseEnterIntoWidget, that are created in the parent
   // process EventStateManager code, have an input block id which they get from
   // the InputAPZContext in the parent process stack. However, they did not
   // actually go through the APZ code and so their mHandledByAPZ flag is false.
   // Since thos events didn't go through APZ, we don't need to send
   // notifications for them.
   UniquePtr<DisplayportSetListener> postLayerization;
   if (aInputBlockId && aEvent.mFlags.mHandledByAPZ) {
@@ -1635,28 +1643,28 @@ void TabChild::HandleRealMouseButtonEven
   // to APZ (from scrollbar dragging in nsSliderFrame), then that will reach
   // APZ before the SetTargetAPZC message. This ensures the drag input block
   // gets the drag metrics before handling the input events.
   if (postLayerization && postLayerization->Register()) {
     Unused << postLayerization.release();
   }
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityRealMouseButtonEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityRealMouseButtonEvent(
     const WidgetMouseEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   return RecvRealMouseButtonEvent(aEvent, aGuid, aInputBlockId);
 }
 
 // In case handling repeated mouse wheel takes much time, we skip firing current
 // wheel event if it may be coalesced to the next one.
-bool TabChild::MaybeCoalesceWheelEvent(const WidgetWheelEvent& aEvent,
-                                       const ScrollableLayerGuid& aGuid,
-                                       const uint64_t& aInputBlockId,
-                                       bool* aIsNextWheelEvent) {
+bool BrowserChild::MaybeCoalesceWheelEvent(const WidgetWheelEvent& aEvent,
+                                           const ScrollableLayerGuid& aGuid,
+                                           const uint64_t& aInputBlockId,
+                                           bool* aIsNextWheelEvent) {
   MOZ_ASSERT(aIsNextWheelEvent);
   if (aEvent.mMessage == eWheel) {
     GetIPCChannel()->PeekMessages(
         [aIsNextWheelEvent](const IPC::Message& aMsg) -> bool {
           if (aMsg.type() == mozilla::dom::PBrowser::Msg_MouseWheelEvent__ID) {
             *aIsNextWheelEvent = true;
           }
           return false;  // Stop peeking.
@@ -1678,35 +1686,35 @@ bool TabChild::MaybeCoalesceWheelEvent(c
          mCoalescedWheelData.CanCoalesce(aEvent, aGuid, aInputBlockId))) {
       mCoalescedWheelData.Coalesce(aEvent, aGuid, aInputBlockId);
       return true;
     }
   }
   return false;
 }
 
-nsEventStatus TabChild::DispatchWidgetEventViaAPZ(WidgetGUIEvent& aEvent) {
+nsEventStatus BrowserChild::DispatchWidgetEventViaAPZ(WidgetGUIEvent& aEvent) {
   aEvent.ResetWaitingReplyFromRemoteProcessState();
   return APZCCallbackHelper::DispatchWidgetEvent(aEvent);
 }
 
-void TabChild::MaybeDispatchCoalescedWheelEvent() {
+void BrowserChild::MaybeDispatchCoalescedWheelEvent() {
   if (mCoalescedWheelData.IsEmpty()) {
     return;
   }
   UniquePtr<WidgetWheelEvent> wheelEvent =
       mCoalescedWheelData.TakeCoalescedEvent();
   MOZ_ASSERT(wheelEvent);
   DispatchWheelEvent(*wheelEvent, mCoalescedWheelData.GetScrollableLayerGuid(),
                      mCoalescedWheelData.GetInputBlockId());
 }
 
-void TabChild::DispatchWheelEvent(const WidgetWheelEvent& aEvent,
-                                  const ScrollableLayerGuid& aGuid,
-                                  const uint64_t& aInputBlockId) {
+void BrowserChild::DispatchWheelEvent(const WidgetWheelEvent& aEvent,
+                                      const ScrollableLayerGuid& aGuid,
+                                      const uint64_t& aInputBlockId) {
   WidgetWheelEvent localEvent(aEvent);
   if (aInputBlockId && aEvent.mFlags.mHandledByAPZ) {
     nsCOMPtr<Document> document(GetTopLevelDocument());
     UniquePtr<DisplayportSetListener> postLayerization =
         APZCCallbackHelper::SendSetTargetAPZCNotification(
             mPuppetWidget, document, aEvent, aGuid, aInputBlockId);
     if (postLayerization && postLayerization->Register()) {
       Unused << postLayerization.release();
@@ -1722,17 +1730,17 @@ void TabChild::DispatchWheelEvent(const 
     SendRespondStartSwipeEvent(aInputBlockId, localEvent.TriggersSwipe());
   }
 
   if (aInputBlockId && aEvent.mFlags.mHandledByAPZ) {
     mAPZEventState->ProcessWheelEvent(localEvent, aGuid, aInputBlockId);
   }
 }
 
-mozilla::ipc::IPCResult TabChild::RecvMouseWheelEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvMouseWheelEvent(
     const WidgetWheelEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   bool isNextWheelEvent = false;
   if (MaybeCoalesceWheelEvent(aEvent, aGuid, aInputBlockId,
                               &isNextWheelEvent)) {
     return IPC_OK();
   }
   if (isNextWheelEvent) {
@@ -1749,23 +1757,23 @@ mozilla::ipc::IPCResult TabChild::RecvMo
     // null moment to avoid coalesce the next incoming wheel event.
     mLastWheelProcessedTimeFromParent = TimeStamp();
     MaybeDispatchCoalescedWheelEvent();
     DispatchWheelEvent(aEvent, aGuid, aInputBlockId);
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityMouseWheelEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityMouseWheelEvent(
     const WidgetWheelEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId) {
   return RecvMouseWheelEvent(aEvent, aGuid, aInputBlockId);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRealTouchEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvRealTouchEvent(
     const WidgetTouchEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId, const nsEventStatus& aApzResponse) {
   TABC_LOG("Receiving touch event of type %d\n", aEvent.mMessage);
 
   WidgetTouchEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
 
   APZCCallbackHelper::ApplyCallbackTransform(localEvent, aGuid,
@@ -1796,38 +1804,38 @@ mozilla::ipc::IPCResult TabChild::RecvRe
     return IPC_OK();
   }
 
   mAPZEventState->ProcessTouchEvent(localEvent, aGuid, aInputBlockId,
                                     aApzResponse, status);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityRealTouchEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityRealTouchEvent(
     const WidgetTouchEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId, const nsEventStatus& aApzResponse) {
   return RecvRealTouchEvent(aEvent, aGuid, aInputBlockId, aApzResponse);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRealTouchMoveEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvRealTouchMoveEvent(
     const WidgetTouchEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId, const nsEventStatus& aApzResponse) {
   if (!RecvRealTouchEvent(aEvent, aGuid, aInputBlockId, aApzResponse)) {
     return IPC_FAIL_NO_REASON(this);
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityRealTouchMoveEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityRealTouchMoveEvent(
     const WidgetTouchEvent& aEvent, const ScrollableLayerGuid& aGuid,
     const uint64_t& aInputBlockId, const nsEventStatus& aApzResponse) {
   return RecvRealTouchMoveEvent(aEvent, aGuid, aInputBlockId, aApzResponse);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRealDragEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvRealDragEvent(
     const WidgetDragEvent& aEvent, const uint32_t& aDragAction,
     const uint32_t& aDropEffect, const IPC::Principal& aPrincipal) {
   WidgetDragEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
 
   nsCOMPtr<nsIDragSession> dragSession = nsContentUtils::GetDragSession();
   if (dragSession) {
     dragSession->SetDragAction(aDragAction);
@@ -1853,31 +1861,31 @@ mozilla::ipc::IPCResult TabChild::RecvRe
       dragService->FireDragEventAtSource(eDrag, aEvent.mModifiers);
     }
   }
 
   DispatchWidgetEventViaAPZ(localEvent);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvPluginEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvPluginEvent(
     const WidgetPluginEvent& aEvent) {
   WidgetPluginEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
   nsEventStatus status = DispatchWidgetEventViaAPZ(localEvent);
   if (status != nsEventStatus_eConsumeNoDefault) {
     // If not consumed, we should call default action
     SendDefaultProcOfPluginEvent(aEvent);
   }
   return IPC_OK();
 }
 
-void TabChild::RequestEditCommands(nsIWidget::NativeKeyBindingsType aType,
-                                   const WidgetKeyboardEvent& aEvent,
-                                   nsTArray<CommandInt>& aCommands) {
+void BrowserChild::RequestEditCommands(nsIWidget::NativeKeyBindingsType aType,
+                                       const WidgetKeyboardEvent& aEvent,
+                                       nsTArray<CommandInt>& aCommands) {
   MOZ_ASSERT(aCommands.IsEmpty());
 
   if (NS_WARN_IF(aEvent.IsEditCommandsInitialized(aType))) {
     aCommands = aEvent.EditCommandsConstRef(aType);
     return;
   }
 
   switch (aType) {
@@ -1890,25 +1898,25 @@ void TabChild::RequestEditCommands(nsIWi
   }
 
   // Don't send aEvent to the parent process directly because it'll be marked
   // as posted to remote process.
   WidgetKeyboardEvent localEvent(aEvent);
   SendRequestNativeKeyBindings(aType, localEvent, &aCommands);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNativeSynthesisResponse(
+mozilla::ipc::IPCResult BrowserChild::RecvNativeSynthesisResponse(
     const uint64_t& aObserverId, const nsCString& aResponse) {
   mozilla::widget::AutoObserverNotifier::NotifySavedObserver(aObserverId,
                                                              aResponse.get());
   return IPC_OK();
 }
 
 // In case handling repeated keys takes much time, we skip firing new ones.
-bool TabChild::SkipRepeatedKeyEvent(const WidgetKeyboardEvent& aEvent) {
+bool BrowserChild::SkipRepeatedKeyEvent(const WidgetKeyboardEvent& aEvent) {
   if (mRepeatedKeyEventTime.IsNull() || !aEvent.CanSkipInRemoteProcess() ||
       (aEvent.mMessage != eKeyDown && aEvent.mMessage != eKeyPress)) {
     mRepeatedKeyEventTime = TimeStamp();
     mSkipKeyPress = false;
     return false;
   }
 
   if ((aEvent.mMessage == eKeyDown &&
@@ -1923,25 +1931,25 @@ bool TabChild::SkipRepeatedKeyEvent(cons
   if (aEvent.mMessage == eKeyDown) {
     // If keydown wasn't skipped, nor should the possible following keypress.
     mRepeatedKeyEventTime = TimeStamp();
     mSkipKeyPress = false;
   }
   return false;
 }
 
-void TabChild::UpdateRepeatedKeyEventEndTime(
+void BrowserChild::UpdateRepeatedKeyEventEndTime(
     const WidgetKeyboardEvent& aEvent) {
   if (aEvent.mIsRepeat &&
       (aEvent.mMessage == eKeyDown || aEvent.mMessage == eKeyPress)) {
     mRepeatedKeyEventTime = TimeStamp::Now();
   }
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRealKeyEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvRealKeyEvent(
     const WidgetKeyboardEvent& aEvent) {
   if (SkipRepeatedKeyEvent(aEvent)) {
     return IPC_OK();
   }
 
   MOZ_ASSERT(
       aEvent.mMessage != eKeyPress || aEvent.AreAllEditCommandsInitialized(),
       "eKeyPress event should have native key binding information");
@@ -1991,50 +1999,50 @@ mozilla::ipc::IPCResult TabChild::RecvRe
     // keep checking the flag for avoiding regression.
     localEvent.mFlags.mNoRemoteProcessDispatch = false;
     SendReplyKeyEvent(localEvent);
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityRealKeyEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityRealKeyEvent(
     const WidgetKeyboardEvent& aEvent) {
   return RecvRealKeyEvent(aEvent);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvCompositionEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvCompositionEvent(
     const WidgetCompositionEvent& aEvent) {
   WidgetCompositionEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
   DispatchWidgetEventViaAPZ(localEvent);
   Unused << SendOnEventNeedingAckHandled(aEvent.mMessage);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPriorityCompositionEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPriorityCompositionEvent(
     const WidgetCompositionEvent& aEvent) {
   return RecvCompositionEvent(aEvent);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSelectionEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvSelectionEvent(
     const WidgetSelectionEvent& aEvent) {
   WidgetSelectionEvent localEvent(aEvent);
   localEvent.mWidget = mPuppetWidget;
   DispatchWidgetEventViaAPZ(localEvent);
   Unused << SendOnEventNeedingAckHandled(aEvent.mMessage);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNormalPrioritySelectionEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvNormalPrioritySelectionEvent(
     const WidgetSelectionEvent& aEvent) {
   return RecvSelectionEvent(aEvent);
 }
 
-mozilla::ipc::IPCResult TabChild::RecvPasteTransferable(
+mozilla::ipc::IPCResult BrowserChild::RecvPasteTransferable(
     const IPCDataTransfer& aDataTransfer, const bool& aIsPrivateData,
     const IPC::Principal& aRequestingPrincipal,
     const uint32_t& aContentPolicyType) {
   nsresult rv;
   nsCOMPtr<nsITransferable> trans =
       do_CreateInstance("@mozilla.org/widget/transferable;1", &rv);
   NS_ENSURE_SUCCESS(rv, IPC_OK());
   trans->Init(nullptr);
@@ -2052,56 +2060,57 @@ mozilla::ipc::IPCResult TabChild::RecvPa
   RefPtr<nsCommandParams> params = new nsCommandParams();
   rv = params->SetISupports("transferable", trans);
   NS_ENSURE_SUCCESS(rv, IPC_OK());
 
   ourDocShell->DoCommandWithParams("cmd_pasteTransferable", params);
   return IPC_OK();
 }
 
-a11y::PDocAccessibleChild* TabChild::AllocPDocAccessibleChild(
+a11y::PDocAccessibleChild* BrowserChild::AllocPDocAccessibleChild(
     PDocAccessibleChild*, const uint64_t&, const uint32_t&,
     const IAccessibleHolder&) {
   MOZ_ASSERT(false, "should never call this!");
   return nullptr;
 }
 
-bool TabChild::DeallocPDocAccessibleChild(a11y::PDocAccessibleChild* aChild) {
+bool BrowserChild::DeallocPDocAccessibleChild(
+    a11y::PDocAccessibleChild* aChild) {
 #ifdef ACCESSIBILITY
   delete static_cast<mozilla::a11y::DocAccessibleChild*>(aChild);
 #endif
   return true;
 }
 
-PColorPickerChild* TabChild::AllocPColorPickerChild(const nsString&,
-                                                    const nsString&) {
+PColorPickerChild* BrowserChild::AllocPColorPickerChild(const nsString&,
+                                                        const nsString&) {
   MOZ_CRASH("unused");
   return nullptr;
 }
 
-bool TabChild::DeallocPColorPickerChild(PColorPickerChild* aColorPicker) {
+bool BrowserChild::DeallocPColorPickerChild(PColorPickerChild* aColorPicker) {
   nsColorPickerProxy* picker = static_cast<nsColorPickerProxy*>(aColorPicker);
   NS_RELEASE(picker);
   return true;
 }
 
-PFilePickerChild* TabChild::AllocPFilePickerChild(const nsString&,
-                                                  const int16_t&) {
+PFilePickerChild* BrowserChild::AllocPFilePickerChild(const nsString&,
+                                                      const int16_t&) {
   MOZ_CRASH("unused");
   return nullptr;
 }
 
-bool TabChild::DeallocPFilePickerChild(PFilePickerChild* actor) {
+bool BrowserChild::DeallocPFilePickerChild(PFilePickerChild* actor) {
   nsFilePickerProxy* filePicker = static_cast<nsFilePickerProxy*>(actor);
   NS_RELEASE(filePicker);
   return true;
 }
 
-mozilla::ipc::IPCResult TabChild::RecvActivateFrameEvent(const nsString& aType,
-                                                         const bool& capture) {
+mozilla::ipc::IPCResult BrowserChild::RecvActivateFrameEvent(
+    const nsString& aType, const bool& capture) {
   nsCOMPtr<nsPIDOMWindowOuter> window = do_GetInterface(WebNavigation());
   NS_ENSURE_TRUE(window, IPC_OK());
   nsCOMPtr<EventTarget> chromeHandler = window->GetChromeEventHandler();
   NS_ENSURE_TRUE(chromeHandler, IPC_OK());
   RefPtr<ContentListener> listener = new ContentListener(this);
   chromeHandler->AddEventListener(aType, listener, capture);
   return IPC_OK();
 }
@@ -2115,73 +2124,73 @@ static bool LoadScriptInMiddleman(const 
       // This script includes event listeners needed to propagate document
       // title changes.
       || aURL.EqualsLiteral("chrome://global/content/browser-child.js")
       // This script is needed to respond to session store requests from the
       // UI process.
       || aURL.EqualsLiteral("chrome://browser/content/content-sessionStore.js");
 }
 
-mozilla::ipc::IPCResult TabChild::RecvLoadRemoteScript(
+mozilla::ipc::IPCResult BrowserChild::RecvLoadRemoteScript(
     const nsString& aURL, const bool& aRunInGlobalScope) {
-  if (!InitTabChildMessageManager())
+  if (!InitBrowserChildMessageManager())
     // This can happen if we're half-destroyed.  It's not a fatal
     // error.
     return IPC_OK();
 
   JS::Rooted<JSObject*> mm(RootingCx(),
-                           mTabChildMessageManager->GetOrCreateWrapper());
+                           mBrowserChildMessageManager->GetOrCreateWrapper());
   if (!mm) {
     // This can happen if we're half-destroyed.  It's not a fatal error.
     return IPC_OK();
   }
 
   // Make sure we only load whitelisted scripts in middleman processes.
   if (recordreplay::IsMiddleman() && !LoadScriptInMiddleman(aURL)) {
     return IPC_OK();
   }
 
   LoadScriptInternal(mm, aURL, !aRunInGlobalScope);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvAsyncMessage(
+mozilla::ipc::IPCResult BrowserChild::RecvAsyncMessage(
     const nsString& aMessage, InfallibleTArray<CpowEntry>&& aCpows,
     const IPC::Principal& aPrincipal, const ClonedMessageData& aData) {
-  AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("TabChild::RecvAsyncMessage",
+  AUTO_PROFILER_LABEL_DYNAMIC_LOSSY_NSSTRING("BrowserChild::RecvAsyncMessage",
                                              OTHER, aMessage);
-  MMPrinter::Print("TabChild::RecvAsyncMessage", aMessage, aData);
+  MMPrinter::Print("BrowserChild::RecvAsyncMessage", aMessage, aData);
 
   CrossProcessCpowHolder cpows(Manager(), aCpows);
-  if (!mTabChildMessageManager) {
+  if (!mBrowserChildMessageManager) {
     return IPC_OK();
   }
 
   RefPtr<nsFrameMessageManager> mm =
-      mTabChildMessageManager->GetMessageManager();
+      mBrowserChildMessageManager->GetMessageManager();
 
   // We should have a message manager if the global is alive, but it
   // seems sometimes we don't.  Assert in aurora/nightly, but don't
   // crash in release builds.
   MOZ_DIAGNOSTIC_ASSERT(mm);
   if (!mm) {
     return IPC_OK();
   }
 
-  JS::Rooted<JSObject*> kungFuDeathGrip(dom::RootingCx(),
-                                        mTabChildMessageManager->GetWrapper());
+  JS::Rooted<JSObject*> kungFuDeathGrip(
+      dom::RootingCx(), mBrowserChildMessageManager->GetWrapper());
   StructuredCloneData data;
   UnpackClonedMessageDataForChild(aData, data);
-  mm->ReceiveMessage(static_cast<EventTarget*>(mTabChildMessageManager),
+  mm->ReceiveMessage(static_cast<EventTarget*>(mBrowserChildMessageManager),
                      nullptr, aMessage, false, &data, &cpows, aPrincipal,
                      nullptr, IgnoreErrors());
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSwappedWithOtherRemoteLoader(
+mozilla::ipc::IPCResult BrowserChild::RecvSwappedWithOtherRemoteLoader(
     const IPCTabContext& aContext) {
   nsCOMPtr<nsIDocShell> ourDocShell = do_GetInterface(WebNavigation());
   if (NS_WARN_IF(!ourDocShell)) {
     return IPC_OK();
   }
 
   nsCOMPtr<nsPIDOMWindowOuter> ourWindow = ourDocShell->GetWindow();
   if (NS_WARN_IF(!ourWindow)) {
@@ -2226,17 +2235,17 @@ mozilla::ipc::IPCResult TabChild::RecvSw
 
   nsContentUtils::FirePageShowEvent(ourDocShell, ourEventTarget, true, true);
 
   docShell->SetInFrameSwap(false);
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvHandleAccessKey(
+mozilla::ipc::IPCResult BrowserChild::RecvHandleAccessKey(
     const WidgetKeyboardEvent& aEvent, nsTArray<uint32_t>&& aCharCodes) {
   nsCOMPtr<Document> document(GetTopLevelDocument());
   RefPtr<nsPresContext> pc = document->GetPresContext();
   if (pc) {
     if (!pc->EventStateManager()->HandleAccessKey(
             &(const_cast<WidgetKeyboardEvent&>(aEvent)), pc, aCharCodes)) {
       // If no accesskey was found, inform the parent so that accesskeys on
       // menus can be handled.
@@ -2244,30 +2253,31 @@ mozilla::ipc::IPCResult TabChild::RecvHa
       localEvent.mWidget = mPuppetWidget;
       SendAccessKeyNotHandled(localEvent);
     }
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSetUseGlobalHistory(const bool& aUse) {
+mozilla::ipc::IPCResult BrowserChild::RecvSetUseGlobalHistory(
+    const bool& aUse) {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   MOZ_ASSERT(docShell);
 
   nsresult rv = docShell->SetUseGlobalHistory(aUse);
   if (NS_FAILED(rv)) {
-    NS_WARNING("Failed to set UseGlobalHistory on TabChild docShell");
+    NS_WARNING("Failed to set UseGlobalHistory on BrowserChild docShell");
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvPrint(const uint64_t& aOuterWindowID,
-                                            const PrintData& aPrintData) {
+mozilla::ipc::IPCResult BrowserChild::RecvPrint(const uint64_t& aOuterWindowID,
+                                                const PrintData& aPrintData) {
 #ifdef NS_PRINTING
   nsGlobalWindowOuter* outerWindow =
       nsGlobalWindowOuter::GetOuterWindowWithId(aOuterWindowID);
   if (NS_WARN_IF(!outerWindow)) {
     return IPC_OK();
   }
 
   nsCOMPtr<nsIWebBrowserPrint> webBrowserPrint =
@@ -2301,103 +2311,104 @@ mozilla::ipc::IPCResult TabChild::RecvPr
   if (NS_WARN_IF(NS_FAILED(rv))) {
     return IPC_OK();
   }
 
 #endif
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvUpdateNativeWindowHandle(
+mozilla::ipc::IPCResult BrowserChild::RecvUpdateNativeWindowHandle(
     const uintptr_t& aNewHandle) {
 #if defined(XP_WIN) && defined(ACCESSIBILITY)
   mNativeWindowHandle = aNewHandle;
   return IPC_OK();
 #else
   return IPC_FAIL_NO_REASON(this);
 #endif
 }
 
-mozilla::ipc::IPCResult TabChild::RecvDestroy() {
+mozilla::ipc::IPCResult BrowserChild::RecvDestroy() {
   MOZ_ASSERT(mDestroyed == false);
   mDestroyed = true;
 
   nsTArray<PContentPermissionRequestChild*> childArray =
       nsContentPermissionUtils::GetContentPermissionRequestChildById(
           GetTabId());
 
   // Need to close undeleted ContentPermissionRequestChilds before tab is
   // closed.
   for (auto& permissionRequestChild : childArray) {
     auto child = static_cast<RemotePermissionRequest*>(permissionRequestChild);
     child->Destroy();
   }
 
-  if (mTabChildMessageManager) {
+  if (mBrowserChildMessageManager) {
     // Message handlers are called from the event loop, so it better be safe to
     // run script.
     MOZ_ASSERT(nsContentUtils::IsSafeToRunScript());
-    mTabChildMessageManager->DispatchTrustedEvent(NS_LITERAL_STRING("unload"));
+    mBrowserChildMessageManager->DispatchTrustedEvent(
+        NS_LITERAL_STRING("unload"));
   }
 
   nsCOMPtr<nsIObserverService> observerService =
       mozilla::services::GetObserverService();
 
   observerService->RemoveObserver(this, BEFORE_FIRST_PAINT);
 
-  // XXX what other code in ~TabChild() should we be running here?
+  // XXX what other code in ~BrowserChild() should we be running here?
   DestroyWindow();
 
   // Bounce through the event loop once to allow any delayed teardown runnables
   // that were just generated to have a chance to run.
   nsCOMPtr<nsIRunnable> deleteRunnable = new DelayedDeleteRunnable(this);
   MOZ_ALWAYS_SUCCEEDS(NS_DispatchToCurrentThread(deleteRunnable));
 
   return IPC_OK();
 }
 
-void TabChild::AddPendingDocShellBlocker() { mPendingDocShellBlockers++; }
-
-void TabChild::RemovePendingDocShellBlocker() {
+void BrowserChild::AddPendingDocShellBlocker() { mPendingDocShellBlockers++; }
+
+void BrowserChild::RemovePendingDocShellBlocker() {
   mPendingDocShellBlockers--;
   if (!mPendingDocShellBlockers && mPendingDocShellReceivedMessage) {
     mPendingDocShellReceivedMessage = false;
     InternalSetDocShellIsActive(mPendingDocShellIsActive);
   }
   if (!mPendingDocShellBlockers && mPendingRenderLayersReceivedMessage) {
     mPendingRenderLayersReceivedMessage = false;
     RecvRenderLayers(mPendingRenderLayers, false /* aForceRepaint */,
                      mPendingLayersObserverEpoch);
   }
 }
 
-void TabChild::InternalSetDocShellIsActive(bool aIsActive) {
+void BrowserChild::InternalSetDocShellIsActive(bool aIsActive) {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
 
   if (docShell) {
     docShell->SetIsActive(aIsActive);
   }
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSetDocShellIsActive(
+mozilla::ipc::IPCResult BrowserChild::RecvSetDocShellIsActive(
     const bool& aIsActive) {
   // If we're currently waiting for window opening to complete, we need to hold
   // off on setting the docshell active. We queue up the values we're receiving
   // in the mWindowOpenDocShellActiveStatus.
   if (mPendingDocShellBlockers > 0) {
     mPendingDocShellReceivedMessage = true;
     mPendingDocShellIsActive = aIsActive;
     return IPC_OK();
   }
 
   InternalSetDocShellIsActive(aIsActive);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRenderLayers(
+mozilla::ipc::IPCResult BrowserChild::RecvRenderLayers(
     const bool& aEnabled, const bool& aForceRepaint,
     const layers::LayersObserverEpoch& aEpoch) {
   if (mPendingDocShellBlockers > 0) {
     mPendingRenderLayersReceivedMessage = true;
     mPendingRenderLayers = aEnabled;
     mPendingLayersObserverEpoch = aEpoch;
     return IPC_OK();
   }
@@ -2445,31 +2456,31 @@ mozilla::ipc::IPCResult TabChild::RecvRe
       // does that.
       if (IPCOpen()) {
         Unused << SendPaintWhileInterruptingJSNoOp(mLayersObserverEpoch);
         return IPC_OK();
       }
     }
 
     if (!sVisibleTabs) {
-      sVisibleTabs = new nsTHashtable<nsPtrHashKey<TabChild>>();
+      sVisibleTabs = new nsTHashtable<nsPtrHashKey<BrowserChild>>();
     }
     sVisibleTabs->PutEntry(this);
 
     MakeVisible();
 
     nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
     if (!docShell) {
       return IPC_OK();
     }
 
-    // We don't use TabChildBase::GetPresShell() here because that would create
-    // a content viewer if one doesn't exist yet. Creating a content viewer can
-    // cause JS to run, which we want to avoid. nsIDocShell::GetPresShell
-    // returns null if no content viewer exists yet.
+    // We don't use BrowserChildBase::GetPresShell() here because that would
+    // create a content viewer if one doesn't exist yet. Creating a content
+    // viewer can cause JS to run, which we want to avoid.
+    // nsIDocShell::GetPresShell returns null if no content viewer exists yet.
     if (RefPtr<PresShell> presShell = docShell->GetPresShell()) {
       presShell->SetIsActive(true);
 
       if (nsIFrame* root = presShell->GetRootFrame()) {
         FrameLayerBuilder::InvalidateAllLayersForFrame(
             nsLayoutUtils::GetDisplayRootFrame(root));
         root->SchedulePaint();
       }
@@ -2489,54 +2500,54 @@ mozilla::ipc::IPCResult TabChild::RecvRe
         }
       }
       presShell->SuppressDisplayport(false);
     }
   } else {
     if (sVisibleTabs) {
       sVisibleTabs->RemoveEntry(this);
       // We don't delete sVisibleTabs here when it's empty since that
-      // could cause a lot of churn. Instead, we wait until ~TabChild.
+      // could cause a lot of churn. Instead, we wait until ~BrowserChild.
     }
 
     MakeHidden();
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRequestRootPaint(
+mozilla::ipc::IPCResult BrowserChild::RecvRequestRootPaint(
     const IntRect& aRect, const float& aScale, const nscolor& aBackgroundColor,
     RequestRootPaintResolver&& aResolve) {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   if (!docShell) {
     return IPC_OK();
   }
 
   aResolve(
       gfx::PaintFragment::Record(docShell, aRect, aScale, aBackgroundColor));
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRequestSubPaint(
+mozilla::ipc::IPCResult BrowserChild::RecvRequestSubPaint(
     const float& aScale, const nscolor& aBackgroundColor,
     RequestSubPaintResolver&& aResolve) {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   if (!docShell) {
     return IPC_OK();
   }
 
   gfx::IntRect rect = gfx::RoundedIn(gfx::Rect(
       0.0f, 0.0f, mUnscaledInnerSize.width, mUnscaledInnerSize.height));
   aResolve(
       gfx::PaintFragment::Record(docShell, rect, aScale, aBackgroundColor));
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvNavigateByKey(
+mozilla::ipc::IPCResult BrowserChild::RecvNavigateByKey(
     const bool& aForward, const bool& aForDocumentNavigation) {
   nsIFocusManager* fm = nsFocusManager::GetFocusManager();
   if (fm) {
     RefPtr<Element> result;
     nsCOMPtr<nsPIDOMWindowOuter> window = do_GetInterface(WebNavigation());
 
     // Move to the first or last document.
     uint32_t type =
@@ -2557,40 +2568,40 @@ mozilla::ipc::IPCResult TabChild::RecvNa
     }
 
     SendRequestFocus(false);
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvHandledWindowedPluginKeyEvent(
+mozilla::ipc::IPCResult BrowserChild::RecvHandledWindowedPluginKeyEvent(
     const NativeEventData& aKeyEventData, const bool& aIsConsumed) {
   if (NS_WARN_IF(!mPuppetWidget)) {
     return IPC_OK();
   }
   mPuppetWidget->HandledWindowedPluginKeyEvent(aKeyEventData, aIsConsumed);
   return IPC_OK();
 }
 
-bool TabChild::InitTabChildMessageManager() {
-  if (!mTabChildMessageManager) {
+bool BrowserChild::InitBrowserChildMessageManager() {
+  if (!mBrowserChildMessageManager) {
     nsCOMPtr<nsPIDOMWindowOuter> window = do_GetInterface(WebNavigation());
     NS_ENSURE_TRUE(window, false);
     nsCOMPtr<EventTarget> chromeHandler = window->GetChromeEventHandler();
     NS_ENSURE_TRUE(chromeHandler, false);
 
-    RefPtr<TabChildMessageManager> scope = mTabChildMessageManager =
-        new TabChildMessageManager(this);
+    RefPtr<BrowserChildMessageManager> scope = mBrowserChildMessageManager =
+        new BrowserChildMessageManager(this);
 
     MOZ_ALWAYS_TRUE(nsMessageManagerScriptExecutor::Init());
 
     nsCOMPtr<nsPIWindowRoot> root = do_QueryInterface(chromeHandler);
     if (NS_WARN_IF(!root)) {
-      mTabChildMessageManager = nullptr;
+      mBrowserChildMessageManager = nullptr;
       return false;
     }
     root->SetParentTarget(scope);
   }
 
   if (!mTriedBrowserInit) {
     mTriedBrowserInit = true;
     // Initialize the child side of the browser element machinery,
@@ -2598,17 +2609,17 @@ bool TabChild::InitTabChildMessageManage
     if (IsMozBrowser()) {
       RecvLoadRemoteScript(BROWSER_ELEMENT_CHILD_SCRIPT, true);
     }
   }
 
   return true;
 }
 
-void TabChild::InitRenderingState(
+void BrowserChild::InitRenderingState(
     const TextureFactoryIdentifier& aTextureFactoryIdentifier,
     const layers::LayersId& aLayersId,
     const CompositorOptions& aCompositorOptions) {
   mPuppetWidget->InitIMEState();
 
   MOZ_ASSERT(aLayersId.IsValid());
   mTextureFactoryIdentifier = aTextureFactoryIdentifier;
 
@@ -2619,23 +2630,23 @@ void TabChild::InitRenderingState(
     mLayersConnected = Some(false);
     NS_WARNING("failed to get CompositorBridgeChild instance");
     return;
   }
 
   mCompositorOptions = Some(aCompositorOptions);
 
   if (aLayersId.IsValid()) {
-    StaticMutexAutoLock lock(sTabChildrenMutex);
-
-    if (!sTabChildren) {
-      sTabChildren = new TabChildMap;
+    StaticMutexAutoLock lock(sBrowserChildrenMutex);
+
+    if (!sBrowserChildren) {
+      sBrowserChildren = new BrowserChildMap;
     }
-    MOZ_ASSERT(!sTabChildren->Get(uint64_t(aLayersId)));
-    sTabChildren->Put(uint64_t(aLayersId), this);
+    MOZ_ASSERT(!sBrowserChildren->Get(uint64_t(aLayersId)));
+    sBrowserChildren->Put(uint64_t(aLayersId), this);
     mLayersId = aLayersId;
   }
 
   MOZ_ASSERT(!mPuppetWidget->HasLayerManager());
   bool success = false;
   if (mLayersConnected == Some(true)) {
     success = CreateRemoteLayerManager(compositorChild);
   }
@@ -2657,17 +2668,17 @@ void TabChild::InitRenderingState(
   nsCOMPtr<nsIObserverService> observerService =
       mozilla::services::GetObserverService();
 
   if (observerService) {
     observerService->AddObserver(this, BEFORE_FIRST_PAINT, false);
   }
 }
 
-bool TabChild::CreateRemoteLayerManager(
+bool BrowserChild::CreateRemoteLayerManager(
     mozilla::layers::PCompositorBridgeChild* aCompositorChild) {
   MOZ_ASSERT(aCompositorChild);
 
   bool success = false;
   if (mCompositorOptions->UseWebRender()) {
     success = mPuppetWidget->CreateRemoteLayerManager(
         [&](LayerManager* aLayerManager) -> bool {
           MOZ_ASSERT(aLayerManager->AsWebRenderLayerManager());
@@ -2707,17 +2718,17 @@ bool TabChild::CreateRemoteLayerManager(
             lf->IdentifyTextureHost(mTextureFactoryIdentifier);
             return true;
           });
     }
   }
   return success;
 }
 
-void TabChild::InitAPZState() {
+void BrowserChild::InitAPZState() {
   if (!mCompositorOptions->UseAPZ()) {
     return;
   }
   auto cbc = CompositorBridgeChild::Get();
 
   // Initialize the ApzcTreeManager. This takes multiple casts because of ugly
   // multiple inheritance.
   PAPZCTreeManagerChild* baseProtocol =
@@ -2735,56 +2746,57 @@ void TabChild::InitAPZState() {
       new ContentProcessController(this);
   APZChild* apzChild = new APZChild(contentController);
   cbc->SetEventTargetForActor(apzChild,
                               TabGroup()->EventTargetFor(TaskCategory::Other));
   MOZ_ASSERT(apzChild->GetActorEventTarget());
   cbc->SendPAPZConstructor(apzChild, mLayersId);
 }
 
-void TabChild::NotifyPainted() {
+void BrowserChild::NotifyPainted() {
   if (!mNotified) {
     // Recording/replaying processes have a compositor but not a remote frame.
     if (!recordreplay::IsRecordingOrReplaying()) {
       SendNotifyCompositorTransaction();
     }
     mNotified = true;
   }
 }
 
-void TabChild::MakeVisible() {
+void BrowserChild::MakeVisible() {
   if (IsVisible()) {
     return;
   }
 
   if (mPuppetWidget) {
     mPuppetWidget->Show(true);
   }
 }
 
-void TabChild::MakeHidden() {
+void BrowserChild::MakeHidden() {
   if (!IsVisible()) {
     return;
   }
 
   // Due to the nested event loop in ContentChild::ProvideWindowCommon,
   // it's possible to be told to become hidden before we're finished
   // setting up a layer manager. We should skip clearing cached layers
   // in that case, since doing so might accidentally put is into
   // BasicLayers mode.
   if (mPuppetWidget && mPuppetWidget->HasLayerManager()) {
     ClearCachedResources();
   }
 
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   if (docShell) {
-    // Hide all plugins in this tab. We don't use TabChildBase::GetPresShell()
-    // here because that would create a content viewer if one doesn't exist yet.
-    // Creating a content viewer can cause JS to run, which we want to avoid.
-    // nsIDocShell::GetPresShell returns null if no content viewer exists yet.
+    // Hide all plugins in this tab. We don't use
+    // BrowserChildBase::GetPresShell() here because that would create a content
+    // viewer if one doesn't exist yet. Creating a content viewer can cause JS
+    // to run, which we want to avoid. nsIDocShell::GetPresShell returns null if
+    // no content viewer exists yet.
     if (RefPtr<PresShell> presShell = docShell->GetPresShell()) {
       if (nsPresContext* presContext = presShell->GetPresContext()) {
         nsRootPresContext* rootPresContext = presContext->GetRootPresContext();
         nsIFrame* rootFrame = presShell->GetRootFrame();
         rootPresContext->ComputePluginGeometryUpdates(rootFrame, nullptr,
                                                       nullptr);
         rootPresContext->ApplyPluginGeometryUpdates();
       }
@@ -2792,69 +2804,67 @@ void TabChild::MakeHidden() {
     }
   }
 
   if (mPuppetWidget) {
     mPuppetWidget->Show(false);
   }
 }
 
-bool TabChild::IsVisible() {
+bool BrowserChild::IsVisible() {
   return mPuppetWidget && mPuppetWidget->IsVisible();
 }
 
 NS_IMETHODIMP
-TabChild::GetMessageManager(ContentFrameMessageManager** aResult) {
-  RefPtr<ContentFrameMessageManager> mm(mTabChildMessageManager);
+BrowserChild::GetMessageManager(ContentFrameMessageManager** aResult) {
+  RefPtr<ContentFrameMessageManager> mm(mBrowserChildMessageManager);
   mm.forget(aResult);
   return *aResult ? NS_OK : NS_ERROR_FAILURE;
 }
 
 NS_IMETHODIMP
-TabChild::GetWebBrowserChrome(nsIWebBrowserChrome3** aWebBrowserChrome) {
+BrowserChild::GetWebBrowserChrome(nsIWebBrowserChrome3** aWebBrowserChrome) {
   NS_IF_ADDREF(*aWebBrowserChrome = mWebBrowserChrome);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::SetWebBrowserChrome(nsIWebBrowserChrome3* aWebBrowserChrome) {
+BrowserChild::SetWebBrowserChrome(nsIWebBrowserChrome3* aWebBrowserChrome) {
   mWebBrowserChrome = aWebBrowserChrome;
   return NS_OK;
 }
 
-void TabChild::SendRequestFocus(bool aCanFocus) {
+void BrowserChild::SendRequestFocus(bool aCanFocus) {
   PBrowserChild::SendRequestFocus(aCanFocus);
 }
 
-void TabChild::EnableDisableCommands(const nsAString& aAction,
-                                     nsTArray<nsCString>& aEnabledCommands,
-                                     nsTArray<nsCString>& aDisabledCommands) {
+void BrowserChild::EnableDisableCommands(
+    const nsAString& aAction, nsTArray<nsCString>& aEnabledCommands,
+    nsTArray<nsCString>& aDisabledCommands) {
   PBrowserChild::SendEnableDisableCommands(PromiseFlatString(aAction),
                                            aEnabledCommands, aDisabledCommands);
 }
 
 NS_IMETHODIMP
-TabChild::GetTabId(uint64_t* aId) {
+BrowserChild::GetTabId(uint64_t* aId) {
   *aId = GetTabId();
   return NS_OK;
 }
 
-void TabChild::SetTabId(const TabId& aTabId) {
+void BrowserChild::SetTabId(const TabId& aTabId) {
   MOZ_ASSERT(mUniqueId == 0);
 
   mUniqueId = aTabId;
-  NestedTabChildMap()[mUniqueId] = this;
+  NestedBrowserChildMap()[mUniqueId] = this;
 }
 
-bool TabChild::DoSendBlockingMessage(JSContext* aCx, const nsAString& aMessage,
-                                     StructuredCloneData& aData,
-                                     JS::Handle<JSObject*> aCpows,
-                                     nsIPrincipal* aPrincipal,
-                                     nsTArray<StructuredCloneData>* aRetVal,
-                                     bool aIsSync) {
+bool BrowserChild::DoSendBlockingMessage(
+    JSContext* aCx, const nsAString& aMessage, StructuredCloneData& aData,
+    JS::Handle<JSObject*> aCpows, nsIPrincipal* aPrincipal,
+    nsTArray<StructuredCloneData>* aRetVal, bool aIsSync) {
   ClonedMessageData data;
   if (!BuildClonedMessageDataForChild(Manager(), aData, data)) {
     return false;
   }
   InfallibleTArray<CpowEntry> cpows;
   if (aCpows) {
     jsipc::CPOWManager* mgr = Manager()->GetCPOWManager();
     if (!mgr || !mgr->Wrap(aCx, aCpows, &cpows)) {
@@ -2865,20 +2875,21 @@ bool TabChild::DoSendBlockingMessage(JSC
     return SendSyncMessage(PromiseFlatString(aMessage), data, cpows,
                            Principal(aPrincipal), aRetVal);
   }
 
   return SendRpcMessage(PromiseFlatString(aMessage), data, cpows,
                         Principal(aPrincipal), aRetVal);
 }
 
-nsresult TabChild::DoSendAsyncMessage(JSContext* aCx, const nsAString& aMessage,
-                                      StructuredCloneData& aData,
-                                      JS::Handle<JSObject*> aCpows,
-                                      nsIPrincipal* aPrincipal) {
+nsresult BrowserChild::DoSendAsyncMessage(JSContext* aCx,
+                                          const nsAString& aMessage,
+                                          StructuredCloneData& aData,
+                                          JS::Handle<JSObject*> aCpows,
+                                          nsIPrincipal* aPrincipal) {
   ClonedMessageData data;
   if (!BuildClonedMessageDataForChild(Manager(), aData, data)) {
     return NS_ERROR_DOM_DATA_CLONE_ERR;
   }
   InfallibleTArray<CpowEntry> cpows;
   if (aCpows) {
     jsipc::CPOWManager* mgr = Manager()->GetCPOWManager();
     if (!mgr || !mgr->Wrap(aCx, aCpows, &cpows)) {
@@ -2888,60 +2899,60 @@ nsresult TabChild::DoSendAsyncMessage(JS
   if (!SendAsyncMessage(PromiseFlatString(aMessage), cpows,
                         Principal(aPrincipal), data)) {
     return NS_ERROR_UNEXPECTED;
   }
   return NS_OK;
 }
 
 /* static */
-nsTArray<RefPtr<TabChild>> TabChild::GetAll() {
-  StaticMutexAutoLock lock(sTabChildrenMutex);
-
-  nsTArray<RefPtr<TabChild>> list;
-  if (!sTabChildren) {
+nsTArray<RefPtr<BrowserChild>> BrowserChild::GetAll() {
+  StaticMutexAutoLock lock(sBrowserChildrenMutex);
+
+  nsTArray<RefPtr<BrowserChild>> list;
+  if (!sBrowserChildren) {
     return list;
   }
 
-  for (auto iter = sTabChildren->Iter(); !iter.Done(); iter.Next()) {
+  for (auto iter = sBrowserChildren->Iter(); !iter.Done(); iter.Next()) {
     list.AppendElement(iter.Data());
   }
 
   return list;
 }
 
-TabChild* TabChild::GetFrom(PresShell* aPresShell) {
+BrowserChild* BrowserChild::GetFrom(PresShell* aPresShell) {
   Document* doc = aPresShell->GetDocument();
   if (!doc) {
     return nullptr;
   }
   nsCOMPtr<nsIDocShell> docShell(doc->GetDocShell());
   return GetFrom(docShell);
 }
 
-TabChild* TabChild::GetFrom(layers::LayersId aLayersId) {
-  StaticMutexAutoLock lock(sTabChildrenMutex);
-  if (!sTabChildren) {
+BrowserChild* BrowserChild::GetFrom(layers::LayersId aLayersId) {
+  StaticMutexAutoLock lock(sBrowserChildrenMutex);
+  if (!sBrowserChildren) {
     return nullptr;
   }
-  return sTabChildren->Get(uint64_t(aLayersId));
+  return sBrowserChildren->Get(uint64_t(aLayersId));
 }
 
-void TabChild::DidComposite(mozilla::layers::TransactionId aTransactionId,
-                            const TimeStamp& aCompositeStart,
-                            const TimeStamp& aCompositeEnd) {
+void BrowserChild::DidComposite(mozilla::layers::TransactionId aTransactionId,
+                                const TimeStamp& aCompositeStart,
+                                const TimeStamp& aCompositeEnd) {
   MOZ_ASSERT(mPuppetWidget);
   RefPtr<LayerManager> lm = mPuppetWidget->GetLayerManager();
   MOZ_ASSERT(lm);
 
   lm->DidComposite(aTransactionId, aCompositeStart, aCompositeEnd);
 }
 
-void TabChild::DidRequestComposite(const TimeStamp& aCompositeReqStart,
-                                   const TimeStamp& aCompositeReqEnd) {
+void BrowserChild::DidRequestComposite(const TimeStamp& aCompositeReqStart,
+                                       const TimeStamp& aCompositeReqEnd) {
   nsCOMPtr<nsIDocShell> docShellComPtr = do_GetInterface(WebNavigation());
   if (!docShellComPtr) {
     return;
   }
 
   nsDocShell* docShell = static_cast<nsDocShell*>(docShellComPtr.get());
   RefPtr<TimelineConsumers> timelines = TimelineConsumers::Get();
 
@@ -2954,56 +2965,56 @@ void TabChild::DidRequestComposite(const
         docShell, "CompositeForwardTransaction", aCompositeReqStart,
         MarkerTracingType::START, MarkerStackRequest::NO_STACK);
     timelines->AddMarkerForDocShell(docShell, "CompositeForwardTransaction",
                                     aCompositeReqEnd, MarkerTracingType::END,
                                     MarkerStackRequest::NO_STACK);
   }
 }
 
-void TabChild::ClearCachedResources() {
+void BrowserChild::ClearCachedResources() {
   MOZ_ASSERT(mPuppetWidget);
   RefPtr<LayerManager> lm = mPuppetWidget->GetLayerManager();
   MOZ_ASSERT(lm);
 
   lm->ClearCachedResources();
 }
 
-void TabChild::InvalidateLayers() {
+void BrowserChild::InvalidateLayers() {
   MOZ_ASSERT(mPuppetWidget);
   RefPtr<LayerManager> lm = mPuppetWidget->GetLayerManager();
   MOZ_ASSERT(lm);
 
   FrameLayerBuilder::InvalidateAllLayers(lm);
 }
 
-void TabChild::SchedulePaint() {
+void BrowserChild::SchedulePaint() {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   if (!docShell) {
     return;
   }
 
-  // We don't use TabChildBase::GetPresShell() here because that would create
-  // a content viewer if one doesn't exist yet. Creating a content viewer can
-  // cause JS to run, which we want to avoid. nsIDocShell::GetPresShell
+  // We don't use BrowserChildBase::GetPresShell() here because that would
+  // create a content viewer if one doesn't exist yet. Creating a content viewer
+  // can cause JS to run, which we want to avoid. nsIDocShell::GetPresShell
   // returns null if no content viewer exists yet.
   if (RefPtr<PresShell> presShell = docShell->GetPresShell()) {
     if (nsIFrame* root = presShell->GetRootFrame()) {
       root->SchedulePaint();
     }
   }
 }
 
-void TabChild::ReinitRendering() {
+void BrowserChild::ReinitRendering() {
   MOZ_ASSERT(mLayersId.IsValid());
 
   // Before we establish a new PLayerTransaction, we must connect our layer tree
   // id, CompositorBridge, and the widget compositor all together again.
-  // Normally this happens in BrowserParent before TabChild is given rendering
-  // information.
+  // Normally this happens in BrowserParent before BrowserChild is given
+  // rendering information.
   //
   // In this case, we will send a sync message to our BrowserParent, which in
   // turn will send a sync message to the Compositor of the widget owning this
   // tab. This guarantees the correct association is in place before our
   // PLayerTransaction constructor message arrives on the cross-process
   // compositor bridge.
   CompositorOptions options;
   SendEnsureLayersConnected(&options);
@@ -3029,17 +3040,17 @@ void TabChild::ReinitRendering() {
   RefPtr<LayerManager> lm = mPuppetWidget->GetLayerManager();
   MOZ_ASSERT(lm);
   lm->SetLayersObserverEpoch(mLayersObserverEpoch);
 
   nsCOMPtr<Document> doc(GetTopLevelDocument());
   doc->NotifyLayerManagerRecreated();
 }
 
-void TabChild::ReinitRenderingForDeviceReset() {
+void BrowserChild::ReinitRenderingForDeviceReset() {
   InvalidateLayers();
 
   RefPtr<LayerManager> lm = mPuppetWidget->GetLayerManager();
   if (WebRenderLayerManager* wlm = lm->AsWebRenderLayerManager()) {
     wlm->DoDestroy(/* aIsSync */ true);
   } else if (ClientLayerManager* clm = lm->AsClientLayerManager()) {
     if (ShadowLayerForwarder* fwd = clm->AsShadowForwarder()) {
       // Force the LayerTransactionChild to synchronously shutdown. It is
@@ -3054,42 +3065,43 @@ void TabChild::ReinitRenderingForDeviceR
     }
   }
 
   // Proceed with destroying and recreating the layer manager.
   ReinitRendering();
 }
 
 NS_IMETHODIMP
-TabChild::OnShowTooltip(int32_t aXCoords, int32_t aYCoords,
-                        const nsAString& aTipText, const nsAString& aTipDir) {
+BrowserChild::OnShowTooltip(int32_t aXCoords, int32_t aYCoords,
+                            const nsAString& aTipText,
+                            const nsAString& aTipDir) {
   nsString str(aTipText);
   nsString dir(aTipDir);
   SendShowTooltip(aXCoords, aYCoords, str, dir);
   return NS_OK;
 }
 
 NS_IMETHODIMP
-TabChild::OnHideTooltip() {
+BrowserChild::OnHideTooltip() {
   SendHideTooltip();
   return NS_OK;
 }
 
-mozilla::ipc::IPCResult TabChild::RecvRequestNotifyAfterRemotePaint() {
+mozilla::ipc::IPCResult BrowserChild::RecvRequestNotifyAfterRemotePaint() {
   // Get the CompositorBridgeChild instance for this content thread.
   CompositorBridgeChild* compositor = CompositorBridgeChild::Get();
 
   // Tell the CompositorBridgeChild that, when it gets a RemotePaintIsReady
   // message that it should forward it us so that we can bounce it to our
   // BrowserParent.
   compositor->RequestNotifyAfterRemotePaint(this);
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvUIResolutionChanged(
+mozilla::ipc::IPCResult BrowserChild::RecvUIResolutionChanged(
     const float& aDpi, const int32_t& aRounding, const double& aScale) {
   ScreenIntSize oldScreenSize = GetInnerSize();
   if (aDpi > 0) {
     mPuppetWidget->UpdateBackingScaleCache(aDpi, aRounding, aScale);
   }
   nsCOMPtr<Document> document(GetTopLevelDocument());
   RefPtr<nsPresContext> presContext = document->GetPresContext();
   if (presContext) {
@@ -3106,101 +3118,102 @@ mozilla::ipc::IPCResult TabChild::RecvUI
     nsCOMPtr<nsIBaseWindow> baseWin = do_QueryInterface(WebNavigation());
     baseWin->SetPositionAndSize(0, 0, screenSize.width, screenSize.height,
                                 nsIBaseWindow::eRepaint);
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvThemeChanged(
+mozilla::ipc::IPCResult BrowserChild::RecvThemeChanged(
     nsTArray<LookAndFeelInt>&& aLookAndFeelIntCache) {
   LookAndFeel::SetIntCache(aLookAndFeelIntCache);
   nsCOMPtr<Document> document(GetTopLevelDocument());
   RefPtr<nsPresContext> presContext = document->GetPresContext();
   if (presContext) {
     presContext->ThemeChanged();
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvAwaitLargeAlloc() {
+mozilla::ipc::IPCResult BrowserChild::RecvAwaitLargeAlloc() {
   mAwaitingLA = true;
   return IPC_OK();
 }
 
-bool TabChild::IsAwaitingLargeAlloc() { return mAwaitingLA; }
-
-bool TabChild::StopAwaitingLargeAlloc() {
+bool BrowserChild::IsAwaitingLargeAlloc() { return mAwaitingLA; }
+
+bool BrowserChild::StopAwaitingLargeAlloc() {
   bool awaiting = mAwaitingLA;
   mAwaitingLA = false;
   return awaiting;
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSetWindowName(const nsString& aName) {
+mozilla::ipc::IPCResult BrowserChild::RecvSetWindowName(const nsString& aName) {
   nsCOMPtr<nsIDocShellTreeItem> item = do_QueryInterface(WebNavigation());
   if (item) {
     item->SetName(aName);
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvAllowScriptsToClose() {
+mozilla::ipc::IPCResult BrowserChild::RecvAllowScriptsToClose() {
   nsCOMPtr<nsPIDOMWindowOuter> window = do_GetInterface(WebNavigation());
   if (window) {
     nsGlobalWindowOuter::Cast(window)->AllowScriptsToClose();
   }
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSetOriginAttributes(
+mozilla::ipc::IPCResult BrowserChild::RecvSetOriginAttributes(
     const OriginAttributes& aOriginAttributes) {
   nsCOMPtr<nsIDocShell> docShell = do_GetInterface(WebNavigation());
   nsDocShell::Cast(docShell)->SetOriginAttributes(aOriginAttributes);
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvSetWidgetNativeData(
+mozilla::ipc::IPCResult BrowserChild::RecvSetWidgetNativeData(
     const WindowsHandle& aWidgetNativeData) {
   mWidgetNativeData = aWidgetNativeData;
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult TabChild::RecvGetContentBlockingLog(
+mozilla::ipc::IPCResult BrowserChild::RecvGetContentBlockingLog(
     GetContentBlockingLogResolver&& aResolve) {
   bool success = false;
   nsAutoCString result;
 
   if (nsCOMPtr<Document> doc = GetTopLevelDocument()) {
     result = doc->GetContentBlockingLog()->Stringify();
     success = true;
   }
 
   aResolve(Tuple<const nsCString&, const bool&>(result, success));
   return IPC_OK();
 }
 
-mozilla::plugins::PPluginWidgetChild* TabChild::AllocPPluginWidgetChild() {
+mozilla::plugins::PPluginWidgetChild* BrowserChild::AllocPPluginWidgetChild() {
 #ifdef XP_WIN
   return new mozilla::plugins::PluginWidgetChild();
 #else
   MOZ_ASSERT_UNREACHABLE("AllocPPluginWidgetChild only supports Windows");
   return nullptr;
 #endif
 }
 
-bool TabChild::DeallocPPluginWidgetChild(
+bool BrowserChild::DeallocPPluginWidgetChild(
     mozilla::plugins::PPluginWidgetChild* aActor) {
   delete aActor;
   return true;
 }
 
 #ifdef XP_WIN
-nsresult TabChild::CreatePluginWidget(nsIWidget* aParent, nsIWidget** aOut) {
+nsresult BrowserChild::CreatePluginWidget(nsIWidget* aParent,
+                                          nsIWidget** aOut) {
   *aOut = nullptr;
   mozilla::plugins::PluginWidgetChild* child =
       static_cast<mozilla::plugins::PluginWidgetChild*>(
           SendPPluginWidgetConstructor());
   if (!child) {
     NS_ERROR("couldn't create PluginWidgetChild");
     return NS_ERROR_UNEXPECTED;
   }
@@ -3221,123 +3234,125 @@ nsresult TabChild::CreatePluginWidget(ns
   if (NS_FAILED(rv)) {
     NS_WARNING("Creating native plugin widget on the chrome side failed.");
   }
   pluginWidget.forget(aOut);
   return rv;
 }
 #endif  // XP_WIN
 
-PPaymentRequestChild* TabChild::AllocPPaymentRequestChild() {
+PPaymentRequestChild* BrowserChild::AllocPPaymentRequestChild() {
   MOZ_CRASH(
       "We should never be manually allocating PPaymentRequestChild actors");
   return nullptr;
 }
 
-bool TabChild::DeallocPPaymentRequestChild(PPaymentRequestChild* actor) {
+bool BrowserChild::DeallocPPaymentRequestChild(PPaymentRequestChild* actor) {
   delete actor;
   return true;
 }
 
-PWindowGlobalChild* TabChild::AllocPWindowGlobalChild(const WindowGlobalInit&) {
+PWindowGlobalChild* BrowserChild::AllocPWindowGlobalChild(
+    const WindowGlobalInit&) {
   MOZ_CRASH("We should never be manually allocating PWindowGlobalChild actors");
   return nullptr;
 }
 
-bool TabChild::DeallocPWindowGlobalChild(PWindowGlobalChild* aActor) {
+bool BrowserChild::DeallocPWindowGlobalChild(PWindowGlobalChild* aActor) {
   // This reference was added in WindowGlobalChild::Create.
   static_cast<WindowGlobalChild*>(aActor)->Release();
   return true;
 }
 
-PBrowserBridgeChild* TabChild::AllocPBrowserBridgeChild(const nsString&,
-                                                        const nsString&,
-                                                        BrowsingContext*,
-                                                        const uint32_t&) {
+PBrowserBridgeChild* BrowserChild::AllocPBrowserBridgeChild(const nsString&,
+                                                            const nsString&,
+                                                            BrowsingContext*,
+                                                            const uint32_t&) {
   MOZ_CRASH(
       "We should never be manually allocating PBrowserBridgeChild actors");
   return nullptr;
 }
 
-bool TabChild::DeallocPBrowserBridgeChild(PBrowserBridgeChild* aActor) {
+bool BrowserChild::DeallocPBrowserBridgeChild(PBrowserBridgeChild* aActor) {
   // This reference was added in BrowserBridgeChild::Create.
   static_cast<BrowserBridgeChild*>(aActor)->Release();
   return true;
 }
 
-ScreenIntSize TabChild::GetInnerSize() {
+ScreenIntSize BrowserChild::GetInnerSize() {
   LayoutDeviceIntSize innerSize =
       RoundedToInt(mUnscaledInnerSize * mPuppetWidget->GetDefaultScale());
   return ViewAs<ScreenPixel>(
       innerSize, PixelCastJustification::LayoutDeviceIsScreenForTabDims);
 };
 
-ScreenIntRect TabChild::GetOuterRect() {
+ScreenIntRect BrowserChild::GetOuterRect() {
   LayoutDeviceIntRect outerRect =
       RoundedToInt(mUnscaledOuterRect * mPuppetWidget->GetDefaultScale());
   return ViewAs<ScreenPixel>(
       outerRect, PixelCastJustification::LayoutDeviceIsScreenForTabDims);
 }
 
-void TabChild::PaintWhileInterruptingJS(
+void BrowserChild::PaintWhileInterruptingJS(
     const layers::LayersObserverEpoch& aEpoch, bool aForceRepaint) {
   if (!IPCOpen() || !mPuppetWidget || !mPuppetWidget->HasLayerManager()) {
     // Don't bother doing anything now. Better to wait until we receive the
     // message on the PContent channel.
     return;
   }
 
   nsAutoScriptBlocker scriptBlocker;
   RecvRenderLayers(true /* aEnabled */, aForceRepaint, aEpoch);
 }
 
-void TabChild::BeforeUnloadAdded() {
+void BrowserChild::BeforeUnloadAdded() {
   // Don't bother notifying the parent if we don't have an IPC link open.
   if (mBeforeUnloadListeners == 0 && IPCOpen()) {
     SendSetHasBeforeUnload(true);
   }
 
   mBeforeUnloadListeners++;
   MOZ_ASSERT(mBeforeUnloadListeners >= 0);
 }
 
-void TabChild::BeforeUnloadRemoved() {
+void BrowserChild::BeforeUnloadRemoved() {
   mBeforeUnloadListeners--;
   MOZ_ASSERT(mBeforeUnloadListeners >= 0);
 
   // Don't bother notifying the parent if we don't have an IPC link open.
   if (mBeforeUnloadListeners == 0 && IPCOpen()) {
     SendSetHasBeforeUnload(false);
   }
 }
 
-mozilla::dom::TabGroup* TabChild::TabGroup() { return mTabGroup; }
-
-nsresult TabChild::GetHasSiblings(bool* aHasSiblings) {
+mozilla::dom::TabGroup* BrowserChild::TabGroup() { return mTabGroup; }
+
+nsresult BrowserChild::GetHasSiblings(bool* aHasSiblings) {
   *aHasSiblings = mHasSiblings;
   return NS_OK;
 }
 
-nsresult TabChild::SetHasSiblings(bool aHasSiblings) {
+nsresult BrowserChild::SetHasSiblings(bool aHasSiblings) {
   mHasSiblings = aHasSiblings;
   return NS_OK;
 }
 
-NS_IMETHODIMP TabChild::OnStateChange(nsIWebProgress* aWebProgress,
-                                      nsIRequest* aRequest,
-                                      uint32_t aStateFlags, nsresult aStatus) {
+NS_IMETHODIMP BrowserChild::OnStateChange(nsIWebProgress* aWebProgress,
+                                          nsIRequest* aRequest,
+                                          uint32_t aStateFlags,
+                                          nsresult aStatus) {
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
-NS_IMETHODIMP TabChild::OnProgressChange(nsIWebProgress* aWebProgress,
-                                         nsIRequest* aRequest,
-                                         int32_t aCurSelfProgress,
-                                         int32_t aMaxSelfProgress,
-                                         int32_t aCurTotalProgress,
-                                         int32_t aMaxTotalProgress) {
+NS_IMETHODIMP BrowserChild::OnProgressChange(nsIWebProgress* aWebProgress,
+                                             nsIRequest* aRequest,
+                                             int32_t aCurSelfProgress,
+                                             int32_t aMaxSelfProgress,
+                                             int32_t aCurTotalProgress,
+                                             int32_t aMaxTotalProgress) {
   if (!IPCOpen()) {
     return NS_OK;
   }
 
   Maybe<WebProgressData> webProgressData;
   RequestData requestData;
 
   nsresult rv = PrepareProgressListenerData(aWebProgress, aRequest,
@@ -3346,25 +3361,27 @@ NS_IMETHODIMP TabChild::OnProgressChange
 
   Unused << SendOnProgressChange(webProgressData, requestData, aCurSelfProgress,
                                  aMaxSelfProgress, aCurTotalProgress,
                                  aMaxTotalProgress);
 
   return NS_OK;
 }
 
-NS_IMETHODIMP TabChild::OnLocationChange(nsIWebProgress* aWebProgress,
-                                         nsIRequest* aRequest,
-                                         nsIURI* aLocation, uint32_t aFlags) {
+NS_IMETHODIMP BrowserChild::OnLocationChange(nsIWebProgress* aWebProgress,
+                                             nsIRequest* aRequest,
+                                             nsIURI* aLocation,
+                                             uint32_t aFlags) {
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
-NS_IMETHODIMP TabChild::OnStatusChange(nsIWebProgress* aWebProgress,
-                                       nsIRequest* aRequest, nsresult aStatus,
-                                       const char16_t* aMessage) {
+NS_IMETHODIMP BrowserChild::OnStatusChange(nsIWebProgress* aWebProgress,
+                                           nsIRequest* aRequest,
+                                           nsresult aStatus,
+                                           const char16_t* aMessage) {
   if (!IPCOpen()) {
     return NS_OK;
   }
 
   Maybe<WebProgressData> webProgressData;
   RequestData requestData;
 
   nsresult rv = PrepareProgressListenerData(aWebProgress, aRequest,
@@ -3374,60 +3391,61 @@ NS_IMETHODIMP TabChild::OnStatusChange(n
 
   const nsString message(aMessage);
 
   Unused << SendOnStatusChange(webProgressData, requestData, aStatus, message);
 
   return NS_OK;
 }
 
-NS_IMETHODIMP TabChild::OnSecurityChange(nsIWebProgress* aWebProgress,
-                                         nsIRequest* aRequest,
-                                         uint32_t aState) {
+NS_IMETHODIMP BrowserChild::OnSecurityChange(nsIWebProgress* aWebProgress,
+                                             nsIRequest* aRequest,
+                                             uint32_t aState) {
   return NS_ERROR_NOT_IMPLEMENTED;
 }
-NS_IMETHODIMP TabChild::OnContentBlockingEvent(nsIWebProgress* aWebProgress,
-                                               nsIRequest* aRequest,
-                                               uint32_t aEvent) {
+NS_IMETHODIMP BrowserChild::OnContentBlockingEvent(nsIWebProgress* aWebProgress,
+                                                   nsIRequest* aRequest,
+                                                   uint32_t aEvent) {
   if (!IPCOpen()) {
     return NS_OK;
   }
 
   Maybe<WebProgressData> webProgressData;
   RequestData requestData;
   nsresult rv = PrepareProgressListenerData(aWebProgress, aRequest,
                                             webProgressData, requestData);
   NS_ENSURE_SUCCESS(rv, rv);
   Unused << SendOnContentBlockingEvent(webProgressData, requestData, aEvent);
 
   return NS_OK;
 }
 
-NS_IMETHODIMP TabChild::OnProgressChange64(nsIWebProgress* aWebProgress,
-                                           nsIRequest* aRequest,
-                                           int64_t aCurSelfProgress,
-                                           int64_t aMaxSelfProgress,
-                                           int64_t aCurTotalProgress,
-                                           int64_t aMaxTotalProgress) {
+NS_IMETHODIMP BrowserChild::OnProgressChange64(nsIWebProgress* aWebProgress,
+                                               nsIRequest* aRequest,
+                                               int64_t aCurSelfProgress,
+                                               int64_t aMaxSelfProgress,
+                                               int64_t aCurTotalProgress,
+                                               int64_t aMaxTotalProgress) {
   // All the events we receive are filtered through an nsBrowserStatusFilter,
   // which accepts ProgressChange64 events, but truncates the progress values to
   // uint32_t and calls OnProgressChange.
   return NS_ERROR_NOT_IMPLEMENTED;
 }
 
-NS_IMETHODIMP TabChild::OnRefreshAttempted(nsIWebProgress* aWebProgress,
-                                           nsIURI* aRefreshURI, int32_t aMillis,
-                                           bool aSameURI, bool* aOut) {
+NS_IMETHODIMP BrowserChild::OnRefreshAttempted(nsIWebProgress* aWebProgress,
+                                               nsIURI* aRefreshURI,
+                                               int32_t aMillis, bool aSameURI,
+                                               bool* aOut) {
   NS_ENSURE_ARG_POINTER(aOut);
   *aOut = true;
 
   return NS_OK;
 }
 
-nsresult TabChild::PrepareProgressListenerData(
+nsresult BrowserChild::PrepareProgressListenerData(
     nsIWebProgress* aWebProgress, nsIRequest* aRequest,
     Maybe<WebProgressData>& aWebProgressData, RequestData& aRequestData) {
   if (aWebProgress) {
     aWebProgressData.emplace();
 
     bool isTopLevel = false;
     nsresult rv = aWebProgress->GetIsTopLevel(&isTopLevel);
     NS_ENSURE_SUCCESS(rv, rv);
@@ -3473,107 +3491,110 @@ nsresult TabChild::PrepareProgressListen
       rv = classifiedChannel->GetMatchedList(matchedList);
       NS_ENSURE_SUCCESS(rv, rv);
       aRequestData.matchedList() = std::move(matchedList);
     }
   }
   return NS_OK;
 }
 
-TabChildMessageManager::TabChildMessageManager(TabChild* aTabChild)
-    : ContentFrameMessageManager(new nsFrameMessageManager(aTabChild)),
-      mTabChild(aTabChild) {}
-
-TabChildMessageManager::~TabChildMessageManager() {}
-
-NS_IMPL_CYCLE_COLLECTION_CLASS(TabChildMessageManager)
-
-NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(TabChildMessageManager,
+BrowserChildMessageManager::BrowserChildMessageManager(
+    BrowserChild* aBrowserChild)
+    : ContentFrameMessageManager(new nsFrameMessageManager(aBrowserChild)),
+      mBrowserChild(aBrowserChild) {}
+
+BrowserChildMessageManager::~BrowserChildMessageManager() {}
+
+NS_IMPL_CYCLE_COLLECTION_CLASS(BrowserChildMessageManager)
+
+NS_IMPL_CYCLE_COLLECTION_UNLINK_BEGIN_INHERITED(BrowserChildMessageManager,
                                                 DOMEventTargetHelper)
   NS_IMPL_CYCLE_COLLECTION_UNLINK(mMessageManager);
-  NS_IMPL_CYCLE_COLLECTION_UNLINK(mTabChild);
+  NS_IMPL_CYCLE_COLLECTION_UNLINK(mBrowserChild);
 NS_IMPL_CYCLE_COLLECTION_UNLINK_END
 
-NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(TabChildMessageManager,
+NS_IMPL_CYCLE_COLLECTION_TRAVERSE_BEGIN_INHERITED(BrowserChildMessageManager,
                                                   DOMEventTargetHelper)
   NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mMessageManager)
-  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mTabChild)
+  NS_IMPL_CYCLE_COLLECTION_TRAVERSE(mBrowserChild)
 NS_IMPL_CYCLE_COLLECTION_TRAVERSE_END
 
-NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(TabChildMessageManager)
+NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(BrowserChildMessageManager)
   NS_INTERFACE_MAP_ENTRY(nsIMessageSender)
   NS_INTERFACE_MAP_ENTRY(ContentFrameMessageManager)
   NS_INTERFACE_MAP_ENTRY(nsISupportsWeakReference)
 NS_INTERFACE_MAP_END_INHERITING(DOMEventTargetHelper)
 
-NS_IMPL_ADDREF_INHERITED(TabChildMessageManager, DOMEventTargetHelper)
-NS_IMPL_RELEASE_INHERITED(TabChildMessageManager, DOMEventTargetHelper)
-
-JSObject* TabChildMessageManager::WrapObject(
+NS_IMPL_ADDREF_INHERITED(BrowserChildMessageManager, DOMEventTargetHelper)
+NS_IMPL_RELEASE_INHERITED(BrowserChildMessageManager, DOMEventTargetHelper)
+
+JSObject* BrowserChildMessageManager::WrapObject(
     JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
   return ContentFrameMessageManager_Binding::Wrap(aCx, this, aGivenProto);
 }
 
-void TabChildMessageManager::MarkForCC() {
-  if (mTabChild) {
-    mTabChild->MarkScopesForCC();
+void BrowserChildMessageManager::MarkForCC() {
+  if (mBrowserChild) {
+    mBrowserChild->MarkScopesForCC();
   }
   EventListenerManager* elm = GetExistingListenerManager();
   if (elm) {
     elm->MarkForCC();
   }
   MessageManagerGlobal::MarkForCC();
 }
 
-Nullable<WindowProxyHolder> TabChildMessageManager::GetContent(
+Nullable<WindowProxyHolder> BrowserChildMessageManager::GetContent(
     ErrorResult& aError) {
   nsCOMPtr<nsIDocShell> docShell = GetDocShell(aError);
   if (!docShell) {
     return nullptr;
   }
   return WindowProxyHolder(nsDocShell::Cast(docShell)->GetBrowsingContext());
 }
 
-already_AddRefed<nsIDocShell> TabChildMessageManager::GetDocShell(
+already_AddRefed<nsIDocShell> BrowserChildMessageManager::GetDocShell(
     ErrorResult& aError) {
-  if (!mTabChild) {
+  if (!mBrowserChild) {
     aError.Throw(NS_ERROR_NULL_POINTER);
     return nullptr;
   }
-  nsCOMPtr<nsIDocShell> window = do_GetInterface(mTabChild->WebNavigation());
+  nsCOMPtr<nsIDocShell> window =
+      do_GetInterface(mBrowserChild->WebNavigation());
   return window.forget();
 }
 
-already_AddRefed<nsIEventTarget> TabChildMessageManager::GetTabEventTarget() {
+already_AddRefed<nsIEventTarget>
+BrowserChildMessageManager::GetTabEventTarget() {
   nsCOMPtr<nsIEventTarget> target = EventTargetFor(TaskCategory::Other);
   return target.forget();
 }
 
-uint64_t TabChildMessageManager::ChromeOuterWindowID() {
-  if (!mTabChild) {
+uint64_t BrowserChildMessageManager::ChromeOuterWindowID() {
+  if (!mBrowserChild) {
     return 0;
   }
-  return mTabChild->ChromeOuterWindowID();
+  return mBrowserChild->ChromeOuterWindowID();
 }
 
-nsresult TabChildMessageManager::Dispatch(
+nsresult BrowserChildMessageManager::Dispatch(
     TaskCategory aCategory, already_AddRefed<nsIRunnable>&& aRunnable) {
-  if (mTabChild && mTabChild->TabGroup()) {
-    return mTabChild->TabGroup()->Dispatch(aCategory, std::move(aRunnable));
+  if (mBrowserChild && mBrowserChild->TabGroup()) {
+    return mBrowserChild->TabGroup()->Dispatch(aCategory, std::move(aRunnable));
   }
   return DispatcherTrait::Dispatch(aCategory, std::move(aRunnable));
 }
 
-nsISerialEventTarget* TabChildMessageManager::EventTargetFor(
+nsISerialEventTarget* BrowserChildMessageManager::EventTargetFor(
     TaskCategory aCategory) const {
-  if (mTabChild && mTabChild->TabGroup()) {
-    return mTabChild->TabGroup()->EventTargetFor(aCategory);
+  if (mBrowserChild && mBrowserChild->TabGroup()) {
+    return mBrowserChild->TabGroup()->EventTargetFor(aCategory);
   }
   return DispatcherTrait::EventTargetFor(aCategory);
 }
 
-AbstractThread* TabChildMessageManager::AbstractMainThreadFor(
+AbstractThread* BrowserChildMessageManager::AbstractMainThreadFor(
     TaskCategory aCategory) {
-  if (mTabChild && mTabChild->TabGroup()) {
-    return mTabChild->TabGroup()->AbstractMainThreadFor(aCategory);
+  if (mBrowserChild && mBrowserChild->TabGroup()) {
+    return mBrowserChild->TabGroup()->AbstractMainThreadFor(aCategory);
   }
   return DispatcherTrait::AbstractMainThreadFor(aCategory);
 }
rename from dom/ipc/TabChild.h
rename to dom/ipc/BrowserChild.h
--- a/dom/ipc/TabChild.h
+++ b/dom/ipc/BrowserChild.h
@@ -1,16 +1,16 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=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/. */
 
-#ifndef mozilla_dom_TabChild_h
-#define mozilla_dom_TabChild_h
+#ifndef mozilla_dom_BrowserChild_h
+#define mozilla_dom_BrowserChild_h
 
 #include "mozilla/dom/ContentFrameMessageManager.h"
 #include "mozilla/dom/PBrowserChild.h"
 #include "nsIWebNavigation.h"
 #include "nsCOMPtr.h"
 #include "nsAutoPtr.h"
 #include "nsIWebBrowserChrome2.h"
 #include "nsIEmbeddingSiteWindow.h"
@@ -72,33 +72,33 @@ class PCompositorBridgeChild;
 }  // namespace layers
 
 namespace widget {
 struct AutoCacheNativeKeyCommands;
 }  // namespace widget
 
 namespace dom {
 
-class TabChild;
+class BrowserChild;
 class TabGroup;
 class ClonedMessageData;
 class CoalescedMouseData;
 class CoalescedWheelData;
 class RequestData;
 class WebProgressData;
 
-class TabChildMessageManager : public ContentFrameMessageManager,
-                               public nsIMessageSender,
-                               public DispatcherTrait,
-                               public nsSupportsWeakReference {
+class BrowserChildMessageManager : public ContentFrameMessageManager,
+                                   public nsIMessageSender,
+                                   public DispatcherTrait,
+                                   public nsSupportsWeakReference {
  public:
-  explicit TabChildMessageManager(TabChild* aTabChild);
+  explicit BrowserChildMessageManager(BrowserChild* aBrowserChild);
 
   NS_DECL_ISUPPORTS_INHERITED
-  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(TabChildMessageManager,
+  NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(BrowserChildMessageManager,
                                            DOMEventTargetHelper)
 
   void MarkForCC();
 
   JSObject* WrapObject(JSContext* aCx,
                        JS::Handle<JSObject*> aGivenProto) override;
 
   virtual Nullable<WindowProxyHolder> GetContent(ErrorResult& aError) override;
@@ -118,50 +118,51 @@ class TabChildMessageManager : public Co
                             already_AddRefed<nsIRunnable>&& aRunnable) override;
 
   virtual nsISerialEventTarget* EventTargetFor(
       mozilla::TaskCategory aCategory) const override;
 
   virtual AbstractThread* AbstractMainThreadFor(
       mozilla::TaskCategory aCategory) override;
 
-  RefPtr<TabChild> mTabChild;
+  RefPtr<BrowserChild> mBrowserChild;
 
  protected:
-  ~TabChildMessageManager();
+  ~BrowserChildMessageManager();
 };
 
 class ContentListener final : public nsIDOMEventListener {
  public:
-  explicit ContentListener(TabChild* aTabChild) : mTabChild(aTabChild) {}
+  explicit ContentListener(BrowserChild* aBrowserChild)
+      : mBrowserChild(aBrowserChild) {}
   NS_DECL_ISUPPORTS
   NS_DECL_NSIDOMEVENTLISTENER
  protected:
   ~ContentListener() {}
-  TabChild* mTabChild;
+  BrowserChild* mBrowserChild;
 };
 
 // This is base clase which helps to share Viewport and touch related
 // functionality between b2g/android FF/embedlite clients implementation.
 // It make sense to place in this class all helper functions, and functionality
 // which could be shared between Cross-process/Cross-thread implmentations.
-class TabChildBase : public nsISupports,
-                     public nsMessageManagerScriptExecutor,
-                     public ipc::MessageManagerCallback {
+class BrowserChildBase : public nsISupports,
+                         public nsMessageManagerScriptExecutor,
+                         public ipc::MessageManagerCallback {
  protected:
   typedef mozilla::widget::PuppetWidget PuppetWidget;
 
  public:
-  TabChildBase();
+  BrowserChildBase();
 
   NS_DECL_CYCLE_COLLECTING_ISUPPORTS
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(TabChildBase)
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS(BrowserChildBase)
 
   JSObject* WrapObject(JSContext* aCx, JS::Handle<JSObject*> aGivenProto) {
-    return mTabChildMessageManager->WrapObject(aCx, aGivenProto);
+    return mBrowserChildMessageManager->WrapObject(aCx, aGivenProto);
   }
 
   virtual nsIWebNavigation* WebNavigation() const = 0;
   virtual PuppetWidget* WebWidget() = 0;
   nsIPrincipal* GetPrincipal() { return mPrincipal; }
   virtual bool DoUpdateZoomConstraints(
       const uint32_t& aPresShellId,
       const mozilla::layers::ScrollableLayerGuid::ViewID& aViewId,
@@ -171,86 +172,84 @@ class TabChildBase : public nsISupports,
 
   // Get the Document for the top-level window in this tab.
   already_AddRefed<Document> GetTopLevelDocument() const;
 
   // Get the pres-shell of the document for the top-level window in this tab.
   PresShell* GetTopLevelPresShell() const;
 
  protected:
-  virtual ~TabChildBase();
+  virtual ~BrowserChildBase();
 
   // Wraps up a JSON object as a structured clone and sends it to the browser
   // chrome script.
   //
   // XXX/bug 780335: Do the work the browser chrome script does in C++ instead
   // so we don't need things like this.
   void DispatchMessageManagerMessage(const nsAString& aMessageName,
                                      const nsAString& aJSONData);
 
   void ProcessUpdateFrame(const mozilla::layers::RepaintRequest& aRequest);
 
   bool UpdateFrameHandler(const mozilla::layers::RepaintRequest& aRequest);
 
  protected:
-  RefPtr<TabChildMessageManager> mTabChildMessageManager;
+  RefPtr<BrowserChildMessageManager> mBrowserChildMessageManager;
   nsCOMPtr<nsIWebBrowserChrome3> mWebBrowserChrome;
 };
 
-class TabChild final : public TabChildBase,
-                       public PBrowserChild,
-                       public nsIWebBrowserChrome2,
-                       public nsIEmbeddingSiteWindow,
-                       public nsIWebBrowserChromeFocus,
-                       public nsIInterfaceRequestor,
-                       public nsIWindowProvider,
-                       public nsSupportsWeakReference,
-                       public nsIBrowserChild,
-                       public nsIObserver,
-                       public nsIWebProgressListener2,
-                       public TabContext,
-                       public nsITooltipListener,
-                       public mozilla::ipc::IShmemAllocator {
+class BrowserChild final : public BrowserChildBase,
+                           public PBrowserChild,
+                           public nsIWebBrowserChrome2,
+                           public nsIEmbeddingSiteWindow,
+                           public nsIWebBrowserChromeFocus,
+                           public nsIInterfaceRequestor,
+                           public nsIWindowProvider,
+                           public nsSupportsWeakReference,
+                           public nsIBrowserChild,
+                           public nsIObserver,
+                           public nsIWebProgressListener2,
+                           public TabContext,
+                           public nsITooltipListener,
+                           public mozilla::ipc::IShmemAllocator {
   typedef mozilla::dom::ClonedMessageData ClonedMessageData;
   typedef mozilla::dom::CoalescedMouseData CoalescedMouseData;
   typedef mozilla::dom::CoalescedWheelData CoalescedWheelData;
   typedef mozilla::layers::APZEventState APZEventState;
   typedef mozilla::layers::SetAllowedTouchBehaviorCallback
       SetAllowedTouchBehaviorCallback;
   typedef mozilla::layers::TouchBehaviorFlags TouchBehaviorFlags;
 
   friend class PBrowserChild;
 
  public:
   /**
-   * Find TabChild of aTabId in the same content process of the
+   * Find BrowserChild of aTabId in the same content process of the
    * caller.
    */
-  static already_AddRefed<TabChild> FindTabChild(const TabId& aTabId);
+  static already_AddRefed<BrowserChild> FindBrowserChild(const TabId& aTabId);
 
-  // Return a list of all active TabChildren.
-  static nsTArray<RefPtr<TabChild>> GetAll();
+  // Return a list of all active BrowserChildren.
+  static nsTArray<RefPtr<BrowserChild>> GetAll();
 
  public:
   /**
-   * Create a new TabChild object.
+   * Create a new BrowserChild object.
    */
-  TabChild(ContentChild* aManager, const TabId& aTabId, TabGroup* aTabGroup,
-           const TabContext& aContext, BrowsingContext* aBrowsingContext,
-           uint32_t aChromeFlags);
+  BrowserChild(ContentChild* aManager, const TabId& aTabId, TabGroup* aTabGroup,
+               const TabContext& aContext, BrowsingContext* aBrowsingContext,
+               uint32_t aChromeFlags);
 
   nsresult Init(mozIDOMWindowProxy* aParent);
 
-  /** Return a TabChild with the given attributes. */
-  static already_AddRefed<TabChild> Create(ContentChild* aManager,
-                                           const TabId& aTabId,
-                                           const TabId& aSameTabGroupAs,
-                                           const TabContext& aContext,
-                                           BrowsingContext* aBrowsingContext,
-                                           uint32_t aChromeFlags);
+  /** Return a BrowserChild with the given attributes. */
+  static already_AddRefed<BrowserChild> Create(
+      ContentChild* aManager, const TabId& aTabId, const TabId& aSameTabGroupAs,
+      const TabContext& aContext, BrowsingContext* aBrowsingContext,
+      uint32_t aChromeFlags);
 
   // Let managees query if it is safe to send messages.
   bool IsDestroyed() const { return mDestroyed; }
 
   const TabId GetTabId() const {
     MOZ_ASSERT(mUniqueId != 0);
     return mUniqueId;
   }
@@ -263,22 +262,23 @@ class TabChild final : public TabChildBa
   NS_DECL_NSIINTERFACEREQUESTOR
   NS_DECL_NSIWINDOWPROVIDER
   NS_DECL_NSIBROWSERCHILD
   NS_DECL_NSIOBSERVER
   NS_DECL_NSIWEBPROGRESSLISTENER
   NS_DECL_NSIWEBPROGRESSLISTENER2
   NS_DECL_NSITOOLTIPLISTENER
 
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(TabChild, TabChildBase)
+  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_CLASS_INHERITED(BrowserChild,
+                                                         BrowserChildBase)
 
   FORWARD_SHMEM_ALLOCATOR_TO(PBrowserChild)
 
-  TabChildMessageManager* GetMessageManager() {
-    return mTabChildMessageManager;
+  BrowserChildMessageManager* GetMessageManager() {
+    return mBrowserChildMessageManager;
   }
 
   /**
    * MessageManagerCallback methods that we override.
    */
   virtual bool DoSendBlockingMessage(JSContext* aCx, const nsAString& aMessage,
                                      StructuredCloneData& aData,
                                      JS::Handle<JSObject*> aCpows,
@@ -462,49 +462,49 @@ class TabChild final : public TabChildBa
 
   void NotifyPainted();
 
   void RequestEditCommands(nsIWidget::NativeKeyBindingsType aType,
                            const WidgetKeyboardEvent& aEvent,
                            nsTArray<CommandInt>& aCommands);
 
   /**
-   * Signal to this TabChild that it should be made visible:
+   * Signal to this BrowserChild that it should be made visible:
    * activated widget, retained layer tree, etc.  (Respectively,
    * made not visible.)
    */
   void MakeVisible();
   void MakeHidden();
   bool IsVisible();
 
   ContentChild* Manager() const { return mManager; }
 
-  static inline TabChild* GetFrom(nsIDocShell* aDocShell) {
+  static inline BrowserChild* GetFrom(nsIDocShell* aDocShell) {
     if (!aDocShell) {
       return nullptr;
     }
 
-    nsCOMPtr<nsIBrowserChild> tc = aDocShell->GetTabChild();
-    return static_cast<TabChild*>(tc.get());
+    nsCOMPtr<nsIBrowserChild> tc = aDocShell->GetBrowserChild();
+    return static_cast<BrowserChild*>(tc.get());
   }
 
-  static inline TabChild* GetFrom(mozIDOMWindow* aWindow) {
+  static inline BrowserChild* GetFrom(mozIDOMWindow* aWindow) {
     nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(aWindow);
     nsCOMPtr<nsIDocShell> docShell = do_QueryInterface(webNav);
     return GetFrom(docShell);
   }
 
-  static inline TabChild* GetFrom(mozIDOMWindowProxy* aWindow) {
+  static inline BrowserChild* GetFrom(mozIDOMWindowProxy* aWindow) {
     nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(aWindow);
     nsCOMPtr<nsIDocShell> docShell = do_QueryInterface(webNav);
     return GetFrom(docShell);
   }
 
-  static TabChild* GetFrom(PresShell* aPresShell);
-  static TabChild* GetFrom(layers::LayersId aLayersId);
+  static BrowserChild* GetFrom(PresShell* aPresShell);
+  static BrowserChild* GetFrom(layers::LayersId aLayersId);
 
   layers::LayersId GetLayersId() { return mLayersId; }
   Maybe<bool> IsLayersConnected() { return mLayersConnected; }
 
   void DidComposite(mozilla::layers::TransactionId aTransactionId,
                     const TimeStamp& aCompositeStart,
                     const TimeStamp& aCompositeEnd);
 
@@ -512,17 +512,17 @@ class TabChild final : public TabChildBa
                            const TimeStamp& aCompositeReqEnd);
 
   void ClearCachedResources();
   void InvalidateLayers();
   void SchedulePaint();
   void ReinitRendering();
   void ReinitRenderingForDeviceReset();
 
-  static inline TabChild* GetFrom(nsIDOMWindow* aWindow) {
+  static inline BrowserChild* GetFrom(nsIDOMWindow* aWindow) {
     nsCOMPtr<nsIWebNavigation> webNav = do_GetInterface(aWindow);
     nsCOMPtr<nsIDocShell> docShell = do_QueryInterface(webNav);
     return GetFrom(docShell);
   }
 
   virtual mozilla::ipc::IPCResult RecvUIResolutionChanged(
       const float& aDpi, const int32_t& aRounding,
       const double& aScale) override;
@@ -616,17 +616,17 @@ class TabChild final : public TabChildBa
   layers::LayersObserverEpoch LayersObserverEpoch() const {
     return mLayersObserverEpoch;
   }
 
 #if defined(XP_WIN) && defined(ACCESSIBILITY)
   uintptr_t GetNativeWindowHandle() const { return mNativeWindowHandle; }
 #endif
 
-  // These methods return `true` if this TabChild is currently awaiting a
+  // These methods return `true` if this BrowserChild is currently awaiting a
   // Large-Allocation header.
   bool StopAwaitingLargeAlloc();
   bool IsAwaitingLargeAlloc();
 
   mozilla::dom::TabGroup* TabGroup();
 
 #if defined(ACCESSIBILITY)
   void SetTopLevelDocAccessibleChild(PDocAccessibleChild* aTopLevelChild) {
@@ -636,21 +636,21 @@ class TabChild final : public TabChildBa
   PDocAccessibleChild* GetTopLevelDocAccessibleChild() {
     return mTopLevelDocAccessibleChild;
   }
 #endif
 
   void AddPendingDocShellBlocker();
   void RemovePendingDocShellBlocker();
 
-  // The HANDLE object for the widget this TabChild in.
+  // The HANDLE object for the widget this BrowserChild in.
   WindowsHandle WidgetNativeData() { return mWidgetNativeData; }
 
-  // The transform from the coordinate space of this TabChild to the coordinate
-  // space of the native window its BrowserParent is in.
+  // The transform from the coordinate space of this BrowserChild to the
+  // coordinate space of the native window its BrowserParent is in.
   mozilla::LayoutDeviceToLayoutDeviceMatrix4x4
   GetChildToParentConversionMatrix() const;
 
   // Prepare to dispatch all coalesced mousemove events. We'll move all data
   // in mCoalescedMouseData to a nsDeque; then we start processing them. We
   // can't fetch the coalesced event one by one and dispatch it because we may
   // reentry the event loop and access to the same hashtable. It's called when
   // dispatching some mouse events other than mousemove.
@@ -660,28 +660,28 @@ class TabChild final : public TabChildBa
   void HandleRealMouseButtonEvent(const WidgetMouseEvent& aEvent,
                                   const ScrollableLayerGuid& aGuid,
                                   const uint64_t& aInputBlockId);
 
   static bool HasVisibleTabs() {
     return sVisibleTabs && !sVisibleTabs->IsEmpty();
   }
 
-  // Returns the set of TabChilds that are currently rendering layers. There
-  // can be multiple TabChilds in this state if Firefox has multiple windows
-  // open or is warming tabs up. There can also be zero TabChilds in this
+  // Returns the set of BrowserChilds that are currently rendering layers. There
+  // can be multiple BrowserChilds in this state if Firefox has multiple windows
+  // open or is warming tabs up. There can also be zero BrowserChilds in this
   // state. Note that this function should only be called if HasVisibleTabs()
   // returns true.
-  static const nsTHashtable<nsPtrHashKey<TabChild>>& GetVisibleTabs() {
+  static const nsTHashtable<nsPtrHashKey<BrowserChild>>& GetVisibleTabs() {
     MOZ_ASSERT(HasVisibleTabs());
     return *sVisibleTabs;
   }
 
  protected:
-  virtual ~TabChild();
+  virtual ~BrowserChild();
 
   virtual PWindowGlobalChild* AllocPWindowGlobalChild(
       const WindowGlobalInit& aInit) override;
 
   virtual bool DeallocPWindowGlobalChild(PWindowGlobalChild* aActor) override;
 
   virtual PBrowserBridgeChild* AllocPBrowserBridgeChild(
       const nsString& aName, const nsString& aRemoteType,
@@ -752,17 +752,17 @@ class TabChild final : public TabChildBa
   // @param aIsPreallocated  true if this is called for Preallocated Tab.
   void NotifyTabContextUpdated(bool aIsPreallocated);
 
   // Update the frameType on our docshell.
   void UpdateFrameType();
 
   void ActorDestroy(ActorDestroyReason why) override;
 
-  bool InitTabChildMessageManager();
+  bool InitBrowserChildMessageManager();
 
   void InitRenderingState(
       const TextureFactoryIdentifier& aTextureFactoryIdentifier,
       const layers::LayersId& aLayersId,
       const mozilla::layers::CompositorOptions& aCompositorOptions);
   void InitAPZState();
 
   void DestroyWindow();
@@ -918,17 +918,17 @@ class TabChild final : public TabChildBa
   WindowsHandle mWidgetNativeData;
 
   Maybe<LayoutDeviceToLayoutDeviceMatrix4x4> mChildToParentConversionMatrix;
 
   // This state is used to keep track of the current visible tabs (the ones
   // rendering layers). There may be more than one if there are multiple browser
   // windows open, or tabs are being warmed up. There may be none if this
   // process does not host any visible or warming tabs.
-  static nsTHashtable<nsPtrHashKey<TabChild>>* sVisibleTabs;
+  static nsTHashtable<nsPtrHashKey<BrowserChild>>* sVisibleTabs;
 
-  DISALLOW_EVIL_CONSTRUCTORS(TabChild);
+  DISALLOW_EVIL_CONSTRUCTORS(BrowserChild);
 };
 
 }  // namespace dom
 }  // namespace mozilla
 
-#endif  // mozilla_dom_TabChild_h
+#endif  // mozilla_dom_BrowserChild_h
--- a/dom/ipc/BrowserParent.cpp
+++ b/dom/ipc/BrowserParent.cpp
@@ -81,17 +81,17 @@
 #include "nsPrintfCString.h"
 #include "nsQueryObject.h"
 #include "nsServiceManagerUtils.h"
 #include "nsThreadUtils.h"
 #include "PermissionMessageUtils.h"
 #include "StructuredCloneData.h"
 #include "ColorPickerParent.h"
 #include "FilePickerParent.h"
-#include "TabChild.h"
+#include "BrowserChild.h"
 #include "LoadContext.h"
 #include "nsNetCID.h"
 #include "nsIAuthInformation.h"
 #include "nsIAuthPromptCallback.h"
 #include "nsAuthInformationHolder.h"
 #include "nsICancelable.h"
 #include "gfxPrefs.h"
 #include "gfxUtils.h"
@@ -735,17 +735,17 @@ mozilla::ipc::IPCResult BrowserParent::R
   nsCOMPtr<nsIDocShell> docShell = mFrameElement->OwnerDoc()->GetDocShell();
   NS_ENSURE_TRUE(docShell, IPC_OK());
   nsCOMPtr<nsIDocShellTreeOwner> treeOwner;
   docShell->GetTreeOwner(getter_AddRefs(treeOwner));
   nsCOMPtr<nsIBaseWindow> treeOwnerAsWin = do_QueryInterface(treeOwner);
   NS_ENSURE_TRUE(treeOwnerAsWin, IPC_OK());
 
   // We only care about the parameters that actually changed, see more
-  // details in TabChild::SetDimensions.
+  // details in BrowserChild::SetDimensions.
   int32_t unused;
   int32_t x = aX;
   if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_IGNORE_X) {
     treeOwnerAsWin->GetPosition(&x, &unused);
   }
 
   int32_t y = aY;
   if (aFlags & nsIEmbeddingSiteWindow::DIM_FLAGS_IGNORE_Y) {
@@ -1133,18 +1133,18 @@ void BrowserParent::SendRealMouseEvent(W
   ScrollableLayerGuid guid;
   uint64_t blockId;
   ApzAwareEventRoutingToChild(&guid, &blockId, nullptr);
 
   bool isInputPriorityEventEnabled = Manager()->IsInputPriorityEventEnabled();
 
   if (mIsMouseEnterIntoWidgetEventSuppressed) {
     // In the case that the BrowserParent suppressed the eMouseEnterWidget event
-    // due to its corresponding TabChild wasn't ready to handle it, we have to
-    // resend it when the TabChild is ready.
+    // due to its corresponding BrowserChild wasn't ready to handle it, we have
+    // to resend it when the BrowserChild is ready.
     mIsMouseEnterIntoWidgetEventSuppressed = false;
     WidgetMouseEvent localEvent(aEvent);
     localEvent.mMessage = eMouseEnterIntoWidget;
     DebugOnly<bool> ret =
         isInputPriorityEventEnabled
             ? SendRealMouseButtonEvent(localEvent, guid, blockId)
             : SendNormalPriorityRealMouseButtonEvent(localEvent, guid, blockId);
     NS_WARNING_ASSERTION(
@@ -2582,19 +2582,19 @@ BrowserParent* BrowserParent::GetFrom(ns
     return nullptr;
   }
   RefPtr<nsFrameLoader> frameLoader = loaderOwner->GetFrameLoader();
   return GetFrom(frameLoader);
 }
 
 /*static*/
 TabId BrowserParent::GetTabIdFrom(nsIDocShell* docShell) {
-  nsCOMPtr<nsIBrowserChild> tabChild(TabChild::GetFrom(docShell));
-  if (tabChild) {
-    return static_cast<TabChild*>(tabChild.get())->GetTabId();
+  nsCOMPtr<nsIBrowserChild> browserChild(BrowserChild::GetFrom(docShell));
+  if (browserChild) {
+    return static_cast<BrowserChild*>(browserChild.get())->GetTabId();
   }
   return TabId(0);
 }
 
 RenderFrame* BrowserParent::GetRenderFrame() {
   if (!mRenderFrame.IsInitialized()) {
     return nullptr;
   }
@@ -3284,17 +3284,17 @@ mozilla::ipc::IPCResult BrowserParent::R
   docFrame->InvalidateLayer(DisplayItemType::TYPE_REMOTE);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult BrowserParent::RecvRemoteIsReadyToHandleInputEvents() {
   // When enabling input event prioritization, input events may preempt other
   // normal priority IPC messages. To prevent the input events preempt
   // PBrowserConstructor, we use an IPC 'RemoteIsReadyToHandleInputEvents' to
-  // notify the parent that TabChild is created and ready to handle input
+  // notify the parent that BrowserChild is created and ready to handle input
   // events.
   SetReadyToHandleInputEvents();
   return IPC_OK();
 }
 
 mozilla::plugins::PPluginWidgetParent*
 BrowserParent::AllocPPluginWidgetParent() {
 #ifdef XP_WIN
--- a/dom/ipc/BrowserParent.h
+++ b/dom/ipc/BrowserParent.h
@@ -740,18 +740,18 @@ class BrowserParent final : public PBrow
   // this BrowserParent. This is non-owning to avoid cycles and is managed
   // by the BrowserBridgeParent instance, which has the strong reference
   // to this BrowserParent.
   BrowserBridgeParent* mBrowserBridgeParent;
 
   TabId mTabId;
 
   // When loading a new tab or window via window.open, the child is
-  // responsible for loading the URL it wants into the new TabChild. When the
-  // parent receives the CreateWindow message, though, it sends a LoadURL
+  // responsible for loading the URL it wants into the new BrowserChild. When
+  // the parent receives the CreateWindow message, though, it sends a LoadURL
   // message, usually for about:blank. It's important for the about:blank load
   // to get processed because the Firefox frontend expects every new window to
   // immediately start loading something (see bug 1123090). However, we want
   // the child to process the LoadURL message before it returns from
   // ProvideWindow so that the URL sent from the parent doesn't override the
   // child's URL. This is not possible using our IPC mechanisms. To solve the
   // problem, we skip sending the LoadURL message in the parent and instead
   // return the URL as a result from CreateWindow. The child simulates
@@ -764,26 +764,26 @@ class BrowserParent final : public PBrow
   nsCString mDelayedURL;
 
   // When loading a new tab or window via window.open, we want to ensure that
   // frame scripts for that tab are loaded before any scripts start to run in
   // the window. We can't load the frame scripts the normal way, using
   // separate IPC messages, since they won't be processed by the child until
   // returning to the event loop, which is too late. Instead, we queue up
   // frame scripts that we intend to load and send them as part of the
-  // CreateWindow response. Then TabChild loads them immediately.
+  // CreateWindow response. Then BrowserChild loads them immediately.
   nsTArray<FrameScriptInfo> mDelayedFrameScripts;
 
-  // Cached cursor setting from TabChild.  When the cursor is over the tab,
+  // Cached cursor setting from BrowserChild.  When the cursor is over the tab,
   // it should take this appearance.
   nsCursor mCursor;
   nsCOMPtr<imgIContainer> mCustomCursor;
   uint32_t mCustomCursorHotspotX, mCustomCursorHotspotY;
 
-  // True if the cursor changes from the TabChild should change the widget
+  // True if the cursor changes from the BrowserChild should change the widget
   // cursor.  This happens whenever the cursor is in the tab's region.
   bool mTabSetsCursor;
 
   bool mHasContentOpener;
 
   // When dropping links we perform a roundtrip from
   // Parent (SendRealDragEvent) -> Child -> Parent (RecvDropLinks)
   // and have to ensure that the child did not modify links to be loaded.
@@ -825,34 +825,34 @@ class BrowserParent final : public PBrow
   // Holds the most recent value passed to the RenderLayers function. This
   // does not necessarily mean that the layers have finished rendering
   // and have uploaded - for that, use mHasLayers.
   bool mRenderLayers;
 
   // Whether this is active for the ProcessPriorityManager or not.
   bool mActiveInPriorityManager;
 
-  // True if the compositor has reported that the TabChild has uploaded
+  // True if the compositor has reported that the BrowserChild has uploaded
   // layers.
   bool mHasLayers;
 
   // True if this BrowserParent has had its layer tree sent to the compositor
   // at least once.
   bool mHasPresented;
 
-  // True if at least one window hosted in the TabChild has added a
+  // True if at least one window hosted in the BrowserChild has added a
   // beforeunload event listener.
   bool mHasBeforeUnload;
 
   // True when the remote browser is created and ready to handle input events.
   bool mIsReadyToHandleInputEvents;
 
-  // True if we suppress the eMouseEnterIntoWidget event due to the TabChild was
-  // not ready to handle it. We will resend it when the next time we fire a
-  // mouse event and the TabChild is ready.
+  // True if we suppress the eMouseEnterIntoWidget event due to the BrowserChild
+  // was not ready to handle it. We will resend it when the next time we fire a
+  // mouse event and the BrowserChild is ready.
   bool mIsMouseEnterIntoWidgetEventSuppressed;
 
   // How many record/replay tabs have active docshells in this process.
   static size_t gNumActiveRecordReplayTabs;
 
   // Whether this tab is contributing to gNumActiveRecordReplayTabs.
   bool mIsActiveRecordReplayTab;
 
--- a/dom/ipc/CoalescedMouseData.cpp
+++ b/dom/ipc/CoalescedMouseData.cpp
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=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 "CoalescedMouseData.h"
-#include "TabChild.h"
+#include "BrowserChild.h"
 
 #include "mozilla/PresShell.h"
 
 using namespace mozilla;
 using namespace mozilla::dom;
 
 void CoalescedMouseData::Coalesce(const WidgetMouseEvent& aEvent,
                                   const ScrollableLayerGuid& aGuid,
@@ -63,18 +63,18 @@ bool CoalescedMouseData::CanCoalesce(con
           mCoalescedInputEvent->pointerId == aEvent.pointerId &&
           mCoalescedInputEvent->mButton == aEvent.mButton &&
           mCoalescedInputEvent->mButtons == aEvent.mButtons && mGuid == aGuid &&
           mInputBlockId == aInputBlockId);
 }
 
 void CoalescedMouseMoveFlusher::WillRefresh(mozilla::TimeStamp aTime) {
   MOZ_ASSERT(mRefreshDriver);
-  mTabChild->FlushAllCoalescedMouseData();
-  mTabChild->ProcessPendingCoalescedMouseDataAndDispatchEvents();
+  mBrowserChild->FlushAllCoalescedMouseData();
+  mBrowserChild->ProcessPendingCoalescedMouseDataAndDispatchEvents();
 }
 
 void CoalescedMouseMoveFlusher::StartObserver() {
   nsRefreshDriver* refreshDriver = GetRefreshDriver();
   if (mRefreshDriver && mRefreshDriver == refreshDriver) {
     // Nothing to do if we already added an observer and it's same refresh
     // driver.
     return;
@@ -89,15 +89,15 @@ void CoalescedMouseMoveFlusher::StartObs
 void CoalescedMouseMoveFlusher::RemoveObserver() {
   if (mRefreshDriver) {
     mRefreshDriver->RemoveRefreshObserver(this, FlushType::Event);
     mRefreshDriver = nullptr;
   }
 }
 
 nsRefreshDriver* CoalescedMouseMoveFlusher::GetRefreshDriver() {
-  PresShell* presShell = mTabChild->GetTopLevelPresShell();
+  PresShell* presShell = mBrowserChild->GetTopLevelPresShell();
   if (!presShell || !presShell->GetPresContext() ||
       !presShell->GetPresContext()->RefreshDriver()) {
     return nullptr;
   }
   return presShell->GetPresContext()->RefreshDriver();
 }
--- a/dom/ipc/CoalescedMouseData.h
+++ b/dom/ipc/CoalescedMouseData.h
@@ -26,33 +26,33 @@ class CoalescedMouseData final : public 
 
   bool CanCoalesce(const WidgetMouseEvent& aEvent,
                    const ScrollableLayerGuid& aGuid,
                    const uint64_t& aInputBlockId);
 };
 
 class CoalescedMouseMoveFlusher final : public nsARefreshObserver {
  public:
-  explicit CoalescedMouseMoveFlusher(TabChild* aTabChild)
-      : mTabChild(aTabChild) {
-    MOZ_ASSERT(mTabChild);
+  explicit CoalescedMouseMoveFlusher(BrowserChild* aBrowserChild)
+      : mBrowserChild(aBrowserChild) {
+    MOZ_ASSERT(mBrowserChild);
   }
 
   virtual void WillRefresh(mozilla::TimeStamp aTime) override;
 
   NS_INLINE_DECL_REFCOUNTING(CoalescedMouseMoveFlusher, override)
 
   void StartObserver();
   void RemoveObserver();
 
  private:
   ~CoalescedMouseMoveFlusher() { RemoveObserver(); }
 
   nsRefreshDriver* GetRefreshDriver();
 
-  TabChild* mTabChild;
+  BrowserChild* mBrowserChild;
   RefPtr<nsRefreshDriver> mRefreshDriver;
 };
 
 }  // namespace dom
 }  // namespace mozilla
 
 #endif  // mozilla_dom_CoalescedMouseData_h
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -6,17 +6,17 @@
 
 #ifdef MOZ_WIDGET_GTK
 #  include <gtk/gtk.h>
 #endif
 
 #include "ContentChild.h"
 
 #include "GeckoProfiler.h"
-#include "TabChild.h"
+#include "BrowserChild.h"
 #include "HandlerServiceChild.h"
 
 #include "mozilla/Attributes.h"
 #include "mozilla/BackgroundHangMonitor.h"
 #include "mozilla/LookAndFeel.h"
 #include "mozilla/MemoryTelemetry.h"
 #include "mozilla/NullPrincipal.h"
 #include "mozilla/Preferences.h"
@@ -834,17 +834,17 @@ static nsresult GetCreateWindowParams(mo
   if (NS_SUCCEEDED(rv) && cv) {
     cv->GetFullZoom(aFullZoom);
   }
 
   return NS_OK;
 }
 
 nsresult ContentChild::ProvideWindowCommon(
-    TabChild* aTabOpener, mozIDOMWindowProxy* aParent, bool aIframeMoz,
+    BrowserChild* aTabOpener, mozIDOMWindowProxy* aParent, bool aIframeMoz,
     uint32_t aChromeFlags, bool aCalledFromJS, bool aPositionSpecified,
     bool aSizeSpecified, nsIURI* aURI, const nsAString& aName,
     const nsACString& aFeatures, bool aForceNoOpener,
     nsDocShellLoadState* aLoadState, bool* aWindowIsNew,
     mozIDOMWindowProxy** aReturn) {
   *aReturn = nullptr;
 
   nsAutoPtr<IPCTabContext> ipcContext;
@@ -916,17 +916,17 @@ nsresult ContentChild::ProvideWindowComm
 
   if (aTabOpener) {
     PopupIPCTabContext context;
     openerTabId = aTabOpener->GetTabId();
     context.opener() = openerTabId;
     context.isMozBrowserElement() = aTabOpener->IsMozBrowserElement();
     ipcContext = new IPCTabContext(context);
   } else {
-    // It's possible to not have a TabChild opener in the case
+    // It's possible to not have a BrowserChild opener in the case
     // of ServiceWorker::OpenWindow.
     UnsafeIPCTabContext unsafeTabContext;
     ipcContext = new IPCTabContext(unsafeTabContext);
   }
 
   MOZ_ASSERT(ipcContext);
   TabId tabId(nsContentUtils::GenerateTabId());
 
@@ -943,18 +943,18 @@ nsresult ContentChild::ProvideWindowComm
 
   RefPtr<BrowsingContext> openerBC =
       aParent ? nsPIDOMWindowOuter::From(aParent)->GetBrowsingContext()
               : nullptr;
   RefPtr<BrowsingContext> browsingContext = BrowsingContext::Create(
       nullptr, openerBC, aName, BrowsingContext::Type::Content);
 
   TabContext newTabContext = aTabOpener ? *aTabOpener : TabContext();
-  RefPtr<TabChild> newChild = new TabChild(this, tabId, tabGroup, newTabContext,
-                                           browsingContext, aChromeFlags);
+  RefPtr<BrowserChild> newChild = new BrowserChild(
+      this, tabId, tabGroup, newTabContext, browsingContext, aChromeFlags);
 
   if (aTabOpener) {
     MOZ_ASSERT(ipcContext->type() == IPCTabContext::TPopupIPCTabContext);
     ipcContext->get_PopupIPCTabContext().opener() = aTabOpener;
   }
 
   nsCOMPtr<nsIEventTarget> target =
       tabGroup->EventTargetFor(TaskCategory::Other);
@@ -1022,17 +1022,17 @@ nsresult ContentChild::ProvideWindowComm
       return;
     }
 
     if (!*aWindowIsNew) {
       rv = NS_ERROR_ABORT;
       return;
     }
 
-    // If the TabChild has been torn down, we don't need to do this anymore.
+    // If the BrowserChild has been torn down, we don't need to do this anymore.
     if (NS_WARN_IF(!newChild->IPCOpen() || newChild->IsDestroyed())) {
       rv = NS_ERROR_ABORT;
       return;
     }
 
     ShowInfo showInfo(EmptyString(), false, false, true, false, 0, 0, 0);
     auto* opener = nsPIDOMWindowOuter::From(aParent);
     nsIDocShell* openerShell;
@@ -1493,22 +1493,22 @@ mozilla::ipc::IPCResult ContentChild::Re
 
 mozilla::ipc::IPCResult ContentChild::RecvReinitRendering(
     Endpoint<PCompositorManagerChild>&& aCompositor,
     Endpoint<PImageBridgeChild>&& aImageBridge,
     Endpoint<PVRManagerChild>&& aVRBridge,
     Endpoint<PVideoDecoderManagerChild>&& aVideoManager,
     nsTArray<uint32_t>&& namespaces) {
   MOZ_ASSERT(namespaces.Length() == 3);
-  nsTArray<RefPtr<TabChild>> tabs = TabChild::GetAll();
+  nsTArray<RefPtr<BrowserChild>> tabs = BrowserChild::GetAll();
 
   // Zap all the old layer managers we have lying around.
-  for (const auto& tabChild : tabs) {
-    if (tabChild->GetLayersId().IsValid()) {
-      tabChild->InvalidateLayers();
+  for (const auto& browserChild : tabs) {
+    if (browserChild->GetLayersId().IsValid()) {
+      browserChild->InvalidateLayers();
     }
   }
 
   // Re-establish singleton bridges to the compositor.
   if (!CompositorManagerChild::Init(std::move(aCompositor), namespaces[0])) {
     return GetResultForRenderingInitFailure(aCompositor.OtherPid());
   }
   if (!CompositorManagerChild::CreateContentCompositorBridge(namespaces[1])) {
@@ -1519,19 +1519,19 @@ mozilla::ipc::IPCResult ContentChild::Re
     return GetResultForRenderingInitFailure(aImageBridge.OtherPid());
   }
   if (!gfx::VRManagerChild::ReinitForContent(std::move(aVRBridge))) {
     return GetResultForRenderingInitFailure(aVRBridge.OtherPid());
   }
   gfxPlatform::GetPlatform()->CompositorUpdated();
 
   // Establish new PLayerTransactions.
-  for (const auto& tabChild : tabs) {
-    if (tabChild->GetLayersId().IsValid()) {
-      tabChild->ReinitRendering();
+  for (const auto& browserChild : tabs) {
+    if (browserChild->GetLayersId().IsValid()) {
+      browserChild->ReinitRendering();
     }
   }
 
   VideoDecoderManagerChild::InitForContent(std::move(aVideoManager));
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvAudioDefaultDeviceChange() {
@@ -1539,20 +1539,20 @@ mozilla::ipc::IPCResult ContentChild::Re
   audio::AudioNotificationReceiver::NotifyDefaultDeviceChanged();
 #endif
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvReinitRenderingForDeviceReset() {
   gfxPlatform::GetPlatform()->CompositorUpdated();
 
-  nsTArray<RefPtr<TabChild>> tabs = TabChild::GetAll();
-  for (const auto& tabChild : tabs) {
-    if (tabChild->GetLayersId().IsValid()) {
-      tabChild->ReinitRenderingForDeviceReset();
+  nsTArray<RefPtr<BrowserChild>> tabs = BrowserChild::GetAll();
+  for (const auto& browserChild : tabs) {
+    if (browserChild->GetLayersId().IsValid()) {
+      browserChild->ReinitRenderingForDeviceReset();
     }
   }
   return IPC_OK();
 }
 
 #if defined(XP_MACOSX) && defined(MOZ_SANDBOX)
 extern "C" {
 CGError CGSSetDenyWindowServerConnections(bool);
@@ -1802,47 +1802,47 @@ mozilla::ipc::IPCResult ContentChild::Re
   if (!tc.IsValid()) {
     NS_ERROR(nsPrintfCString("Received an invalid TabContext from "
                              "the parent process. (%s)  Crashing...",
                              tc.GetInvalidReason())
                  .get());
     MOZ_CRASH("Invalid TabContext received from the parent process.");
   }
 
-  RefPtr<TabChild> tabChild =
-      TabChild::Create(this, aTabId, aSameTabGroupAs, tc.GetTabContext(),
-                       aBrowsingContext, aChromeFlags);
-
-  // Bind the created TabChild to IPC to actually link the actor. The ref here
-  // is released in DeallocPBrowserChild.
+  RefPtr<BrowserChild> browserChild =
+      BrowserChild::Create(this, aTabId, aSameTabGroupAs, tc.GetTabContext(),
+                           aBrowsingContext, aChromeFlags);
+
+  // Bind the created BrowserChild to IPC to actually link the actor. The ref
+  // here is released in DeallocPBrowserChild.
   if (NS_WARN_IF(!BindPBrowserEndpoint(std::move(aBrowserEp),
-                                       do_AddRef(tabChild).take()))) {
+                                       do_AddRef(browserChild).take()))) {
     return IPC_FAIL(this, "BindPBrowserEndpoint failed");
   }
 
-  if (!tabChild->mTabGroup) {
-    tabChild->mTabGroup = TabGroup::GetFromActor(tabChild);
-
-    if (!tabChild->mTabGroup) {
-      tabChild->mTabGroup = new TabGroup();
+  if (!browserChild->mTabGroup) {
+    browserChild->mTabGroup = TabGroup::GetFromActor(browserChild);
+
+    if (!browserChild->mTabGroup) {
+      browserChild->mTabGroup = new TabGroup();
       MOZ_DIAGNOSTIC_ASSERT(aSameTabGroupAs != 0);
     }
   }
 
-  if (NS_WARN_IF(NS_FAILED(tabChild->Init(/* aOpener */ nullptr)))) {
-    return IPC_FAIL(tabChild, "TabChild::Init failed");
+  if (NS_WARN_IF(NS_FAILED(browserChild->Init(/* aOpener */ nullptr)))) {
+    return IPC_FAIL(browserChild, "BrowserChild::Init failed");
   }
 
   nsCOMPtr<nsIObserverService> os = services::GetObserverService();
   if (os) {
-    os->NotifyObservers(static_cast<nsIBrowserChild*>(tabChild),
+    os->NotifyObservers(static_cast<nsIBrowserChild*>(browserChild),
                         "tab-child-created", nullptr);
   }
   // Notify parent that we are ready to handle input events.
-  tabChild->SendRemoteIsReadyToHandleInputEvents();
+  browserChild->SendRemoteIsReadyToHandleInputEvents();
   return IPC_OK();
 }
 
 void ContentChild::GetAvailableDictionaries(
     InfallibleTArray<nsString>& aDictionaries) {
   aDictionaries = mAvailableDictionaries;
 }
 
@@ -1862,17 +1862,17 @@ PFileDescriptorSetChild* ContentChild::A
 
 bool ContentChild::DeallocPFileDescriptorSetChild(
     PFileDescriptorSetChild* aActor) {
   delete static_cast<FileDescriptorSetChild*>(aActor);
   return true;
 }
 
 bool ContentChild::DeallocPBrowserChild(PBrowserChild* aIframe) {
-  TabChild* child = static_cast<TabChild*>(aIframe);
+  BrowserChild* child = static_cast<BrowserChild*>(aIframe);
   NS_RELEASE(child);
   return true;
 }
 
 PIPCBlobInputStreamChild* ContentChild::AllocPIPCBlobInputStreamChild(
     const nsID& aID, const uint64_t& aSize) {
   // IPCBlobInputStreamChild is refcounted. Here it's created and in
   // DeallocPIPCBlobInputStreamChild is released.
@@ -1911,17 +1911,17 @@ PPresentationChild* ContentChild::AllocP
 bool ContentChild::DeallocPPresentationChild(PPresentationChild* aActor) {
   delete aActor;
   return true;
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvNotifyPresentationReceiverLaunched(
     PBrowserChild* aIframe, const nsString& aSessionId) {
   nsCOMPtr<nsIDocShell> docShell =
-      do_GetInterface(static_cast<TabChild*>(aIframe)->WebNavigation());
+      do_GetInterface(static_cast<BrowserChild*>(aIframe)->WebNavigation());
   NS_WARNING_ASSERTION(docShell, "WebNavigation failed");
 
   nsCOMPtr<nsIPresentationService> service =
       do_GetService(PRESENTATION_SERVICE_CONTRACTID);
   NS_WARNING_ASSERTION(service, "presentation service is missing");
 
   Unused << NS_WARN_IF(
       NS_FAILED(static_cast<PresentationIPCService*>(service.get())
@@ -2981,21 +2981,21 @@ void ContentChild::ShutdownInternal() {
       NS_LITERAL_CSTRING("SendFinishShutdown (sending)"));
   bool sent = SendFinishShutdown();
   CrashReporter::AnnotateCrashReport(
       CrashReporter::Annotation::IPCShutdownState,
       sent ? NS_LITERAL_CSTRING("SendFinishShutdown (sent)")
            : NS_LITERAL_CSTRING("SendFinishShutdown (failed)"));
 }
 
-PBrowserOrId ContentChild::GetBrowserOrId(TabChild* aTabChild) {
-  if (!aTabChild || this == aTabChild->Manager()) {
-    return PBrowserOrId(aTabChild);
+PBrowserOrId ContentChild::GetBrowserOrId(BrowserChild* aBrowserChild) {
+  if (!aBrowserChild || this == aBrowserChild->Manager()) {
+    return PBrowserOrId(aBrowserChild);
   }
-  return PBrowserOrId(aTabChild->GetTabId());
+  return PBrowserOrId(aBrowserChild->GetTabId());
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvUpdateWindow(
     const uintptr_t& aChildId) {
 #if defined(XP_WIN)
   NS_ASSERTION(aChildId,
                "Expected child hwnd value for remote plugin instance.");
   mozilla::plugins::PluginInstanceParent* parentInstance =
@@ -3043,17 +3043,17 @@ ContentChild::AllocPWebBrowserPersistDoc
 
 mozilla::ipc::IPCResult ContentChild::RecvPWebBrowserPersistDocumentConstructor(
     PWebBrowserPersistDocumentChild* aActor, PBrowserChild* aBrowser,
     const uint64_t& aOuterWindowID) {
   if (NS_WARN_IF(!aBrowser)) {
     return IPC_FAIL_NO_REASON(this);
   }
   nsCOMPtr<Document> rootDoc =
-      static_cast<TabChild*>(aBrowser)->GetTopLevelDocument();
+      static_cast<BrowserChild*>(aBrowser)->GetTopLevelDocument();
   nsCOMPtr<Document> foundDoc;
   if (aOuterWindowID) {
     foundDoc = nsContentUtils::GetSubdocumentWithOuterWindowId(rootDoc,
                                                                aOuterWindowID);
   } else {
     foundDoc = rootDoc;
   }
 
@@ -3429,22 +3429,22 @@ mozilla::ipc::IPCResult ContentChild::Re
     helper->ResponseReceived(impl, NS_OK);
   }
 
   mFileCreationPending.Remove(aUUID);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvActivate(PBrowserChild* aTab) {
-  TabChild* tab = static_cast<TabChild*>(aTab);
+  BrowserChild* tab = static_cast<BrowserChild*>(aTab);
   return tab->RecvActivate();
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvDeactivate(PBrowserChild* aTab) {
-  TabChild* tab = static_cast<TabChild*>(aTab);
+  BrowserChild* tab = static_cast<BrowserChild*>(aTab);
   return tab->RecvDeactivate();
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvProvideAnonymousTemporaryFile(
     const uint64_t& aID, const FileDescOrError& aFDOrError) {
   nsAutoPtr<AnonymousTemporaryFileCallback> callback;
   mPendingAnonymousTemporaryFiles.Remove(aID, &callback);
   MOZ_ASSERT(callback);
@@ -3488,18 +3488,18 @@ mozilla::ipc::IPCResult ContentChild::Re
 mozilla::ipc::IPCResult ContentChild::RecvRefreshScreens(
     nsTArray<ScreenDetails>&& aScreens) {
   ScreenManager& screenManager = ScreenManager::GetSingleton();
   screenManager.Refresh(std::move(aScreens));
   return IPC_OK();
 }
 
 already_AddRefed<nsIEventTarget> ContentChild::GetEventTargetFor(
-    TabChild* aTabChild) {
-  return IToplevelProtocol::GetActorEventTarget(aTabChild);
+    BrowserChild* aBrowserChild) {
+  return IToplevelProtocol::GetActorEventTarget(aBrowserChild);
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvSetPluginList(
     const uint32_t& aPluginEpoch, nsTArray<plugins::PluginTag>&& aPluginTags,
     nsTArray<plugins::FakePluginTag>&& aFakePluginTags) {
   RefPtr<nsPluginHost> host = nsPluginHost::GetInst();
   host->SetPluginsInContent(aPluginEpoch, aPluginTags, aFakePluginTags);
   return IPC_OK();
@@ -3702,18 +3702,19 @@ already_AddRefed<nsIEventTarget> Content
       if (sameTabGroupAs) {
         return nullptr;
       }
 
       if (NS_WARN_IF(!endpoint.IsValid())) {
         return nullptr;
       }
 
-      // If the request for a new TabChild is coming from the parent process,
-      // then there is no opener. Therefore, we create a fresh TabGroup.
+      // If the request for a new BrowserChild is coming from the parent
+      // process, then there is no opener. Therefore, we create a fresh
+      // TabGroup.
       RefPtr<TabGroup> tabGroup = new TabGroup();
       nsCOMPtr<nsIEventTarget> target =
           tabGroup->EventTargetFor(TaskCategory::Other);
 
       // Set this event target for our newly created entry, and use it for this
       // message.
       SetEventTargetForRoute(*endpoint.ActorId(), target);
 
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -70,17 +70,17 @@ namespace dom {
 
 namespace ipc {
 class SharedMap;
 }
 
 class AlertObserver;
 class ConsoleListener;
 class ClonedMessageData;
-class TabChild;
+class BrowserChild;
 class GetFilesHelperChild;
 class FileCreatorHelper;
 
 class ContentChild final : public PContentChild,
                            public nsIWindowProvider,
                            public CPOWManagerGetter,
                            public mozilla::ipc::IShmemAllocator {
   typedef mozilla::dom::ClonedMessageData ClonedMessageData;
@@ -104,17 +104,17 @@ class ContentChild final : public PConte
     nsCString buildID;
     nsCString name;
     nsCString UAName;
     nsCString ID;
     nsCString vendor;
     nsCString sourceURL;
   };
 
-  nsresult ProvideWindowCommon(TabChild* aTabOpener,
+  nsresult ProvideWindowCommon(BrowserChild* aTabOpener,
                                mozIDOMWindowProxy* aOpener, bool aIframeMoz,
                                uint32_t aChromeFlags, bool aCalledFromJS,
                                bool aPositionSpecified, bool aSizeSpecified,
                                nsIURI* aURI, const nsAString& aName,
                                const nsACString& aFeatures, bool aForceNoOpener,
                                nsDocShellLoadState* aLoadState,
                                bool* aWindowIsNew,
                                mozIDOMWindowProxy** aReturn);
@@ -515,17 +515,17 @@ class ContentChild final : public PConte
       const TabId& aSameTabGroupAs, const IPCTabContext& aContext,
       BrowsingContext* aBrowsingContext, const uint32_t& aChromeFlags,
       const ContentParentId& aCpID, const bool& aIsForBrowser);
 
   FORWARD_SHMEM_ALLOCATOR_TO(PContentChild)
 
   void GetAvailableDictionaries(InfallibleTArray<nsString>& aDictionaries);
 
-  PBrowserOrId GetBrowserOrId(TabChild* aTabChild);
+  PBrowserOrId GetBrowserOrId(BrowserChild* aBrowserChild);
 
   POfflineCacheUpdateChild* AllocPOfflineCacheUpdateChild(
       const URIParams& manifestURI, const URIParams& documentURI,
       const PrincipalInfo& aLoadingPrincipalInfo, const bool& stickDocument);
 
   bool DeallocPOfflineCacheUpdateChild(
       POfflineCacheUpdateChild* offlineCacheUpdate);
 
@@ -651,17 +651,18 @@ class ContentChild final : public PConte
                            const nsAString& aName,
                            const Optional<int64_t>& aLastModified,
                            bool aExistenceCheck, bool aIsFromNsIFile);
 
   typedef std::function<void(PRFileDesc*)> AnonymousTemporaryFileCallback;
   nsresult AsyncOpenAnonymousTemporaryFile(
       const AnonymousTemporaryFileCallback& aCallback);
 
-  already_AddRefed<nsIEventTarget> GetEventTargetFor(TabChild* aTabChild);
+  already_AddRefed<nsIEventTarget> GetEventTargetFor(
+      BrowserChild* aBrowserChild);
 
   mozilla::ipc::IPCResult RecvSetPluginList(
       const uint32_t& aPluginEpoch, nsTArray<PluginTag>&& aPluginTags,
       nsTArray<FakePluginTag>&& aFakePluginTags);
 
   PClientOpenWindowOpChild* AllocPClientOpenWindowOpChild(
       const ClientOpenWindowArgs& aArgs);
 
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -1208,18 +1208,18 @@ BrowserParent* ContentParent::CreateBrow
         aSameTabGroupAs ? aSameTabGroupAs->GetTabId() : TabId(0),
         aContext.AsIPCTabContext(), aBrowsingContext, chromeFlags,
         constructorSender->ChildID(), constructorSender->IsForBrowser());
     if (NS_WARN_IF(!ok)) {
       return nullptr;
     }
 
     if (remoteType.EqualsLiteral(LARGE_ALLOCATION_REMOTE_TYPE)) {
-      // Tell the TabChild object that it was created due to a Large-Allocation
-      // request.
+      // Tell the BrowserChild object that it was created due to a
+      // Large-Allocation request.
       Unused << browserParent->SendAwaitLargeAlloc();
     }
 
     browserParent->SetOwnerElement(aFrameElement);
     return browserParent;
   }
   return nullptr;
 }
@@ -3286,19 +3286,19 @@ mozilla::ipc::IPCResult ContentParent::R
   if (NS_WARN_IF(!BindPBrowserEndpoint(std::move(aBrowserEp),
                                        do_AddRef(parent).take()))) {
     return IPC_FAIL(this, "BindPBrowserEndpoint failed");
   }
 
   // When enabling input event prioritization, input events may preempt other
   // normal priority IPC messages. To prevent the input events preempt
   // PBrowserConstructor, we use an IPC 'RemoteIsReadyToHandleInputEvents' to
-  // notify parent that TabChild is created. In this case, PBrowser is initiated
-  // from content so that we can set BrowserParent as ready to handle input
-  // events.
+  // notify parent that BrowserChild is created. In this case, PBrowser is
+  // initiated from content so that we can set BrowserParent as ready to handle
+  // input
   parent->SetReadyToHandleInputEvents();
   return IPC_OK();
 }
 
 PIPCBlobInputStreamParent* ContentParent::AllocPIPCBlobInputStreamParent(
     const nsID& aID, const uint64_t& aSize) {
   MOZ_CRASH("PIPCBlobInputStreamParent actors should be manually constructed!");
   return nullptr;
--- a/dom/ipc/ContentProcessManager.cpp
+++ b/dom/ipc/ContentProcessManager.cpp
@@ -123,17 +123,17 @@ bool ContentProcessManager::RegisterRemo
   auto iter = mContentParentMap.find(aChildCpId);
   if (NS_WARN_IF(iter == mContentParentMap.end())) {
     ASSERT_UNLESS_FUZZING();
     return false;
   }
 
   struct RemoteFrameInfo info;
 
-  // If it's a PopupIPCTabContext, it's the case that a TabChild want to
+  // If it's a PopupIPCTabContext, it's the case that a BrowserChild want to
   // open a new tab. aOpenerTabId has to be it's parent frame's opener id.
   if (aContext.type() == IPCTabContext::TPopupIPCTabContext) {
     auto remoteFrameIter = iter->second.mRemoteFrames.find(aOpenerTabId);
     if (remoteFrameIter == iter->second.mRemoteFrames.end()) {
       ASSERT_UNLESS_FUZZING("Failed to find parent frame's opener id.");
       return false;
     }
 
--- a/dom/ipc/PBrowser.ipdl
+++ b/dom/ipc/PBrowser.ipdl
@@ -565,17 +565,17 @@ parent:
 
     /**
      * Child informs the parent that a compositor transaction has ocurred.
      */
     async NotifyCompositorTransaction();
 
     /**
      * Child informs the parent that the content is ready to handle input
-     * events. This is sent when the TabChild is created.
+     * events. This is sent when the BrowserChild is created.
      */
     async RemoteIsReadyToHandleInputEvents();
 
     /**
      * Child informs the parent that the layer tree is already available.
      */
     async PaintWhileInterruptingJSNoOp(LayersObserverEpoch aEpoch);
 
@@ -593,17 +593,17 @@ parent:
                             Shmem? visualData,
                             uint32_t stride, SurfaceFormat format,
                             LayoutDeviceIntRect dragRect,
                             Principal principal);
 
     // After a compositor reset, it is necessary to reconnect each layers ID to
     // the compositor of the widget that will render those layers. Note that
     // this is sync so we can ensure that messages to the window compositor
-    // arrive before the TabChild attempts to use its cross-process compositor
+    // arrive before the BrowserChild attempts to use its cross-process compositor
     // bridge.
     sync EnsureLayersConnected() returns (CompositorOptions compositorOptions);
 
     /**
      * This function is used to notify the parent that it should display a
      * canvas permission prompt.
      *
      * @param aFirstPartyURI first party of the tab that is requesting access.
@@ -895,34 +895,34 @@ child:
      * Update the child with the tab's current top-level native window handle.
      * This is used by a11y objects who must expose their native window.
      *
      * @param aNewHandle The native window handle of the tab's top-level window.
      */
     async UpdateNativeWindowHandle(uintptr_t aNewHandle);
 
     /**
-     * Tell the TabChild that it should expect a Large-Allocation load to occur.
+     * Tell the BrowserChild that it should expect a Large-Allocation load to occur.
      * Loads which occur until this flag is cleared will not leave the process.
      */
     async AwaitLargeAlloc();
 
     /**
-     * Tell the TabChild to set the name of its toplevel docshell to the given name.
+     * Tell the BrowserChild to set the name of its toplevel docshell to the given name.
      */
     async SetWindowName(nsString aName);
 
     /**
-     * Tell the TabChild to allow scripts in the docshell to close the window.
+     * Tell the BrowserChild to allow scripts in the docshell to close the window.
      */
     async AllowScriptsToClose();
 
     /**
-     * Tell the TabChild what OriginAttributes it should inherit from. This must
-     * be called before the first non-blank document is loaded in the TabChild.
+     * Tell the BrowserChild what OriginAttributes it should inherit from. This must
+     * be called before the first non-blank document is loaded in the BrowserChild.
      */
     async SetOriginAttributes(OriginAttributes aOriginAttributes);
 
     /**
      * Pass the current handle for the current native widget to the content
      * process, so it can be used by PuppetWidget.
      */
     async SetWidgetNativeData(WindowsHandle aHandle);
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -368,17 +368,17 @@ nested(upto inside_cpow) sync protocol P
     manages PScriptCache;
     manages PLoginReputation;
     manages PSessionStorageObserver;
 
     // Depending on exactly how the new browser is being created, it might be
     // created from either the child or parent process!
     //
     // The child creates the PBrowser as part of
-    // TabChild::BrowserFrameProvideWindow (which happens when the child's
+    // BrowserChild::BrowserFrameProvideWindow (which happens when the child's
     // content calls window.open()), and the parent creates the PBrowser as part
     // of ContentParent::CreateBrowser.
     //
     // When the parent constructs a PBrowser, the child trusts the attributes it
     // receives from the parent.  In that case, the context should be
     // FrameIPCTabContext.
     //
     // When the child constructs a PBrowser, the parent doesn't trust the
--- a/dom/ipc/PTabContext.ipdlh
+++ b/dom/ipc/PTabContext.ipdlh
@@ -59,17 +59,17 @@ struct FrameIPCTabContext
 };
 
 struct JSPluginFrameIPCTabContext
 {
   uint32_t jsPluginId;
 };
 
 // XXXcatalinb: This is only used by ServiceWorkerClients::OpenWindow.
-// Because service workers don't have an associated TabChild
+// Because service workers don't have an associated BrowserChild
 // we can't satisfy the security constraints on b2g. As such, the parent
 // process will accept this tab context only on desktop.
 struct UnsafeIPCTabContext
 { };
 
 // IPCTabContext is an analog to mozilla::dom::TabContext.  Both specify an
 // iframe/PBrowser's own and containing app-ids and tell you whether the
 // iframe/PBrowser is a browser frame.  But only IPCTabContext is allowed to
--- a/dom/ipc/ProcessHangMonitor.cpp
+++ b/dom/ipc/ProcessHangMonitor.cpp
@@ -9,17 +9,17 @@
 
 #include "jsapi.h"
 
 #include "mozilla/Atomics.h"
 #include "mozilla/BackgroundHangMonitor.h"
 #include "mozilla/dom/ContentParent.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/ScriptSettings.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/BrowserParent.h"
 #include "mozilla/ipc/TaskFactory.h"
 #include "mozilla/Monitor.h"
 #include "mozilla/plugins/PluginBridge.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Unused.h"
 #include "mozilla/WeakPtr.h"
 
@@ -76,17 +76,17 @@ class HangMonitorChild : public PProcess
                          public BackgroundHangAnnotator {
  public:
   explicit HangMonitorChild(ProcessHangMonitor* aMonitor);
   ~HangMonitorChild() override;
 
   void Bind(Endpoint<PProcessHangMonitorChild>&& aEndpoint);
 
   typedef ProcessHangMonitor::SlowScriptAction SlowScriptAction;
-  SlowScriptAction NotifySlowScript(nsIBrowserChild* aTabChild,
+  SlowScriptAction NotifySlowScript(nsIBrowserChild* aBrowserChild,
                                     const char* aFileName,
                                     const nsString& aAddonId);
   void NotifySlowScriptAsync(TabId aTabId, const nsCString& aFileName,
                              const nsString& aAddonId);
 
   bool IsDebuggerStartupComplete();
 
   void NotifyPluginHang(uint32_t aPluginId);
@@ -336,22 +336,22 @@ void HangMonitorChild::InterruptCallback
     paintWhileInterruptingJSEpoch = mPaintWhileInterruptingJSEpoch;
 
     mPaintWhileInterruptingJS = false;
   }
 
   // Don't paint from the interrupt callback when recording or replaying, as
   // the interrupt callback is triggered non-deterministically.
   if (paintWhileInterruptingJS && !recordreplay::IsRecordingOrReplaying()) {
-    RefPtr<TabChild> tabChild =
-        TabChild::FindTabChild(paintWhileInterruptingJSTab);
-    if (tabChild) {
+    RefPtr<BrowserChild> browserChild =
+        BrowserChild::FindBrowserChild(paintWhileInterruptingJSTab);
+    if (browserChild) {
       js::AutoAssertNoContentJS nojs(mContext);
-      tabChild->PaintWhileInterruptingJS(paintWhileInterruptingJSEpoch,
-                                         paintWhileInterruptingJSForce);
+      browserChild->PaintWhileInterruptingJS(paintWhileInterruptingJSEpoch,
+                                             paintWhileInterruptingJSForce);
     }
   }
 }
 
 void HangMonitorChild::AnnotateHang(BackgroundHangAnnotations& aAnnotations) {
   if (mPaintWhileInterruptingJSActive) {
     aAnnotations.AddAnnotation(NS_LITERAL_STRING("PaintWhileInterruptingJS"),
                                true);
@@ -462,17 +462,17 @@ void HangMonitorChild::NotifySlowScriptA
                                              const nsCString& aFileName,
                                              const nsString& aAddonId) {
   if (mIPCOpen) {
     Unused << SendHangEvidence(SlowScriptData(aTabId, aFileName, aAddonId));
   }
 }
 
 HangMonitorChild::SlowScriptAction HangMonitorChild::NotifySlowScript(
-    nsIBrowserChild* aTabChild, const char* aFileName,
+    nsIBrowserChild* aBrowserChild, const char* aFileName,
     const nsString& aAddonId) {
   MOZ_RELEASE_ASSERT(NS_IsMainThread());
 
   mSentReport = true;
 
   {
     MonitorAutoLock lock(mMonitor);
 
@@ -488,19 +488,20 @@ HangMonitorChild::SlowScriptAction HangM
 
     if (mStartDebugger) {
       mStartDebugger = false;
       return SlowScriptAction::StartDebugger;
     }
   }
 
   TabId id;
-  if (aTabChild) {
-    RefPtr<TabChild> tabChild = static_cast<TabChild*>(aTabChild);
-    id = tabChild->GetTabId();
+  if (aBrowserChild) {
+    RefPtr<BrowserChild> browserChild =
+        static_cast<BrowserChild*>(aBrowserChild);
+    id = browserChild->GetTabId();
   }
   nsAutoCString filename(aFileName);
 
   Dispatch(NewNonOwningRunnableMethod<TabId, nsCString, nsString>(
       "HangMonitorChild::NotifySlowScriptAsync", this,
       &HangMonitorChild::NotifySlowScriptAsync, id, filename, aAddonId));
   return SlowScriptAction::Continue;
 }
@@ -1102,20 +1103,20 @@ ProcessHangMonitor::Observe(nsISupports*
     if (obs) {
       obs->RemoveObserver(this, "xpcom-shutdown");
     }
   }
   return NS_OK;
 }
 
 ProcessHangMonitor::SlowScriptAction ProcessHangMonitor::NotifySlowScript(
-    nsIBrowserChild* aTabChild, const char* aFileName,
+    nsIBrowserChild* aBrowserChild, const char* aFileName,
     const nsString& aAddonId) {
   MOZ_RELEASE_ASSERT(NS_IsMainThread());
-  return HangMonitorChild::Get()->NotifySlowScript(aTabChild, aFileName,
+  return HangMonitorChild::Get()->NotifySlowScript(aBrowserChild, aFileName,
                                                    aAddonId);
 }
 
 bool ProcessHangMonitor::IsDebuggerStartupComplete() {
   MOZ_RELEASE_ASSERT(NS_IsMainThread());
   return HangMonitorChild::Get()->IsDebuggerStartupComplete();
 }
 
--- a/dom/ipc/ProcessHangMonitor.h
+++ b/dom/ipc/ProcessHangMonitor.h
@@ -56,17 +56,17 @@ class ProcessHangMonitor final : public 
   static void MaybeStartPaintWhileInterruptingJS();
 
   enum SlowScriptAction {
     Continue,
     Terminate,
     StartDebugger,
     TerminateGlobal,
   };
-  SlowScriptAction NotifySlowScript(nsIBrowserChild* aTabChild,
+  SlowScriptAction NotifySlowScript(nsIBrowserChild* aBrowserChild,
                                     const char* aFileName,
                                     const nsString& aAddonId);
 
   void NotifyPluginHang(uint32_t aPluginId);
 
   bool IsDebuggerStartupComplete();
 
   void InitiateCPOWTimeout();
--- a/dom/ipc/TabContext.cpp
+++ b/dom/ipc/TabContext.cpp
@@ -2,17 +2,17 @@
 /* vim: set ts=8 sts=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 "mozilla/dom/TabContext.h"
 #include "mozilla/dom/PTabContext.h"
 #include "mozilla/dom/BrowserParent.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/StaticPrefs.h"
 #include "nsIScriptSecurityManager.h"
 #include "nsServiceManagerUtils.h"
 
 #define NO_APP_ID (nsIScriptSecurityManager::NO_APP_ID)
 
 using namespace mozilla::dom::ipc;
 using namespace mozilla::layout;
@@ -158,17 +158,17 @@ MaybeInvalidTabContext::MaybeInvalidTabC
           // this is a fatal error.
           mInvalidReason =
               "Child is-browser process tried to "
               "open a non-browser tab.";
           return;
         }
       } else if (ipcContext.opener().type() == PBrowserOrId::TPBrowserChild) {
         context =
-            static_cast<TabChild*>(ipcContext.opener().get_PBrowserChild());
+            static_cast<BrowserChild*>(ipcContext.opener().get_PBrowserChild());
       } else if (ipcContext.opener().type() == PBrowserOrId::TTabId) {
         // We should never get here because this PopupIPCTabContext is only
         // used for allocating a new tab id, not for allocating a PBrowser.
         mInvalidReason =
             "Child process tried to open an tab without the opener "
             "information.";
         return;
       } else {
@@ -206,17 +206,17 @@ MaybeInvalidTabContext::MaybeInvalidTabC
       showAccelerators = ipcContext.showAccelerators();
       showFocusRings = ipcContext.showFocusRings();
       originAttributes = ipcContext.originAttributes();
       break;
     }
     case IPCTabContext::TUnsafeIPCTabContext: {
       // XXXcatalinb: This used *only* by ServiceWorkerClients::OpenWindow.
       // It is meant as a temporary solution until service workers can
-      // provide a TabChild equivalent. Don't allow this on b2g since
+      // provide a BrowserChild equivalent. Don't allow this on b2g since
       // it might be used to escalate privileges.
       if (!StaticPrefs::dom_serviceWorkers_enabled()) {
         mInvalidReason = "ServiceWorkers should be enabled.";
         return;
       }
 
       break;
     }
--- a/dom/ipc/TabContext.h
+++ b/dom/ipc/TabContext.h
@@ -15,17 +15,17 @@
 namespace mozilla {
 namespace dom {
 
 class IPCTabContext;
 
 /**
  * TabContext encapsulates information about an iframe that may be a mozbrowser.
  *
- * BrowserParent and TabChild both inherit from TabContext, and you can also
+ * BrowserParent and BrowserChild both inherit from TabContext, and you can also
  * have standalone TabContext objects.
  *
  * This class is immutable except by calling one of the protected
  * SetTabContext*() methods (and those methods can only be called once).  See
  * also MutableTabContext.
  */
 class TabContext {
  public:
--- a/dom/ipc/WindowGlobalChild.cpp
+++ b/dom/ipc/WindowGlobalChild.cpp
@@ -7,17 +7,17 @@
 #include "mozilla/dom/WindowGlobalChild.h"
 
 #include "mozilla/ClearOnShutdown.h"
 #include "mozilla/dom/WindowGlobalParent.h"
 #include "mozilla/ipc/InProcessChild.h"
 #include "mozilla/dom/BrowsingContext.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/dom/MozFrameLoaderOwnerBinding.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/BrowserBridgeChild.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/dom/WindowGlobalActorsBinding.h"
 #include "mozilla/dom/WindowGlobalParent.h"
 #include "mozilla/ipc/InProcessChild.h"
 #include "nsDocShell.h"
 #include "nsFrameLoaderOwner.h"
 #include "nsGlobalWindowInner.h"
@@ -84,22 +84,22 @@ already_AddRefed<WindowGlobalChild> Wind
     InProcessChild* ipc = InProcessChild::Singleton();
     if (!ipc) {
       return nullptr;
     }
 
     // Note: ref is released in DeallocPWindowGlobalChild
     ipc->SendPWindowGlobalConstructor(do_AddRef(wgc).take(), init);
   } else {
-    RefPtr<TabChild> tabChild =
-        TabChild::GetFrom(static_cast<mozIDOMWindow*>(aWindow));
-    MOZ_ASSERT(tabChild);
+    RefPtr<BrowserChild> browserChild =
+        BrowserChild::GetFrom(static_cast<mozIDOMWindow*>(aWindow));
+    MOZ_ASSERT(browserChild);
 
     // Note: ref is released in DeallocPWindowGlobalChild
-    tabChild->SendPWindowGlobalConstructor(do_AddRef(wgc).take(), init);
+    browserChild->SendPWindowGlobalConstructor(do_AddRef(wgc).take(), init);
   }
   wgc->mIPCClosed = false;
 
   // Register this WindowGlobal in the gWindowGlobalParentsById map.
   if (!gWindowGlobalChildById) {
     gWindowGlobalChildById = new WGCByIdMap();
     ClearOnShutdown(&gWindowGlobalChildById);
   }
@@ -126,28 +126,29 @@ bool WindowGlobalChild::IsCurrentGlobal(
 already_AddRefed<WindowGlobalParent> WindowGlobalChild::GetParentActor() {
   if (mIPCClosed) {
     return nullptr;
   }
   IProtocol* otherSide = InProcessChild::ParentActorFor(this);
   return do_AddRef(static_cast<WindowGlobalParent*>(otherSide));
 }
 
-already_AddRefed<TabChild> WindowGlobalChild::GetTabChild() {
+already_AddRefed<BrowserChild> WindowGlobalChild::GetBrowserChild() {
   if (IsInProcess() || mIPCClosed) {
     return nullptr;
   }
-  return do_AddRef(static_cast<TabChild*>(Manager()));
+  return do_AddRef(static_cast<BrowserChild*>(Manager()));
 }
 
 void WindowGlobalChild::Destroy() {
-  // Perform async IPC shutdown unless we're not in-process, and our TabChild is
-  // in the process of being destroyed, which will destroy us as well.
-  RefPtr<TabChild> tabChild = GetTabChild();
-  if (!tabChild || !tabChild->IsDestroyed()) {
+  // Perform async IPC shutdown unless we're not in-process, and our
+  // BrowserChild is in the process of being destroyed, which will destroy us as
+  // well.
+  RefPtr<BrowserChild> browserChild = GetBrowserChild();
+  if (!browserChild || !browserChild->IsDestroyed()) {
     SendDestroy();
   }
 
   mIPCClosed = true;
 }
 
 static nsresult ChangeFrameRemoteness(WindowGlobalChild* aWgc,
                                       BrowsingContext* aBc,
--- a/dom/ipc/WindowGlobalChild.h
+++ b/dom/ipc/WindowGlobalChild.h
@@ -17,17 +17,17 @@ class nsDocShell;
 
 namespace mozilla {
 namespace dom {
 
 class BrowsingContext;
 class WindowGlobalParent;
 class JSWindowActorChild;
 class JSWindowActorMessageMeta;
-class TabChild;
+class BrowserChild;
 
 /**
  * Actor for a single nsGlobalWindowInner. This actor is used to communicate
  * information to the parent process asynchronously.
  */
 class WindowGlobalChild : public nsWrapperCache, public PWindowGlobalChild {
   friend class PWindowGlobalChild;
 
@@ -61,17 +61,17 @@ class WindowGlobalChild : public nsWrapp
   bool IsCurrentGlobal();
 
   // Get the other side of this actor if it is an in-process actor. Returns
   // |nullptr| if the actor has been torn down, or is not in-process.
   already_AddRefed<WindowGlobalParent> GetParentActor();
 
   // Get this actor's manager if it is not an in-process actor. Returns
   // |nullptr| if the actor has been torn down, or is in-process.
-  already_AddRefed<TabChild> GetTabChild();
+  already_AddRefed<BrowserChild> GetBrowserChild();
 
   void ReceiveRawMessage(const JSWindowActorMessageMeta& aMeta,
                          ipc::StructuredCloneData&& aData);
 
   // Get a JS actor object by name.
   already_AddRefed<JSWindowActorChild> GetActor(const nsAString& aName,
                                                 ErrorResult& aRv);
 
--- a/dom/ipc/moz.build
+++ b/dom/ipc/moz.build
@@ -31,16 +31,17 @@ EXPORTS.mozilla.dom.ipc += [
     'SharedStringMap.h',
     'StringTable.h',
     'StructuredCloneData.h',
 ]
 
 EXPORTS.mozilla.dom += [
     'BrowserBridgeChild.h',
     'BrowserBridgeParent.h',
+    'BrowserChild.h',
     'BrowserParent.h',
     'CoalescedInputData.h',
     'CoalescedMouseData.h',
     'CoalescedWheelData.h',
     'ContentChild.h',
     'ContentParent.h',
     'ContentProcess.h',
     'ContentProcessManager.h',
@@ -52,17 +53,16 @@ EXPORTS.mozilla.dom += [
     'JSWindowActorChild.h',
     'JSWindowActorParent.h',
     'JSWindowActorService.h',
     'MemoryReportRequest.h',
     'PermissionMessageUtils.h',
     'ReferrerInfoUtils.h',
     'RemoteWebProgress.h',
     'RemoteWebProgressRequest.h',
-    'TabChild.h',
     'TabContext.h',
     'TabMessageUtils.h',
     'URLClassifierChild.h',
     'URLClassifierParent.h',
     'WindowGlobalChild.h',
     'WindowGlobalParent.h',
 ]
 
@@ -71,16 +71,17 @@ EXPORTS.mozilla += [
     'ProcessHangMonitor.h',
     'ProcessHangMonitorIPC.h',
     'ProcessPriorityManager.h',
 ]
 
 UNIFIED_SOURCES += [
     'BrowserBridgeChild.cpp',
     'BrowserBridgeParent.cpp',
+    'BrowserChild.cpp',
     'BrowserParent.cpp',
     'CoalescedMouseData.cpp',
     'CoalescedWheelData.cpp',
     'ColorPickerParent.cpp',
     'ContentParent.cpp',
     'ContentProcess.cpp',
     'ContentProcessManager.cpp',
     'CSPMessageUtils.cpp',
@@ -97,17 +98,16 @@ UNIFIED_SOURCES += [
     'PreallocatedProcessManager.cpp',
     'ProcessPriorityManager.cpp',
     'ReferrerInfoUtils.cpp',
     'RemoteWebProgress.cpp',
     'RemoteWebProgressRequest.cpp',
     'SharedMap.cpp',
     'SharedStringMap.cpp',
     'StructuredCloneData.cpp',
-    'TabChild.cpp',
     'TabContext.cpp',
     'TabMessageUtils.cpp',
     'URLClassifierParent.cpp',
     'WindowGlobalChild.cpp',
     'WindowGlobalParent.cpp',
 ]
 
 # ContentChild.cpp cannot be compiled in unified mode on  linux due to Time conflict
--- a/dom/network/TCPServerSocketChild.cpp
+++ b/dom/network/TCPServerSocketChild.cpp
@@ -4,17 +4,17 @@
  * 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 "TCPServerSocketChild.h"
 #include "TCPSocketChild.h"
 #include "TCPServerSocket.h"
 #include "mozilla/net/NeckoChild.h"
 #include "mozilla/dom/PBrowserChild.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "nsJSUtils.h"
 #include "jsfriendapi.h"
 
 using mozilla::net::gNeckoChild;
 
 namespace mozilla {
 namespace dom {
 
--- a/dom/network/TCPSocketChild.cpp
+++ b/dom/network/TCPSocketChild.cpp
@@ -5,17 +5,17 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include <algorithm>
 #include "TCPSocketChild.h"
 #include "mozilla/Unused.h"
 #include "mozilla/UniquePtr.h"
 #include "mozilla/net/NeckoChild.h"
 #include "mozilla/dom/PBrowserChild.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "nsITCPSocketCallback.h"
 #include "TCPSocket.h"
 #include "nsContentUtils.h"
 #include "js/ArrayBuffer.h"  // JS::NewArrayBufferWithContents
 #include "js/RootingAPI.h"   // JS::MutableHandle
 #include "js/Utility.h"  // js::ArrayBufferContentsArena, JS::FreePolicy, js_pod_arena_malloc
 #include "js/Value.h"  // JS::Value
 
--- a/dom/payments/PaymentRequestManager.cpp
+++ b/dom/payments/PaymentRequestManager.cpp
@@ -1,17 +1,17 @@
 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
 /* vim: set ts=8 sts=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 "mozilla/ClearOnShutdown.h"
 #include "mozilla/dom/PaymentRequestChild.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "nsContentUtils.h"
 #include "nsString.h"
 #include "nsIPrincipal.h"
 #include "PaymentRequestManager.h"
 #include "PaymentRequestUtils.h"
 #include "PaymentResponse.h"
 
 namespace mozilla {
@@ -351,23 +351,23 @@ PaymentRequestChild* PaymentRequestManag
   MOZ_ASSERT(aRequest);
 
   if (PaymentRequestChild* child = aRequest->GetIPC()) {
     return child;
   }
 
   nsPIDOMWindowInner* win = aRequest->GetOwner();
   NS_ENSURE_TRUE(win, nullptr);
-  TabChild* tabChild = TabChild::GetFrom(win->GetDocShell());
-  NS_ENSURE_TRUE(tabChild, nullptr);
+  BrowserChild* browserChild = BrowserChild::GetFrom(win->GetDocShell());
+  NS_ENSURE_TRUE(browserChild, nullptr);
   nsAutoString requestId;
   aRequest->GetInternalId(requestId);
 
   PaymentRequestChild* paymentChild = new PaymentRequestChild(aRequest);
-  tabChild->SendPPaymentRequestConstructor(paymentChild);
+  browserChild->SendPPaymentRequestConstructor(paymentChild);
 
   return paymentChild;
 }
 
 nsresult PaymentRequestManager::SendRequestPayment(
     PaymentRequest* aRequest, const IPCPaymentActionRequest& aAction,
     bool aResponseExpected) {
   PaymentRequestChild* requestChild = GetPaymentChild(aRequest);
--- a/dom/plugins/base/nsPluginInstanceOwner.cpp
+++ b/dom/plugins/base/nsPluginInstanceOwner.cpp
@@ -53,17 +53,17 @@ using mozilla::DefaultXDisplay;
 #include "mozilla/NullPrincipal.h"
 #include "mozilla/PresShell.h"
 #include "mozilla/TextEvents.h"
 #include "mozilla/dom/DocumentInlines.h"
 #include "mozilla/dom/DragEvent.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/Event.h"
 #include "mozilla/dom/HTMLObjectElementBinding.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/WheelEventBinding.h"
 #include "nsFrameSelection.h"
 #include "PuppetWidget.h"
 #include "nsPIWindowRoot.h"
 #include "mozilla/IMEStateManager.h"
 #include "mozilla/TextComposition.h"
 #include "mozilla/AutoRestore.h"
 
@@ -954,17 +954,18 @@ NS_IMETHODIMP nsPluginInstanceOwner::Set
 
 #ifdef XP_MACOSX
 NPBool nsPluginInstanceOwner::ConvertPointPuppet(PuppetWidget* widget,
                                                  nsPluginFrame* pluginFrame,
                                                  double sourceX, double sourceY,
                                                  NPCoordinateSpace sourceSpace,
                                                  double* destX, double* destY,
                                                  NPCoordinateSpace destSpace) {
-  NS_ENSURE_TRUE(widget && widget->GetOwningTabChild() && pluginFrame, false);
+  NS_ENSURE_TRUE(widget && widget->GetOwningBrowserChild() && pluginFrame,
+                 false);
   // Caller has to want a result.
   NS_ENSURE_TRUE(destX || destY, false);
 
   if (sourceSpace == destSpace) {
     if (destX) {
       *destX = sourceX;
     }
     if (destY) {
@@ -2817,17 +2818,17 @@ NS_IMETHODIMP nsPluginInstanceOwner::Cre
     if (content) {
       doc = content->OwnerDoc();
       parentWidget = nsContentUtils::WidgetForDocument(doc);
       // If we're running in the content process, we need a remote widget
       // created in chrome.
       if (XRE_IsContentProcess()) {
         if (nsCOMPtr<nsPIDOMWindowOuter> window = doc->GetWindow()) {
           if (nsCOMPtr<nsPIDOMWindowOuter> topWindow = window->GetTop()) {
-            dom::TabChild* tc = dom::TabChild::GetFrom(topWindow);
+            dom::BrowserChild* tc = dom::BrowserChild::GetFrom(topWindow);
             if (tc) {
               // This returns a PluginWidgetProxy which remotes a number of
               // calls.
               rv = tc->CreatePluginWidget(parentWidget.get(),
                                           getter_AddRefs(mWidget));
               if (NS_FAILED(rv)) {
                 return rv;
               }
--- a/dom/plugins/ipc/PluginWidgetChild.cpp
+++ b/dom/plugins/ipc/PluginWidgetChild.cpp
@@ -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/. */
 
 #include "mozilla/plugins/PluginWidgetChild.h"
 
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/plugins/PluginWidgetParent.h"
 #include "PluginWidgetProxy.h"
 
 #include "mozilla/Unused.h"
 #include "mozilla/DebugOnly.h"
 #include "nsDebug.h"
 
 #include "mozilla/plugins/PluginInstanceParent.h"
@@ -31,17 +31,17 @@ PluginWidgetChild::~PluginWidgetChild() 
 }
 
 // Called by the proxy widget when it is destroyed by layout. Only gets
 // called once.
 void PluginWidgetChild::ProxyShutdown() {
   PWLOG("PluginWidgetChild::ProxyShutdown()\n");
   if (mWidget) {
     mWidget = nullptr;
-    auto tab = static_cast<mozilla::dom::TabChild*>(Manager());
+    auto tab = static_cast<mozilla::dom::BrowserChild*>(Manager());
     if (!tab->IsDestroyed()) {
       Unused << Send__delete__(this);
     }
   }
 }
 
 void PluginWidgetChild::KillWidget() {
   PWLOG("PluginWidgetChild::KillWidget()\n");
--- a/dom/security/nsCSPContext.cpp
+++ b/dom/security/nsCSPContext.cpp
@@ -1083,17 +1083,17 @@ nsresult nsCSPContext::SendReports(
       nsCOMPtr<nsINetworkInterceptController> interceptController =
           do_QueryInterface(doc->GetDocShell());
       reportSink->SetInterceptController(interceptController);
     }
     reportChannel->SetNotificationCallbacks(reportSink);
 
     // apply the loadgroup from the channel taken by setRequestContext.  If
     // there's no loadgroup, AsyncOpen will fail on process-split necko (since
-    // the channel cannot query the iTabChild).
+    // the channel cannot query the iBrowserChild).
     rv = reportChannel->SetLoadGroup(mCallingChannelLoadGroup);
     NS_ENSURE_SUCCESS(rv, rv);
 
     // wire in the string input stream to send the report
     nsCOMPtr<nsIStringInputStream> sis(
         do_CreateInstance(NS_STRINGINPUTSTREAM_CONTRACTID));
     NS_ASSERTION(sis,
                  "nsIStringInputStream is needed but not available to send CSP "
--- a/dom/security/nsContentSecurityManager.cpp
+++ b/dom/security/nsContentSecurityManager.cpp
@@ -19,17 +19,17 @@
 #include "nsIURIFixup.h"
 #include "nsIImageLoadingContent.h"
 #include "nsIRedirectHistoryEntry.h"
 
 #include "mozilla/BasePrincipal.h"
 #include "mozilla/ClearOnShutdown.h"
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/nsMixedContentBlocker.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/Components.h"
 #include "mozilla/Logging.h"
 #include "xpcpublic.h"
 
 NS_IMPL_ISUPPORTS(nsContentSecurityManager, nsIContentSecurityManager,
                   nsIChannelEventSink)
 
 static mozilla::LazyLogModule sCSMLog("CSMLog");
@@ -94,20 +94,20 @@ bool nsContentSecurityManager::AllowTopL
   }
   nsAutoCString dataSpec;
   uri->GetSpec(dataSpec);
   if (dataSpec.Length() > 50) {
     dataSpec.Truncate(50);
     dataSpec.AppendLiteral("...");
   }
   nsCOMPtr<nsISupports> context = loadInfo->ContextForTopLevelLoad();
-  nsCOMPtr<nsIBrowserChild> tabChild = do_QueryInterface(context);
+  nsCOMPtr<nsIBrowserChild> browserChild = do_QueryInterface(context);
   nsCOMPtr<Document> doc;
-  if (tabChild) {
-    doc = static_cast<mozilla::dom::TabChild*>(tabChild.get())
+  if (browserChild) {
+    doc = static_cast<mozilla::dom::BrowserChild*>(browserChild.get())
               ->GetTopLevelDocument();
   }
   NS_ConvertUTF8toUTF16 specUTF16(NS_UnescapeURL(dataSpec));
   const char16_t* params[] = {specUTF16.get()};
   nsContentUtils::ReportToConsole(
       nsIScriptError::warningFlag, NS_LITERAL_CSTRING("DATA_URI_BLOCKED"), doc,
       nsContentUtils::eSECURITY_PROPERTIES, "BlockTopLevelDataURINavigation",
       params, ArrayLength(params));
--- a/dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp
+++ b/dom/webbrowserpersist/WebBrowserPersistResourcesChild.cpp
@@ -29,17 +29,17 @@ WebBrowserPersistResourcesChild::VisitRe
 NS_IMETHODIMP
 WebBrowserPersistResourcesChild::VisitDocument(
     nsIWebBrowserPersistDocument* aDocument,
     nsIWebBrowserPersistDocument* aSubDocument) {
   auto* subActor = new WebBrowserPersistDocumentChild();
   // As a consequence of how PWebBrowserPersistDocumentConstructor
   // can be sent by both the parent and the child, we must pass the
   // aBrowser and outerWindowID arguments here, but the values are
-  // ignored by the parent.  In particular, the TabChild in which
+  // ignored by the parent.  In particular, the BrowserChild in which
   // persistence started does not necessarily exist at this point;
   // see bug 1203602.
   if (!Manager()->Manager()->SendPWebBrowserPersistDocumentConstructor(
           subActor, nullptr, 0)) {
     // NOTE: subActor is freed at this point.
     return NS_ERROR_FAILURE;
   }
   // ...but here, IPC won't free subActor until after this returns
--- a/dom/workers/WorkerLoadInfo.cpp
+++ b/dom/workers/WorkerLoadInfo.cpp
@@ -3,17 +3,17 @@
 /* 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 "WorkerLoadInfo.h"
 #include "WorkerPrivate.h"
 
 #include "mozilla/BasePrincipal.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/ipc/BackgroundUtils.h"
 #include "mozilla/ipc/PBackgroundSharedTypes.h"
 #include "mozilla/LoadContext.h"
 #include "nsContentUtils.h"
 #include "nsIContentSecurityPolicy.h"
 #include "nsINetworkInterceptController.h"
 #include "nsIProtocolHandler.h"
 #include "nsIBrowserChild.h"
@@ -379,94 +379,96 @@ WorkerLoadInfo::InterfaceRequestor::Inte
                               getter_AddRefs(baseContext));
     }
     mOuterRequestor = callbacks;
   }
 
   mLoadContext = new LoadContext(aPrincipal, baseContext);
 }
 
-void WorkerLoadInfo::InterfaceRequestor::MaybeAddTabChild(
+void WorkerLoadInfo::InterfaceRequestor::MaybeAddBrowserChild(
     nsILoadGroup* aLoadGroup) {
   MOZ_ASSERT(NS_IsMainThread());
 
   if (!aLoadGroup) {
     return;
   }
 
   nsCOMPtr<nsIInterfaceRequestor> callbacks;
   aLoadGroup->GetNotificationCallbacks(getter_AddRefs(callbacks));
   if (!callbacks) {
     return;
   }
 
-  nsCOMPtr<nsIBrowserChild> tabChild;
+  nsCOMPtr<nsIBrowserChild> browserChild;
   callbacks->GetInterface(NS_GET_IID(nsIBrowserChild),
-                          getter_AddRefs(tabChild));
-  if (!tabChild) {
+                          getter_AddRefs(browserChild));
+  if (!browserChild) {
     return;
   }
 
   // Use weak references to the tab child.  Holding a strong reference will
-  // not prevent an ActorDestroy() from being called on the TabChild.
-  // Therefore, we should let the TabChild destroy itself as soon as possible.
-  mTabChildList.AppendElement(do_GetWeakReference(tabChild));
+  // not prevent an ActorDestroy() from being called on the BrowserChild.
+  // Therefore, we should let the BrowserChild destroy itself as soon as
+  // possible.
+  mBrowserChildList.AppendElement(do_GetWeakReference(browserChild));
 }
 
 NS_IMETHODIMP
 WorkerLoadInfo::InterfaceRequestor::GetInterface(const nsIID& aIID,
                                                  void** aSink) {
   MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(mLoadContext);
 
   if (aIID.Equals(NS_GET_IID(nsILoadContext))) {
     nsCOMPtr<nsILoadContext> ref = mLoadContext;
     ref.forget(aSink);
     return NS_OK;
   }
 
   // If we still have an active nsIBrowserChild, then return it.  Its possible,
-  // though, that all of the TabChild objects have been destroyed.  In that
+  // though, that all of the BrowserChild objects have been destroyed.  In that
   // case we return NS_NOINTERFACE.
   if (aIID.Equals(NS_GET_IID(nsIBrowserChild))) {
-    nsCOMPtr<nsIBrowserChild> tabChild = GetAnyLiveTabChild();
-    if (!tabChild) {
+    nsCOMPtr<nsIBrowserChild> browserChild = GetAnyLiveBrowserChild();
+    if (!browserChild) {
       return NS_NOINTERFACE;
     }
-    tabChild.forget(aSink);
+    browserChild.forget(aSink);
     return NS_OK;
   }
 
   if (aIID.Equals(NS_GET_IID(nsINetworkInterceptController)) &&
       mOuterRequestor) {
     // If asked for the network intercept controller, ask the outer requestor,
     // which could be the docshell.
     return mOuterRequestor->GetInterface(aIID, aSink);
   }
 
   return NS_NOINTERFACE;
 }
 
 already_AddRefed<nsIBrowserChild>
-WorkerLoadInfo::InterfaceRequestor::GetAnyLiveTabChild() {
+WorkerLoadInfo::InterfaceRequestor::GetAnyLiveBrowserChild() {
   MOZ_ASSERT(NS_IsMainThread());
 
-  // Search our list of known TabChild objects for one that still exists.
-  while (!mTabChildList.IsEmpty()) {
-    nsCOMPtr<nsIBrowserChild> tabChild =
-        do_QueryReferent(mTabChildList.LastElement());
+  // Search our list of known BrowserChild objects for one that still exists.
+  while (!mBrowserChildList.IsEmpty()) {
+    nsCOMPtr<nsIBrowserChild> browserChild =
+        do_QueryReferent(mBrowserChildList.LastElement());
 
     // Does this tab child still exist?  If so, return it.  We are done.  If the
     // PBrowser actor is no longer useful, don't bother returning this tab.
-    if (tabChild && !static_cast<TabChild*>(tabChild.get())->IsDestroyed()) {
-      return tabChild.forget();
+    if (browserChild &&
+        !static_cast<BrowserChild*>(browserChild.get())->IsDestroyed()) {
+      return browserChild.forget();
     }
 
     // Otherwise remove the stale weak reference and check the next one
-    mTabChildList.RemoveLastElement();
+    mBrowserChildList.RemoveLastElement();
   }
 
   return nullptr;
 }
 
 NS_IMPL_ADDREF(WorkerLoadInfo::InterfaceRequestor)
 NS_IMPL_RELEASE(WorkerLoadInfo::InterfaceRequestor)
 NS_IMPL_QUERY_INTERFACE(WorkerLoadInfo::InterfaceRequestor,
--- a/dom/workers/WorkerLoadInfo.h
+++ b/dom/workers/WorkerLoadInfo.h
@@ -62,37 +62,37 @@ struct WorkerLoadInfoData {
   nsCOMPtr<nsIChannel> mChannel;
   nsCOMPtr<nsILoadGroup> mLoadGroup;
 
   class InterfaceRequestor final : public nsIInterfaceRequestor {
     NS_DECL_ISUPPORTS
 
    public:
     InterfaceRequestor(nsIPrincipal* aPrincipal, nsILoadGroup* aLoadGroup);
-    void MaybeAddTabChild(nsILoadGroup* aLoadGroup);
+    void MaybeAddBrowserChild(nsILoadGroup* aLoadGroup);
     NS_IMETHOD GetInterface(const nsIID& aIID, void** aSink) override;
 
     void SetOuterRequestor(nsIInterfaceRequestor* aOuterRequestor) {
       MOZ_ASSERT(!mOuterRequestor);
       MOZ_ASSERT(aOuterRequestor);
       mOuterRequestor = aOuterRequestor;
     }
 
    private:
     ~InterfaceRequestor() {}
 
-    already_AddRefed<nsIBrowserChild> GetAnyLiveTabChild();
+    already_AddRefed<nsIBrowserChild> GetAnyLiveBrowserChild();
 
     nsCOMPtr<nsILoadContext> mLoadContext;
     nsCOMPtr<nsIInterfaceRequestor> mOuterRequestor;
 
     // Array of weak references to nsIBrowserChild.  We do not want to keep
-    // TabChild actors alive for long after their ActorDestroy() methods are
+    // BrowserChild actors alive for long after their ActorDestroy() methods are
     // called.
-    nsTArray<nsWeakPtr> mTabChildList;
+    nsTArray<nsWeakPtr> mBrowserChildList;
   };
 
   // Only set if we have a custom overriden load group
   RefPtr<InterfaceRequestor> mInterfaceRequestor;
 
   nsAutoPtr<mozilla::ipc::PrincipalInfo> mPrincipalInfo;
   nsAutoPtr<mozilla::ipc::PrincipalInfo> mStoragePrincipalInfo;
   nsCString mDomain;
--- a/dom/workers/WorkerPrivate.cpp
+++ b/dom/workers/WorkerPrivate.cpp
@@ -1952,17 +1952,17 @@ bool WorkerPrivate::PrincipalURIMatchesS
   return mLoadInfo.PrincipalURIMatchesScriptURL();
 }
 #endif
 
 void WorkerPrivate::UpdateOverridenLoadGroup(nsILoadGroup* aBaseLoadGroup) {
   AssertIsOnMainThread();
 
   // The load group should have been overriden at init time.
-  mLoadInfo.mInterfaceRequestor->MaybeAddTabChild(aBaseLoadGroup);
+  mLoadInfo.mInterfaceRequestor->MaybeAddBrowserChild(aBaseLoadGroup);
 }
 
 #ifdef DEBUG
 
 void WorkerPrivate::AssertIsOnParentThread() const {
   if (GetParent()) {
     GetParent()->AssertIsOnWorkerThread();
   } else {
@@ -2578,17 +2578,17 @@ nsresult WorkerPrivate::GetLoadInfo(JSCo
 // static
 void WorkerPrivate::OverrideLoadInfoLoadGroup(WorkerLoadInfo& aLoadInfo,
                                               nsIPrincipal* aPrincipal) {
   MOZ_ASSERT(!aLoadInfo.mInterfaceRequestor);
   MOZ_ASSERT(aLoadInfo.mLoadingPrincipal == aPrincipal);
 
   aLoadInfo.mInterfaceRequestor =
       new WorkerLoadInfo::InterfaceRequestor(aPrincipal, aLoadInfo.mLoadGroup);
-  aLoadInfo.mInterfaceRequestor->MaybeAddTabChild(aLoadInfo.mLoadGroup);
+  aLoadInfo.mInterfaceRequestor->MaybeAddBrowserChild(aLoadInfo.mLoadGroup);
 
   // NOTE: this defaults the load context to:
   //  - private browsing = false
   //  - content = true
   //  - use remote tabs = false
   nsCOMPtr<nsILoadGroup> loadGroup = do_CreateInstance(NS_LOADGROUP_CONTRACTID);
 
   nsresult rv =
--- a/dom/workers/test/test_multi_sharedWorker_lifetimes.html
+++ b/dom/workers/test/test_multi_sharedWorker_lifetimes.html
@@ -97,17 +97,17 @@
           yield undefined;
 
           for (let i = 0; i < 3; i++) {
             info("Running GC");
             SpecialPowers.exactGC(sendToGenerator);
             yield undefined;
 
             // It seems using SpecialPowers.executeSoon() would make the
-            // entryGlobal being the TabChildGlobal (and that would make the
+            // entryGlobal being the BrowserChildGlobal (and that would make the
             // baseURI in the location assignment below being incorrect);
             // setTimeout on the otherhand ensures the entryGlobal is this
             // window.
             info("Waiting the event queue to clear");
             setTimeout(sendToGenerator, 0);
             yield undefined;
           }
 
--- a/gfx/ipc/GPUProcessManager.cpp
+++ b/gfx/ipc/GPUProcessManager.cpp
@@ -535,22 +535,22 @@ void GPUProcessManager::HandleProcessLos
   //      from the compositor thread of the UI process, or the compositor
   //      thread of the GPU process. However, no actual compositors should
   //      exist yet.
   //
   //  (6) Each ContentChild will receive new endpoints. It will destroy its
   //      Compositor/ImageBridgeChild singletons and recreate them, as well
   //      as invalidate all retained layers.
   //
-  //  (7) In addition, each ContentChild will ask each of its TabChildren
+  //  (7) In addition, each ContentChild will ask each of its BrowserChildren
   //      to re-request association with the compositor for the window
   //      owning the tab. The sequence of calls looks like:
   //        (a) [CONTENT] ContentChild::RecvReinitRendering
-  //        (b) [CONTENT] TabChild::ReinitRendering
-  //        (c) [CONTENT] TabChild::SendEnsureLayersConnected
+  //        (b) [CONTENT] BrowserChild::ReinitRendering
+  //        (c) [CONTENT] BrowserChild::SendEnsureLayersConnected
   //        (d)      [UI] BrowserParent::RecvEnsureLayersConnected
   //        (e)      [UI] RenderFrame::EnsureLayersConnected
   //        (f)      [UI] CompositorBridgeChild::SendNotifyChildRecreated
   //
   //      Note that at step (e), RenderFrame will call GetLayerManager
   //      on the nsIWidget owning the tab. This step ensures that a compositor
   //      exists for the window. If we decided to launch a new GPU Process,
   //      at this point we block until the process has launched and we're
--- a/gfx/layers/AnimationInfo.cpp
+++ b/gfx/layers/AnimationInfo.cpp
@@ -172,22 +172,22 @@ void AnimationInfo::EnumerateGenerationO
     const AnimationGenerationCallback& aCallback) {
   if (XRE_IsContentProcess()) {
     if (nsIWidget* widget = nsContentUtils::WidgetForContent(aContent)) {
       // In case of child processes, we might not have yet created the layer
       // manager.  That means there is no animation generation we have, thus
       // we call the callback function with |Nothing()| for the generation.
       //
       // Note that we need to use nsContentUtils::WidgetForContent() instead of
-      // TabChild::GetFrom(aFrame->PresShell())->WebWidget() because in the case
-      // of child popup content PuppetWidget::mTabChild is the same as the
-      // parent's one, which means mTabChild->IsLayersConnected() check in
-      // PuppetWidget::GetLayerManager queries the parent state, it results the
-      // assertion in the function failure.
-      if (widget->GetOwningTabChild() &&
+      // BrowserChild::GetFrom(aFrame->PresShell())->WebWidget() because in the
+      // case of child popup content PuppetWidget::mBrowserChild is the same as
+      // the parent's one, which means mBrowserChild->IsLayersConnected() check
+      // in PuppetWidget::GetLayerManager queries the parent state, it results
+      // the assertion in the function failure.
+      if (widget->GetOwningBrowserChild() &&
           !static_cast<widget::PuppetWidget*>(widget)->HasLayerManager()) {
         for (auto displayItem : LayerAnimationInfo::sDisplayItemTypes) {
           aCallback(Nothing(), displayItem);
         }
         return;
       }
     }
   }
--- a/gfx/layers/apz/util/APZEventState.cpp
+++ b/gfx/layers/apz/util/APZEventState.cpp
@@ -7,17 +7,17 @@
 #include "APZEventState.h"
 
 #include "ActiveElementManager.h"
 #include "APZCCallbackHelper.h"
 #include "gfxPrefs.h"
 #include "LayersLogging.h"
 #include "mozilla/BasicEvents.h"
 #include "mozilla/dom/MouseEventBinding.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/TabGroup.h"
 #include "mozilla/IntegerPrintfMacros.h"
 #include "mozilla/Move.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/PresShell.h"
 #include "mozilla/TouchEvents.h"
 #include "mozilla/layers/APZCCallbackHelper.h"
 #include "nsCOMPtr.h"
@@ -192,20 +192,21 @@ void APZEventState::ProcessSingleTap(con
   if (mTouchEndCancelled) {
     return;
   }
 
   LayoutDevicePoint ldPoint = aPoint * aScale;
 
   APZES_LOG("Scheduling timer for click event\n");
   nsCOMPtr<nsITimer> timer = NS_NewTimer();
-  dom::TabChild* tabChild = widget->GetOwningTabChild();
+  dom::BrowserChild* browserChild = widget->GetOwningBrowserChild();
 
-  if (tabChild && XRE_IsContentProcess()) {
-    timer->SetTarget(tabChild->TabGroup()->EventTargetFor(TaskCategory::Other));
+  if (browserChild && XRE_IsContentProcess()) {
+    timer->SetTarget(
+        browserChild->TabGroup()->EventTargetFor(TaskCategory::Other));
   }
   RefPtr<DelayedFireSingleTapEvent> callback = new DelayedFireSingleTapEvent(
       mWidget, ldPoint, aModifiers, aClickCount, timer, touchRollup);
   nsresult rv = timer->InitWithCallback(callback, sActiveDurationMs,
                                         nsITimer::TYPE_ONE_SHOT);
   if (NS_FAILED(rv)) {
     // Make |callback| not hold the timer, so they will both be destructed when
     // we leave the scope of this function.
--- a/gfx/layers/apz/util/ContentProcessController.cpp
+++ b/gfx/layers/apz/util/ContentProcessController.cpp
@@ -2,28 +2,28 @@
 /* vim: set ts=8 sts=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 "ContentProcessController.h"
 
 #include "mozilla/PresShell.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/layers/APZCCallbackHelper.h"
 #include "mozilla/layers/APZChild.h"
 #include "nsIContentInlines.h"
 
 #include "InputData.h"  // for InputData
 
 namespace mozilla {
 namespace layers {
 
 ContentProcessController::ContentProcessController(
-    const RefPtr<dom::TabChild>& aBrowser)
+    const RefPtr<dom::BrowserChild>& aBrowser)
     : mBrowser(aBrowser) {
   MOZ_ASSERT(mBrowser);
 }
 
 void ContentProcessController::NotifyLayerTransforms(
     const nsTArray<MatrixMessage>& aTransforms) {
   // This should never get called
   MOZ_ASSERT(false);
--- a/gfx/layers/apz/util/ContentProcessController.h
+++ b/gfx/layers/apz/util/ContentProcessController.h
@@ -9,38 +9,38 @@
 
 #include "mozilla/layers/GeckoContentController.h"
 
 class nsIObserver;
 
 namespace mozilla {
 
 namespace dom {
-class TabChild;
+class BrowserChild;
 }  // namespace dom
 
 namespace layers {
 
 class APZChild;
 
 /**
- * ContentProcessController is a GeckoContentController for a TabChild, and is
- * always remoted using PAPZ/APZChild.
+ * ContentProcessController is a GeckoContentController for a BrowserChild, and
+ * is always remoted using PAPZ/APZChild.
  *
  * ContentProcessController is created in ContentChild when a layer tree id has
  * been allocated for a PBrowser that lives in that content process, and is
  * destroyed when the Destroy message is received, or when the tab dies.
  *
  * If ContentProcessController needs to implement a new method on
  * GeckoContentController PAPZ, APZChild, and RemoteContentController must be
  * updated to handle it.
  */
 class ContentProcessController final : public GeckoContentController {
  public:
-  explicit ContentProcessController(const RefPtr<dom::TabChild>& aBrowser);
+  explicit ContentProcessController(const RefPtr<dom::BrowserChild>& aBrowser);
 
   // GeckoContentController
 
   void NotifyLayerTransforms(
       const nsTArray<MatrixMessage>& aTransforms) override;
 
   void RequestContentRepaint(const RepaintRequest& aRequest) override;
 
@@ -75,16 +75,16 @@ class ContentProcessController final : p
   void PostDelayedTask(already_AddRefed<Runnable> aRunnable,
                        int aDelayMs) override;
 
   bool IsRepaintThread() override;
 
   void DispatchToRepaintThread(already_AddRefed<Runnable> aTask) override;
 
  private:
-  RefPtr<dom::TabChild> mBrowser;
+  RefPtr<dom::BrowserChild> mBrowser;
 };
 
 }  // namespace layers
 
 }  // namespace mozilla
 
 #endif  // mozilla_layers_ContentProcessController_h
--- a/gfx/layers/apz/util/InputAPZContext.h
+++ b/gfx/layers/apz/util/InputAPZContext.h
@@ -15,17 +15,17 @@ namespace layers {
 
 // InputAPZContext is used to communicate various pieces of information
 // around the codebase without having to plumb it through lots of functions
 // and codepaths. Conceptually it is attached to a WidgetInputEvent that is
 // relevant to APZ.
 //
 // There are two types of information bits propagated using this class. One
 // type is propagated "downwards" (from a process entry point like nsBaseWidget
-// or TabChild) into deeper code that is run during complicated operations
+// or BrowserChild) into deeper code that is run during complicated operations
 // like event dispatch. The other type is information that is propagated
 // "upwards", from the deeper code back to the entry point.
 class MOZ_STACK_CLASS InputAPZContext {
  private:
   // State that is propagated downwards from InputAPZContext creation into
   // "deeper" code.
   static ScrollableLayerGuid sGuid;
   static uint64_t sBlockId;
--- a/gfx/layers/client/ClientLayerManager.cpp
+++ b/gfx/layers/client/ClientLayerManager.cpp
@@ -5,17 +5,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "ClientLayerManager.h"
 #include "GeckoProfiler.h"       // for AUTO_PROFILER_LABEL
 #include "gfxEnv.h"              // for gfxEnv
 #include "gfxPrefs.h"            // for gfxPrefs::LayersTile...
 #include "mozilla/Assertions.h"  // for MOZ_ASSERT, etc
 #include "mozilla/Hal.h"
-#include "mozilla/dom/TabChild.h"      // for TabChild
+#include "mozilla/dom/BrowserChild.h"  // for BrowserChild
 #include "mozilla/dom/TabGroup.h"      // for TabGroup
 #include "mozilla/hal_sandbox/PHal.h"  // for ScreenConfiguration
 #include "mozilla/layers/CompositableClient.h"
 #include "mozilla/layers/CompositorBridgeChild.h"  // for CompositorBridgeChild
 #include "mozilla/layers/FrameUniformityData.h"
 #include "mozilla/layers/ISurfaceAllocator.h"
 #include "mozilla/layers/LayersMessages.h"  // for EditReply, etc
 #include "mozilla/layers/LayersSurfaces.h"  // for SurfaceDescriptor
@@ -106,18 +106,18 @@ void ClientLayerManager::Destroy() {
   }
 
   // Forget the widget pointer in case we outlive our owning widget.
   mWidget = nullptr;
 }
 
 TabGroup* ClientLayerManager::GetTabGroup() {
   if (mWidget) {
-    if (TabChild* tabChild = mWidget->GetOwningTabChild()) {
-      return tabChild->TabGroup();
+    if (BrowserChild* browserChild = mWidget->GetOwningBrowserChild()) {
+      return browserChild->TabGroup();
     }
   }
   return nullptr;
 }
 
 int32_t ClientLayerManager::GetMaxTextureSize() const {
   return mForwarder->GetMaxTextureSize();
 }
@@ -196,17 +196,17 @@ bool ClientLayerManager::BeginTransactio
   mPhase = PHASE_CONSTRUCTION;
 
   MOZ_ASSERT(mKeepAlive.IsEmpty(), "uncommitted txn?");
 
   // If the last transaction was incomplete (a failed DoEmptyTransaction),
   // don't signal a new transaction to ShadowLayerForwarder. Carry on adding
   // to the previous transaction.
   hal::ScreenOrientation orientation;
-  if (dom::TabChild* window = mWidget->GetOwningTabChild()) {
+  if (dom::BrowserChild* window = mWidget->GetOwningBrowserChild()) {
     orientation = window->GetOrientation();
   } else {
     hal::ScreenConfiguration currentConfig;
     hal::GetCurrentScreenConfiguration(&currentConfig);
     orientation = currentConfig.orientation();
   }
   LayoutDeviceIntRect targetBounds = mWidget->GetNaturalBounds();
   targetBounds.MoveTo(0, 0);
@@ -217,17 +217,17 @@ bool ClientLayerManager::BeginTransactio
   // enabled, then the entire buffer of painted layers might be
   // composited (including resampling) asynchronously before we get
   // a chance to repaint, so we have to ensure that it's all valid
   // and not rotated.
   //
   // Desktop does not support async zoom yet, so we ignore this for those
   // platforms.
 #if defined(MOZ_WIDGET_ANDROID) || defined(MOZ_WIDGET_UIKIT)
-  if (mWidget && mWidget->GetOwningTabChild()) {
+  if (mWidget && mWidget->GetOwningBrowserChild()) {
     mCompositorMightResample = AsyncPanZoomEnabled();
   }
 #endif
 
   // If we have a non-default target, we need to let our shadow manager draw
   // to it. This will happen at the end of the transaction.
   if (aTarget && XRE_IsParentProcess()) {
     mShadowTarget = aTarget;
@@ -720,17 +720,17 @@ void ClientLayerManager::ForwardTransact
   }
 
   mPhase = PHASE_NONE;
 
   // this may result in Layers being deleted, which results in
   // PLayer::Send__delete__() and DeallocShmem()
   mKeepAlive.Clear();
 
-  TabChild* window = mWidget ? mWidget->GetOwningTabChild() : nullptr;
+  BrowserChild* window = mWidget ? mWidget->GetOwningBrowserChild() : nullptr;
   if (window) {
     TimeStamp end = TimeStamp::Now();
     window->DidRequestComposite(start, end);
   }
 }
 
 ShadowableLayer* ClientLayerManager::Hold(Layer* aLayer) {
   MOZ_ASSERT(HasShadowManager(), "top-level tree, no shadow tree to remote to");
--- a/gfx/layers/ipc/APZCTreeManagerParent.cpp
+++ b/gfx/layers/ipc/APZCTreeManagerParent.cpp
@@ -139,17 +139,17 @@ mozilla::ipc::IPCResult APZCTreeManagerP
 
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult APZCTreeManagerParent::RecvStartAutoscroll(
     const SLGuidAndRenderRoot& aGuid, const ScreenPoint& aAnchorLocation) {
   // Unlike RecvStartScrollbarDrag(), this message comes from the parent
   // process (via nsBaseWidget::mAPZC) rather than from the child process
-  // (via TabChild::mApzcTreeManager), so there is no need to check the
+  // (via BrowserChild::mApzcTreeManager), so there is no need to check the
   // layers id against mWrRootId (and in any case, it wouldn't match, because
   // mWrRootId stores the parent process's layers id, while nsBaseWidget is
   // sending the child process's layers id).
 
   mUpdater->RunOnControllerThread(
       UpdaterQueueSelector(mWrRootId),
       NewRunnableMethod<SLGuidAndRenderRoot, ScreenPoint>(
           "layers::IAPZCTreeManager::StartAutoscroll", mTreeManager,
--- a/gfx/layers/ipc/APZChild.cpp
+++ b/gfx/layers/ipc/APZChild.cpp
@@ -2,17 +2,17 @@
 /* vim: set ts=8 sts=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 "mozilla/layers/APZChild.h"
 #include "mozilla/layers/GeckoContentController.h"
 
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/layers/APZCCallbackHelper.h"
 
 #include "InputData.h"  // for InputData
 
 namespace mozilla {
 namespace layers {
 
 APZChild::APZChild(RefPtr<GeckoContentController> aController)
--- a/gfx/layers/ipc/CompositorBridgeChild.cpp
+++ b/gfx/layers/ipc/CompositorBridgeChild.cpp
@@ -33,32 +33,32 @@
 #include "mozilla/Telemetry.h"
 #include "nsAutoPtr.h"
 #include "nsDebug.h"          // for NS_WARNING
 #include "nsIObserver.h"      // for nsIObserver
 #include "nsISupportsImpl.h"  // for MOZ_COUNT_CTOR, etc
 #include "nsTArray.h"         // for nsTArray, nsTArray_Impl
 #include "nsXULAppAPI.h"      // for XRE_GetIOMessageLoop, etc
 #include "FrameLayerBuilder.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/BrowserParent.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/Unused.h"
 #include "mozilla/DebugOnly.h"
 #if defined(XP_WIN)
 #  include "WinUtils.h"
 #endif
 #include "mozilla/widget/CompositorWidget.h"
 #ifdef MOZ_WIDGET_SUPPORTS_OOP_COMPOSITING
 #  include "mozilla/widget/CompositorWidgetChild.h"
 #endif
 #include "VsyncSource.h"
 
 using mozilla::Unused;
-using mozilla::dom::TabChildBase;
+using mozilla::dom::BrowserChildBase;
 using mozilla::gfx::GPUProcessManager;
 using mozilla::layers::LayerTransactionChild;
 
 namespace mozilla {
 namespace layers {
 
 static int sShmemCreationCounter = 0;
 
@@ -285,22 +285,22 @@ bool CompositorBridgeChild::CompositorIs
   return bridge->OtherPid() != dom::ContentChild::GetSingleton()->OtherPid();
 }
 
 PLayerTransactionChild* CompositorBridgeChild::AllocPLayerTransactionChild(
     const nsTArray<LayersBackend>& aBackendHints, const LayersId& aId) {
   LayerTransactionChild* c = new LayerTransactionChild(aId);
   c->AddIPDLReference();
 
-  TabChild* tabChild = TabChild::GetFrom(c->GetId());
+  BrowserChild* browserChild = BrowserChild::GetFrom(c->GetId());
 
   // Do the DOM Labeling.
-  if (tabChild) {
+  if (browserChild) {
     nsCOMPtr<nsIEventTarget> target =
-        tabChild->TabGroup()->EventTargetFor(TaskCategory::Other);
+        browserChild->TabGroup()->EventTargetFor(TaskCategory::Other);
     SetEventTargetForActor(c, target);
     MOZ_ASSERT(c->GetActorEventTarget());
   }
 
   return c;
 }
 
 bool CompositorBridgeChild::DeallocPLayerTransactionChild(
@@ -312,17 +312,17 @@ bool CompositorBridgeChild::DeallocPLaye
 }
 
 mozilla::ipc::IPCResult CompositorBridgeChild::RecvInvalidateLayers(
     const LayersId& aLayersId) {
   if (mLayerManager) {
     MOZ_ASSERT(!aLayersId.IsValid());
     FrameLayerBuilder::InvalidateAllLayers(mLayerManager);
   } else if (aLayersId.IsValid()) {
-    if (dom::TabChild* child = dom::TabChild::GetFrom(aLayersId)) {
+    if (dom::BrowserChild* child = dom::BrowserChild::GetFrom(aLayersId)) {
       child->InvalidateLayers();
     }
   }
   return IPC_OK();
 }
 
 #if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
 static void CalculatePluginClip(
@@ -505,17 +505,17 @@ mozilla::ipc::IPCResult CompositorBridge
     MOZ_ASSERT(!aId.IsValid());
     MOZ_ASSERT(mLayerManager->GetBackendType() ==
                    LayersBackend::LAYERS_CLIENT ||
                mLayerManager->GetBackendType() == LayersBackend::LAYERS_WR);
     // Hold a reference to keep LayerManager alive. See Bug 1242668.
     RefPtr<LayerManager> m = mLayerManager;
     m->DidComposite(aTransactionId, aCompositeStart, aCompositeEnd);
   } else if (aId.IsValid()) {
-    RefPtr<dom::TabChild> child = dom::TabChild::GetFrom(aId);
+    RefPtr<dom::BrowserChild> child = dom::BrowserChild::GetFrom(aId);
     if (child) {
       child->DidComposite(aTransactionId, aCompositeStart, aCompositeEnd);
     }
   }
 
   for (size_t i = 0; i < texturePools.Length(); i++) {
     texturePools[i]->ReturnDeferredClients();
   }
@@ -626,57 +626,62 @@ LayersId CompositorBridgeChild::SharedFr
 }
 
 uint32_t CompositorBridgeChild::SharedFrameMetricsData::GetAPZCId() {
   return mAPZCId;
 }
 
 mozilla::ipc::IPCResult CompositorBridgeChild::RecvRemotePaintIsReady() {
   // Used on the content thread, this bounces the message to the
-  // BrowserParent (via the TabChild) if the notification was previously
+  // BrowserParent (via the BrowserChild) if the notification was previously
   // requested. XPCOM gives a soup of compiler errors when trying to
   // do_QueryReference so I'm using static_cast<>
   MOZ_LAYERS_LOG(
       ("[RemoteGfx] CompositorBridgeChild received RemotePaintIsReady"));
-  RefPtr<nsISupports> iTabChildBase(do_QueryReferent(mWeakTabChild));
-  if (!iTabChildBase) {
+  RefPtr<nsISupports> iBrowserChildBase(do_QueryReferent(mWeakBrowserChild));
+  if (!iBrowserChildBase) {
     MOZ_LAYERS_LOG(
-        ("[RemoteGfx] Note: TabChild was released before RemotePaintIsReady. "
+        ("[RemoteGfx] Note: BrowserChild was released before "
+         "RemotePaintIsReady. "
          "MozAfterRemotePaint will not be sent to listener."));
     return IPC_OK();
   }
-  TabChildBase* tabChildBase = static_cast<TabChildBase*>(iTabChildBase.get());
-  TabChild* tabChild = static_cast<TabChild*>(tabChildBase);
-  MOZ_ASSERT(tabChild);
-  Unused << tabChild->SendRemotePaintIsReady();
-  mWeakTabChild = nullptr;
+  BrowserChildBase* browserChildBase =
+      static_cast<BrowserChildBase*>(iBrowserChildBase.get());
+  BrowserChild* browserChild = static_cast<BrowserChild*>(browserChildBase);
+  MOZ_ASSERT(browserChild);
+  Unused << browserChild->SendRemotePaintIsReady();
+  mWeakBrowserChild = nullptr;
   return IPC_OK();
 }
 
-void CompositorBridgeChild::RequestNotifyAfterRemotePaint(TabChild* aTabChild) {
-  MOZ_ASSERT(aTabChild,
-             "NULL TabChild not allowed in "
+void CompositorBridgeChild::RequestNotifyAfterRemotePaint(
+    BrowserChild* aBrowserChild) {
+  MOZ_ASSERT(aBrowserChild,
+             "NULL BrowserChild not allowed in "
              "CompositorBridgeChild::RequestNotifyAfterRemotePaint");
-  mWeakTabChild =
-      do_GetWeakReference(static_cast<dom::TabChildBase*>(aTabChild));
+  mWeakBrowserChild =
+      do_GetWeakReference(static_cast<dom::BrowserChildBase*>(aBrowserChild));
   if (!mCanSend) {
     return;
   }
   Unused << SendRequestNotifyAfterRemotePaint();
 }
 
-void CompositorBridgeChild::CancelNotifyAfterRemotePaint(TabChild* aTabChild) {
-  RefPtr<nsISupports> iTabChildBase(do_QueryReferent(mWeakTabChild));
-  if (!iTabChildBase) {
+void CompositorBridgeChild::CancelNotifyAfterRemotePaint(
+    BrowserChild* aBrowserChild) {
+  RefPtr<nsISupports> iBrowserChildBase(do_QueryReferent(mWeakBrowserChild));
+  if (!iBrowserChildBase) {
     return;
   }
-  TabChildBase* tabChildBase = static_cast<TabChildBase*>(iTabChildBase.get());
-  TabChild* tabChild = static_cast<TabChild*>(tabChildBase);
-  if (tabChild == aTabChild) {
-    mWeakTabChild = nullptr;
+  BrowserChildBase* browserChildBase =
+      static_cast<BrowserChildBase*>(iBrowserChildBase.get());
+  BrowserChild* browserChild = static_cast<BrowserChild*>(browserChildBase);
+  if (browserChild == aBrowserChild) {
+    mWeakBrowserChild = nullptr;
   }
 }
 
 bool CompositorBridgeChild::SendWillClose() {
   MOZ_RELEASE_ASSERT(mCanSend);
   return PCompositorBridgeChild::SendWillClose();
 }
 
@@ -945,20 +950,20 @@ bool CompositorBridgeChild::DeallocPComp
 #endif
 }
 
 PAPZCTreeManagerChild* CompositorBridgeChild::AllocPAPZCTreeManagerChild(
     const LayersId& aLayersId) {
   APZCTreeManagerChild* child = new APZCTreeManagerChild();
   child->AddIPDLReference();
   if (aLayersId.IsValid()) {
-    TabChild* tabChild = TabChild::GetFrom(aLayersId);
-    if (tabChild) {
+    BrowserChild* browserChild = BrowserChild::GetFrom(aLayersId);
+    if (browserChild) {
       SetEventTargetForActor(
-          child, tabChild->TabGroup()->EventTargetFor(TaskCategory::Other));
+          child, browserChild->TabGroup()->EventTargetFor(TaskCategory::Other));
       MOZ_ASSERT(child->GetActorEventTarget());
     }
   }
 
   return child;
 }
 
 PAPZChild* CompositorBridgeChild::AllocPAPZChild(const LayersId& aLayersId) {
--- a/gfx/layers/ipc/CompositorBridgeChild.h
+++ b/gfx/layers/ipc/CompositorBridgeChild.h
@@ -23,26 +23,26 @@
 #include "nsIWeakReferenceUtils.h"
 #include "ThreadSafeRefcountingWithMainThreadDestruction.h"
 
 #include <unordered_map>
 
 namespace mozilla {
 
 namespace dom {
-class TabChild;
+class BrowserChild;
 }  // namespace dom
 
 namespace widget {
 class CompositorWidget;
 }  // namespace widget
 
 namespace layers {
 
-using mozilla::dom::TabChild;
+using mozilla::dom::BrowserChild;
 
 class IAPZCTreeManager;
 class APZCTreeManagerChild;
 class ClientLayerManager;
 class CompositorBridgeParent;
 class CompositorManagerChild;
 class CompositorOptions;
 class TextureClient;
@@ -120,22 +120,22 @@ class CompositorBridgeChild final : publ
                                LayersBackend aLayersBackend,
                                TextureFlags aFlags, uint64_t aSerial,
                                wr::MaybeExternalImageId& aExternalImageId,
                                nsIEventTarget* aTarget) override;
 
   /**
    * Request that the parent tell us when graphics are ready on GPU.
    * When we get that message, we bounce it to the BrowserParent via
-   * the TabChild
-   * @param tabChild The object to bounce the note to.  Non-NULL.
+   * the BrowserChild
+   * @param browserChild The object to bounce the note to.  Non-NULL.
    */
-  void RequestNotifyAfterRemotePaint(TabChild* aTabChild);
+  void RequestNotifyAfterRemotePaint(BrowserChild* aBrowserChild);
 
-  void CancelNotifyAfterRemotePaint(TabChild* aTabChild);
+  void CancelNotifyAfterRemotePaint(BrowserChild* aBrowserChild);
 
   // Beware that these methods don't override their super-class equivalent
   // (which are not virtual), they just overload them. All of these Send*
   // methods just add a sanity check (that it is not too late send a message)
   // and forward the call to the super-class's equivalent method. This means
   // that it is correct to call directly the super-class methods, but you won't
   // get the extra safety provided here.
   bool SendWillClose();
@@ -322,19 +322,19 @@ class CompositorBridgeChild final : publ
   // When not multi-process, hold a reference to the CompositorBridgeParent to
   // keep it alive. This reference should be null in multi-process.
   RefPtr<CompositorBridgeParent> mCompositorBridgeParent;
 
   // The ViewID of the FrameMetrics is used as the key for this hash table.
   // While this should be safe to use since the ViewID is unique
   nsClassHashtable<nsUint64HashKey, SharedFrameMetricsData> mFrameMetricsTable;
 
-  // Weakly hold the TabChild that made a request to be alerted when
+  // Weakly hold the BrowserChild that made a request to be alerted when
   // the transaction has been received.
-  nsWeakPtr mWeakTabChild;  // type is TabChild
+  nsWeakPtr mWeakBrowserChild;  // type is BrowserChild
 
   DISALLOW_EVIL_CONSTRUCTORS(CompositorBridgeChild);
 
   // True until the beginning of the two-step shutdown sequence of this actor.
   bool mCanSend;
 
   // False until the actor is destroyed.
   bool mActorDestroyed;
--- a/gfx/layers/ipc/CompositorManagerChild.cpp
+++ b/gfx/layers/ipc/CompositorManagerChild.cpp
@@ -8,17 +8,17 @@
 
 #include "gfxPrefs.h"
 #include "mozilla/layers/CompositorBridgeChild.h"
 #include "mozilla/layers/CompositorManagerParent.h"
 #include "mozilla/layers/CompositorThread.h"
 #include "mozilla/gfx/gfxVars.h"
 #include "mozilla/gfx/GPUProcessManager.h"
 #include "mozilla/dom/ContentChild.h"  // for ContentChild
-#include "mozilla/dom/TabChild.h"      // for TabChild
+#include "mozilla/dom/BrowserChild.h"  // for BrowserChild
 #include "mozilla/dom/TabGroup.h"      // for TabGroup
 #include "VsyncSource.h"
 
 namespace mozilla {
 namespace layers {
 
 using gfx::GPUProcessManager;
 
@@ -244,22 +244,23 @@ already_AddRefed<nsIEventTarget>
 CompositorManagerChild::GetSpecificMessageEventTarget(const Message& aMsg) {
   if (aMsg.type() == PCompositorBridge::Msg_DidComposite__ID) {
     LayersId layersId;
     PickleIterator iter(aMsg);
     if (!IPC::ReadParam(&aMsg, &iter, &layersId)) {
       return nullptr;
     }
 
-    TabChild* tabChild = TabChild::GetFrom(layersId);
-    if (!tabChild) {
+    BrowserChild* browserChild = BrowserChild::GetFrom(layersId);
+    if (!browserChild) {
       return nullptr;
     }
 
-    return do_AddRef(tabChild->TabGroup()->EventTargetFor(TaskCategory::Other));
+    return do_AddRef(
+        browserChild->TabGroup()->EventTargetFor(TaskCategory::Other));
   }
 
   if (aMsg.type() == PCompositorBridge::Msg_ParentAsyncMessages__ID) {
     return do_AddRef(SystemGroup::EventTargetFor(TaskCategory::Other));
   }
 
   return nullptr;
 }
--- a/gfx/layers/ipc/PCompositorBridge.ipdl
+++ b/gfx/layers/ipc/PCompositorBridge.ipdl
@@ -73,17 +73,17 @@ struct FrameStats {
  *   CompositorBridgeChild instance lives in the UI process, and the
  *   CompositorBridgeParent lives in the GPU process (if there is one) or the
  *   UI process otherwise.
  * - There is also a ContentCompositorBridgeParent/CompositorBridgeChild
  *   pair created for each content process. The ContentCompositorBridgeParent
  *   lives in the GPU process (if there is one) or the UI process otherwise. The
  *   CompositorBridgeChild is a singleton in the content process. Note that
  *   a given content process may have multiple browser instances (represented
- *   by TabChild instances), that are attached to different windows, and therefore
+ *   by BrowserChild instances), that are attached to different windows, and therefore
  *   rendered by different compositors. This means that when a browser instance
  *   sends messages via its CompositorBridgeChild, the corresponding
  *   ContentCompositorBridgeParent has to use the layers id in the message
  *   to find the correct compositor or CompositorBridgeParent to pass the message
  *   on to.
  *
  * One of the main goals of this protocol is to manage the PLayerTransaction sub-
  * protocol, which is per-browser. A lot of the functions in the protocol are
--- a/gfx/layers/ipc/ShadowLayers.h
+++ b/gfx/layers/ipc/ShadowLayers.h
@@ -427,18 +427,18 @@ class ShadowLayerForwarder final : publi
   bool mWindowOverlayChanged;
   InfallibleTArray<PluginWindowData> mPluginWindowData;
   UniquePtr<ActiveResourceTracker> mActiveResourceTracker;
   uint64_t mNextLayerHandle;
   nsDataHashtable<nsUint64HashKey, CompositableClient*> mCompositables;
   PaintTiming mPaintTiming;
   /**
    * ShadowLayerForwarder might dispatch tasks to main while puppet widget and
-   * tabChild don't exist anymore; therefore we hold the event target since its
-   *  lifecycle is independent of these objects.
+   * browserChild don't exist anymore; therefore we hold the event target since
+   * its lifecycle is independent of these objects.
    */
   nsCOMPtr<nsIEventTarget> mEventTarget;
 };
 
 class CompositableClient;
 
 /**
  * A ShadowableLayer is a Layer can be shared with a parent context
--- a/gfx/layers/wr/WebRenderLayerManager.cpp
+++ b/gfx/layers/wr/WebRenderLayerManager.cpp
@@ -5,17 +5,17 @@
  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "WebRenderLayerManager.h"
 
 #include "BasicLayers.h"
 #include "gfxPrefs.h"
 #include "GeckoProfiler.h"
 #include "LayersLogging.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/TabGroup.h"
 #include "mozilla/gfx/DrawEventRecorder.h"
 #include "mozilla/layers/CompositorBridgeChild.h"
 #include "mozilla/layers/StackingContextHelper.h"
 #include "mozilla/layers/TextureClient.h"
 #include "mozilla/layers/WebRenderBridgeChild.h"
 #include "mozilla/layers/UpdateImageHelper.h"
 #include "nsDisplayList.h"
@@ -597,26 +597,26 @@ void WebRenderLayerManager::ClearCachedR
 }
 
 void WebRenderLayerManager::WrUpdated() {
   ClearAsyncAnimations();
   mWebRenderCommandBuilder.ClearCachedResources();
   DiscardLocalImages();
 
   if (mWidget) {
-    if (dom::TabChild* tabChild = mWidget->GetOwningTabChild()) {
-      tabChild->SchedulePaint();
+    if (dom::BrowserChild* browserChild = mWidget->GetOwningBrowserChild()) {
+      browserChild->SchedulePaint();
     }
   }
 }
 
 dom::TabGroup* WebRenderLayerManager::GetTabGroup() {
   if (mWidget) {
-    if (dom::TabChild* tabChild = mWidget->GetOwningTabChild()) {
-      return tabChild->TabGroup();
+    if (dom::BrowserChild* browserChild = mWidget->GetOwningBrowserChild()) {
+      return browserChild->TabGroup();
     }
   }
   return nullptr;
 }
 
 void WebRenderLayerManager::UpdateTextureFactoryIdentifier(
     const TextureFactoryIdentifier& aNewIdentifier) {
   WrBridge()->IdentifyTextureHost(aNewIdentifier);
--- a/hal/sandbox/SandboxHal.cpp
+++ b/hal/sandbox/SandboxHal.cpp
@@ -5,17 +5,17 @@
  * You can obtain one at http://mozilla.org/MPL/2.0/. */
 
 #include "Hal.h"
 #include "HalLog.h"
 #include "mozilla/dom/ContentChild.h"
 #include "mozilla/hal_sandbox/PHalChild.h"
 #include "mozilla/hal_sandbox/PHalParent.h"
 #include "mozilla/dom/BrowserParent.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/fallback/FallbackScreenConfiguration.h"
 #include "mozilla/EnumeratedRange.h"
 #include "mozilla/Observer.h"
 #include "mozilla/Unused.h"
 #include "nsAutoPtr.h"
 #include "WindowIdentifier.h"
 
 using namespace mozilla;
@@ -39,26 +39,27 @@ static PHalChild* Hal() {
 
 void Vibrate(const nsTArray<uint32_t>& pattern, const WindowIdentifier& id) {
   HAL_LOG("Vibrate: Sending to parent process.");
 
   AutoTArray<uint32_t, 8> p(pattern);
 
   WindowIdentifier newID(id);
   newID.AppendProcessID();
-  Hal()->SendVibrate(p, newID.AsArray(), TabChild::GetFrom(newID.GetWindow()));
+  Hal()->SendVibrate(p, newID.AsArray(),
+                     BrowserChild::GetFrom(newID.GetWindow()));
 }
 
 void CancelVibrate(const WindowIdentifier& id) {
   HAL_LOG("CancelVibrate: Sending to parent process.");
 
   WindowIdentifier newID(id);
   newID.AppendProcessID();
   Hal()->SendCancelVibrate(newID.AsArray(),
-                           TabChild::GetFrom(newID.GetWindow()));
+                           BrowserChild::GetFrom(newID.GetWindow()));
 }
 
 void EnableBatteryNotifications() { Hal()->SendEnableBatteryNotifications(); }
 
 void DisableBatteryNotifications() { Hal()->SendDisableBatteryNotifications(); }
 
 void GetCurrentBatteryInformation(BatteryInformation* aBatteryInfo) {
   Hal()->SendGetCurrentBatteryInformation(aBatteryInfo);
--- a/ipc/glue/BackgroundChildImpl.cpp
+++ b/ipc/glue/BackgroundChildImpl.cpp
@@ -36,17 +36,17 @@
 #include "mozilla/dom/SharedWorkerChild.h"
 #include "mozilla/dom/StorageIPC.h"
 #include "mozilla/dom/GamepadEventChannelChild.h"
 #include "mozilla/dom/GamepadTestChannelChild.h"
 #include "mozilla/dom/LocalStorage.h"
 #include "mozilla/dom/MessagePortChild.h"
 #include "mozilla/dom/ServiceWorkerActors.h"
 #include "mozilla/dom/ServiceWorkerManagerChild.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/TabGroup.h"
 #include "mozilla/ipc/IPCStreamAlloc.h"
 #include "mozilla/ipc/PBackgroundTestChild.h"
 #include "mozilla/ipc/PChildToParentStreamChild.h"
 #include "mozilla/ipc/PParentToChildStreamChild.h"
 #include "mozilla/layout/VsyncChild.h"
 #include "mozilla/net/HttpBackgroundChannelChild.h"
 #include "mozilla/net/PUDPSocketChild.h"
--- a/js/ipc/JavaScriptShared.cpp
+++ b/js/ipc/JavaScriptShared.cpp
@@ -3,17 +3,17 @@
  *
  * 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 "JavaScriptShared.h"
 #include "mozilla/dom/BindingUtils.h"
 #include "mozilla/dom/CPOWManagerGetter.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "jsfriendapi.h"
 #include "js/Symbol.h"
 #include "xpcprivate.h"
 #include "WrapperFactory.h"
 #include "mozilla/Preferences.h"
 
 using namespace js;
 using namespace JS;
--- a/js/xpconnect/src/XPCJSRuntime.cpp
+++ b/js/xpconnect/src/XPCJSRuntime.cpp
@@ -1205,20 +1205,20 @@ static void GetRealmName(JS::Realm* real
           // Something went wrong. Anonymize the entire path to be
           // safe.
           name.Truncate(pathPos);
           name += "<anonymized?!>";
         }
       }
 
       // We might have a location like this:
-      //   inProcessTabChildGlobal?ownedBy=http://www.example.com/
+      //   inProcessBrowserChildGlobal?ownedBy=http://www.example.com/
       // The owner should be omitted if it's not a chrome: URI and we're
       // anonymizing.
-      static const char* ownedByPrefix = "inProcessTabChildGlobal?ownedBy=";
+      static const char* ownedByPrefix = "inProcessBrowserChildGlobal?ownedBy=";
       int ownedByPos = name.Find(ownedByPrefix);
       if (ownedByPos >= 0) {
         const char* chrome = "chrome:";
         int ownerPos = ownedByPos + strlen(ownedByPrefix);
         const nsDependentCSubstring& ownerFirstPart =
             Substring(name, ownerPos, strlen(chrome));
         if (!ownerFirstPart.EqualsASCII(chrome)) {
           name.Truncate(ownerPos);
--- a/layout/base/PresShell.cpp
+++ b/layout/base/PresShell.cpp
@@ -14,17 +14,17 @@
 #include "mozilla/AutoRestore.h"
 #include "mozilla/ContentIterator.h"
 #include "mozilla/EventDispatcher.h"
 #include "mozilla/EventStateManager.h"
 #include "mozilla/EventStates.h"
 #include "mozilla/GeckoMVMContext.h"
 #include "mozilla/IMEStateManager.h"
 #include "mozilla/MemoryReporting.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/Likely.h"
 #include "mozilla/Logging.h"
 #include "mozilla/MouseEvents.h"
 #include "mozilla/Sprintf.h"
 #include "mozilla/StaticPrefs.h"
 #include "mozilla/TextEvents.h"
 #include "mozilla/TimeStamp.h"
 #include "mozilla/TouchEvents.h"
@@ -5078,17 +5078,17 @@ static bool IsTransparentContainerElemen
   if (!docShell) {
     return false;
   }
 
   nsCOMPtr<nsPIDOMWindowOuter> pwin = docShell->GetWindow();
   if (!pwin) return false;
   nsCOMPtr<Element> containerElement = pwin->GetFrameElementInternal();
 
-  TabChild* tab = TabChild::GetFrom(docShell);
+  BrowserChild* tab = BrowserChild::GetFrom(docShell);
   if (tab) {
     // Check if presShell is the top PresShell. Only the top can
     // influence the canvas background color.
     if (aPresContext->GetPresShell() != tab->GetTopLevelPresShell()) {
       tab = nullptr;
     }
   }
 
@@ -10790,17 +10790,18 @@ bool nsIPresShell::DetermineFontSizeInfl
   }
 
   if (FontSizeInflationEmPerLine() == 0 && FontSizeInflationMinTwips() == 0) {
     return false;
   }
 
   // Force-enabling font inflation always trumps the heuristics here.
   if (!FontSizeInflationForceEnabled()) {
-    if (TabChild* tab = TabChild::GetFrom(static_cast<PresShell*>(this))) {
+    if (BrowserChild* tab =
+            BrowserChild::GetFrom(static_cast<PresShell*>(this))) {
       // We're in a child process.  Cancel inflation if we're not
       // async-pan zoomed.
       if (!tab->AsyncPanZoomEnabled()) {
         return false;
       }
     } else if (XRE_IsParentProcess()) {
       // We're in the master process.  Cancel inflation if it's been
       // explicitly disabled.
--- a/layout/base/nsPresContext.cpp
+++ b/layout/base/nsPresContext.cpp
@@ -54,17 +54,17 @@
 #include "mozilla/MemoryReporting.h"
 #include "mozilla/dom/Element.h"
 #include "nsIMessageManager.h"
 #include "mozilla/dom/HTMLBodyElement.h"
 #include "mozilla/dom/MediaQueryList.h"
 #include "mozilla/SMILAnimationController.h"
 #include "mozilla/css/ImageLoader.h"
 #include "mozilla/dom/PBrowserParent.h"
-#include "mozilla/dom/TabChild.h"
+#include "mozilla/dom/BrowserChild.h"
 #include "mozilla/dom/BrowserParent.h"
 #include "nsRefreshDriver.h&