Backed out 3 changesets (bug 1513878) for build bustage. CLOSED TREE
authorDorel Luca <dluca@mozilla.com>
Fri, 25 Jan 2019 21:16:50 +0200
changeset 515493 883b89f3a11f1416611a52cf015bcf4291739a6a
parent 515492 ab23c51b25a36b734225b3a4da48c230f3846cdb
child 515494 6043695f46a99e8f4c781ffbf1f2858d7c960aba
push id1953
push userffxbld-merge
push dateMon, 11 Mar 2019 12:10:20 +0000
treeherdermozilla-release@9c35dcbaa899 [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
bugs1513878
milestone66.0a1
backs outa480d92de046edf8092ea9a3f0ed56a060aea8eb
0333640041bbdba27dd114e9128235ce52826b82
48b36980fe1c99640eae8240a77d8addfc194689
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Backed out 3 changesets (bug 1513878) for build bustage. CLOSED TREE Backed out changeset a480d92de046 (bug 1513878) Backed out changeset 0333640041bb (bug 1513878) Backed out changeset 48b36980fe1c (bug 1513878)
dom/chrome-webidl/ChromeUtils.webidl
dom/chrome-webidl/JSWindowActor.webidl
dom/chrome-webidl/WindowGlobalActors.webidl
dom/chrome-webidl/moz.build
dom/ipc/ContentChild.cpp
dom/ipc/ContentChild.h
dom/ipc/ContentParent.cpp
dom/ipc/JSWindowActorChild.cpp
dom/ipc/JSWindowActorChild.h
dom/ipc/JSWindowActorParent.cpp
dom/ipc/JSWindowActorParent.h
dom/ipc/JSWindowActorService.cpp
dom/ipc/JSWindowActorService.h
dom/ipc/PContent.ipdl
dom/ipc/PreallocatedProcessManager.cpp
dom/ipc/WindowGlobalChild.cpp
dom/ipc/WindowGlobalChild.h
dom/ipc/WindowGlobalParent.cpp
dom/ipc/WindowGlobalParent.h
dom/ipc/moz.build
dom/ipc/tests/browser.ini
dom/ipc/tests/browser_JSWindowActor.js
dom/ipc/tests/chrome.ini
dom/ipc/tests/test_JSWindowActor.xul
dom/ipc/tests/test_registerWindowActor.js
dom/ipc/tests/xpcshell.ini
dom/webidl/Window.webidl
toolkit/actors/TestChild.jsm
toolkit/actors/TestParent.jsm
toolkit/actors/moz.build
tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js
--- a/dom/chrome-webidl/ChromeUtils.webidl
+++ b/dom/chrome-webidl/ChromeUtils.webidl
@@ -533,17 +533,17 @@ dictionary Base64URLEncodeOptions {
 dictionary WindowActorOptions {
   /** This fields are used for configuring individual sides of the actor. */
   required WindowActorSidedOptions parent;
   required WindowActorSidedOptions child;
 };
 
 dictionary WindowActorSidedOptions {
   /** The module path which should be loaded for the actor on this side. */
-  required ByteString moduleURI;
+  required DOMString moduleURI;
 };
 
 enum Base64URLDecodePadding {
   /**
    * Fails decoding if the input is unpadded. RFC 4648, section 3.2 requires
    * padding, unless the referring specification prohibits it.
    */
   "require",
deleted file mode 100644
--- a/dom/chrome-webidl/JSWindowActor.webidl
+++ /dev/null
@@ -1,16 +0,0 @@
-/* -*- 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/. */
-
-[ChromeOnly, ChromeConstructor]
-interface JSWindowActorParent {
-  readonly attribute WindowGlobalParent manager;
-};
-
-
-[ChromeOnly, ChromeConstructor]
-interface JSWindowActorChild {
-  readonly attribute WindowGlobalChild manager;
-};
\ No newline at end of file
--- a/dom/chrome-webidl/WindowGlobalActors.webidl
+++ b/dom/chrome-webidl/WindowGlobalActors.webidl
@@ -22,31 +22,25 @@ interface WindowGlobalParent {
 
   readonly attribute WindowGlobalChild? childActor; // in-process only
 
   // Information about the currently loaded document.
   readonly attribute Principal documentPrincipal;
   readonly attribute URI? documentURI;
 
   static WindowGlobalParent? getByInnerWindowId(unsigned long long innerWindowId);
-
-  [Throws]
-  JSWindowActorParent getActor(DOMString name);
 };
 
 [Exposed=Window, ChromeOnly]
 interface WindowGlobalChild {
   readonly attribute boolean isClosed;
   readonly attribute boolean isInProcess;
   readonly attribute BrowsingContext browsingContext;
 
   readonly attribute boolean isCurrentGlobal;
 
   readonly attribute unsigned long long innerWindowId;
   readonly attribute unsigned long long outerWindowId;
 
   readonly attribute WindowGlobalParent? parentActor; // in-process only
 
   static WindowGlobalChild? getByInnerWindowId(unsigned long long innerWIndowId);
-
-  [Throws]
-  JSWindowActorChild getActor(DOMString name);
 };
--- a/dom/chrome-webidl/moz.build
+++ b/dom/chrome-webidl/moz.build
@@ -35,17 +35,16 @@ PREPROCESSED_WEBIDL_FILES = [
 WEBIDL_FILES = [
     'BrowsingContext.webidl',
     'ChannelWrapper.webidl',
     'DominatorTree.webidl',
     'Flex.webidl',
     'HeapSnapshot.webidl',
     'InspectorUtils.webidl',
     'IteratorResult.webidl',
-    'JSWindowActor.webidl',
     'MatchGlob.webidl',
     'MatchPattern.webidl',
     'MessageManager.webidl',
     'MozDocumentObserver.webidl',
     'MozSharedMap.webidl',
     'MozStorageAsyncStatementParams.webidl',
     'MozStorageStatementParams.webidl',
     'MozStorageStatementRow.webidl',
--- a/dom/ipc/ContentChild.cpp
+++ b/dom/ipc/ContentChild.cpp
@@ -37,17 +37,16 @@
 #include "mozilla/dom/DOMPrefs.h"
 #include "mozilla/dom/ContentParent.h"
 #include "mozilla/dom/DataTransfer.h"
 #include "mozilla/dom/DocGroup.h"
 #include "mozilla/dom/ExternalHelperAppChild.h"
 #include "mozilla/dom/FileCreatorHelper.h"
 #include "mozilla/dom/GetFilesHelper.h"
 #include "mozilla/dom/IPCBlobUtils.h"
-#include "mozilla/dom/JSWindowActorService.h"
 #include "mozilla/dom/LSObject.h"
 #include "mozilla/dom/MemoryReportRequest.h"
 #include "mozilla/dom/PLoginReputationChild.h"
 #include "mozilla/dom/PostMessageEvent.h"
 #include "mozilla/dom/PushNotifier.h"
 #include "mozilla/dom/RemoteWorkerService.h"
 #include "mozilla/dom/ServiceWorkerManager.h"
 #include "mozilla/dom/TabGroup.h"
@@ -2562,23 +2561,16 @@ mozilla::ipc::IPCResult ContentChild::Re
     if (registration.revoked()) {
       BlobURLProtocolHandler::RemoveDataEntry(registration.url(), false);
     }
   }
 
   return IPC_OK();
 }
 
-mozilla::ipc::IPCResult ContentChild::RecvInitJSWindowActorInfos(
-    nsTArray<JSWindowActorInfo>&& aInfos) {
-  RefPtr<JSWindowActorService> actSvc = JSWindowActorService::GetSingleton();
-  actSvc->LoadJSWindowActorInfos(aInfos);
-  return IPC_OK();
-}
-
 mozilla::ipc::IPCResult ContentChild::RecvLastPrivateDocShellDestroyed() {
   nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
   obs->NotifyObservers(nullptr, "last-pb-context-exited", nullptr);
   return IPC_OK();
 }
 
 mozilla::ipc::IPCResult ContentChild::RecvNotifyProcessPriorityChanged(
     const hal::ProcessPriority& aPriority) {
--- a/dom/ipc/ContentChild.h
+++ b/dom/ipc/ContentChild.h
@@ -436,19 +436,16 @@ class ContentChild final : public PConte
   const nsAString& GetRemoteType() const;
 
   virtual mozilla::ipc::IPCResult RecvInitServiceWorkers(
       const ServiceWorkerConfiguration& aConfig) override;
 
   virtual mozilla::ipc::IPCResult RecvInitBlobURLs(
       nsTArray<BlobURLRegistrationData>&& aRegistations) override;
 
-  virtual mozilla::ipc::IPCResult RecvInitJSWindowActorInfos(
-      nsTArray<JSWindowActorInfo>&& aInfos) override;
-
   virtual mozilla::ipc::IPCResult RecvLastPrivateDocShellDestroyed() override;
 
   virtual mozilla::ipc::IPCResult RecvNotifyProcessPriorityChanged(
       const hal::ProcessPriority& aPriority) override;
 
   virtual mozilla::ipc::IPCResult RecvMinimizeMemoryUsage() override;
 
   virtual mozilla::ipc::IPCResult RecvLoadAndRegisterSheet(
--- a/dom/ipc/ContentParent.cpp
+++ b/dom/ipc/ContentParent.cpp
@@ -45,17 +45,16 @@
 #include "mozilla/dom/Element.h"
 #include "mozilla/dom/File.h"
 #include "mozilla/dom/FileCreatorHelper.h"
 #include "mozilla/dom/FileSystemSecurity.h"
 #include "mozilla/dom/IPCBlobUtils.h"
 #include "mozilla/dom/ExternalHelperAppParent.h"
 #include "mozilla/dom/GetFilesHelper.h"
 #include "mozilla/dom/GeolocationBinding.h"
-#include "mozilla/dom/JSWindowActorService.h"
 #include "mozilla/dom/LocalStorageCommon.h"
 #include "mozilla/dom/MemoryReportRequest.h"
 #include "mozilla/dom/Notification.h"
 #include "mozilla/dom/PContentBridgeParent.h"
 #include "mozilla/dom/PContentPermissionRequestParent.h"
 #include "mozilla/dom/PCycleCollectWithLogsParent.h"
 #include "mozilla/dom/PositionError.h"
 #include "mozilla/dom/ServiceWorkerRegistrar.h"
@@ -2714,24 +2713,16 @@ void ContentParent::InitInternal(Process
         nsresult rv = TransmitPermissionsForPrincipal(registration.principal());
         Unused << NS_WARN_IF(NS_FAILED(rv));
       }
 
       Unused << SendInitBlobURLs(registrations);
     }
   }
 
-  // Send down WindowActorOptions at startup to content process.
-  RefPtr<JSWindowActorService> actorSvc = JSWindowActorService::GetSingleton();
-  if (actorSvc) {
-    nsTArray<JSWindowActorInfo> infos;
-    actorSvc->GetJSWindowActorInfos(infos);
-    Unused << SendInitJSWindowActorInfos(infos);
-  }
-
   // Start up nsPluginHost and run FindPlugins to cache the plugin list.
   // If this isn't our first content process, just send over cached list.
   RefPtr<nsPluginHost> pluginHost = nsPluginHost::GetInst();
   pluginHost->SendPluginsToContent();
   MaybeEnableRemoteInputEventQueue();
 }
 
 bool ContentParent::IsAlive() const {
deleted file mode 100644
--- a/dom/ipc/JSWindowActorChild.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/JSWindowActorBinding.h"
-#include "mozilla/dom/JSWindowActorChild.h"
-#include "mozilla/dom/WindowGlobalChild.h"
-
-namespace mozilla {
-namespace dom {
-
-JSObject* JSWindowActorChild::WrapObject(JSContext* aCx,
-                                         JS::Handle<JSObject*> aGivenProto) {
-  return JSWindowActorChild_Binding::Wrap(aCx, this, aGivenProto);
-}
-
-WindowGlobalChild* JSWindowActorChild::Manager() const { return mManager; }
-
-void JSWindowActorChild::Init(WindowGlobalChild* aManager) {
-  MOZ_ASSERT(!mManager, "Cannot Init() a JSWindowActorChild twice!");
-  mManager = aManager;
-}
-
-nsISupports* JSWindowActorChild::GetParentObject() const {
-  return xpc::NativeGlobal(xpc::PrivilegedJunkScope());
-}
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(JSWindowActorChild, mManager)
-
-NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(JSWindowActorChild, AddRef)
-NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(JSWindowActorChild, Release)
-
-}  // namespace dom
-}  // namespace mozilla
deleted file mode 100644
--- a/dom/ipc/JSWindowActorChild.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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_JSWindowActorChild_h
-#define mozilla_dom_JSWindowActorChild_h
-
-#include "js/TypeDecls.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/ErrorResult.h"
-#include "mozilla/dom/BindingDeclarations.h"
-#include "nsCycleCollectionParticipant.h"
-#include "nsWrapperCache.h"
-
-namespace mozilla {
-namespace dom {
-
-class WindowGlobalChild;
-
-}  // namespace dom
-}  // namespace mozilla
-
-namespace mozilla {
-namespace dom {
-
-class JSWindowActorChild final : public nsWrapperCache {
- public:
-  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(JSWindowActorChild)
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(JSWindowActorChild)
-
- protected:
-  ~JSWindowActorChild() = default;
-
- public:
-  nsISupports* GetParentObject() const;
-
-  JSObject* WrapObject(JSContext* aCx,
-                       JS::Handle<JSObject*> aGivenProto) override;
-
-  static already_AddRefed<JSWindowActorChild> Constructor(GlobalObject& aGlobal,
-                                                          ErrorResult& aRv) {
-    return MakeAndAddRef<JSWindowActorChild>();
-  }
-
-  WindowGlobalChild* Manager() const;
-  void Init(WindowGlobalChild* aManager);
-
- private:
-  RefPtr<WindowGlobalChild> mManager;
-};
-
-}  // namespace dom
-}  // namespace mozilla
-
-#endif  // mozilla_dom_JSWindowActorChild_h
deleted file mode 100644
--- a/dom/ipc/JSWindowActorParent.cpp
+++ /dev/null
@@ -1,36 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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/JSWindowActorBinding.h"
-#include "mozilla/dom/JSWindowActorParent.h"
-#include "mozilla/dom/WindowGlobalParent.h"
-
-namespace mozilla {
-namespace dom {
-
-JSObject* JSWindowActorParent::WrapObject(JSContext* aCx,
-                                          JS::Handle<JSObject*> aGivenProto) {
-  return JSWindowActorParent_Binding::Wrap(aCx, this, aGivenProto);
-}
-
-WindowGlobalParent* JSWindowActorParent::Manager() const { return mManager; }
-
-void JSWindowActorParent::Init(WindowGlobalParent* aManager) {
-  MOZ_ASSERT(!mManager, "Cannot Init() a JSWindowActorParent twice!");
-  mManager = aManager;
-}
-
-nsISupports* JSWindowActorParent::GetParentObject() const {
-  return xpc::NativeGlobal(xpc::PrivilegedJunkScope());
-}
-
-NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(JSWindowActorParent, mManager)
-
-NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(JSWindowActorParent, AddRef)
-NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(JSWindowActorParent, Release)
-
-}  // namespace dom
-}  // namespace mozilla
deleted file mode 100644
--- a/dom/ipc/JSWindowActorParent.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-/* vim:set ts=2 sw=2 sts=2 et cindent: */
-/* 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_JSWindowActorParent_h
-#define mozilla_dom_JSWindowActorParent_h
-
-#include "js/TypeDecls.h"
-#include "mozilla/Attributes.h"
-#include "mozilla/ErrorResult.h"
-#include "mozilla/dom/BindingDeclarations.h"
-#include "nsCycleCollectionParticipant.h"
-#include "nsWrapperCache.h"
-
-namespace mozilla {
-namespace dom {
-
-class WindowGlobalParent;
-
-}  // namespace dom
-}  // namespace mozilla
-
-namespace mozilla {
-namespace dom {
-
-class JSWindowActorParent final : public nsWrapperCache {
- public:
-  NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(JSWindowActorParent)
-  NS_DECL_CYCLE_COLLECTION_SCRIPT_HOLDER_NATIVE_CLASS(JSWindowActorParent)
-
- protected:
-  ~JSWindowActorParent() = default;
-
- public:
-  nsISupports* GetParentObject() const;
-
-  JSObject* WrapObject(JSContext* aCx,
-                       JS::Handle<JSObject*> aGivenProto) override;
-
-  static already_AddRefed<JSWindowActorParent> Constructor(
-      GlobalObject& aGlobal, ErrorResult& aRv) {
-    return MakeAndAddRef<JSWindowActorParent>();
-  }
-
-  WindowGlobalParent* Manager() const;
-  void Init(WindowGlobalParent* aManager);
-
- private:
-  RefPtr<WindowGlobalParent> mManager;
-};
-
-}  // namespace dom
-}  // namespace mozilla
-
-#endif  // mozilla_dom_JSWindowActorParent_h
--- a/dom/ipc/JSWindowActorService.cpp
+++ b/dom/ipc/JSWindowActorService.cpp
@@ -1,140 +1,53 @@
 /* -*- 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/dom/JSWindowActorService.h"
-#include "mozilla/dom/ChromeUtilsBinding.h"
-#include "mozilla/dom/PContent.h"
+
 #include "mozilla/StaticPtr.h"
-#include "mozJSComponentLoader.h"
 
 namespace mozilla {
 namespace dom {
+struct WindowActorOptions;
 namespace {
 StaticRefPtr<JSWindowActorService> gJSWindowActorService;
 }
 
-JSWindowActorService::JSWindowActorService() { MOZ_ASSERT(NS_IsMainThread()); }
+JSWindowActorService::JSWindowActorService() {
+  MOZ_ASSERT(XRE_IsParentProcess());
+}
 
-JSWindowActorService::~JSWindowActorService() { MOZ_ASSERT(NS_IsMainThread()); }
+JSWindowActorService::~JSWindowActorService() {
+  MOZ_ASSERT(XRE_IsParentProcess());
+}
 
 /* static */ already_AddRefed<JSWindowActorService>
 JSWindowActorService::GetSingleton() {
-  MOZ_ASSERT(NS_IsMainThread());
   if (!gJSWindowActorService) {
     gJSWindowActorService = new JSWindowActorService();
     ClearOnShutdown(&gJSWindowActorService);
   }
 
   RefPtr<JSWindowActorService> service = gJSWindowActorService.get();
   return service.forget();
 }
 
 void JSWindowActorService::RegisterWindowActor(
     const nsAString& aName, const WindowActorOptions& aOptions,
     ErrorResult& aRv) {
-  MOZ_ASSERT(NS_IsMainThread());
   MOZ_ASSERT(XRE_IsParentProcess());
 
   auto entry = mDescriptors.LookupForAdd(aName);
   if (entry) {
     aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
     return;
   }
 
-  entry.OrInsert([&] { return new WindowActorOptions(aOptions); });
-
-  // Send child's WindowActorOptions to any existing content processes,
-  // because parent's WindowActorOptions can never be accessed in content.
-  for (auto* cp : ContentParent::AllProcesses(ContentParent::eLive)) {
-    nsTArray<JSWindowActorInfo> infos;
-    infos.AppendElement(
-        JSWindowActorInfo(nsString(aName), aOptions.mChild.mModuleURI));
-    Unused << cp->SendInitJSWindowActorInfos(infos);
-  }
-}
-
-void JSWindowActorService::LoadJSWindowActorInfos(
-    nsTArray<JSWindowActorInfo>& aInfos) {
-  MOZ_ASSERT(NS_IsMainThread());
-  MOZ_ASSERT(XRE_IsContentProcess());
-
-  for (uint32_t i = 0, len = aInfos.Length(); i < len; i++) {
-    auto entry = mDescriptors.LookupForAdd(aInfos[i].name());
-
-    entry.OrInsert([&] {
-      WindowActorOptions* option = new WindowActorOptions();
-      option->mChild.mModuleURI.Assign(aInfos[i].url());
-      return option;
-    });
-  }
-}
-
-void JSWindowActorService::GetJSWindowActorInfos(
-    nsTArray<JSWindowActorInfo>& aInfos) {
-  MOZ_ASSERT(NS_IsMainThread());
-  MOZ_ASSERT(XRE_IsParentProcess());
-
-  for (auto iter = mDescriptors.ConstIter(); !iter.Done(); iter.Next()) {
-    aInfos.AppendElement(JSWindowActorInfo(nsString(iter.Key()),
-                                           iter.Data()->mChild.mModuleURI));
-  }
-}
-
-void JSWindowActorService::ConstructActor(const nsAString& aName,
-                                          bool aParentSide,
-                                          JS::MutableHandleObject aActor,
-                                          ErrorResult& aRv) {
-  MOZ_ASSERT_IF(aParentSide, XRE_IsParentProcess());
-
-  // Constructing an actor requires a running script, so push an AutoEntryScript
-  // onto the stack.
-  AutoEntryScript aes(xpc::PrivilegedJunkScope(), "JSWindowActor construction");
-  JSContext* cx = aes.cx();
-
-  // Load our descriptor
-  const WindowActorOptions* descriptor = mDescriptors.Get(aName);
-  if (!descriptor) {
-    MOZ_ASSERT(false, "WindowActorOptions must be found in mDescriptors");
-    aRv.Throw(NS_ERROR_DOM_NOT_SUPPORTED_ERR);
-    return;
-  }
-
-  const WindowActorSidedOptions& side =
-      aParentSide ? descriptor->mParent : descriptor->mChild;
-
-  // Load the module using mozJSComponentLoader.
-  RefPtr<mozJSComponentLoader> loader = mozJSComponentLoader::Get();
-  MOZ_ASSERT(loader);
-
-  JS::RootedObject global(cx);
-  JS::RootedObject exports(cx);
-  aRv = loader->Import(cx, side.mModuleURI, &global, &exports);
-  if (aRv.Failed()) {
-    return;
-  }
-  MOZ_ASSERT(exports, "null exports!");
-
-  // Load the specific property from our module.
-  JS::RootedValue ctor(cx);
-  nsAutoString ctorName(aName);
-  ctorName.Append(aParentSide ? NS_LITERAL_STRING("Parent")
-                              : NS_LITERAL_STRING("Child"));
-  if (!JS_GetUCProperty(cx, exports, ctorName.get(), ctorName.Length(),
-                        &ctor)) {
-    aRv.NoteJSContextException(cx);
-    return;
-  }
-
-  // Invoke the constructor loaded from the module.
-  if (!JS::Construct(cx, ctor, JS::HandleValueArray::empty(), aActor)) {
-    aRv.NoteJSContextException(cx);
-    return;
-  }
+  entry.OrInsert([&] { return &aOptions; });
 }
 
 }  // namespace dom
 }  // namespace mozilla
\ No newline at end of file
--- a/dom/ipc/JSWindowActorService.h
+++ b/dom/ipc/JSWindowActorService.h
@@ -2,50 +2,35 @@
 /* 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_JSWindowActorService_h
 #define mozilla_dom_JSWindowActorService_h
 
-#include "nsClassHashtable.h"
-#include "nsString.h"
+#include "nsDataHashtable.h"
 
 namespace mozilla {
 namespace dom {
 struct WindowActorOptions;
-class JSWindowActorInfo;
 
 class JSWindowActorService final {
  public:
   NS_INLINE_DECL_REFCOUNTING(JSWindowActorService)
 
   static already_AddRefed<JSWindowActorService> GetSingleton();
 
   void RegisterWindowActor(const nsAString& aName,
                            const WindowActorOptions& aOptions,
                            ErrorResult& aRv);
 
-  // Register child's Window Actor from JSWindowActorInfos for content process.
-  void LoadJSWindowActorInfos(nsTArray<JSWindowActorInfo>& aInfos);
-
-  // Get the named of Window Actor and the child's WindowActorOptions
-  // from mDescriptors to JSWindowActorInfos.
-  void GetJSWindowActorInfos(nsTArray<JSWindowActorInfo>& aInfos);
-
-  // Load the module for the named Window Actor and contruct it.
-  // This method will not initialize the actor or set its manager,
-  // which is handled by callers.
-  void ConstructActor(const nsAString& aName, bool aParentSide,
-                      JS::MutableHandleObject aActor, ErrorResult& aRv);
-
  private:
   JSWindowActorService();
   ~JSWindowActorService();
 
-  nsClassHashtable<nsStringHashKey, WindowActorOptions> mDescriptors;
+  nsDataHashtable<nsStringHashKey, const WindowActorOptions*> mDescriptors;
 };
 
 }  // namespace dom
 }  // namespace mozilla
 
 #endif  // mozilla_dom_JSWindowActorService_h
\ No newline at end of file
--- a/dom/ipc/PContent.ipdl
+++ b/dom/ipc/PContent.ipdl
@@ -222,22 +222,16 @@ union FileCreationResult
 struct BlobURLRegistrationData
 {
   nsCString url;
   IPCBlob blob;
   Principal principal;
   bool revoked;
 };
 
-struct JSWindowActorInfo
-{
-  nsString name;
-  nsCString url;
-};
-
 struct GMPAPITags
 {
     nsCString api;
     nsCString[] tags;
 };
 
 struct GMPCapabilityData
 {
@@ -529,21 +523,16 @@ child:
      */
     async InitServiceWorkers(ServiceWorkerConfiguration aConfig);
 
     /**
      * Send BlobURLRegistrationData to child process.
      */
     async InitBlobURLs(BlobURLRegistrationData[] registrations);
 
-    /**
-     * Send JSWindowActorInfos to child process.
-     */
-    async InitJSWindowActorInfos(JSWindowActorInfo[] aInfos);
-
     async SetXPCOMProcessAttributes(XPCOMInitData xpcomInit,
                                     StructuredCloneData initialData,
                                     LookAndFeelInt[] lookAndFeelIntCache,
                                     /* used on MacOSX and Linux only: */
                                     SystemFontListEntry[] systemFontList);
 
     // Notify child that last-pb-context-exited notification was observed
     async LastPrivateDocShellDestroyed();
--- a/dom/ipc/PreallocatedProcessManager.cpp
+++ b/dom/ipc/PreallocatedProcessManager.cpp
@@ -8,23 +8,23 @@
 #include "mozilla/ClearOnShutdown.h"
 #include "mozilla/Preferences.h"
 #include "mozilla/Unused.h"
 #include "mozilla/dom/ContentParent.h"
 #include "mozilla/dom/ScriptSettings.h"
 #include "nsIPropertyBag2.h"
 #include "ProcessPriorityManager.h"
 #include "nsServiceManagerUtils.h"
-#include "nsIXULRuntime.h"
 
 // This number is fairly arbitrary ... the intention is to put off
 // launching another app process until the last one has finished
 // loading its content, to reduce CPU/memory/IO contention.
 #define DEFAULT_ALLOCATE_DELAY 1000
 
+using namespace mozilla;
 using namespace mozilla::hal;
 using namespace mozilla::dom;
 
 namespace mozilla {
 /**
  * This singleton class implements the static methods on
  * PreallocatedProcessManager.
  */
--- a/dom/ipc/WindowGlobalChild.cpp
+++ b/dom/ipc/WindowGlobalChild.cpp
@@ -4,20 +4,16 @@
  * 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/WindowGlobalChild.h"
 #include "mozilla/ipc/InProcessChild.h"
 #include "mozilla/dom/BrowsingContext.h"
 #include "mozilla/dom/WindowGlobalActorsBinding.h"
 
-#include "mozilla/dom/JSWindowActorBinding.h"
-#include "mozilla/dom/JSWindowActorChild.h"
-#include "mozilla/dom/JSWindowActorService.h"
-
 namespace mozilla {
 namespace dom {
 
 typedef nsRefPtrHashtable<nsUint64HashKey, WindowGlobalChild> WGCByIdMap;
 static StaticAutoPtr<WGCByIdMap> gWindowGlobalChildById;
 
 WindowGlobalChild::WindowGlobalChild(nsGlobalWindowInner* aWindow,
                                      dom::BrowsingContext* aBrowsingContext)
@@ -89,49 +85,16 @@ 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<JSWindowActorChild> WindowGlobalChild::GetActor(
-    const nsAString& aName, ErrorResult& aRv) {
-  // Check if this actor has already been created, and return it if it has.
-  if (mWindowActors.Contains(aName)) {
-    return do_AddRef(mWindowActors.GetWeak(aName));
-  }
-
-  // Otherwise, we want to create a new instance of this actor. Call into the
-  // JSWindowActorService to trigger construction.
-  RefPtr<JSWindowActorService> actorSvc = JSWindowActorService::GetSingleton();
-  if (!actorSvc) {
-    return nullptr;
-  }
-
-  JS::RootedObject obj(RootingCx());
-  actorSvc->ConstructActor(aName, /* aChildSide */ false, &obj, aRv);
-  if (aRv.Failed()) {
-    return nullptr;
-  }
-
-  // Unwrap our actor to a JSWindowActorChild object.
-  RefPtr<JSWindowActorChild> actor;
-  if (NS_FAILED(UNWRAP_OBJECT(JSWindowActorChild, &obj, actor))) {
-    return nullptr;
-  }
-
-  MOZ_RELEASE_ASSERT(!actor->Manager(),
-                     "mManager was already initialized once!");
-  actor->Init(this);
-  mWindowActors.Put(aName, actor);
-  return actor.forget();
-}
-
 void WindowGlobalChild::ActorDestroy(ActorDestroyReason aWhy) {
   mIPCClosed = true;
   gWindowGlobalChildById->Remove(mInnerWindowId);
 }
 
 WindowGlobalChild::~WindowGlobalChild() {
   MOZ_ASSERT(!gWindowGlobalChildById ||
              !gWindowGlobalChildById->Contains(mInnerWindowId));
@@ -142,15 +105,15 @@ JSObject* WindowGlobalChild::WrapObject(
   return WindowGlobalChild_Binding::Wrap(aCx, this, aGivenProto);
 }
 
 nsISupports* WindowGlobalChild::GetParentObject() {
   return xpc::NativeGlobal(xpc::PrivilegedJunkScope());
 }
 
 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WindowGlobalChild, mWindowGlobal,
-                                      mBrowsingContext, mWindowActors)
+                                      mBrowsingContext)
 
 NS_IMPL_CYCLE_COLLECTION_ROOT_NATIVE(WindowGlobalChild, AddRef)
 NS_IMPL_CYCLE_COLLECTION_UNROOT_NATIVE(WindowGlobalChild, Release)
 
 }  // namespace dom
 }  // namespace mozilla
--- a/dom/ipc/WindowGlobalChild.h
+++ b/dom/ipc/WindowGlobalChild.h
@@ -14,17 +14,16 @@
 class nsGlobalWindowInner;
 class nsDocShell;
 
 namespace mozilla {
 namespace dom {
 
 class BrowsingContext;
 class WindowGlobalParent;
-class JSWindowActorChild;
 
 /**
  * Actor for a single nsGlobalWindowInner. This actor is used to communicate
  * information to the parent process asynchronously.
  */
 class WindowGlobalChild : public nsWrapperCache, public PWindowGlobalChild {
  public:
   NS_INLINE_DECL_CYCLE_COLLECTING_NATIVE_REFCOUNTING(WindowGlobalChild)
@@ -53,20 +52,16 @@ class WindowGlobalChild : public nsWrapp
   uint64_t OuterWindowId() { return mOuterWindowId; }
 
   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 a JS actor object by name.
-  already_AddRefed<JSWindowActorChild> GetActor(const nsAString& aName,
-                                                ErrorResult& aRv);
-
   // Create and initialize the WindowGlobalChild object.
   static already_AddRefed<WindowGlobalChild> Create(
       nsGlobalWindowInner* aWindow);
 
   nsISupports* GetParentObject();
   JSObject* WrapObject(JSContext* aCx,
                        JS::Handle<JSObject*> aGivenProto) override;
 
@@ -74,17 +69,16 @@ class WindowGlobalChild : public nsWrapp
   virtual void ActorDestroy(ActorDestroyReason aWhy) override;
 
  private:
   WindowGlobalChild(nsGlobalWindowInner* aWindow, dom::BrowsingContext* aBc);
   ~WindowGlobalChild();
 
   RefPtr<nsGlobalWindowInner> mWindowGlobal;
   RefPtr<dom::BrowsingContext> mBrowsingContext;
-  nsRefPtrHashtable<nsStringHashKey, JSWindowActorChild> mWindowActors;
   uint64_t mInnerWindowId;
   uint64_t mOuterWindowId;
   bool mIPCClosed;
 };
 
 }  // namespace dom
 }  // namespace mozilla
 
--- a/dom/ipc/WindowGlobalParent.cpp
+++ b/dom/ipc/WindowGlobalParent.cpp
@@ -3,24 +3,16 @@
 /* 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/WindowGlobalParent.h"
 #include "mozilla/ipc/InProcessParent.h"
 #include "mozilla/dom/ChromeBrowsingContext.h"
 #include "mozilla/dom/WindowGlobalActorsBinding.h"
-#include "mozilla/dom/ChromeUtils.h"
-#include "mozJSComponentLoader.h"
-#include "nsContentUtils.h"
-#include "nsError.h"
-
-#include "mozilla/dom/JSWindowActorBinding.h"
-#include "mozilla/dom/JSWindowActorParent.h"
-#include "mozilla/dom/JSWindowActorService.h"
 
 using namespace mozilla::ipc;
 
 namespace mozilla {
 namespace dom {
 
 typedef nsRefPtrHashtable<nsUint64HashKey, WindowGlobalParent> WGPByIdMap;
 static StaticAutoPtr<WGPByIdMap> gWindowGlobalParentsById;
@@ -146,49 +138,16 @@ void WindowGlobalParent::ActorDestroy(Ac
   mBrowsingContext->UnregisterWindowGlobal(this);
 
   nsCOMPtr<nsIObserverService> obs = services::GetObserverService();
   if (obs) {
     obs->NotifyObservers(this, "window-global-destroyed", nullptr);
   }
 }
 
-already_AddRefed<JSWindowActorParent> WindowGlobalParent::GetActor(
-    const nsAString& aName, ErrorResult& aRv) {
-  // Check if this actor has already been created, and return it if it has.
-  if (mWindowActors.Contains(aName)) {
-    return do_AddRef(mWindowActors.GetWeak(aName));
-  }
-
-  // Otherwise, we want to create a new instance of this actor. Call into the
-  // JSWindowActorService to trigger construction
-  RefPtr<JSWindowActorService> actorSvc = JSWindowActorService::GetSingleton();
-  if (!actorSvc) {
-    return nullptr;
-  }
-
-  JS::RootedObject obj(RootingCx());
-  actorSvc->ConstructActor(aName, /* aParentSide */ true, &obj, aRv);
-  if (aRv.Failed()) {
-    return nullptr;
-  }
-
-  // Unwrap our actor to a JSWindowActorParent object.
-  RefPtr<JSWindowActorParent> actor;
-  if (NS_FAILED(UNWRAP_OBJECT(JSWindowActorParent, &obj, actor))) {
-    return nullptr;
-  }
-
-  MOZ_RELEASE_ASSERT(!actor->Manager(),
-                     "mManager was already initialized once!");
-  actor->Init(this);
-  mWindowActors.Put(aName, actor);
-  return actor.forget();
-}
-
 WindowGlobalParent::~WindowGlobalParent() {
   MOZ_ASSERT(!gWindowGlobalParentsById ||
              !gWindowGlobalParentsById->Contains(mInnerWindowId));
 }
 
 JSObject* WindowGlobalParent::WrapObject(JSContext* aCx,
                                          JS::Handle<JSObject*> aGivenProto) {
   return WindowGlobalParent_Binding::Wrap(aCx, this, aGivenProto);
@@ -199,15 +158,15 @@ nsISupports* WindowGlobalParent::GetPare
 }
 
 NS_INTERFACE_MAP_BEGIN_CYCLE_COLLECTION(WindowGlobalParent)
   NS_WRAPPERCACHE_INTERFACE_MAP_ENTRY
   NS_INTERFACE_MAP_ENTRY(nsISupports)
 NS_INTERFACE_MAP_END
 
 NS_IMPL_CYCLE_COLLECTION_WRAPPERCACHE(WindowGlobalParent, mFrameLoader,
-                                      mBrowsingContext, mWindowActors)
+                                      mBrowsingContext)
 
 NS_IMPL_CYCLE_COLLECTING_ADDREF(WindowGlobalParent)
 NS_IMPL_CYCLE_COLLECTING_RELEASE(WindowGlobalParent)
 
 }  // namespace dom
 }  // namespace mozilla
