Bug 1264642 - Part 6. Mark JSStructuredCloneData as MOZ_NON_MEMMOVABLE and add specializations in nsTArray.h. r=froydnj

MozReview-Commit-ID: HltgzBnxMsn
This commit is contained in:
Kan-Ru Chen 2016-08-10 14:18:29 +08:00
parent 0dbfe2dbcc
commit b4cf4bec61
11 changed files with 81 additions and 27 deletions

View file

@ -36,6 +36,8 @@ public:
StructuredCloneHolderBase(StructuredCloneScope aScope = StructuredCloneScope::SameProcessSameThread); StructuredCloneHolderBase(StructuredCloneScope aScope = StructuredCloneScope::SameProcessSameThread);
virtual ~StructuredCloneHolderBase(); virtual ~StructuredCloneHolderBase();
StructuredCloneHolderBase(StructuredCloneHolderBase&& aOther) = default;
// These methods should be implemented in order to clone data. // These methods should be implemented in order to clone data.
// Read more documentation in js/public/StructuredClone.h. // Read more documentation in js/public/StructuredClone.h.
@ -150,6 +152,8 @@ public:
StructuredCloneScope aStructuredCloneScope); StructuredCloneScope aStructuredCloneScope);
virtual ~StructuredCloneHolder(); virtual ~StructuredCloneHolder();
StructuredCloneHolder(StructuredCloneHolder&& aOther) = default;
// Normally you should just use Write() and Read(). // Normally you should just use Write() and Read().
void Write(JSContext* aCx, void Write(JSContext* aCx,

View file

@ -57,6 +57,10 @@ struct StructuredCloneReadInfo
inline inline
~StructuredCloneReadInfo(); ~StructuredCloneReadInfo();
// In IndexedDatabaseInlines.h
inline
StructuredCloneReadInfo(StructuredCloneReadInfo&& aOther);
// In IndexedDatabaseInlines.h // In IndexedDatabaseInlines.h
inline StructuredCloneReadInfo& inline StructuredCloneReadInfo&
operator=(StructuredCloneReadInfo&& aOther); operator=(StructuredCloneReadInfo&& aOther);

View file

@ -51,6 +51,20 @@ StructuredCloneReadInfo::StructuredCloneReadInfo()
MOZ_COUNT_CTOR(StructuredCloneReadInfo); MOZ_COUNT_CTOR(StructuredCloneReadInfo);
} }
inline
StructuredCloneReadInfo::StructuredCloneReadInfo(
StructuredCloneReadInfo&& aCloneReadInfo)
: mData(Move(aCloneReadInfo.mData))
{
MOZ_ASSERT(&aCloneReadInfo != this);
MOZ_COUNT_CTOR(StructuredCloneReadInfo);
mFiles.Clear();
mFiles.SwapElements(aCloneReadInfo.mFiles);
mDatabase = aCloneReadInfo.mDatabase;
aCloneReadInfo.mDatabase = nullptr;
}
inline inline
StructuredCloneReadInfo::StructuredCloneReadInfo( StructuredCloneReadInfo::StructuredCloneReadInfo(
SerializedStructuredCloneReadInfo&& aCloneReadInfo) SerializedStructuredCloneReadInfo&& aCloneReadInfo)

View file

@ -65,7 +65,8 @@ using mozilla::WritingMode from "mozilla/WritingModes.h";
using mozilla::layers::TouchBehaviorFlags from "mozilla/layers/APZUtils.h"; using mozilla::layers::TouchBehaviorFlags from "mozilla/layers/APZUtils.h";
using nsIWidget::TouchPointerState from "nsIWidget.h"; using nsIWidget::TouchPointerState from "nsIWidget.h";
using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h"; using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h";
using class mozilla::dom::ipc::StructuredCloneData from "ipc/IPCMessageUtils.h"; using class mozilla::dom::MessagePort from "mozilla/dom/MessagePort.h";
using class mozilla::dom::ipc::StructuredCloneData from "mozilla/dom/ipc/StructuredCloneData.h";
using mozilla::EventMessage from "mozilla/EventForwards.h"; using mozilla::EventMessage from "mozilla/EventForwards.h";
using nsEventStatus from "mozilla/EventForwards.h"; using nsEventStatus from "mozilla/EventForwards.h";
using nsSizeMode from "nsIWidgetListener.h"; using nsSizeMode from "nsIWidgetListener.h";

