mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
import changes from `dev' branch of rmottola/Arctic-Fox:
- Bug 1103036 - Ensure __delete__ message from TabChild doesn't get sent after ActorDestroy (r=bent) (c91362f82) - Bug 1103036 - Wait for ContentChild shutdown during profile-before-change; r=billm (98602a765) - Bug 1103036 - Use nsITimer for ContentParent shutdown timer (r=bent) (d8f453cb5) - Bug 1103036 - Use kill timer when shutting down ContentParent in shutdown observer; r=billm (0b3dba9bd) - Bug 1103036 - Don't send shutdown message to Nuwa processes; r=billm (3337de858) - Bug 1131375 - Fix message ordering for in-process message manager (r=smaug) (2256e6aa8) - Bug 1155224 - Add targetFrameLoader property to messages (r=smaug) (971ff2db4) - Bug 1134762 - Clean-up UseFastPath logic to avoid OOM error. r=kats (28e0da5c3) - HACK - include nsPIDOMWInindow to get tree compiling again, no clue why it is needed now (88c10e8b4) - Bug 982347 - Implement netError design changes. r=Unfocused (e27b9af06) - Bug 1014282: Do not direct every ssl error to 'Report Web Forgery' (r=margaret) (febb83ad8) - Bug 1035536 - add blank theme file for net error pages, r=Unfocused (cac5f43ba) - Bug 1035536 - move CSS to themes directory, r=dao (5191e1032) - Bug 859695 - OS.File should be adopted in PlacesBackups.jsm and PlacesUtils.jsm. r=mak (78ebec312) - Bug 529697 - (CSP 1.1) Implement form-action directive [3/4], r=unfocused (2f884e70f)
This commit is contained in:
@@ -35,6 +35,7 @@
|
||||
#include "mozilla/dom/nsIContentParent.h"
|
||||
#include "mozilla/dom/PermissionMessageUtils.h"
|
||||
#include "mozilla/dom/ProcessGlobal.h"
|
||||
#include "mozilla/dom/SameProcessMessageQueue.h"
|
||||
#include "mozilla/dom/ScriptSettings.h"
|
||||
#include "mozilla/dom/StructuredCloneUtils.h"
|
||||
#include "mozilla/dom/ipc/BlobChild.h"
|
||||
@@ -980,6 +981,7 @@ public:
|
||||
|
||||
nsresult
|
||||
nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
||||
nsIFrameLoader* aTargetFrameLoader,
|
||||
const nsAString& aMessage,
|
||||
bool aIsSync,
|
||||
const StructuredCloneData* aCloneData,
|
||||
@@ -987,12 +989,13 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
||||
nsIPrincipal* aPrincipal,
|
||||
InfallibleTArray<nsString>* aJSONRetVal)
|
||||
{
|
||||
return ReceiveMessage(aTarget, mClosed, aMessage, aIsSync,
|
||||
return ReceiveMessage(aTarget, aTargetFrameLoader, mClosed, aMessage, aIsSync,
|
||||
aCloneData, aCpows, aPrincipal, aJSONRetVal);
|
||||
}
|
||||
|
||||
nsresult
|
||||
nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
||||
nsIFrameLoader* aTargetFrameLoader,
|
||||
bool aTargetClosed,
|
||||
const nsAString& aMessage,
|
||||
bool aIsSync,
|
||||
@@ -1099,6 +1102,16 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
||||
JS_DefineProperty(cx, param, "objects", cpowsv, JSPROP_ENUMERATE);
|
||||
NS_ENSURE_TRUE(ok, NS_ERROR_UNEXPECTED);
|
||||
|
||||
if (aTargetFrameLoader) {
|
||||
JS::Rooted<JS::Value> targetFrameLoaderv(cx);
|
||||
nsresult rv = nsContentUtils::WrapNative(cx, aTargetFrameLoader, &targetFrameLoaderv);
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
ok = JS_DefineProperty(cx, param, "targetFrameLoader", targetFrameLoaderv,
|
||||
JSPROP_ENUMERATE);
|
||||
NS_ENSURE_TRUE(ok, NS_ERROR_UNEXPECTED);
|
||||
}
|
||||
|
||||
// message.principal == null
|
||||
if (!aPrincipal) {
|
||||
bool ok = JS_DefineProperty(cx, param, "principal",
|
||||
@@ -1175,7 +1188,8 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
|
||||
}
|
||||
}
|
||||
nsRefPtr<nsFrameMessageManager> kungfuDeathGrip = mParentManager;
|
||||
return mParentManager ? mParentManager->ReceiveMessage(aTarget, aTargetClosed, aMessage,
|
||||
return mParentManager ? mParentManager->ReceiveMessage(aTarget, aTargetFrameLoader,
|
||||
aTargetClosed, aMessage,
|
||||
aIsSync, aCloneData,
|
||||
aCpows, aPrincipal,
|
||||
aJSONRetVal) : NS_OK;
|
||||
@@ -1736,7 +1750,6 @@ NS_IMPL_ISUPPORTS(nsScriptCacheCleaner, nsIObserver)
|
||||
nsFrameMessageManager* nsFrameMessageManager::sChildProcessManager = nullptr;
|
||||
nsFrameMessageManager* nsFrameMessageManager::sParentProcessManager = nullptr;
|
||||
nsFrameMessageManager* nsFrameMessageManager::sSameProcessParentManager = nullptr;
|
||||
nsTArray<nsCOMPtr<nsIRunnable> >* nsFrameMessageManager::sPendingSameProcessAsyncMessages = nullptr;
|
||||
|
||||
class nsAsyncMessageToSameProcessChild : public nsSameProcessAsyncMessageBase,
|
||||
public nsRunnable
|
||||
@@ -1754,7 +1767,7 @@ public:
|
||||
NS_IMETHOD Run()
|
||||
{
|
||||
nsFrameMessageManager* ppm = nsFrameMessageManager::GetChildProcessManager();
|
||||
ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm), ppm);
|
||||
ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm), nullptr, ppm);
|
||||
return NS_OK;
|
||||
}
|
||||
};
|
||||
@@ -1894,7 +1907,7 @@ public:
|
||||
|
||||
|
||||
class nsAsyncMessageToSameProcessParent : public nsSameProcessAsyncMessageBase,
|
||||
public nsRunnable
|
||||
public SameProcessMessageQueue::Runnable
|
||||
{
|
||||
public:
|
||||
nsAsyncMessageToSameProcessParent(JSContext* aCx,
|
||||
@@ -1903,25 +1916,15 @@ public:
|
||||
JS::Handle<JSObject *> aCpows,
|
||||
nsIPrincipal* aPrincipal)
|
||||
: nsSameProcessAsyncMessageBase(aCx, aMessage, aData, aCpows, aPrincipal)
|
||||
, mDelivered(false)
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHOD Run()
|
||||
virtual nsresult HandleMessage() override
|
||||
{
|
||||
if (nsFrameMessageManager::sPendingSameProcessAsyncMessages) {
|
||||
nsFrameMessageManager::sPendingSameProcessAsyncMessages->RemoveElement(this);
|
||||
}
|
||||
if (!mDelivered) {
|
||||
mDelivered = true;
|
||||
nsFrameMessageManager* ppm = nsFrameMessageManager::sSameProcessParentManager;
|
||||
ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm), ppm);
|
||||
}
|
||||
nsFrameMessageManager* ppm = nsFrameMessageManager::sSameProcessParentManager;
|
||||
ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm), nullptr, ppm);
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
private:
|
||||
bool mDelivered;
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1947,19 +1950,13 @@ public:
|
||||
InfallibleTArray<nsString>* aJSONRetVal,
|
||||
bool aIsSync) override
|
||||
{
|
||||
nsTArray<nsCOMPtr<nsIRunnable> > asyncMessages;
|
||||
if (nsFrameMessageManager::sPendingSameProcessAsyncMessages) {
|
||||
asyncMessages.SwapElements(*nsFrameMessageManager::sPendingSameProcessAsyncMessages);
|
||||
uint32_t len = asyncMessages.Length();
|
||||
for (uint32_t i = 0; i < len; ++i) {
|
||||
nsCOMPtr<nsIRunnable> async = asyncMessages[i];
|
||||
async->Run();
|
||||
}
|
||||
}
|
||||
SameProcessMessageQueue* queue = SameProcessMessageQueue::Get();
|
||||
queue->Flush();
|
||||
|
||||
if (nsFrameMessageManager::sSameProcessParentManager) {
|
||||
SameProcessCpowHolder cpows(js::GetRuntime(aCx), aCpows);
|
||||
nsRefPtr<nsFrameMessageManager> ppm = nsFrameMessageManager::sSameProcessParentManager;
|
||||
ppm->ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm.get()), aMessage,
|
||||
ppm->ReceiveMessage(static_cast<nsIContentFrameMessageManager*>(ppm.get()), nullptr, aMessage,
|
||||
true, &aData, &cpows, aPrincipal, aJSONRetVal);
|
||||
}
|
||||
return true;
|
||||
@@ -1971,13 +1968,10 @@ public:
|
||||
JS::Handle<JSObject *> aCpows,
|
||||
nsIPrincipal* aPrincipal) override
|
||||
{
|
||||
if (!nsFrameMessageManager::sPendingSameProcessAsyncMessages) {
|
||||
nsFrameMessageManager::sPendingSameProcessAsyncMessages = new nsTArray<nsCOMPtr<nsIRunnable> >;
|
||||
}
|
||||
nsCOMPtr<nsIRunnable> ev =
|
||||
SameProcessMessageQueue* queue = SameProcessMessageQueue::Get();
|
||||
nsRefPtr<nsAsyncMessageToSameProcessParent> ev =
|
||||
new nsAsyncMessageToSameProcessParent(aCx, aMessage, aData, aCpows, aPrincipal);
|
||||
nsFrameMessageManager::sPendingSameProcessAsyncMessages->AppendElement(ev);
|
||||
NS_DispatchToCurrentThread(ev);
|
||||
queue->Push(ev);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2091,6 +2085,7 @@ nsSameProcessAsyncMessageBase::nsSameProcessAsyncMessageBase(JSContext* aCx,
|
||||
|
||||
void
|
||||
nsSameProcessAsyncMessageBase::ReceiveMessage(nsISupports* aTarget,
|
||||
nsIFrameLoader* aTargetFrameLoader,
|
||||
nsFrameMessageManager* aManager)
|
||||
{
|
||||
if (aManager) {
|
||||
@@ -2102,7 +2097,7 @@ nsSameProcessAsyncMessageBase::ReceiveMessage(nsISupports* aTarget,
|
||||
SameProcessCpowHolder cpows(mRuntime, mCpows);
|
||||
|
||||
nsRefPtr<nsFrameMessageManager> mm = aManager;
|
||||
mm->ReceiveMessage(aTarget, mMessage, false, &data, &cpows,
|
||||
mm->ReceiveMessage(aTarget, aTargetFrameLoader, mMessage, false, &data, &cpows,
|
||||
mPrincipal, nullptr);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user