--- a/dom/ipc/WindowGlobalParent.h
+++ b/dom/ipc/WindowGlobalParent.h
@@ -16,17 +16,16 @@ class nsIPrincipal;
 class nsIURI;
 class nsFrameLoader;
 
 namespace mozilla {
 namespace dom {
 
 class ChromeBrowsingContext;
 class WindowGlobalChild;
-class JSWindowActorParent;
 
 /**
  * A handle in the parent process to a specific nsGlobalWindowInner object.
  */
 class WindowGlobalParent final : public nsISupports,
                                  public nsWrapperCache,
                                  public PWindowGlobalParent {
  public:
@@ -47,20 +46,16 @@ class WindowGlobalParent final : public 
   // Check if this actor is managed by PInProcess, as-in the document is loaded
   // in-process.
   bool IsInProcess() { return mInProcess; }
 
   // 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<WindowGlobalChild> GetChildActor();
 
-  // Get a JS actor object by name.
-  already_AddRefed<JSWindowActorParent> GetActor(const nsAString& aName,
-                                                 ErrorResult& aRv);
-
   // The principal of this WindowGlobal. This value will not change over the
   // lifetime of the WindowGlobal object, even to reflect changes in
   // |document.domain|.
   nsIPrincipal* DocumentPrincipal() { return mDocumentPrincipal; }
 
   // The BrowsingContext which this WindowGlobal has been loaded into.
   ChromeBrowsingContext* BrowsingContext() { return mBrowsingContext; }
 
@@ -102,17 +97,16 @@ class WindowGlobalParent final : public 
   ~WindowGlobalParent();
 
   // NOTE: This document principal doesn't reflect possible |document.domain|
   // mutations which may have been made in the actual document.
   nsCOMPtr<nsIPrincipal> mDocumentPrincipal;
   nsCOMPtr<nsIURI> mDocumentURI;
   RefPtr<nsFrameLoader> mFrameLoader;
   RefPtr<ChromeBrowsingContext> mBrowsingContext;
-  nsRefPtrHashtable<nsStringHashKey, JSWindowActorParent> mWindowActors;
   uint64_t mInnerWindowId;
   uint64_t mOuterWindowId;
   bool mInProcess;
   bool mIPCClosed;
 };
 
 }  // namespace dom
 }  // namespace mozilla
