Skip to content

Commit

Permalink
Bug 1201806 - part 1 - Remove OwningSerializedStructuredCloneBuffer a…
Browse files Browse the repository at this point in the history
…nd use StructuredCloneIPCHelper everywhere in IPC code, r=smaug
  • Loading branch information
bakulf committed Sep 9, 2015
1 parent eb17716 commit 67d0541
Showing 22 changed files with 141 additions and 143 deletions.
4 changes: 4 additions & 0 deletions dom/base/StructuredCloneHelper.h
Original file line number Diff line number Diff line change
@@ -11,6 +11,10 @@
#include "nsISupports.h"
#include "nsTArray.h"

#ifdef DEBUG
#include "nsIThread.h"
#endif

namespace mozilla {
class ErrorResult;
namespace layers {
25 changes: 13 additions & 12 deletions dom/base/nsFrameMessageManager.cpp
Original file line number Diff line number Diff line change
@@ -763,7 +763,7 @@ nsFrameMessageManager::SendMessage(const nsAString& aMessageName,
objects = &aObjects.toObject();
}

nsTArray<OwningSerializedStructuredCloneBuffer> retval;
nsTArray<StructuredCloneIPCHelper> retval;

sSendingSyncMessage |= aIsSync;
bool ok = mCallback->DoSendBlockingMessage(aCx, aMessageName, helper, objects,
@@ -782,8 +782,9 @@ nsFrameMessageManager::SendMessage(const nsAString& aMessageName,

for (uint32_t i = 0; i < len; ++i) {
JS::Rooted<JS::Value> ret(aCx);
if (!JS_ReadStructuredClone(aCx, retval[i].data, retval[i].dataLength,
JS_STRUCTURED_CLONE_VERSION, &ret, nullptr, nullptr)) {
ErrorResult rv;
retval[i].Read(aCx, &ret, rv);
if (rv.Failed()) {
MOZ_ASSERT(false, "Unable to read structured clone in SendMessage");
return NS_ERROR_UNEXPECTED;
}
@@ -1072,7 +1073,7 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
StructuredCloneIPCHelper* aCloneHelper,
mozilla::jsipc::CpowHolder* aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal)
nsTArray<StructuredCloneIPCHelper>* aRetVal)
{
return ReceiveMessage(aTarget, aTargetFrameLoader, mClosed, aMessage, aIsSync,
aCloneHelper, aCpows, aPrincipal, aRetVal);
@@ -1087,7 +1088,7 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
StructuredCloneIPCHelper* aCloneHelper,
mozilla::jsipc::CpowHolder* aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal)
nsTArray<StructuredCloneIPCHelper>* aRetVal)
{
nsAutoTObserverArray<nsMessageListenerInfo, 1>* listeners =
mListeners.Get(aMessage);
@@ -1266,8 +1267,11 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
continue;
}
if (aRetVal) {
JSAutoStructuredCloneBuffer buffer;
if (!buffer.write(cx, rval)) {
ErrorResult rv;
StructuredCloneIPCHelper* helper = aRetVal->AppendElement();
helper->Write(cx, rval, rv);
if (NS_WARN_IF(rv.Failed())) {
aRetVal->RemoveElementAt(aRetVal->Length() - 1);
nsString msg = aMessage + NS_LITERAL_STRING(": message reply cannot be cloned. Are you trying to send an XPCOM object?");

nsCOMPtr<nsIConsoleService> console(do_GetService(NS_CONSOLESERVICE_CONTRACTID));
@@ -1281,9 +1285,6 @@ nsFrameMessageManager::ReceiveMessage(nsISupports* aTarget,
JS_ClearPendingException(cx);
continue;
}

OwningSerializedStructuredCloneBuffer* data = aRetVal->AppendElement();
buffer.steal(&data->data, &data->dataLength);
}
}
}
@@ -1994,7 +1995,7 @@ class ChildProcessMessageManagerCallback : public MessageManagerCallback
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject *> aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal,
nsTArray<StructuredCloneIPCHelper>* aRetVal,
bool aIsSync) override
{
mozilla::dom::ContentChild* cc =
@@ -2085,7 +2086,7 @@ class SameChildProcessMessageManagerCallback : public MessageManagerCallback
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject *> aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal,
nsTArray<StructuredCloneIPCHelper>* aRetVal,
bool aIsSync) override
{
SameProcessMessageQueue* queue = SameProcessMessageQueue::Get();
13 changes: 3 additions & 10 deletions dom/base/nsFrameMessageManager.h
Original file line number Diff line number Diff line change
@@ -34,9 +34,6 @@
class nsIFrameLoader;

namespace mozilla {

struct OwningSerializedStructuredCloneBuffer;

namespace dom {

class nsIContentParent;
@@ -57,9 +54,6 @@ enum MessageManagerFlags {

class MessageManagerCallback
{
protected:
typedef mozilla::OwningSerializedStructuredCloneBuffer OwningSerializedStructuredCloneBuffer;

public:
virtual ~MessageManagerCallback() {}

@@ -73,7 +67,7 @@ class MessageManagerCallback
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject*> aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal,
nsTArray<StructuredCloneIPCHelper>* aRetVal,
bool aIsSync)
{
return true;
@@ -170,7 +164,6 @@ class nsFrameMessageManager final : public nsIContentFrameMessageManager,
{
friend class mozilla::dom::MessageManagerReporter;
typedef mozilla::dom::StructuredCloneIPCHelper StructuredCloneIPCHelper;
typedef mozilla::OwningSerializedStructuredCloneBuffer OwningSerializedStructuredCloneBuffer;
public:
nsFrameMessageManager(mozilla::dom::ipc::MessageManagerCallback* aCallback,
nsFrameMessageManager* aParentManager,
@@ -201,7 +194,7 @@ class nsFrameMessageManager final : public nsIContentFrameMessageManager,
const nsAString& aMessage,
bool aIsSync, StructuredCloneIPCHelper* aCloneHelper,
mozilla::jsipc::CpowHolder* aCpows, nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal);
nsTArray<StructuredCloneIPCHelper>* aRetVal);

void AddChildManager(nsFrameMessageManager* aManager);
void RemoveChildManager(nsFrameMessageManager* aManager)
@@ -269,7 +262,7 @@ class nsFrameMessageManager final : public nsIContentFrameMessageManager,
bool aTargetClosed, const nsAString& aMessage,
bool aIsSync, StructuredCloneIPCHelper* aCloneHelper,
mozilla::jsipc::CpowHolder* aCpows, nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal);
nsTArray<StructuredCloneIPCHelper>* aRetVal);

NS_IMETHOD LoadScript(const nsAString& aURL,
bool aAllowDelayedLoad,
2 changes: 1 addition & 1 deletion dom/base/nsInProcessTabChildGlobal.cpp
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ nsInProcessTabChildGlobal::DoSendBlockingMessage(JSContext* aCx,
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject *> aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal,
nsTArray<StructuredCloneIPCHelper>* aRetVal,
bool aIsSync)
{
SameProcessMessageQueue* queue = SameProcessMessageQueue::Get();
8 changes: 4 additions & 4 deletions dom/base/nsInProcessTabChildGlobal.h
Original file line number Diff line number Diff line change
@@ -35,7 +35,7 @@ class nsInProcessTabChildGlobal : public mozilla::DOMEventTargetHelper,
public nsSupportsWeakReference,
public mozilla::dom::ipc::MessageManagerCallback
{
typedef mozilla::OwningSerializedStructuredCloneBuffer OwningSerializedStructuredCloneBuffer;
typedef mozilla::dom::StructuredCloneIPCHelper StructuredCloneIPCHelper;

public:
nsInProcessTabChildGlobal(nsIDocShell* aShell, nsIContent* aOwner,
@@ -83,14 +83,14 @@ class nsInProcessTabChildGlobal : public mozilla::DOMEventTargetHelper,
*/
virtual bool DoSendBlockingMessage(JSContext* aCx,
const nsAString& aMessage,
mozilla::dom::StructuredCloneIPCHelper& aHelper,
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject *> aCpows,
nsIPrincipal* aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetVal,
nsTArray<StructuredCloneIPCHelper>* aRetVal,
bool aIsSync) override;
virtual bool DoSendAsyncMessage(JSContext* aCx,
const nsAString& aMessage,
mozilla::dom::StructuredCloneIPCHelper& aHelper,
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject *> aCpows,
nsIPrincipal* aPrincipal) override;

2 changes: 1 addition & 1 deletion dom/ipc/ContentBridgeParent.cpp
Original file line number Diff line number Diff line change
@@ -76,7 +76,7 @@ ContentBridgeParent::RecvSyncMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<jsipc::CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetvals)
nsTArray<StructuredCloneIPCHelper>* aRetvals)
{
return nsIContentParent::RecvSyncMessage(aMsg, aData, Move(aCpows),
aPrincipal, aRetvals);
3 changes: 1 addition & 2 deletions dom/ipc/ContentBridgeParent.h
Original file line number Diff line number Diff line change
@@ -19,7 +19,6 @@ class ContentBridgeParent : public PContentBridgeParent
, public nsIContentParent
, public nsIObserver
{
typedef mozilla::OwningSerializedStructuredCloneBuffer OwningSerializedStructuredCloneBuffer;
public:
explicit ContentBridgeParent(Transport* aTransport);

@@ -83,7 +82,7 @@ class ContentBridgeParent : public PContentBridgeParent
const ClonedMessageData& aData,
InfallibleTArray<jsipc::CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetvals) override;
nsTArray<StructuredCloneIPCHelper>* aRetvals) override;
virtual bool RecvAsyncMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<jsipc::CpowEntry>&& aCpows,
7 changes: 4 additions & 3 deletions dom/ipc/ContentChild.cpp
Original file line number Diff line number Diff line change
@@ -799,7 +799,7 @@ ContentChild::InitXPCOM()
bool isConnected;
ClipboardCapabilities clipboardCaps;
DomainPolicyClone domainPolicy;
OwningSerializedStructuredCloneBuffer initialData;
StructuredCloneIPCHelper initialData;

SendGetXPCOMProcessAttributes(&isOffline, &isConnected,
&isLangRTL, &mAvailableDictionaries,
@@ -831,9 +831,10 @@ ContentChild::InitXPCOM()
if (NS_WARN_IF(!jsapi.Init(xpc::PrivilegedJunkScope()))) {
MOZ_CRASH();
}
ErrorResult rv;
JS::RootedValue data(jsapi.cx());
if (!JS_ReadStructuredClone(jsapi.cx(), initialData.data, initialData.dataLength,
JS_STRUCTURED_CLONE_VERSION, &data, nullptr, nullptr)) {
initialData.Read(jsapi.cx(), &data, rv);
if (NS_WARN_IF(rv.Failed())) {
MOZ_CRASH();
}
ProcessGlobal* global = ProcessGlobal::Get();
15 changes: 7 additions & 8 deletions dom/ipc/ContentParent.cpp
Original file line number Diff line number Diff line change
@@ -3022,7 +3022,7 @@ ContentParent::OnNewProcessCreated(uint32_t aPid,
InfallibleTArray<nsString> unusedDictionaries;
ClipboardCapabilities clipboardCaps;
DomainPolicyClone domainPolicy;
OwningSerializedStructuredCloneBuffer initialData;
StructuredCloneIPCHelper initialData;

RecvGetXPCOMProcessAttributes(&isOffline, &isConnected,
&isLangRTL, &unusedDictionaries,
@@ -3310,7 +3310,7 @@ ContentParent::RecvGetXPCOMProcessAttributes(bool* aIsOffline,
InfallibleTArray<nsString>* dictionaries,
ClipboardCapabilities* clipboardCaps,
DomainPolicyClone* domainPolicy,
OwningSerializedStructuredCloneBuffer* initialData)
StructuredCloneIPCHelper* aInitialData)
{
nsCOMPtr<nsIIOService> io(do_GetIOService());
MOZ_ASSERT(io, "No IO service?");
@@ -3357,12 +3357,11 @@ ContentParent::RecvGetXPCOMProcessAttributes(bool* aIsOffline,
return false;
}

JSAutoStructuredCloneBuffer buffer;
if (!buffer.write(jsapi.cx(), init)) {
ErrorResult rv;
aInitialData->Write(jsapi.cx(), init, rv);
if (NS_WARN_IF(rv.Failed())) {
return false;
}

buffer.steal(&initialData->data, &initialData->dataLength);
}

return true;
@@ -4241,7 +4240,7 @@ ContentParent::RecvSyncMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetvals)
nsTArray<StructuredCloneIPCHelper>* aRetvals)
{
return nsIContentParent::RecvSyncMessage(aMsg, aData, Move(aCpows),
aPrincipal, aRetvals);
@@ -4252,7 +4251,7 @@ ContentParent::RecvRpcMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetvals)
nsTArray<StructuredCloneIPCHelper>* aRetvals)
{
return nsIContentParent::RecvRpcMessage(aMsg, aData, Move(aCpows), aPrincipal,
aRetvals);
9 changes: 4 additions & 5 deletions dom/ipc/ContentParent.h
Original file line number Diff line number Diff line change
@@ -82,7 +82,6 @@ class ContentParent final : public PContentParent
typedef mozilla::ipc::TestShellParent TestShellParent;
typedef mozilla::ipc::URIParams URIParams;
typedef mozilla::dom::ClonedMessageData ClonedMessageData;
typedef mozilla::OwningSerializedStructuredCloneBuffer OwningSerializedStructuredCloneBuffer;

public:
#ifdef MOZ_NUWA_PROCESS
@@ -202,7 +201,7 @@ class ContentParent final : public PContentParent
bool aRunInGlobalScope) override;
virtual bool DoSendAsyncMessage(JSContext* aCx,
const nsAString& aMessage,
mozilla::dom::StructuredCloneIPCHelper& aHelper,
StructuredCloneIPCHelper& aHelper,
JS::Handle<JSObject *> aCpows,
nsIPrincipal* aPrincipal) override;
virtual bool CheckPermission(const nsAString& aPermission) override;
@@ -592,7 +591,7 @@ class ContentParent final : public PContentParent
InfallibleTArray<nsString>* dictionaries,
ClipboardCapabilities* clipboardCaps,
DomainPolicyClone* domainPolicy,
OwningSerializedStructuredCloneBuffer* initialData) override;
StructuredCloneIPCHelper* initialData) override;

virtual bool DeallocPJavaScriptParent(mozilla::jsipc::PJavaScriptParent*) override;

@@ -753,12 +752,12 @@ class ContentParent final : public PContentParent
const ClonedMessageData& aData,
InfallibleTArray<CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetvals) override;
nsTArray<StructuredCloneIPCHelper>* aRetvals) override;
virtual bool RecvRpcMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<CpowEntry>&& aCpows,
const IPC::Principal& aPrincipal,
nsTArray<OwningSerializedStructuredCloneBuffer>* aRetvals) override;
nsTArray<StructuredCloneIPCHelper>* aRetvals) override;
virtual bool RecvAsyncMessage(const nsString& aMsg,
const ClonedMessageData& aData,
InfallibleTArray<CpowEntry>&& aCpows,
6 changes: 3 additions & 3 deletions dom/ipc/PBrowser.ipdl
Original file line number Diff line number Diff line change
@@ -64,7 +64,7 @@ using mozilla::WritingMode from "mozilla/WritingModes.h";
using mozilla::layers::TouchBehaviorFlags from "mozilla/layers/APZUtils.h";
using nsIWidget::TouchPointerState from "nsIWidget.h";
using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h";
using struct mozilla::OwningSerializedStructuredCloneBuffer from "ipc/IPCMessageUtils.h";
using class mozilla::dom::StructuredCloneIPCHelper from "ipc/IPCMessageUtils.h";
using mozilla::EventMessage from "mozilla/EventForwards.h";
using nsEventStatus from "mozilla/EventForwards.h";
using nsSizeMode from "nsIWidgetListener.h";
@@ -184,11 +184,11 @@ parent:

sync SyncMessage(nsString aMessage, ClonedMessageData aData,
CpowEntry[] aCpows, Principal aPrincipal)
returns (OwningSerializedStructuredCloneBuffer[] retval);
returns (StructuredCloneIPCHelper[] retval);

prio(high) sync RpcMessage(nsString aMessage, ClonedMessageData aData,
CpowEntry[] aCpows, Principal aPrincipal)
returns (OwningSerializedStructuredCloneBuffer[] retval);
returns (StructuredCloneIPCHelper[] retval);

/**
* Notifies chrome that there is a focus change involving an editable
8 changes: 4 additions & 4 deletions dom/ipc/PContent.ipdl
Original file line number Diff line number Diff line change
@@ -87,7 +87,7 @@ using gfxIntSize from "nsSize.h";
using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h";
using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h";
using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h";
using struct mozilla::OwningSerializedStructuredCloneBuffer from "ipc/IPCMessageUtils.h";
using class mozilla::dom::StructuredCloneIPCHelper from "ipc/IPCMessageUtils.h";

union ChromeRegistryItem
{
@@ -685,7 +685,7 @@ parent:
returns (bool isOffline, bool isConnected, bool isLangRTL, nsString[] dictionaries,
ClipboardCapabilities clipboardCaps,
DomainPolicyClone domainPolicy,
OwningSerializedStructuredCloneBuffer initialData);
StructuredCloneIPCHelper initialData);

sync CreateChildProcess(IPCTabContext context,
ProcessPriority priority,
@@ -806,11 +806,11 @@ parent:

sync SyncMessage(nsString aMessage, ClonedMessageData aData,
CpowEntry[] aCpows, Principal aPrincipal)
returns (OwningSerializedStructuredCloneBuffer[] retval);
returns (StructuredCloneIPCHelper[] retval);

prio(high) sync RpcMessage(nsString aMessage, ClonedMessageData aData,
CpowEntry[] aCpows, Principal aPrincipal)
returns (OwningSerializedStructuredCloneBuffer[] retval);
returns (StructuredCloneIPCHelper[] retval);

ShowAlertNotification(nsString imageUrl,
nsString title,
Loading

0 comments on commit 67d0541

Please sign in to comment.