View file

@ -95,7 +95,8 @@ using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h";
using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h"; using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h";
using mozilla::LayoutDeviceIntPoint from "Units.h"; using mozilla::LayoutDeviceIntPoint from "Units.h";
using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h"; using struct LookAndFeelInt from "mozilla/widget/WidgetMessageUtils.h";
using class mozilla::dom::ipc::StructuredCloneData from "ipc/IPCMessageUtils.h"; using class mozilla::dom::MessagePort from "mozilla/dom/MessagePort.h";
using class mozilla::dom::ipc::StructuredCloneData from "mozilla/dom/ipc/StructuredCloneData.h";
using mozilla::DataStorageType from "ipc/DataStorageIPCUtils.h"; using mozilla::DataStorageType from "ipc/DataStorageIPCUtils.h";
using mozilla::DocShellOriginAttributes from "mozilla/ipc/BackgroundUtils.h"; using mozilla::DocShellOriginAttributes from "mozilla/ipc/BackgroundUtils.h";
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h"; using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";

View file

@ -16,7 +16,8 @@ include PTabContext;
using class IPC::Principal from "mozilla/dom/PermissionMessageUtils.h"; using class IPC::Principal from "mozilla/dom/PermissionMessageUtils.h";
using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h"; using mozilla::dom::TabId from "mozilla/dom/ipc/IdType.h";
using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h"; using mozilla::dom::ContentParentId from "mozilla/dom/ipc/IdType.h";
using class mozilla::dom::ipc::StructuredCloneData from "ipc/IPCMessageUtils.h"; using class mozilla::dom::MessagePort from "mozilla/dom/MessagePort.h";
using class mozilla::dom::ipc::StructuredCloneData from "mozilla/dom/ipc/StructuredCloneData.h";
namespace mozilla { namespace mozilla {
namespace dom { namespace dom {

View file

@ -75,12 +75,17 @@ public:
StructuredCloneData(const StructuredCloneData&) = delete; StructuredCloneData(const StructuredCloneData&) = delete;
StructuredCloneData(StructuredCloneData&& aOther) = default;
~StructuredCloneData() ~StructuredCloneData()
{} {}
StructuredCloneData& StructuredCloneData&
operator=(const StructuredCloneData& aOther) = delete; operator=(const StructuredCloneData& aOther) = delete;
StructuredCloneData&
operator=(StructuredCloneData&& aOther) = default;
const nsTArray<RefPtr<BlobImpl>>& BlobImpls() const const nsTArray<RefPtr<BlobImpl>>& BlobImpls() const
{ {
return mBlobImplArray; return mBlobImplArray;

View file

@ -7,6 +7,7 @@
#ifndef mozilla_dom_TCPSocketChild_h #ifndef mozilla_dom_TCPSocketChild_h
#define mozilla_dom_TCPSocketChild_h #define mozilla_dom_TCPSocketChild_h
#include "mozilla/dom/TypedArray.h"
#include "mozilla/net/PTCPSocketChild.h" #include "mozilla/net/PTCPSocketChild.h"
#include "nsCycleCollectionParticipant.h" #include "nsCycleCollectionParticipant.h"
#include "nsCOMPtr.h" #include "nsCOMPtr.h"

View file

@ -7,6 +7,7 @@
#ifndef js_StructuredClone_h #ifndef js_StructuredClone_h
#define js_StructuredClone_h #define js_StructuredClone_h
#include "mozilla/Attributes.h"
#include "mozilla/BufferList.h" #include "mozilla/BufferList.h"
#include <stdint.h> #include <stdint.h>
@ -160,7 +161,7 @@ enum OwnTransferablePolicy {
NoTransferables NoTransferables
}; };
class JSStructuredCloneData : public mozilla::BufferList<js::SystemAllocPolicy> class MOZ_NON_MEMMOVABLE JSStructuredCloneData : public mozilla::BufferList<js::SystemAllocPolicy>
{ {
typedef js::SystemAllocPolicy AllocPolicy; typedef js::SystemAllocPolicy AllocPolicy;
typedef mozilla::BufferList<js::SystemAllocPolicy> BufferList; typedef mozilla::BufferList<js::SystemAllocPolicy> BufferList;

View file

@ -135,12 +135,6 @@ nrappkit copyright:
#endif #endif
#undef strlcpy #undef strlcpy
// TCPSocketChild.h doesn't include TypedArray.h
namespace mozilla {
namespace dom {
class ArrayBuffer;
}
}
#include "mozilla/dom/network/TCPSocketChild.h" #include "mozilla/dom/network/TCPSocketChild.h"
#ifdef LOG_TEMP_INFO #ifdef LOG_TEMP_INFO

View file

@ -43,6 +43,33 @@ namespace layers {
struct TileClient; struct TileClient;
} // namespace layers } // namespace layers
} // namespace mozilla } // namespace mozilla
namespace mozilla {
struct SerializedStructuredCloneBuffer;
} // namespace mozilla
namespace mozilla {
namespace dom {
namespace ipc {
class StructuredCloneData;
} // namespace ipc
} // namespace dom
} // namespace mozilla
namespace mozilla {
namespace dom {
class ClonedMessageData;
class MessagePortMessage;
namespace indexedDB {
struct StructuredCloneReadInfo;
class SerializedStructuredCloneReadInfo;
class ObjectStoreCursorResponse;
} // namespace indexedDB
} // namespace dom
} // namespace mozilla
class JSStructuredCloneData;
// //
// nsTArray is a resizable array class, like std::vector. // nsTArray is a resizable array class, like std::vector.
// //
@ -685,29 +712,30 @@ struct MOZ_NEEDS_MEMMOVABLE_TYPE nsTArray_CopyChooser
// Some classes require constructors/destructors to be called, so they are // Some classes require constructors/destructors to be called, so they are
// specialized here. // specialized here.
// //
#define DECLARE_USE_COPY_CONSTRUCTORS(T) \
template<> \
struct nsTArray_CopyChooser<T> \
{ \
typedef nsTArray_CopyWithConstructors<T> Type; \
};
template<class E> template<class E>
struct nsTArray_CopyChooser<JS::Heap<E>> struct nsTArray_CopyChooser<JS::Heap<E>>
{ {
typedef nsTArray_CopyWithConstructors<JS::Heap<E>> Type; typedef nsTArray_CopyWithConstructors<JS::Heap<E>> Type;
}; };
template<> DECLARE_USE_COPY_CONSTRUCTORS(nsRegion)
struct nsTArray_CopyChooser<nsRegion> DECLARE_USE_COPY_CONSTRUCTORS(nsIntRegion)
{ DECLARE_USE_COPY_CONSTRUCTORS(mozilla::layers::TileClient)
typedef nsTArray_CopyWithConstructors<nsRegion> Type; DECLARE_USE_COPY_CONSTRUCTORS(mozilla::SerializedStructuredCloneBuffer)
}; DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::ipc::StructuredCloneData)
DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::ClonedMessageData)
template<> DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::indexedDB::StructuredCloneReadInfo);
struct nsTArray_CopyChooser<nsIntRegion> DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::indexedDB::ObjectStoreCursorResponse)
{ DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::indexedDB::SerializedStructuredCloneReadInfo);
typedef nsTArray_CopyWithConstructors<nsIntRegion> Type; DECLARE_USE_COPY_CONSTRUCTORS(JSStructuredCloneData)
}; DECLARE_USE_COPY_CONSTRUCTORS(mozilla::dom::MessagePortMessage)
template<>
struct nsTArray_CopyChooser<mozilla::layers::TileClient>
{
typedef nsTArray_CopyWithConstructors<mozilla::layers::TileClient> Type;
};
// //