--- a/dom/ipc/moz.build
+++ b/dom/ipc/moz.build
@@ -35,18 +35,16 @@ EXPORTS.mozilla.dom += [
     'ContentBridgeParent.h',
     'ContentChild.h',
     'ContentParent.h',
     'ContentProcess.h',
     'ContentProcessManager.h',
     'CPOWManagerGetter.h',
     'DocShellMessageUtils.h',
     'FilePickerParent.h',
-    'JSWindowActorChild.h',
-    'JSWindowActorParent.h',
     'JSWindowActorService.h',
     'MemoryReportRequest.h',
     'nsIContentChild.h',
     'nsIContentParent.h',
     'PermissionMessageUtils.h',
     'TabChild.h',
     'TabContext.h',
     'TabMessageUtils.h',
@@ -70,18 +68,16 @@ UNIFIED_SOURCES += [
     'ColorPickerParent.cpp',
     'ContentBridgeChild.cpp',
     'ContentBridgeParent.cpp',
     'ContentParent.cpp',
     'ContentProcess.cpp',
     'ContentProcessManager.cpp',
     'DocShellMessageUtils.cpp',
     'FilePickerParent.cpp',
-    'JSWindowActorChild.cpp',
-    'JSWindowActorParent.cpp',
     'JSWindowActorService.cpp',
     'MemMapSnapshot.cpp',
     'MemoryReportRequest.cpp',
     'MMPrinter.cpp',
     'nsIContentChild.cpp',
     'nsIContentParent.cpp',
     'PermissionMessageUtils.cpp',
     'PreallocatedProcessManager.cpp',
--- a/dom/ipc/tests/browser.ini
+++ b/dom/ipc/tests/browser.ini
@@ -3,9 +3,8 @@ support-files =
   file_disableScript.html
   file_domainPolicy_base.html
 
 [browser_domainPolicy.js]
 [browser_memory_distribution_telemetry.js]
 skip-if = !e10 # This is an e10s only probe.
 [browser_remote_navigation_delay_telemetry.js]
 skip-if = !e10s # This is an e10s only probe.
-[browser_JSWindowActor.js]
\ No newline at end of file
deleted file mode 100644
--- a/dom/ipc/tests/browser_JSWindowActor.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Any copyright is dedicated to the Public Domain.
-   http://creativecommons.org/publicdomain/zero/1.0/ */
-"use strict";
-
-const URL = "about:blank";
-
-add_task(function test_registerWindowActor() {
-  let windowActorOptions = {
-    parent: {
-      moduleURI: "resource://testing-common/TestParent.jsm",
-    },
-    child: {
-      moduleURI: "resource://testing-common/TestChild.jsm",
-    },
-  };
-
-  ok(ChromeUtils, "Should be able to get the ChromeUtils interface");
-  ChromeUtils.registerWindowActor("Test", windowActorOptions);
-  SimpleTest.doesThrow(() =>
-    ChromeUtils.registerWindowActor("Test", windowActorOptions),
-    "Should throw if register has duplicate name.");
-});
-
-add_task(async function() {
-  await BrowserTestUtils.withNewTab({gBrowser, url: URL},
-    async function(browser) {
-      let parent = browser.browsingContext.currentWindowGlobal;
-      isnot(parent, null, "WindowGlobalParent should have value.");
-      let actorParent = parent.getActor("Test");
-      is(actorParent.show(), "TestParent", "actor show should have vaule.");
-      is(actorParent.manager, parent, "manager should match WindowGlobalParent.");
-
-      await ContentTask.spawn(
-        browser, {}, async function() {
-          let child = content.window.getWindowGlobalChild();
-          isnot(child, null, "WindowGlobalChild should have value.");
-          is(child.isInProcess, false, "Actor should be loaded in the content process.");
-          let actorChild = child.getActor("Test");
-          is(actorChild.show(), "TestChild", "actor show should have vaule.");
-          is(actorChild.manager, child, "manager should match WindowGlobalChild.");
-        });
-    });
-});
--- a/dom/ipc/tests/chrome.ini
+++ b/dom/ipc/tests/chrome.ini
@@ -1,8 +1,7 @@
 [DEFAULT]
 skip-if = os == 'android'
 support-files =
   process_error.xul
 
 [test_process_error.xul]
 skip-if = !crashreporter
-[test_JSWindowActor.xul]
\ No newline at end of file
deleted file mode 100644
--- a/dom/ipc/tests/test_JSWindowActor.xul
+++ /dev/null
@@ -1,42 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
-<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css"
-                 type="text/css"?>
-<window title="Test JSWindowActor"
-  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-  <script type="application/javascript"
-          src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
-
-  <!-- test results are displayed in the html:body -->
-  <body xmlns="http://www.w3.org/1999/xhtml">
-  </body>
-
-  <!-- test code goes here -->
-  <script type="application/javascript"><![CDATA[
-  let windowActorOptions = {
-    parent: {
-      moduleURI: "resource://testing-common/TestParent.jsm",
-    },
-    child: {
-      moduleURI: "resource://testing-common/TestChild.jsm",
-    },
-  };
-
-  // Test in-process getActor function
-  ChromeUtils.registerWindowActor("Test", windowActorOptions);
-  let parent = this.window.docShell.browsingContext.currentWindowGlobal;
-  isnot(parent, null, "WindowGlobalParent should have value.");
-  let actorParent = parent.getActor("Test");
-  is(actorParent.show(), "TestParent", "actor show should have vaule.");
-  is(actorParent.manager, parent, "manager should match WindowGlobalParent.");
-
-  let child = this.window.getWindowGlobalChild();
-  is(child.isInProcess, true, "Actor should be in-process.");
-  let actorChild = child.getActor("Test");
-  is(actorChild.show(), "TestChild", "actor show should have vaule.");
-  is(actorChild.manager, child, "manager should match WindowGlobalChild.");
-  ok(parent.childActor===child, "Actor should be the same.");
-  ok(parent.childActor.getActor("Test")===child.getActor("Test"), "GetActor should be the same.");
-
-  ]]></script>
-</window>
new file mode 100644
--- /dev/null
+++ b/dom/ipc/tests/test_registerWindowActor.js
@@ -0,0 +1,23 @@
+/* Any copyright is dedicated to the Public Domain.
+   http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+add_task(function test_registerWindowActor() {
+  let windowActorOptions = {
+    parent: {
+      moduleURI: "resource:///actors/TestParent.jsm",
+    },
+    child: {
+      moduleURI: "resource:///actors/TestChild.jsm",
+    },
+  };
+
+  Assert.ok(ChromeUtils, "Should be able to get the ChromeUtils interface");
+  ChromeUtils.registerWindowActor("Test", windowActorOptions);
+  Assert.ok(true);
+  Assert.throws(() =>
+    ChromeUtils.registerWindowActor("Test", windowActorOptions),
+    /NotSupportedError/,
+    "Should throw if register duplicate name.");
+});
--- a/dom/ipc/tests/xpcshell.ini
+++ b/dom/ipc/tests/xpcshell.ini
@@ -1,1 +1,2 @@
+[test_registerWindowActor.js]
 [test_sharedMap.js]
--- a/dom/webidl/Window.webidl
+++ b/dom/webidl/Window.webidl
@@ -365,19 +365,16 @@ partial interface Window {
   /**
    * Get the nsIDOMWindowUtils for this window.
    */
   [Constant, Throws, ChromeOnly]
   readonly attribute nsIDOMWindowUtils windowUtils;
 
   [ChromeOnly]
   readonly attribute boolean hasOpenerForInitialContentBrowser;
-
-  [ChromeOnly]
-  WindowGlobalChild getWindowGlobalChild();
 };
 
 Window implements TouchEventHandlers;
 
 Window implements OnErrorEventHandlerForWindow;
 
 #if defined(MOZ_WIDGET_ANDROID)
 // https://compat.spec.whatwg.org/#windoworientation-interface
deleted file mode 100644
--- a/toolkit/actors/TestChild.jsm
+++ /dev/null
@@ -1,17 +0,0 @@
-/* vim: set ts=2 sw=2 sts=2 et tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-var EXPORTED_SYMBOLS = ["TestChild"];
-
-class TestChild extends JSWindowActorChild {
-  constructor() {
-     super();
-  }
-
-  show() {
-    return "TestChild";
-  }
-}
deleted file mode 100644
--- a/toolkit/actors/TestParent.jsm
+++ /dev/null
@@ -1,17 +0,0 @@
-/* vim: set ts=2 sw=2 sts=2 et tw=80: */
-/* This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-"use strict";
-
-var EXPORTED_SYMBOLS = ["TestParent"];
-
-class TestParent extends JSWindowActorParent {
-  constructor() {
-    super();
-  }
-
-  show() {
-    return "TestParent";
-  }
-}
--- a/toolkit/actors/moz.build
+++ b/toolkit/actors/moz.build
@@ -5,21 +5,16 @@
 # file, You can obtain one at http://mozilla.org/MPL/2.0/.
 
 with Files('**'):
     BUG_COMPONENT = ('Toolkit', 'General')
 
 with Files('Finder*.jsm'):
     BUG_COMPONENT = ('Toolkit', 'Find Toolbar')
 
-TESTING_JS_MODULES += [
-    'TestChild.jsm',
-    'TestParent.jsm',
-]
-
 FINAL_TARGET_FILES.actors += [
     'AudioPlaybackChild.jsm',
     'AutoplayChild.jsm',
     'BrowserChild.jsm',
     'ControllersChild.jsm',
     'DateTimePickerChild.jsm',
     'ExtFindChild.jsm',
     'FindBarChild.jsm',
--- a/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js
+++ b/tools/lint/eslint/eslint-plugin-mozilla/lib/environments/privileged.js
@@ -301,18 +301,16 @@ module.exports = {
     "ImageData": false,
     "ImageDocument": false,
     "InputEvent": false,
     "InspectorFontFace": false,
     "InspectorUtils": false,
     "InstallTriggerImpl": false,
     "IntersectionObserver": false,
     "IntersectionObserverEntry": false,
-    "JSWindowActorChild": false,
-    "JSWindowActorParent": false,
     "KeyEvent": false,
     "KeyboardEvent": false,
     "KeyframeEffect": false,
     "Location": false,
     "MIDIAccess": false,
     "MIDIConnectionEvent": false,
     "MIDIInput": false,
     "MIDIInputMap": false,