In JS StructuredClone BufferList<SystemAllocPolicy> is typedef'd to
JSStructuredCloneData and use everywhere in gecko that stores structured
clone data.
This patch changed some raw pointers to UniquePtr<JSStructuredCloneData>
and some to stack allocated JSStructuredCloneData for better life time
management. Some parameters or methods are deleted because of changing
to the new data structure.
MessagePortMessage now has the exactly same structure with
ClonedMessageData. Maybe in the future they can be consolidated.
MozReview-Commit-ID: 1IY9p5eKLgv
Rather than store a non-thread-safe refcounted nsIStructuredCloneContainer, store the base64 representation.
Caches a jsval the first time an attempt to access data is made from content script.
There are still a handful that either are used with other runtimes, or that
happen very early/late in cx the lifetime of various things where it doesn't
necessarily make sense to have a cx on the stack. This should definitely ensure
that we're not doing double-duty with the nsCxPusher change, though.
I can't see what this is supposed to be doing. The one caller defaults to aCx,
and if not, gets and pushes a context associated with the document, restoring
it to the default compartment.
So this only changes the behavior when we use the aCx that comes in from above,
in which case it's totally not clear to me why we would want to get the default
global here.
The goal here is to get rid of this crap entirely, and make nsCxPusher always
push. But that's a scary change, so we do it in chunks. This patch, in particular,
should have zero behavioral change. This means preserving some very wrong behavior.
For instance, currently SafeAutoJSContext never pushes a damn thing, because the
safe JSContext doesn't have an associated nsIScriptContext. We preserve this
behavior, and in fact convert various similarly-buggy consumers to
SafeAutoJSContext, so that we can hoist the behavioral change into a subsequent
patch.
Use uint64_t where appropriate for mData, fails to build on OpenBSD
otherwise with wrong casts/no matching template.
dom/base/nsStructuredCloneContainer.cpp:96: error: invalid conversion from 'PRUint64*' to 'uint64_t*'
dom/base/nsStructuredCloneContainer.cpp:131: error: invalid conversion from 'PRUint64*' to 'uint64_t*'
dom/workers/WorkerPrivate.cpp:822: error: no matching function for call to 'JSAutoStructuredCloneBuffer::steal(uint64**, size_t*)'
../../dist/include/jsapi.h:4641: note: candidates are: void
JSAutoStructuredCloneBuffer::steal(uint64_t**, size_t*, uint32_t*) <near
match>
dom/workers/WorkerPrivate.cpp:833: error: no matching function for call to 'JSAutoStructuredCloneBuffer::adopt(uint64*&, size_t&)'
../../dist/include/jsapi.h:4634: note: candidates are: void
JSAutoStructuredCloneBuffer::adopt(uint64_t*, size_t, uint32_t) <near
match>
dom/workers/WorkerPrivate.cpp:853: error: no matching function for call to 'JSAutoStructuredCloneBuffer::steal(uint64**, size_t*)'
../../dist/include/jsapi.h:4641: note: candidates are: void
JSAutoStructuredCloneBuffer::steal(uint64_t**, size_t*, uint32_t*) <near
match>