mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:30:27 +00:00
14f7ec3aac
- Bug 1173947 - Make getRandomValues message be urgent (r=mrbkap) (aca1a06a9) - Bug 1182824 - Part 1: Use move assignment rather than copy assignment with ContextState::dash. r=mattwoodrow (73af33d32) - Bug 1182824 - Part 2: Make ContextState::dash a nsTArray. r=mattwoodrow (c66c3105d) - Bug 1134166 - Restart toolbox if selected app re-opens. r=ochameau (e370c8f02) - Bug 1134166 - Close toolbox if selected app dies. r=ochameau (5acb76254) - Bug 1134166 - Check for project when updating toolbox state. r=me (c60bb8766) - Bug 1090949 - Add way to make WebIDE runtimes configurable. r=ochameau (eef01e3e6) - Bug 1090949 - Refactor WebIDE preferences panel style. r=ochameau (fe1a9c757) - Bug 1135191 - Add runtime panel with toggle. r=jryans (e2e290a67) - missing bit of Bug 1116188 - Add async ProfileGatherer (308cfdd4f) - Bug 1185737 - Propagate pause and resume commands to child processes. r=BenWa (2dd302569) - Bug 1161831 - Stop using threaddsafe ISupports for nsResProtocolHandler. r=billm (0bec61aac) - Bug 1155968 - Correct indent not multiple of 4. r=khuey (5fb8e3b20) - Bug 1183291 - Factor idl-parser into a Python package. r=khuey (63a2f0c68) - Bug 1155968 - Add blank lines where needed in xpcom/idl-parser. r=khuey (ce91a905b) - Bug 1161831 - Generate an extra macro to declare a non-virtual variant of an interface. r=billm (058876228) - Bug 1161831 - Factor the sharable bits out of nsIResProtocolHandler. r=billm (b02278fb9) - Bug 1152997 - Cleanup app update build to exclude android. r=glandium, r=mossop (6cd935294) - Bug 1170075 - Remove Print Progress UI and view source XUL files from Android. r=snorp (64796ae4a) - Bug 1180921 - Create a dumping ground for simple services in toolkit/components/utils. r=Gijs (2757d43c8) - Bug 1180921 - Support custom callbacks for allowing access per-addon load access to cross-origin URIs. r=bz,r=billm (8cc7e2c96) - Bug 1161831 - Implement moz-extension protocol. r=bz,r=billm,sr=mcmanus (5ee451357) - Bug 1161831 - Associate extension URIs with the appropriate addon ID. r=billm,sr=bz (f36655ac9) - Bug 1161831 - Forbid mapping to anything but file:// and jar:// URIs. r=billm,sr=bz (144add9de) - Bug 1180921 - Generalize test_origin to make it easier to add new origin attributes. r=gabor (b3fbc3545) - Bug 1180921 - Add the addonId OriginAttribute. r=bholley (0723d0dec) - Bug 1174093 - Don't recurse into caps/tests/mochitest during the build; r=mshal (76366d21a) - Bug 1161831 - Tests. r=billm (ed116a703) - Bug 1155547, Part 1: Fix unified build breakage in adding new sources under dom/ipc/. r=khuey (0d6875348) - Bug 1166985 - Use two image decoding threads on dual core devices. r=tn (7f07ee8b8) - Bug 1160422 - Prioritize size decodes over full decodes. r=tn (48d42c011) - Bug 1151672 - Part 1: Remove the calls to nsThreadManager::SetThreadWorking() and nsThreadManager::SetThreadIdle() due to backout of bug 970307. r=seth (0428dd4a4) - Bug 1151672 - Part 2: Block PHal::Msg_NotifyNetworkChange__ID to the Nuwa process after it is ready. r=khuey (42debf2c0) - Bug 1176034 - MessagePort should force a close() if the structured clone algorithm fails, r=bent (3afe74856) - Bug 1176034 - Implement JSAutoStructuredCloneBuffer::clear(with callbacks and closure), r=sfink (f28f6852b) - Bug 1155547, Part 2: Create PNuwa protocol (managed by PBackground) for forking content processes. r=khuey (047bc5e61) - missing bit of Bug 1170075 - Remove Print Progress UI and view source XUL (a08888308)
141 lines
3.8 KiB
C++
141 lines
3.8 KiB
C++
/* -*- 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 "StructuredCloneUtils.h"
|
|
|
|
#include "nsIDOMDOMException.h"
|
|
#include "nsIMutable.h"
|
|
#include "nsIXPConnect.h"
|
|
|
|
#include "mozilla/dom/BindingUtils.h"
|
|
#include "mozilla/dom/BlobBinding.h"
|
|
#include "mozilla/dom/File.h"
|
|
#include "mozilla/dom/ToJSValue.h"
|
|
#include "nsContentUtils.h"
|
|
#include "nsJSEnvironment.h"
|
|
#include "MainThreadUtils.h"
|
|
#include "StructuredCloneTags.h"
|
|
#include "jsapi.h"
|
|
|
|
using namespace mozilla::dom;
|
|
|
|
namespace {
|
|
|
|
void
|
|
Error(JSContext* aCx, uint32_t aErrorId)
|
|
{
|
|
if (NS_IsMainThread()) {
|
|
NS_DOMStructuredCloneError(aCx, aErrorId);
|
|
} else {
|
|
Throw(aCx, NS_ERROR_DOM_DATA_CLONE_ERR);
|
|
}
|
|
}
|
|
|
|
JSObject*
|
|
Read(JSContext* aCx, JSStructuredCloneReader* aReader, uint32_t aTag,
|
|
uint32_t aData, void* aClosure)
|
|
{
|
|
MOZ_ASSERT(aClosure);
|
|
|
|
StructuredCloneClosure* closure =
|
|
static_cast<StructuredCloneClosure*>(aClosure);
|
|
|
|
if (aTag == SCTAG_DOM_BLOB) {
|
|
// nsRefPtr<File> needs to go out of scope before toObjectOrNull() is
|
|
// called because the static analysis thinks dereferencing XPCOM objects
|
|
// can GC (because in some cases it can!), and a return statement with a
|
|
// JSObject* type means that JSObject* is on the stack as a raw pointer
|
|
// while destructors are running.
|
|
JS::Rooted<JS::Value> val(aCx);
|
|
{
|
|
MOZ_ASSERT(aData < closure->mBlobImpls.Length());
|
|
nsRefPtr<BlobImpl> blobImpl = closure->mBlobImpls[aData];
|
|
|
|
#ifdef DEBUG
|
|
{
|
|
// Blob should not be mutable.
|
|
bool isMutable;
|
|
MOZ_ASSERT(NS_SUCCEEDED(blobImpl->GetMutable(&isMutable)));
|
|
MOZ_ASSERT(!isMutable);
|
|
}
|
|
#endif
|
|
|
|
// Let's create a new blob with the correct parent.
|
|
nsIGlobalObject *global = xpc::NativeGlobal(JS::CurrentGlobalOrNull(aCx));
|
|
MOZ_ASSERT(global);
|
|
|
|
nsRefPtr<Blob> newBlob = Blob::Create(global, blobImpl);
|
|
if (!ToJSValue(aCx, newBlob, &val)) {
|
|
return nullptr;
|
|
}
|
|
}
|
|
|
|
return &val.toObject();
|
|
}
|
|
|
|
return NS_DOMReadStructuredClone(aCx, aReader, aTag, aData, nullptr);
|
|
}
|
|
|
|
bool
|
|
Write(JSContext* aCx, JSStructuredCloneWriter* aWriter,
|
|
JS::Handle<JSObject*> aObj, void* aClosure)
|
|
{
|
|
MOZ_ASSERT(aClosure);
|
|
|
|
StructuredCloneClosure* closure =
|
|
static_cast<StructuredCloneClosure*>(aClosure);
|
|
|
|
// See if the wrapped native is a File/Blob.
|
|
{
|
|
Blob* blob = nullptr;
|
|
if (NS_SUCCEEDED(UNWRAP_OBJECT(Blob, aObj, blob)) &&
|
|
NS_SUCCEEDED(blob->SetMutable(false)) &&
|
|
JS_WriteUint32Pair(aWriter, SCTAG_DOM_BLOB,
|
|
closure->mBlobImpls.Length())) {
|
|
closure->mBlobImpls.AppendElement(blob->Impl());
|
|
return true;
|
|
}
|
|
}
|
|
|
|
return NS_DOMWriteStructuredClone(aCx, aWriter, aObj, nullptr);
|
|
}
|
|
|
|
const JSStructuredCloneCallbacks gCallbacks = {
|
|
Read,
|
|
Write,
|
|
Error,
|
|
nullptr,
|
|
nullptr,
|
|
nullptr
|
|
};
|
|
|
|
} // namespace
|
|
|
|
namespace mozilla {
|
|
namespace dom {
|
|
|
|
bool
|
|
ReadStructuredClone(JSContext* aCx, uint64_t* aData, size_t aDataLength,
|
|
const StructuredCloneClosure& aClosure,
|
|
JS::MutableHandle<JS::Value> aClone)
|
|
{
|
|
void* closure = &const_cast<StructuredCloneClosure&>(aClosure);
|
|
return !!JS_ReadStructuredClone(aCx, aData, aDataLength,
|
|
JS_STRUCTURED_CLONE_VERSION, aClone,
|
|
&gCallbacks, closure);
|
|
}
|
|
|
|
bool
|
|
WriteStructuredClone(JSContext* aCx, JS::Handle<JS::Value> aSource,
|
|
JSAutoStructuredCloneBuffer& aBuffer,
|
|
StructuredCloneClosure& aClosure)
|
|
{
|
|
return aBuffer.write(aCx, aSource, &gCallbacks, &aClosure);
|
|
}
|
|
|
|
} // namespace dom
|
|
} // namespace mozilla
|