mirror of
https://github.com/roytam1/palemoon27.git
synced 2026-05-26 14:18:48 +00:00
f4be2b8299
- Bug 1152694 - Make UUID and service name as input arguments for BluetoothSocket, r=tzimmermann (b7cf048bb) - Bug 1163388 - patch 1 - make nsIDOMFile an empty interface, r=ehsan (2723c513a) - Bug 1150160 - Support import of apps as memory blobs. r=marco (ffe4538f1) - Bug 1142132: Move helper classes of OPP manager into manager's namespace, r=shuang (ffca18a8e) - uuid of 1146349 (00c6050e5) - Bug 1151611 - Expose DXVA status in about:support. r=cpearce,felipe (6afe0b458) - Bug 1157150 - Add nsDOMWindowUtils.postRestyleSelfEvent method, for use in tests. r=smaug (081f852ae) - Bug 1161206 - Implement native mousewheel event synthesization on OS X. r=mstange (8741c0b62) - Bug 1163388 - patch 2 - get rid of nsIDOMFile, r=ehsan (ae0c054b6) - Bug 1159659 - Allow tab sharing on XP and OSX 10.6. r=pkerr (461ffca9d) - Bug 1155759 - Part 1 - Remove some manual refcounting from docshell. r=smaug (fdcdf3a9a) - Bug 1155759 - Part 2 - Use a static ref ptr for gObserver in nsSHistory. r=smaug (84706ab08) - Bug 679939 part 1. Extend the hasRunOnce/treatAsRunOnce setup to global and eval scripts. r=luke (1b0450709) - Bug 679939 part 2. Disallow execution of global/eval scripts that are flagged runOnce and have already run. r=luke (4a2f9d947) - pointer style (f95806360) - Bug 679939 part 3. Add a CompileOptions flag for indicating that the script should be compiled runOnce. r=luke (7e7cfe90a) - Bug 679939 part 4. Set the isRunOnce compile flag as needed. r=luke (ab84de2ad) - Bug 1167494 - Build error with --disable-sandbox on OS X. r=jld (a66816733) - Bug 1146472 part 1. Don't do object-kind guessing for object literal templates in scripts, since we in fact know exactly how many slots we want them to have and hence what the kind should be. r=terrence (aa1db7c23) - Bug 1146472 part 2. Use JSOP_NEWOBJECT as needed even if the script is not compile-and-go. r=luke (b6e222834) - Bug 977308 - Pre-tenure all objects attached to scripts; r=sfink (ac3175b8e) - Bug 1143704 part 12 - Move remaining functions to BytecodeEmitter. r=bhackett (7369f3f6d) - Bug 1143704 part 13 - Make emitJump, emitN etc return bool instead of ptrdiff_t. r=luke (42c8f936f) - Bug 1143704 part 14 - Change newSrcNote* to return bool instead of int. r=luke (182525f7d) - Bug 1147581 - Remove the now defunct TMPSLOT mechanism. (r=jorendorff) (08c377985) - Bug 1146836 part 1 - Cleanup BytecodeEmitter::emitSwitch. r=luke (2e15e54da) - Bug 1146836 part 2 - Use Vectors instead of malloc in emitSwitch and fix an old bug. r=luke (018838218) - Bug 679939 part 5. Stop using the compileAndGo script flag in the bytecode emitter. r=luke (047c3baca) - Bug 679939 part 6. Drop function-cloning uses of compileAndGo, since it no longer affects the bytecode. r=luke (25ec43122) - Bug 1145488. Stop using compileAndGo in the JITs. r=jandem (903ed3914) - Bug 679939 part 7. Drop the now-unused JSScript::compileAndGo. r=luke (979044eb4) - Bug 679939 part 8. Drop the now-unused compileAndGo from CompileOptions. r=luke (db211ef89) - Bug 1139217 - Make js::HashSet<T> work with move-only T types; r=luke (353f6e1e3) - Bug 1144366 followup - Stop declaring multiple pointers on a single line. r=jorendorff (b33884fb0) - support FreeBSD (1a9b19266)
232 lines
6.9 KiB
C++
232 lines
6.9 KiB
C++
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
|
* vim: set ts=8 sw=4 et 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/. */
|
|
|
|
#ifndef mozilla_jsipc_JavaScriptLogging__
|
|
#define mozilla_jsipc_JavaScriptLogging__
|
|
|
|
#include "nsString.h"
|
|
#include "nsPrintfCString.h"
|
|
#include "jsfriendapi.h"
|
|
#include "jswrapper.h"
|
|
|
|
namespace mozilla {
|
|
namespace jsipc {
|
|
|
|
#define LOG(...) \
|
|
PR_BEGIN_MACRO \
|
|
if (LoggingEnabled()) { \
|
|
Logging log(this, cx); \
|
|
log.print(__VA_ARGS__); \
|
|
} \
|
|
PR_END_MACRO
|
|
|
|
#define LOG_STACK() \
|
|
PR_BEGIN_MACRO \
|
|
if (StackLoggingEnabled()) { \
|
|
js::DumpBacktrace(cx); \
|
|
} \
|
|
PR_END_MACRO
|
|
|
|
struct ReceiverObj
|
|
{
|
|
ObjectId id;
|
|
explicit ReceiverObj(ObjectId id) : id(id) {}
|
|
};
|
|
|
|
struct InVariant
|
|
{
|
|
JSVariant variant;
|
|
explicit InVariant(const JSVariant& variant) : variant(variant) {}
|
|
};
|
|
|
|
struct OutVariant
|
|
{
|
|
JSVariant variant;
|
|
explicit OutVariant(const JSVariant& variant) : variant(variant) {}
|
|
};
|
|
|
|
struct Identifier
|
|
{
|
|
JSIDVariant variant;
|
|
explicit Identifier(const JSIDVariant& variant) : variant(variant) {}
|
|
};
|
|
|
|
class Logging
|
|
{
|
|
public:
|
|
Logging(JavaScriptShared* shared, JSContext* cx) : shared(shared), cx(cx) {}
|
|
|
|
void print(const nsCString& str) {
|
|
const char* side = shared->isParent() ? "from child" : "from parent";
|
|
printf("CPOW %s: %s\n", side, str.get());
|
|
}
|
|
|
|
void print(const char* str) {
|
|
print(nsCString(str));
|
|
}
|
|
template<typename T1>
|
|
void print(const char* fmt, const T1& a1) {
|
|
nsAutoCString tmp1;
|
|
format(a1, tmp1);
|
|
print(nsPrintfCString(fmt, tmp1.get()));
|
|
}
|
|
template<typename T1, typename T2>
|
|
void print(const char* fmt, const T1& a1, const T2& a2) {
|
|
nsAutoCString tmp1;
|
|
nsAutoCString tmp2;
|
|
format(a1, tmp1);
|
|
format(a2, tmp2);
|
|
print(nsPrintfCString(fmt, tmp1.get(), tmp2.get()));
|
|
}
|
|
template<typename T1, typename T2, typename T3>
|
|
void print(const char* fmt, const T1& a1, const T2& a2, const T3& a3) {
|
|
nsAutoCString tmp1;
|
|
nsAutoCString tmp2;
|
|
nsAutoCString tmp3;
|
|
format(a1, tmp1);
|
|
format(a2, tmp2);
|
|
format(a3, tmp3);
|
|
print(nsPrintfCString(fmt, tmp1.get(), tmp2.get(), tmp3.get()));
|
|
}
|
|
|
|
void format(const nsString& str, nsCString& out) {
|
|
out = NS_ConvertUTF16toUTF8(str);
|
|
}
|
|
|
|
void formatObject(bool incoming, bool local, ObjectId id, nsCString& out) {
|
|
const char* side;
|
|
const char* objDesc;
|
|
void* ptr;
|
|
|
|
if (local == incoming) {
|
|
JS::RootedObject obj(cx);
|
|
obj = shared->objects_.find(id);
|
|
if (obj) {
|
|
JSAutoCompartment ac(cx, obj);
|
|
objDesc = js::ObjectClassName(cx, obj);
|
|
} else {
|
|
objDesc = "<dead object>";
|
|
}
|
|
|
|
side = shared->isParent() ? "parent" : "child";
|
|
ptr = js::UncheckedUnwrap(obj, true);
|
|
} else {
|
|
objDesc = "<cpow>";
|
|
side = shared->isParent() ? "child" : "parent";
|
|
ptr = nullptr;
|
|
}
|
|
|
|
out = nsPrintfCString("<%s %s:%d:%p>", side, objDesc, id.serialNumber(), ptr);
|
|
}
|
|
|
|
void format(const ReceiverObj& obj, nsCString& out) {
|
|
formatObject(true, true, obj.id, out);
|
|
}
|
|
|
|
void format(const nsTArray<JSParam>& values, nsCString& out) {
|
|
nsAutoCString tmp;
|
|
out.Truncate();
|
|
for (size_t i = 0; i < values.Length(); i++) {
|
|
if (i)
|
|
out.AppendLiteral(", ");
|
|
if (values[i].type() == JSParam::Tvoid_t) {
|
|
out.AppendLiteral("<void>");
|
|
} else {
|
|
format(InVariant(values[i].get_JSVariant()), tmp);
|
|
out += tmp;
|
|
}
|
|
}
|
|
}
|
|
|
|
void format(const InVariant& value, nsCString& out) {
|
|
format(true, value.variant, out);
|
|
}
|
|
|
|
void format(const OutVariant& value, nsCString& out) {
|
|
format(false, value.variant, out);
|
|
}
|
|
|
|
void format(bool incoming, const JSVariant& value, nsCString& out) {
|
|
switch (value.type()) {
|
|
case JSVariant::TUndefinedVariant: {
|
|
out = "undefined";
|
|
break;
|
|
}
|
|
case JSVariant::TNullVariant: {
|
|
out = "null";
|
|
break;
|
|
}
|
|
case JSVariant::TnsString: {
|
|
nsAutoCString tmp;
|
|
format(value.get_nsString(), tmp);
|
|
out = nsPrintfCString("\"%s\"", tmp.get());
|
|
break;
|
|
}
|
|
case JSVariant::TObjectVariant: {
|
|
const ObjectVariant& ovar = value.get_ObjectVariant();
|
|
if (ovar.type() == ObjectVariant::TLocalObject)
|
|
formatObject(incoming, true, ObjectId::deserialize(ovar.get_LocalObject().serializedId()), out);
|
|
else
|
|
formatObject(incoming, false, ObjectId::deserialize(ovar.get_RemoteObject().serializedId()), out);
|
|
break;
|
|
}
|
|
case JSVariant::TSymbolVariant: {
|
|
out = "<Symbol>";
|
|
break;
|
|
}
|
|
case JSVariant::Tdouble: {
|
|
out = nsPrintfCString("%.0f", value.get_double());
|
|
break;
|
|
}
|
|
case JSVariant::Tbool: {
|
|
out = value.get_bool() ? "true" : "false";
|
|
break;
|
|
}
|
|
case JSVariant::TJSIID: {
|
|
out = "<JSIID>";
|
|
break;
|
|
}
|
|
default: {
|
|
out = "<JSIID>";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
void format(const Identifier& id, nsCString& out) {
|
|
switch (id.variant.type()) {
|
|
case JSIDVariant::TSymbolVariant: {
|
|
out = "<Symbol>";
|
|
break;
|
|
}
|
|
case JSIDVariant::TnsString: {
|
|
nsAutoCString tmp;
|
|
format(id.variant.get_nsString(), tmp);
|
|
out = nsPrintfCString("\"%s\"", tmp.get());
|
|
break;
|
|
}
|
|
case JSIDVariant::Tint32_t: {
|
|
out = nsPrintfCString("%d", id.variant.get_int32_t());
|
|
break;
|
|
}
|
|
default: {
|
|
out = "Unknown";
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private:
|
|
JavaScriptShared* shared;
|
|
JSContext* cx;
|
|
};
|
|
|
|
} // namespace jsipc
|
|
} // namespace mozilla
|
|
|
|
#endif
|