From 5f8de423f190bbb79a62f804151bc24824fa32d8 Mon Sep 17 00:00:00 2001 From: "Matt A. Tobin" Date: Fri, 2 Feb 2018 04:16:08 -0500 Subject: Add m-esr52 at 52.6.0 --- dom/base/nsInProcessTabChildGlobal.cpp | 354 +++++++++++++++++++++++++++++++++ 1 file changed, 354 insertions(+) create mode 100644 dom/base/nsInProcessTabChildGlobal.cpp (limited to 'dom/base/nsInProcessTabChildGlobal.cpp') diff --git a/dom/base/nsInProcessTabChildGlobal.cpp b/dom/base/nsInProcessTabChildGlobal.cpp new file mode 100644 index 000000000..10ccf4aec --- /dev/null +++ b/dom/base/nsInProcessTabChildGlobal.cpp @@ -0,0 +1,354 @@ +/* -*- 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 "nsInProcessTabChildGlobal.h" +#include "nsContentUtils.h" +#include "nsIScriptSecurityManager.h" +#include "nsIInterfaceRequestorUtils.h" +#include "nsIComponentManager.h" +#include "nsIServiceManager.h" +#include "nsComponentManagerUtils.h" +#include "nsScriptLoader.h" +#include "nsFrameLoader.h" +#include "xpcpublic.h" +#include "nsIMozBrowserFrame.h" +#include "nsDOMClassInfoID.h" +#include "mozilla/EventDispatcher.h" +#include "mozilla/dom/SameProcessMessageQueue.h" + +using namespace mozilla; +using namespace mozilla::dom; +using namespace mozilla::dom::ipc; + +bool +nsInProcessTabChildGlobal::DoSendBlockingMessage(JSContext* aCx, + const nsAString& aMessage, + StructuredCloneData& aData, + JS::Handle aCpows, + nsIPrincipal* aPrincipal, + nsTArray* aRetVal, + bool aIsSync) +{ + SameProcessMessageQueue* queue = SameProcessMessageQueue::Get(); + queue->Flush(); + + if (mChromeMessageManager) { + SameProcessCpowHolder cpows(JS::RootingContext::get(aCx), aCpows); + RefPtr mm = mChromeMessageManager; + nsCOMPtr fl = GetFrameLoader(); + mm->ReceiveMessage(mOwner, fl, aMessage, true, &aData, &cpows, aPrincipal, + aRetVal); + } + return true; +} + +class nsAsyncMessageToParent : public nsSameProcessAsyncMessageBase, + public SameProcessMessageQueue::Runnable +{ +public: + nsAsyncMessageToParent(JS::RootingContext* aRootingCx, + JS::Handle aCpows, + nsInProcessTabChildGlobal* aTabChild) + : nsSameProcessAsyncMessageBase(aRootingCx, aCpows) + , mTabChild(aTabChild) + { } + + virtual nsresult HandleMessage() override + { + nsCOMPtr fl = mTabChild->GetFrameLoader(); + ReceiveMessage(mTabChild->mOwner, fl, mTabChild->mChromeMessageManager); + return NS_OK; + } + RefPtr mTabChild; +}; + +nsresult +nsInProcessTabChildGlobal::DoSendAsyncMessage(JSContext* aCx, + const nsAString& aMessage, + StructuredCloneData& aData, + JS::Handle aCpows, + nsIPrincipal* aPrincipal) +{ + SameProcessMessageQueue* queue = SameProcessMessageQueue::Get(); + JS::RootingContext* rcx = JS::RootingContext::get(aCx); + RefPtr 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; +} + +nsInProcessTabChildGlobal::nsInProcessTabChildGlobal(nsIDocShell* aShell, + nsIContent* aOwner, + nsFrameMessageManager* aChrome) +: mDocShell(aShell), mInitialized(false), mLoadingScript(false), + mPreventEventsEscaping(false), + mOwner(aOwner), mChromeMessageManager(aChrome) +{ + SetIsNotDOMBinding(); + mozilla::HoldJSObjects(this); + + // If owner corresponds to an