mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Merge m-i to m-c
This commit is contained in:
commit
685a462788
@ -68,6 +68,10 @@ pref("network.http.spdy.push-allowance", 32768);
|
||||
pref("network.buffer.cache.count", 24);
|
||||
pref("network.buffer.cache.size", 16384);
|
||||
|
||||
// predictive actions
|
||||
pref("network.seer.max-db-size", 2097152); // bytes
|
||||
pref("network.seer.preserve", 50); // percentage of seer data to keep when cleaning up
|
||||
|
||||
/* session history */
|
||||
pref("browser.sessionhistory.max_total_viewers", 1);
|
||||
pref("browser.sessionhistory.max_entries", 50);
|
||||
|
@ -64,4 +64,6 @@ MOZ_PAY=1
|
||||
# Enable activities. These are used for FxOS developers currently.
|
||||
MOZ_ACTIVITIES=1
|
||||
MOZ_JSDOWNLOADS=1
|
||||
# Enable exact rooting on desktop.
|
||||
JSGC_USE_EXACT_ROOTING=1
|
||||
|
||||
|
@ -882,6 +882,8 @@ TouchDragAndHold.prototype = {
|
||||
if (this._debug) {
|
||||
info("[0] touchstart " + aStartX + " x " + aStartY);
|
||||
}
|
||||
// flush layout, bug 914847
|
||||
this._utils.elementFromPoint(aStartX, aStartY, false, true);
|
||||
if (this._native) {
|
||||
this._utils.sendNativeTouchPoint(this._pointerId, this._dui.TOUCH_CONTACT,
|
||||
aStartX, aStartY, 1, 90);
|
||||
@ -909,7 +911,7 @@ TouchDragAndHold.prototype = {
|
||||
return this._defer.promise;
|
||||
},
|
||||
|
||||
end: function start() {
|
||||
end: function end() {
|
||||
if (this._debug) {
|
||||
info("[" + this._step.steps + "] touchend " + this._endPoint.xPos + " x " + this._endPoint.yPos);
|
||||
SelectionHelperUI.debugClearDebugPoints();
|
||||
|
@ -11,10 +11,13 @@ public class AnnotationInfo {
|
||||
public final String wrapperName;
|
||||
public final boolean isStatic;
|
||||
public final boolean isMultithreaded;
|
||||
public final boolean noThrow;
|
||||
|
||||
public AnnotationInfo(String aWrapperName, boolean aIsStatic, boolean aIsMultithreaded) {
|
||||
public AnnotationInfo(String aWrapperName, boolean aIsStatic, boolean aIsMultithreaded,
|
||||
boolean aNoThrow) {
|
||||
wrapperName = aWrapperName;
|
||||
isStatic = aIsStatic;
|
||||
isMultithreaded = aIsMultithreaded;
|
||||
noThrow = aNoThrow;
|
||||
}
|
||||
}
|
||||
|
@ -70,11 +70,7 @@ public class CodeGenerator {
|
||||
" ").append(mCClassName).append("(jobject obj, JNIEnv* env) : AutoGlobalWrappedJavaObject(obj, env) {};\n");
|
||||
|
||||
wrapperMethodBodies.append("\n").append(mCClassName).append("* ").append(mCClassName).append("::Wrap(jobject obj) {\n" +
|
||||
" JNIEnv *env = GetJNIForThread();\n\n" +
|
||||
" if (!env) {\n" +
|
||||
" ALOG_BRIDGE(\"Aborted: No env - %s\", __PRETTY_FUNCTION__);\n" +
|
||||
" return nullptr;\n" +
|
||||
" }\n\n" +
|
||||
" JNIEnv *env = GetJNIForThread();\n" +
|
||||
" ").append(mCClassName).append("* ret = new ").append(mCClassName).append("(obj, env);\n" +
|
||||
" env->DeleteLocalRef(obj);\n" +
|
||||
" return ret;\n" +
|
||||
@ -114,7 +110,10 @@ public class CodeGenerator {
|
||||
writeSignatureToHeader(headerSignature);
|
||||
|
||||
// Use the implementation signature to generate the method body...
|
||||
writeMethodBody(implementationSignature, CMethodName, theMethod, mClassToWrap, aMethodTuple.mAnnotationInfo.isStatic, aMethodTuple.mAnnotationInfo.isMultithreaded);
|
||||
writeMethodBody(implementationSignature, CMethodName, theMethod, mClassToWrap,
|
||||
aMethodTuple.mAnnotationInfo.isStatic,
|
||||
aMethodTuple.mAnnotationInfo.isMultithreaded,
|
||||
aMethodTuple.mAnnotationInfo.noThrow);
|
||||
}
|
||||
|
||||
private void generateGetterOrSetterBody(Class<?> aFieldType, String aFieldName, boolean aIsFieldStatic, boolean isSetter) {
|
||||
@ -229,7 +228,9 @@ public class CodeGenerator {
|
||||
writeSignatureToHeader(headerSignature);
|
||||
|
||||
// Use the implementation signature to generate the method body...
|
||||
writeCtorBody(implementationSignature, theCtor, aCtorTuple.mAnnotationInfo.isMultithreaded);
|
||||
writeCtorBody(implementationSignature, theCtor,
|
||||
aCtorTuple.mAnnotationInfo.isMultithreaded,
|
||||
aCtorTuple.mAnnotationInfo.noThrow);
|
||||
|
||||
if (theCtor.getParameterTypes().length == 0) {
|
||||
mHasEncounteredDefaultConstructor = true;
|
||||
@ -286,10 +287,6 @@ public class CodeGenerator {
|
||||
} else {
|
||||
wrapperMethodBodies.append("GetJNIForThread();\n");
|
||||
}
|
||||
wrapperMethodBodies.append(" if (!env) {\n" +
|
||||
" ALOG_BRIDGE(\"Aborted: No env - %s\", __PRETTY_FUNCTION__);\n" +
|
||||
" return").append(Utils.getFailureReturnForType(returnType)).append(";\n" +
|
||||
" }\n\n");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -299,7 +296,8 @@ public class CodeGenerator {
|
||||
* @param aMethod A constructor/method being wrapped.
|
||||
* @param aIsObjectReturningMethod Does the method being wrapped return an object?
|
||||
*/
|
||||
private void writeFramePushBoilerplate(Member aMethod, boolean aIsObjectReturningMethod) {
|
||||
private void writeFramePushBoilerplate(Member aMethod,
|
||||
boolean aIsObjectReturningMethod, boolean aNoThrow) {
|
||||
if (aMethod instanceof Field) {
|
||||
throw new IllegalArgumentException("Tried to push frame for a FIELD?!");
|
||||
}
|
||||
@ -325,13 +323,18 @@ public class CodeGenerator {
|
||||
if (aIsObjectReturningMethod) {
|
||||
localReferencesNeeded++;
|
||||
}
|
||||
wrapperMethodBodies.append(" if (env->PushLocalFrame(").append(localReferencesNeeded).append(") != 0) {\n" +
|
||||
" ALOG_BRIDGE(\"Exceptional exit of: %s\", __PRETTY_FUNCTION__);\n" +
|
||||
" env->ExceptionDescribe();\n"+
|
||||
" env->ExceptionClear();\n" +
|
||||
" return").append(Utils.getFailureReturnForType(returnType)).append(";\n" +
|
||||
wrapperMethodBodies.append(
|
||||
" if (env->PushLocalFrame(").append(localReferencesNeeded).append(") != 0) {\n");
|
||||
if (!aNoThrow) {
|
||||
wrapperMethodBodies.append(
|
||||
" AndroidBridge::HandleUncaughtException(env);\n" +
|
||||
" MOZ_ASSUME_UNREACHABLE(\"Exception should have caused crash.\");\n");
|
||||
} else {
|
||||
wrapperMethodBodies.append(
|
||||
" return").append(Utils.getFailureReturnForType(returnType)).append(";\n");
|
||||
}
|
||||
wrapperMethodBodies.append(
|
||||
" }\n\n");
|
||||
|
||||
}
|
||||
|
||||
private StringBuilder getArgumentMarshalling(Class<?>[] argumentTypes) {
|
||||
@ -376,12 +379,13 @@ public class CodeGenerator {
|
||||
return argumentContent;
|
||||
}
|
||||
|
||||
private void writeCtorBody(String implementationSignature, Constructor theCtor, boolean aIsThreaded) {
|
||||
private void writeCtorBody(String implementationSignature, Constructor theCtor,
|
||||
boolean aIsThreaded, boolean aNoThrow) {
|
||||
Class<?>[] argumentTypes = theCtor.getParameterTypes();
|
||||
|
||||
writeFunctionStartupBoilerPlate(implementationSignature, Void.class, false, aIsThreaded);
|
||||
|
||||
writeFramePushBoilerplate(theCtor, false);
|
||||
writeFramePushBoilerplate(theCtor, false, aNoThrow);
|
||||
|
||||
// Marshall arguments for this constructor, if any...
|
||||
boolean hasArguments = argumentTypes.length != 0;
|
||||
@ -420,7 +424,9 @@ public class CodeGenerator {
|
||||
* @param aMethod The Java method to be wrapped by the C++ method being generated.
|
||||
* @param aClass The Java class to which the method belongs.
|
||||
*/
|
||||
private void writeMethodBody(String methodSignature, String aCMethodName, Method aMethod, Class<?> aClass, boolean aIsStaticBridgeMethod, boolean aIsMultithreaded) {
|
||||
private void writeMethodBody(String methodSignature, String aCMethodName, Method aMethod,
|
||||
Class<?> aClass, boolean aIsStaticBridgeMethod, boolean aIsMultithreaded,
|
||||
boolean aNoThrow) {
|
||||
Class<?>[] argumentTypes = aMethod.getParameterTypes();
|
||||
Class<?> returnType = aMethod.getReturnType();
|
||||
|
||||
@ -428,7 +434,7 @@ public class CodeGenerator {
|
||||
|
||||
boolean isObjectReturningMethod = !returnType.getCanonicalName().equals("void") && Utils.isObjectType(returnType);
|
||||
|
||||
writeFramePushBoilerplate(aMethod, isObjectReturningMethod);
|
||||
writeFramePushBoilerplate(aMethod, isObjectReturningMethod, aNoThrow);
|
||||
|
||||
// Marshall arguments, if we have any.
|
||||
boolean hasArguments = argumentTypes.length != 0;
|
||||
@ -477,16 +483,12 @@ public class CodeGenerator {
|
||||
|
||||
// Tack on the arguments, if any..
|
||||
wrapperMethodBodies.append(argumentContent)
|
||||
.append(");\n\n");
|
||||
.append(");\n");
|
||||
|
||||
// Check for exception and return the failure value..
|
||||
wrapperMethodBodies.append(" if (env->ExceptionCheck()) {\n" +
|
||||
" ALOG_BRIDGE(\"Exceptional exit of: %s\", __PRETTY_FUNCTION__);\n" +
|
||||
" env->ExceptionDescribe();\n" +
|
||||
" env->ExceptionClear();\n" +
|
||||
" env->PopLocalFrame(nullptr);\n" +
|
||||
" return").append(Utils.getFailureReturnForType(returnType)).append(";\n" +
|
||||
" }\n\n");
|
||||
// Check for exception and crash if any...
|
||||
if (!aNoThrow) {
|
||||
wrapperMethodBodies.append(" AndroidBridge::HandleUncaughtException(env);\n");
|
||||
}
|
||||
|
||||
// If we're returning an object, pop the callee's stack frame extracting our ref as the return
|
||||
// value.
|
||||
|
@ -75,6 +75,7 @@ public class GeneratableElementIterator implements Iterator<AnnotatableEntity> {
|
||||
String stubName = null;
|
||||
boolean isStaticStub = false;
|
||||
boolean isMultithreadedStub = false;
|
||||
boolean noThrow = false;
|
||||
try {
|
||||
// Determine the explicitly-given name of the stub to generate, if any.
|
||||
final Method stubNameMethod = annotationType.getDeclaredMethod("stubName");
|
||||
@ -90,6 +91,12 @@ public class GeneratableElementIterator implements Iterator<AnnotatableEntity> {
|
||||
final Method multithreadedStubMethod = annotationType.getDeclaredMethod("allowMultithread");
|
||||
multithreadedStubMethod.setAccessible(true);
|
||||
isMultithreadedStub = (Boolean) multithreadedStubMethod.invoke(annotation);
|
||||
|
||||
// Determine if ignoring exceptions
|
||||
final Method noThrowMethod = annotationType.getDeclaredMethod("noThrow");
|
||||
noThrowMethod.setAccessible(true);
|
||||
noThrow = (Boolean) noThrowMethod.invoke(annotation);
|
||||
|
||||
} catch (NoSuchMethodException e) {
|
||||
System.err.println("Unable to find expected field on WrapElementForJNI annotation. Did the signature change?");
|
||||
e.printStackTrace(System.err);
|
||||
@ -110,7 +117,8 @@ public class GeneratableElementIterator implements Iterator<AnnotatableEntity> {
|
||||
stubName = aMethodName.substring(0, 1).toUpperCase() + aMethodName.substring(1);
|
||||
}
|
||||
|
||||
AnnotationInfo annotationInfo = new AnnotationInfo(stubName, isStaticStub, isMultithreadedStub);
|
||||
AnnotationInfo annotationInfo = new AnnotationInfo(
|
||||
stubName, isStaticStub, isMultithreadedStub, noThrow);
|
||||
mNextReturnValue = new AnnotatableEntity(candidateElement, annotationInfo);
|
||||
return;
|
||||
}
|
||||
@ -119,7 +127,8 @@ public class GeneratableElementIterator implements Iterator<AnnotatableEntity> {
|
||||
// If no annotation found, we might be expected to generate anyway using default arguments,
|
||||
// thanks to the "Generate everything" annotation.
|
||||
if (mIterateEveryEntry) {
|
||||
AnnotationInfo annotationInfo = new AnnotationInfo(candidateElement.getName(), false, false);
|
||||
AnnotationInfo annotationInfo = new AnnotationInfo(
|
||||
candidateElement.getName(), false, false, false);
|
||||
mNextReturnValue = new AnnotatableEntity(candidateElement, annotationInfo);
|
||||
return;
|
||||
}
|
||||
|
@ -100,7 +100,7 @@ IDToString(JSContext *cx, jsid id_)
|
||||
return JS_GetInternedStringChars(JSID_TO_STRING(id));
|
||||
|
||||
JS::Rooted<JS::Value> idval(cx);
|
||||
if (!JS_IdToValue(cx, id, idval.address()))
|
||||
if (!JS_IdToValue(cx, id, &idval))
|
||||
return nullptr;
|
||||
JSString *str = JS::ToString(cx, idval);
|
||||
if(!str)
|
||||
|
106
configure.in
106
configure.in
@ -1549,50 +1549,6 @@ if test "$MOZ_PROFILING" -a -z "$STRIP_FLAGS"; then
|
||||
esac
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use incremental GC
|
||||
dnl ========================================================
|
||||
JSGC_INCREMENTAL=1
|
||||
MOZ_ARG_DISABLE_BOOL(gcincremental,
|
||||
[ --disable-gcincremental Disable incremental GC],
|
||||
JSGC_INCREMENTAL= )
|
||||
if test -n "$JSGC_INCREMENTAL"; then
|
||||
AC_DEFINE(JSGC_INCREMENTAL)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use generational GC
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(gcgenerational,
|
||||
[ --enable-gcgenerational Enable generational GC],
|
||||
JSGC_GENERATIONAL=1,
|
||||
JSGC_GENERATIONAL= )
|
||||
if test -n "$JSGC_GENERATIONAL"; then
|
||||
AC_DEFINE(JSGC_GENERATIONAL)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Perform moving GC stack rooting analysis
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(root-analysis,
|
||||
[ --enable-root-analysis Enable moving GC stack root analysis],
|
||||
JSGC_ROOT_ANALYSIS=1,
|
||||
JSGC_ROOT_ANALYSIS= )
|
||||
if test -n "$JSGC_ROOT_ANALYSIS"; then
|
||||
AC_DEFINE(JSGC_ROOT_ANALYSIS)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use exact stack rooting for GC
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(exact-rooting,
|
||||
[ --enable-exact-rooting Enable use of exact stack roots for GC],
|
||||
JSGC_USE_EXACT_ROOTING=1,
|
||||
JSGC_USE_EXACT_ROOTING= )
|
||||
if test -n "$JSGC_USE_EXACT_ROOTING"; then
|
||||
AC_DEFINE(JSGC_USE_EXACT_ROOTING)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use Valgrind
|
||||
dnl ========================================================
|
||||
@ -4064,6 +4020,7 @@ MOZ_AUDIO_CHANNEL_MANAGER=
|
||||
NSS_NO_LIBPKIX=
|
||||
MOZ_CONTENT_SANDBOX=
|
||||
MOZ_CONTENT_SANDBOX_REPORTER=
|
||||
JSGC_USE_EXACT_ROOTING=
|
||||
|
||||
case "$target_os" in
|
||||
mingw*)
|
||||
@ -4208,6 +4165,10 @@ if test -n "$WITH_APP_NAME" ; then
|
||||
MOZ_APP_NAME="$WITH_APP_NAME"
|
||||
fi
|
||||
|
||||
if test -z "$MOZ_APP_NAME"; then
|
||||
MOZ_APP_NAME=`echo $MOZ_APP_BASENAME | tr A-Z a-z`
|
||||
fi
|
||||
|
||||
MOZ_ARG_WITH_STRING(app-basename,
|
||||
[--with-app-basename=BASENAME sets MOZ_APP_BASENAME to BASENAME],
|
||||
WITH_APP_BASENAME=$withval,
|
||||
@ -7074,6 +7035,7 @@ if test -n "$_WRAP_MALLOC"; then
|
||||
WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=malloc,--wrap=calloc,--wrap=valloc,--wrap=free,--wrap=realloc,--wrap=memalign"
|
||||
WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=__builtin_new,--wrap=__builtin_vec_new,--wrap=__builtin_delete,--wrap=__builtin_vec_delete"
|
||||
WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=strdup,--wrap=strndup"
|
||||
WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=vasprintf,--wrap=asprintf"
|
||||
WRAP_LDFLAGS="${WRAP_LDFLAGS} -Wl,--wrap=posix_memalign,--wrap=malloc_usable_size"
|
||||
dnl Wrap operator new and operator delete on Android.
|
||||
if test "$OS_TARGET" = "Android"; then
|
||||
@ -7104,6 +7066,18 @@ if test -n "$MOZ_TRACE_JSCALLS"; then
|
||||
AC_DEFINE(MOZ_TRACE_JSCALLS)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl JS opt-mode assertions and minidump instrumentation
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(js-diagnostics,
|
||||
[ --enable-js-diagnostics
|
||||
Enable JS diagnostic assertions and breakpad data],
|
||||
JS_CRASH_DIAGNOSTICS=1,
|
||||
JS_CRASH_DIAGNOSTICS= )
|
||||
if test -n "$JS_CRASH_DIAGNOSTICS"; then
|
||||
AC_DEFINE(JS_CRASH_DIAGNOSTICS)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use incremental GC
|
||||
dnl ========================================================
|
||||
@ -7115,6 +7089,28 @@ if test -n "$JSGC_INCREMENTAL"; then
|
||||
AC_DEFINE(JSGC_INCREMENTAL)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use exact stack rooting for GC
|
||||
dnl ========================================================
|
||||
MOZ_ARG_DISABLE_BOOL(exact-rooting,
|
||||
[ --disable-exact-rooting Enable use of conservative stack scanning for GC],
|
||||
JSGC_USE_EXACT_ROOTING= ,
|
||||
JSGC_USE_EXACT_ROOTING=1 )
|
||||
if test -n "$JSGC_USE_EXACT_ROOTING"; then
|
||||
AC_DEFINE(JSGC_USE_EXACT_ROOTING)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl = Use generational GC
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(gcgenerational,
|
||||
[ --enable-gcgenerational Enable generational GC],
|
||||
JSGC_GENERATIONAL=1,
|
||||
JSGC_GENERATIONAL= )
|
||||
if test -n "$JSGC_GENERATIONAL"; then
|
||||
AC_DEFINE(JSGC_GENERATIONAL)
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl Zealous JavaScript GC
|
||||
dnl ========================================================
|
||||
@ -7127,15 +7123,14 @@ if test -n "$JS_GC_ZEAL" -o -n "$MOZ_DEBUG"; then
|
||||
fi
|
||||
|
||||
dnl ========================================================
|
||||
dnl JS opt-mode assertions and minidump instrumentation
|
||||
dnl = Perform moving GC stack rooting analysis
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(js-diagnostics,
|
||||
[ --enable-js-diagnostics
|
||||
Enable JS diagnostic assertions and breakpad data],
|
||||
JS_CRASH_DIAGNOSTICS=1,
|
||||
JS_CRASH_DIAGNOSTICS= )
|
||||
if test -n "$JS_CRASH_DIAGNOSTICS"; then
|
||||
AC_DEFINE(JS_CRASH_DIAGNOSTICS)
|
||||
MOZ_ARG_ENABLE_BOOL(root-analysis,
|
||||
[ --enable-root-analysis Enable moving GC stack root analysis],
|
||||
JSGC_ROOT_ANALYSIS=1,
|
||||
JSGC_ROOT_ANALYSIS= )
|
||||
if test -n "$JSGC_ROOT_ANALYSIS"; then
|
||||
AC_DEFINE(JSGC_ROOT_ANALYSIS)
|
||||
fi
|
||||
|
||||
MOZ_CHECK_CCACHE
|
||||
@ -8462,10 +8457,6 @@ AC_SUBST(MOZ_CHILD_PROCESS_BUNDLE)
|
||||
# - MOZ_PROFILE_MIGRATOR: When set, enables profile migrator.
|
||||
# - MOZ_EXTENSION_MANAGER: When set, enabled extension manager.
|
||||
|
||||
if test -z "$MOZ_APP_NAME"; then
|
||||
MOZ_APP_NAME=`echo $MOZ_APP_BASENAME | tr A-Z a-z`
|
||||
fi
|
||||
|
||||
# For extensions and langpacks, we require a max version that is compatible
|
||||
# across security releases. MOZ_APP_MAXVERSION is our method for doing that.
|
||||
# 10.0a1 and 10.0a2 aren't affected
|
||||
@ -9114,6 +9105,9 @@ if test -z "$JS_SHARED_LIBRARY" ; then
|
||||
ac_configure_args="$ac_configure_args --disable-export-js"
|
||||
fi
|
||||
fi
|
||||
if test -z "$JSGC_USE_EXACT_ROOTING" ; then
|
||||
ac_configure_args="$ac_configure_args --disable-exact-rooting"
|
||||
fi
|
||||
if test -z "$MOZ_NATIVE_NSPR"; then
|
||||
ac_configure_args="$ac_configure_args --with-nspr-cflags='$NSPR_CFLAGS'"
|
||||
ac_configure_args="$ac_configure_args --with-nspr-libs='$NSPR_LIBS'"
|
||||
|
@ -5386,7 +5386,7 @@ nsDocument::Register(JSContext* aCx, const nsAString& aName,
|
||||
// Create constructor to return. Store the name of the custom element as the
|
||||
// name of the function.
|
||||
JSFunction* constructor = JS_NewFunction(aCx, CustomElementConstructor, 0,
|
||||
JSFUN_CONSTRUCTOR, nullptr,
|
||||
JSFUN_CONSTRUCTOR, JS::NullPtr(),
|
||||
NS_ConvertUTF16toUTF8(lcName).get());
|
||||
JSObject* constructorObject = JS_GetFunctionObject(constructor);
|
||||
return constructorObject;
|
||||
|
@ -257,8 +257,9 @@ MediaEngineTabVideoSource::Draw() {
|
||||
NS_ENSURE_SUCCESS_VOID(rv);
|
||||
|
||||
layers::CairoImage::Data cairoData;
|
||||
cairoData.mSurface = surf;
|
||||
cairoData.mDeprecatedSurface = surf;
|
||||
cairoData.mSize = size;
|
||||
cairoData.mSourceSurface = gfxPlatform::GetPlatform()->GetSourceSurfaceForSurface(nullptr, surf);
|
||||
|
||||
nsRefPtr<layers::CairoImage> image = new layers::CairoImage();
|
||||
|
||||
|
@ -111,14 +111,6 @@ SpeechSynthesisRequestChild::RecvOnResume(const float& aElapsedTime,
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
SpeechSynthesisRequestChild::RecvOnError(const float& aElapsedTime,
|
||||
const uint32_t& aCharIndex)
|
||||
{
|
||||
mTask->DispatchErrorImpl(aElapsedTime, aCharIndex);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
SpeechSynthesisRequestChild::RecvOnBoundary(const nsString& aName,
|
||||
const float& aElapsedTime,
|
||||
|
@ -22,11 +22,11 @@ class SpeechSynthesisChild : public PSpeechSynthesisChild
|
||||
friend class nsSynthVoiceRegistry;
|
||||
|
||||
public:
|
||||
bool RecvVoiceAdded(const RemoteVoice& aVoice);
|
||||
bool RecvVoiceAdded(const RemoteVoice& aVoice) MOZ_OVERRIDE;
|
||||
|
||||
bool RecvVoiceRemoved(const nsString& aUri);
|
||||
bool RecvVoiceRemoved(const nsString& aUri) MOZ_OVERRIDE;
|
||||
|
||||
bool RecvSetDefaultVoice(const nsString& aUri, const bool& aIsDefault);
|
||||
bool RecvSetDefaultVoice(const nsString& aUri, const bool& aIsDefault) MOZ_OVERRIDE;
|
||||
|
||||
protected:
|
||||
SpeechSynthesisChild();
|
||||
@ -37,8 +37,8 @@ protected:
|
||||
const nsString& aText,
|
||||
const float& aVolume,
|
||||
const float& aPitch,
|
||||
const float& aRate);
|
||||
bool DeallocPSpeechSynthesisRequestChild(PSpeechSynthesisRequestChild* aActor);
|
||||
const float& aRate) MOZ_OVERRIDE;
|
||||
bool DeallocPSpeechSynthesisRequestChild(PSpeechSynthesisRequestChild* aActor) MOZ_OVERRIDE;
|
||||
};
|
||||
|
||||
class SpeechSynthesisRequestChild : public PSpeechSynthesisRequestChild
|
||||
@ -48,23 +48,21 @@ public:
|
||||
virtual ~SpeechSynthesisRequestChild();
|
||||
|
||||
protected:
|
||||
virtual bool RecvOnStart();
|
||||
virtual bool RecvOnStart() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool Recv__delete__(const bool& aIsError,
|
||||
const float& aElapsedTime,
|
||||
const uint32_t& aCharIndex);
|
||||
const uint32_t& aCharIndex) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvOnPause(const float& aElapsedTime, const uint32_t& aCharIndex);
|
||||
virtual bool RecvOnPause(const float& aElapsedTime, const uint32_t& aCharIndex) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvOnResume(const float& aElapsedTime, const uint32_t& aCharIndex);
|
||||
|
||||
virtual bool RecvOnError(const float& aElapsedTime, const uint32_t& aCharIndex);
|
||||
virtual bool RecvOnResume(const float& aElapsedTime, const uint32_t& aCharIndex) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvOnBoundary(const nsString& aName, const float& aElapsedTime,
|
||||
const uint32_t& aCharIndex);
|
||||
const uint32_t& aCharIndex) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvOnMark(const nsString& aName, const float& aElapsedTime,
|
||||
const uint32_t& aCharIndex);
|
||||
const uint32_t& aCharIndex) MOZ_OVERRIDE;
|
||||
|
||||
nsRefPtr<SpeechTaskChild> mTask;
|
||||
};
|
||||
|
@ -23,7 +23,7 @@ class SpeechSynthesisParent : public PSpeechSynthesisParent
|
||||
|
||||
public:
|
||||
bool RecvReadVoiceList(InfallibleTArray<RemoteVoice>* aVoices,
|
||||
InfallibleTArray<nsString>* aDefaults);
|
||||
InfallibleTArray<nsString>* aDefaults) MOZ_OVERRIDE;
|
||||
|
||||
protected:
|
||||
SpeechSynthesisParent();
|
||||
@ -33,9 +33,10 @@ protected:
|
||||
const nsString& aUri,
|
||||
const float& aVolume,
|
||||
const float& aRate,
|
||||
const float& aPitch);
|
||||
const float& aPitch)
|
||||
MOZ_OVERRIDE;
|
||||
|
||||
bool DeallocPSpeechSynthesisRequestParent(PSpeechSynthesisRequestParent* aActor);
|
||||
bool DeallocPSpeechSynthesisRequestParent(PSpeechSynthesisRequestParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
bool RecvPSpeechSynthesisRequestConstructor(PSpeechSynthesisRequestParent* aActor,
|
||||
const nsString& aText,
|
||||
@ -43,7 +44,7 @@ protected:
|
||||
const nsString& aUri,
|
||||
const float& aVolume,
|
||||
const float& aRate,
|
||||
const float& aPitch);
|
||||
const float& aPitch) MOZ_OVERRIDE;
|
||||
};
|
||||
|
||||
class SpeechSynthesisRequestParent : public PSpeechSynthesisRequestParent
|
||||
@ -56,11 +57,11 @@ public:
|
||||
|
||||
protected:
|
||||
|
||||
virtual bool RecvPause();
|
||||
virtual bool RecvPause() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvResume();
|
||||
virtual bool RecvResume() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvCancel();
|
||||
virtual bool RecvCancel() MOZ_OVERRIDE;
|
||||
};
|
||||
|
||||
class SpeechTaskParent : public nsSpeechTask
|
||||
|
@ -590,7 +590,7 @@ IdToString(JSContext *cx, jsid id)
|
||||
if (JSID_IS_STRING(id))
|
||||
return JSID_TO_STRING(id);
|
||||
JS::Rooted<JS::Value> idval(cx);
|
||||
if (!::JS_IdToValue(cx, id, idval.address()))
|
||||
if (!::JS_IdToValue(cx, id, &idval))
|
||||
return nullptr;
|
||||
return JS::ToString(cx, idval);
|
||||
}
|
||||
@ -1311,7 +1311,7 @@ nsDOMClassInfo::GetArrayIndexFromId(JSContext *cx, JS::Handle<jsid> id, bool *aI
|
||||
} else {
|
||||
JS::Rooted<JS::Value> idval(cx);
|
||||
double array_index;
|
||||
if (!::JS_IdToValue(cx, id, idval.address()) ||
|
||||
if (!::JS_IdToValue(cx, id, &idval) ||
|
||||
!JS::ToNumber(cx, idval, &array_index) ||
|
||||
!::JS_DoubleIsInt32(array_index, &i)) {
|
||||
return -1;
|
||||
@ -4358,7 +4358,9 @@ nsStorage2SH::NewEnumerate(nsIXPConnectWrappedNative *wrapper, JSContext *cx,
|
||||
JS_NewUCStringCopyN(cx, key.get(), key.Length());
|
||||
NS_ENSURE_TRUE(str, NS_ERROR_OUT_OF_MEMORY);
|
||||
|
||||
JS_ValueToId(cx, STRING_TO_JSVAL(str), idp);
|
||||
JS::Rooted<jsid> id(cx);
|
||||
JS_ValueToId(cx, JS::StringValue(str), &id);
|
||||
*idp = id;
|
||||
|
||||
keys->RemoveElementAt(0);
|
||||
|
||||
|
@ -1479,7 +1479,7 @@ AppendNamedPropertyIds(JSContext* cx, JS::Handle<JSObject*> proxy,
|
||||
}
|
||||
|
||||
JS::Rooted<jsid> id(cx);
|
||||
if (!JS_ValueToId(cx, v, id.address())) {
|
||||
if (!JS_ValueToId(cx, v, &id)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1609,7 +1609,8 @@ NativeToString(JSContext* cx, JS::Handle<JSObject*> wrapper,
|
||||
str = JS_NewStringCopyZ(cx, ifaceAndProtoJSClass->mToString);
|
||||
} else {
|
||||
MOZ_ASSERT(JS_IsNativeFunction(obj, Constructor));
|
||||
str = JS_DecompileFunction(cx, JS_GetObjectFunction(obj), 0);
|
||||
JS::Rooted<JSFunction*> fun(cx, JS_GetObjectFunction(obj));
|
||||
str = JS_DecompileFunction(cx, fun, 0);
|
||||
}
|
||||
}
|
||||
str = ConcatJSString(cx, pre, str, post);
|
||||
|
@ -5225,7 +5225,8 @@ if (!${obj}) {
|
||||
if self.idlNode.getExtendedAttribute("Frozen"):
|
||||
assert self.idlNode.type.isSequence()
|
||||
freezeValue = CGGeneric(
|
||||
"if (!JS_FreezeObject(cx, &args.rval().toObject())) {\n"
|
||||
"JS::Rooted<JSObject*> rvalObj(cx, &args.rval().toObject());\n"
|
||||
"if (!JS_FreezeObject(cx, rvalObj)) {\n"
|
||||
" return false;\n"
|
||||
"}")
|
||||
if self.idlNode.type.nullable():
|
||||
@ -5905,7 +5906,7 @@ class CGGenericMethod(CGAbstractBindingMethod):
|
||||
def generate_code(self):
|
||||
return CGIndenter(CGGeneric(
|
||||
"const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));\n"
|
||||
"MOZ_ASSERT(info->type == JSJitInfo::Method);\n"
|
||||
"MOZ_ASSERT(info->type() == JSJitInfo::Method);\n"
|
||||
"JSJitMethodOp method = info->method;\n"
|
||||
"return method(cx, obj, self, JSJitMethodCallArgs(args));"))
|
||||
|
||||
@ -6110,7 +6111,7 @@ class CGGenericGetter(CGAbstractBindingMethod):
|
||||
def generate_code(self):
|
||||
return CGIndenter(CGGeneric(
|
||||
"const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));\n"
|
||||
"MOZ_ASSERT(info->type == JSJitInfo::Getter);\n"
|
||||
"MOZ_ASSERT(info->type() == JSJitInfo::Getter);\n"
|
||||
"JSJitGetterOp getter = info->getter;\n"
|
||||
"return getter(cx, obj, self, JSJitGetterCallArgs(args));"))
|
||||
|
||||
@ -6226,7 +6227,7 @@ class CGGenericSetter(CGAbstractBindingMethod):
|
||||
' return ThrowErrorMessage(cx, MSG_MISSING_ARGUMENTS, "%s attribute setter");\n'
|
||||
"}\n"
|
||||
"const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));\n"
|
||||
"MOZ_ASSERT(info->type == JSJitInfo::Setter);\n"
|
||||
"MOZ_ASSERT(info->type() == JSJitInfo::Setter);\n"
|
||||
"JSJitSetterOp setter = info->setter;\n"
|
||||
"if (!setter(cx, obj, self, JSJitSetterCallArgs(args))) {\n"
|
||||
" return false;\n"
|
||||
@ -6357,16 +6358,16 @@ class CGMemberJITInfo(CGThing):
|
||||
" %s,\n"
|
||||
" %s,\n"
|
||||
" JSJitInfo::%s,\n"
|
||||
" JSJitInfo::%s, /* aliasSet. Not relevant for setters. */\n"
|
||||
" %s, /* returnType. Not relevant for setters. */\n"
|
||||
" %s, /* isInfallible. False in setters. */\n"
|
||||
" %s, /* isMovable. Not relevant for setters. */\n"
|
||||
" %s, /* isInSlot. Only relevant for getters. */\n"
|
||||
" %s, /* isTypedMethod. Only relevant for methods. */\n"
|
||||
" %s, /* Reserved slot index, if we're stored in a slot, else 0. */\n"
|
||||
" JSJitInfo::%s /* aliasSet. Not relevant for setters. */\n"
|
||||
"}" % (opName, protoID, depth, opType,
|
||||
" %s /* Reserved slot index, if we're stored in a slot, else 0. */\n"
|
||||
"}" % (opName, protoID, depth, opType, aliasSet,
|
||||
returnType, failstr, movablestr, slotStr,
|
||||
typedMethodStr, slotIndex, aliasSet))
|
||||
typedMethodStr, slotIndex))
|
||||
if args is not None:
|
||||
argTypes = "%s_argTypes" % infoName
|
||||
args = [CGMemberJITInfo.getJSArgType(arg.type) for arg in args]
|
||||
|
@ -285,7 +285,7 @@ IdToInt32(JSContext* cx, JS::Handle<jsid> id)
|
||||
JS::Rooted<JS::Value> idval(cx);
|
||||
double array_index;
|
||||
int32_t i;
|
||||
if (!::JS_IdToValue(cx, id, idval.address()) ||
|
||||
if (!::JS_IdToValue(cx, id, &idval) ||
|
||||
!JS::ToNumber(cx, idval, &array_index) ||
|
||||
!::JS_DoubleIsInt32(array_index, &i)) {
|
||||
return -1;
|
||||
|
@ -94,7 +94,7 @@ nsEventListenerInfo::GetJSVal(JSContext* aCx,
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIJSEventListener> jsl = do_QueryInterface(mListener);
|
||||
if (jsl) {
|
||||
if (jsl && jsl->GetHandler().HasEventHandler()) {
|
||||
JS::Handle<JSObject*> handler(jsl->GetHandler().Ptr()->Callable());
|
||||
if (handler) {
|
||||
aAc.construct(aCx, handler);
|
||||
|
@ -68,6 +68,10 @@ public:
|
||||
nsIContent* aContent);
|
||||
void Destroy(void);
|
||||
bool IsManaging(nsPresContext* aPresContext, nsIContent* aContent);
|
||||
bool KeepAliveDuringDeactive() const
|
||||
{
|
||||
return !!(mObserving & nsIMEUpdatePreference::NOTIFY_DURING_DEACTIVE);
|
||||
}
|
||||
|
||||
nsCOMPtr<nsIWidget> mWidget;
|
||||
nsCOMPtr<nsISelection> mSel;
|
||||
@ -226,6 +230,7 @@ nsIMEStateManager::OnChangeFocusInternal(nsPresContext* aPresContext,
|
||||
}
|
||||
|
||||
if (sTextStateObserver &&
|
||||
(aPresContext || !sTextStateObserver->KeepAliveDuringDeactive()) &&
|
||||
!sTextStateObserver->IsManaging(aPresContext, aContent)) {
|
||||
DestroyTextStateManager();
|
||||
}
|
||||
|
@ -60,6 +60,14 @@ function runTests() {
|
||||
is(jsdvalue.jsType, 3, "Event listener should be a function! (1)");
|
||||
*/
|
||||
|
||||
root.removeAttribute("onclick");
|
||||
root.setAttribute("onclick", "...invalid script...");
|
||||
SimpleTest.expectUncaughtException(true);
|
||||
infos = els.getListenerInfoFor(root, {});
|
||||
SimpleTest.expectUncaughtException(false);
|
||||
is(infos.length, 1);
|
||||
is(infos[0].listenerObject, null);
|
||||
|
||||
root.removeAttribute("onclick");
|
||||
infos = els.getListenerInfoFor(root, {});
|
||||
is(infos.length, 0, "Element shouldn't have listeners (2)");
|
||||
|
@ -86,7 +86,7 @@ public:
|
||||
AllocPImageBridgeChild(mozilla::ipc::Transport* aTransport,
|
||||
base::ProcessId aOtherProcess) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSetProcessPrivileges(const ChildPrivileges& aPrivs);
|
||||
virtual bool RecvSetProcessPrivileges(const ChildPrivileges& aPrivs) MOZ_OVERRIDE;
|
||||
|
||||
virtual PBrowserChild* AllocPBrowserChild(const IPCTabContext &aContext,
|
||||
const uint32_t &chromeFlags);
|
||||
@ -100,45 +100,45 @@ public:
|
||||
|
||||
virtual PCrashReporterChild*
|
||||
AllocPCrashReporterChild(const mozilla::dom::NativeThreadId& id,
|
||||
const uint32_t& processType);
|
||||
const uint32_t& processType) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
DeallocPCrashReporterChild(PCrashReporterChild*);
|
||||
DeallocPCrashReporterChild(PCrashReporterChild*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PHalChild* AllocPHalChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPHalChild(PHalChild*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PIndexedDBChild* AllocPIndexedDBChild();
|
||||
virtual bool DeallocPIndexedDBChild(PIndexedDBChild* aActor);
|
||||
virtual PIndexedDBChild* AllocPIndexedDBChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPIndexedDBChild(PIndexedDBChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PMemoryReportRequestChild*
|
||||
AllocPMemoryReportRequestChild(const uint32_t& generation);
|
||||
AllocPMemoryReportRequestChild(const uint32_t& generation) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
DeallocPMemoryReportRequestChild(PMemoryReportRequestChild* actor);
|
||||
DeallocPMemoryReportRequestChild(PMemoryReportRequestChild* actor) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvPMemoryReportRequestConstructor(PMemoryReportRequestChild* child,
|
||||
const uint32_t& generation);
|
||||
const uint32_t& generation) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvAudioChannelNotify();
|
||||
RecvAudioChannelNotify() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvDumpMemoryInfoToTempDir(const nsString& aIdentifier,
|
||||
const bool& aMinimizeMemoryUsage,
|
||||
const bool& aDumpChildProcesses);
|
||||
const bool& aDumpChildProcesses) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
RecvDumpGCAndCCLogsToFile(const nsString& aIdentifier,
|
||||
const bool& aDumpAllTraces,
|
||||
const bool& aDumpChildProcesses);
|
||||
const bool& aDumpChildProcesses) MOZ_OVERRIDE;
|
||||
|
||||
virtual PTestShellChild* AllocPTestShellChild();
|
||||
virtual bool DeallocPTestShellChild(PTestShellChild*);
|
||||
virtual bool RecvPTestShellConstructor(PTestShellChild*);
|
||||
virtual PTestShellChild* AllocPTestShellChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPTestShellChild(PTestShellChild*) MOZ_OVERRIDE;
|
||||
virtual bool RecvPTestShellConstructor(PTestShellChild*) MOZ_OVERRIDE;
|
||||
jsipc::JavaScriptChild *GetCPOWManager();
|
||||
|
||||
virtual PNeckoChild* AllocPNeckoChild();
|
||||
virtual bool DeallocPNeckoChild(PNeckoChild*);
|
||||
virtual PNeckoChild* AllocPNeckoChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPNeckoChild(PNeckoChild*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PExternalHelperAppChild *AllocPExternalHelperAppChild(
|
||||
const OptionalURIParams& uri,
|
||||
@ -147,23 +147,23 @@ public:
|
||||
const bool& aForceSave,
|
||||
const int64_t& aContentLength,
|
||||
const OptionalURIParams& aReferrer,
|
||||
PBrowserChild* aBrowser);
|
||||
virtual bool DeallocPExternalHelperAppChild(PExternalHelperAppChild *aService);
|
||||
PBrowserChild* aBrowser) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPExternalHelperAppChild(PExternalHelperAppChild *aService) MOZ_OVERRIDE;
|
||||
|
||||
virtual PSmsChild* AllocPSmsChild();
|
||||
virtual bool DeallocPSmsChild(PSmsChild*);
|
||||
virtual PSmsChild* AllocPSmsChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPSmsChild(PSmsChild*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PTelephonyChild* AllocPTelephonyChild();
|
||||
virtual bool DeallocPTelephonyChild(PTelephonyChild*);
|
||||
virtual PTelephonyChild* AllocPTelephonyChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPTelephonyChild(PTelephonyChild*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PStorageChild* AllocPStorageChild();
|
||||
virtual bool DeallocPStorageChild(PStorageChild* aActor);
|
||||
virtual PStorageChild* AllocPStorageChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPStorageChild(PStorageChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PBluetoothChild* AllocPBluetoothChild();
|
||||
virtual bool DeallocPBluetoothChild(PBluetoothChild* aActor);
|
||||
virtual PBluetoothChild* AllocPBluetoothChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPBluetoothChild(PBluetoothChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PFMRadioChild* AllocPFMRadioChild();
|
||||
virtual bool DeallocPFMRadioChild(PFMRadioChild* aActor);
|
||||
virtual PFMRadioChild* AllocPFMRadioChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPFMRadioChild(PFMRadioChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PAsmJSCacheEntryChild* AllocPAsmJSCacheEntryChild(
|
||||
const asmjscache::OpenMode& aOpenMode,
|
||||
@ -172,80 +172,83 @@ public:
|
||||
virtual bool DeallocPAsmJSCacheEntryChild(
|
||||
PAsmJSCacheEntryChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PSpeechSynthesisChild* AllocPSpeechSynthesisChild();
|
||||
virtual bool DeallocPSpeechSynthesisChild(PSpeechSynthesisChild* aActor);
|
||||
virtual PSpeechSynthesisChild* AllocPSpeechSynthesisChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPSpeechSynthesisChild(PSpeechSynthesisChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvRegisterChrome(const InfallibleTArray<ChromePackage>& packages,
|
||||
const InfallibleTArray<ResourceMapping>& resources,
|
||||
const InfallibleTArray<OverrideMapping>& overrides,
|
||||
const nsCString& locale);
|
||||
const nsCString& locale) MOZ_OVERRIDE;
|
||||
|
||||
virtual mozilla::jsipc::PJavaScriptChild* AllocPJavaScriptChild();
|
||||
virtual bool DeallocPJavaScriptChild(mozilla::jsipc::PJavaScriptChild*);
|
||||
virtual mozilla::jsipc::PJavaScriptChild* AllocPJavaScriptChild() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPJavaScriptChild(mozilla::jsipc::PJavaScriptChild*) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSetOffline(const bool& offline);
|
||||
virtual bool RecvSetOffline(const bool& offline) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSpeakerManagerNotify();
|
||||
virtual bool RecvSpeakerManagerNotify() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvNotifyVisited(const URIParams& aURI);
|
||||
virtual bool RecvNotifyVisited(const URIParams& aURI) MOZ_OVERRIDE;
|
||||
// auto remove when alertfinished is received.
|
||||
nsresult AddRemoteAlertObserver(const nsString& aData, nsIObserver* aObserver);
|
||||
|
||||
virtual bool RecvPreferenceUpdate(const PrefSetting& aPref);
|
||||
virtual bool RecvPreferenceUpdate(const PrefSetting& aPref) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvNotifyAlertsObserver(const nsCString& aType, const nsString& aData);
|
||||
virtual bool RecvNotifyAlertsObserver(const nsCString& aType,
|
||||
const nsString& aData) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAsyncMessage(const nsString& aMsg,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal);
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvGeolocationUpdate(const GeoPosition& somewhere);
|
||||
virtual bool RecvGeolocationUpdate(const GeoPosition& somewhere) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAddPermission(const IPC::Permission& permission);
|
||||
virtual bool RecvAddPermission(const IPC::Permission& permission) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvScreenSizeChanged(const gfxIntSize &size);
|
||||
virtual bool RecvScreenSizeChanged(const gfxIntSize &size) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvFlushMemory(const nsString& reason);
|
||||
virtual bool RecvFlushMemory(const nsString& reason) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvActivateA11y();
|
||||
virtual bool RecvActivateA11y() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvGarbageCollect();
|
||||
virtual bool RecvCycleCollect();
|
||||
virtual bool RecvGarbageCollect() MOZ_OVERRIDE;
|
||||
virtual bool RecvCycleCollect() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAppInfo(const nsCString& version, const nsCString& buildID,
|
||||
const nsCString& name, const nsCString& UAName);
|
||||
const nsCString& name, const nsCString& UAName) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvLastPrivateDocShellDestroyed();
|
||||
virtual bool RecvLastPrivateDocShellDestroyed() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvFilePathUpdate(const nsString& aStorageType,
|
||||
const nsString& aStorageName,
|
||||
const nsString& aPath,
|
||||
const nsCString& aReason);
|
||||
const nsCString& aReason) MOZ_OVERRIDE;
|
||||
virtual bool RecvFileSystemUpdate(const nsString& aFsName,
|
||||
const nsString& aVolumeName,
|
||||
const int32_t& aState,
|
||||
const int32_t& aMountGeneration,
|
||||
const bool& aIsMediaPresent,
|
||||
const bool& aIsSharing,
|
||||
const bool& aIsFormatting);
|
||||
const bool& aIsFormatting) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvNuwaFork() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvNotifyProcessPriorityChanged(const hal::ProcessPriority& aPriority);
|
||||
virtual bool RecvMinimizeMemoryUsage();
|
||||
virtual bool RecvCancelMinimizeMemoryUsage();
|
||||
virtual bool
|
||||
RecvNotifyProcessPriorityChanged(const hal::ProcessPriority& aPriority) MOZ_OVERRIDE;
|
||||
virtual bool RecvMinimizeMemoryUsage() MOZ_OVERRIDE;
|
||||
virtual bool RecvCancelMinimizeMemoryUsage() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvLoadAndRegisterSheet(const URIParams& aURI, const uint32_t& aType);
|
||||
virtual bool RecvUnregisterSheet(const URIParams& aURI, const uint32_t& aType);
|
||||
virtual bool RecvLoadAndRegisterSheet(const URIParams& aURI,
|
||||
const uint32_t& aType) MOZ_OVERRIDE;
|
||||
virtual bool RecvUnregisterSheet(const URIParams& aURI, const uint32_t& aType) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvNotifyPhoneStateChange(const nsString& state);
|
||||
virtual bool RecvNotifyPhoneStateChange(const nsString& state) MOZ_OVERRIDE;
|
||||
|
||||
void AddIdleObserver(nsIObserver* aObserver, uint32_t aIdleTimeInS);
|
||||
void RemoveIdleObserver(nsIObserver* aObserver, uint32_t aIdleTimeInS);
|
||||
virtual bool RecvNotifyIdleObserver(const uint64_t& aObserver,
|
||||
const nsCString& aTopic,
|
||||
const nsString& aData);
|
||||
const nsString& aData) MOZ_OVERRIDE;
|
||||
#ifdef ANDROID
|
||||
gfxIntSize GetScreenSize() { return mScreenSize; }
|
||||
#endif
|
||||
@ -264,7 +267,7 @@ public:
|
||||
protected:
|
||||
virtual bool RecvPBrowserConstructor(PBrowserChild* actor,
|
||||
const IPCTabContext& context,
|
||||
const uint32_t& chromeFlags);
|
||||
const uint32_t& chromeFlags) MOZ_OVERRIDE;
|
||||
|
||||
private:
|
||||
virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE;
|
||||
|
@ -189,7 +189,7 @@ public:
|
||||
|
||||
virtual PCrashReporterParent*
|
||||
AllocPCrashReporterParent(const NativeThreadId& tid,
|
||||
const uint32_t& processType) MOZ_OVERRIDE;
|
||||
const uint32_t& processType) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
RecvPCrashReporterConstructor(PCrashReporterParent* actor,
|
||||
const NativeThreadId& tid,
|
||||
@ -223,7 +223,7 @@ public:
|
||||
const bool& aIsVideo) MOZ_OVERRIDE;
|
||||
protected:
|
||||
void OnChannelConnected(int32_t pid) MOZ_OVERRIDE;
|
||||
virtual void ActorDestroy(ActorDestroyReason why);
|
||||
virtual void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE;
|
||||
void OnNuwaForkTimeout();
|
||||
|
||||
bool ShouldContinueFromReplyTimeout() MOZ_OVERRIDE;
|
||||
@ -331,34 +331,36 @@ private:
|
||||
bool* aIsForBrowser) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetXPCOMProcessAttributes(bool* aIsOffline) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPJavaScriptParent(mozilla::jsipc::PJavaScriptParent*);
|
||||
virtual bool DeallocPJavaScriptParent(mozilla::jsipc::PJavaScriptParent*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PBrowserParent* AllocPBrowserParent(const IPCTabContext& aContext,
|
||||
const uint32_t& aChromeFlags);
|
||||
virtual bool DeallocPBrowserParent(PBrowserParent* frame);
|
||||
const uint32_t& aChromeFlags) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPBrowserParent(PBrowserParent* frame) MOZ_OVERRIDE;
|
||||
|
||||
virtual PDeviceStorageRequestParent* AllocPDeviceStorageRequestParent(const DeviceStorageParams&);
|
||||
virtual bool DeallocPDeviceStorageRequestParent(PDeviceStorageRequestParent*);
|
||||
virtual PDeviceStorageRequestParent*
|
||||
AllocPDeviceStorageRequestParent(const DeviceStorageParams&) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPDeviceStorageRequestParent(PDeviceStorageRequestParent*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PBlobParent* AllocPBlobParent(const BlobConstructorParams& aParams);
|
||||
virtual bool DeallocPBlobParent(PBlobParent*);
|
||||
virtual PBlobParent* AllocPBlobParent(const BlobConstructorParams& aParams) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPBlobParent(PBlobParent*) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPCrashReporterParent(PCrashReporterParent* crashreporter);
|
||||
virtual bool DeallocPCrashReporterParent(PCrashReporterParent* crashreporter) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvGetRandomValues(const uint32_t& length,
|
||||
InfallibleTArray<uint8_t>* randomValues);
|
||||
InfallibleTArray<uint8_t>* randomValues) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPHalParent(PHalParent*) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPIndexedDBParent(PIndexedDBParent* aActor);
|
||||
virtual bool DeallocPIndexedDBParent(PIndexedDBParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PMemoryReportRequestParent* AllocPMemoryReportRequestParent(const uint32_t& generation);
|
||||
virtual bool DeallocPMemoryReportRequestParent(PMemoryReportRequestParent* actor);
|
||||
virtual PMemoryReportRequestParent*
|
||||
AllocPMemoryReportRequestParent(const uint32_t& generation) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPMemoryReportRequestParent(PMemoryReportRequestParent* actor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PTestShellParent* AllocPTestShellParent();
|
||||
virtual bool DeallocPTestShellParent(PTestShellParent* shell);
|
||||
virtual PTestShellParent* AllocPTestShellParent() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPTestShellParent(PTestShellParent* shell) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPNeckoParent(PNeckoParent* necko);
|
||||
virtual bool DeallocPNeckoParent(PNeckoParent* necko) MOZ_OVERRIDE;
|
||||
|
||||
virtual PExternalHelperAppParent* AllocPExternalHelperAppParent(
|
||||
const OptionalURIParams& aUri,
|
||||
@ -367,23 +369,23 @@ private:
|
||||
const bool& aForceSave,
|
||||
const int64_t& aContentLength,
|
||||
const OptionalURIParams& aReferrer,
|
||||
PBrowserParent* aBrowser);
|
||||
virtual bool DeallocPExternalHelperAppParent(PExternalHelperAppParent* aService);
|
||||
PBrowserParent* aBrowser) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPExternalHelperAppParent(PExternalHelperAppParent* aService) MOZ_OVERRIDE;
|
||||
|
||||
virtual PSmsParent* AllocPSmsParent();
|
||||
virtual bool DeallocPSmsParent(PSmsParent*);
|
||||
virtual PSmsParent* AllocPSmsParent() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPSmsParent(PSmsParent*) MOZ_OVERRIDE;
|
||||
|
||||
virtual PTelephonyParent* AllocPTelephonyParent();
|
||||
virtual bool DeallocPTelephonyParent(PTelephonyParent*);
|
||||
virtual PTelephonyParent* AllocPTelephonyParent() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPTelephonyParent(PTelephonyParent*) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPStorageParent(PStorageParent* aActor);
|
||||
virtual bool DeallocPStorageParent(PStorageParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PBluetoothParent* AllocPBluetoothParent();
|
||||
virtual bool DeallocPBluetoothParent(PBluetoothParent* aActor);
|
||||
virtual bool RecvPBluetoothConstructor(PBluetoothParent* aActor);
|
||||
virtual PBluetoothParent* AllocPBluetoothParent() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPBluetoothParent(PBluetoothParent* aActor) MOZ_OVERRIDE;
|
||||
virtual bool RecvPBluetoothConstructor(PBluetoothParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PFMRadioParent* AllocPFMRadioParent();
|
||||
virtual bool DeallocPFMRadioParent(PFMRadioParent* aActor);
|
||||
virtual PFMRadioParent* AllocPFMRadioParent() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPFMRadioParent(PFMRadioParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PAsmJSCacheEntryParent* AllocPAsmJSCacheEntryParent(
|
||||
const asmjscache::OpenMode& aOpenMode,
|
||||
@ -392,32 +394,37 @@ private:
|
||||
virtual bool DeallocPAsmJSCacheEntryParent(
|
||||
PAsmJSCacheEntryParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PSpeechSynthesisParent* AllocPSpeechSynthesisParent();
|
||||
virtual bool DeallocPSpeechSynthesisParent(PSpeechSynthesisParent* aActor);
|
||||
virtual bool RecvPSpeechSynthesisConstructor(PSpeechSynthesisParent* aActor);
|
||||
virtual PSpeechSynthesisParent* AllocPSpeechSynthesisParent() MOZ_OVERRIDE;
|
||||
virtual bool DeallocPSpeechSynthesisParent(PSpeechSynthesisParent* aActor) MOZ_OVERRIDE;
|
||||
virtual bool RecvPSpeechSynthesisConstructor(PSpeechSynthesisParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvReadPrefsArray(InfallibleTArray<PrefSetting>* aPrefs);
|
||||
virtual bool RecvReadFontList(InfallibleTArray<FontListEntry>* retValue);
|
||||
virtual bool RecvReadPrefsArray(InfallibleTArray<PrefSetting>* aPrefs) MOZ_OVERRIDE;
|
||||
virtual bool RecvReadFontList(InfallibleTArray<FontListEntry>* retValue) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvReadPermissions(InfallibleTArray<IPC::Permission>* aPermissions);
|
||||
virtual bool RecvReadPermissions(InfallibleTArray<IPC::Permission>* aPermissions) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSetClipboardText(const nsString& text, const bool& isPrivateData, const int32_t& whichClipboard);
|
||||
virtual bool RecvGetClipboardText(const int32_t& whichClipboard, nsString* text);
|
||||
virtual bool RecvEmptyClipboard();
|
||||
virtual bool RecvClipboardHasText(bool* hasText);
|
||||
virtual bool RecvSetClipboardText(const nsString& text,
|
||||
const bool& isPrivateData,
|
||||
const int32_t& whichClipboard) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetClipboardText(const int32_t& whichClipboard, nsString* text) MOZ_OVERRIDE;
|
||||
virtual bool RecvEmptyClipboard() MOZ_OVERRIDE;
|
||||
virtual bool RecvClipboardHasText(bool* hasText) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvGetSystemColors(const uint32_t& colorsCount, InfallibleTArray<uint32_t>* colors);
|
||||
virtual bool RecvGetIconForExtension(const nsCString& aFileExt, const uint32_t& aIconSize, InfallibleTArray<uint8_t>* bits);
|
||||
virtual bool RecvGetShowPasswordSetting(bool* showPassword);
|
||||
virtual bool RecvGetSystemColors(const uint32_t& colorsCount,
|
||||
InfallibleTArray<uint32_t>* colors) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetIconForExtension(const nsCString& aFileExt,
|
||||
const uint32_t& aIconSize,
|
||||
InfallibleTArray<uint8_t>* bits) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetShowPasswordSetting(bool* showPassword) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvStartVisitedQuery(const URIParams& uri);
|
||||
virtual bool RecvStartVisitedQuery(const URIParams& uri) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvVisitURI(const URIParams& uri,
|
||||
const OptionalURIParams& referrer,
|
||||
const uint32_t& flags);
|
||||
const uint32_t& flags) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSetURITitle(const URIParams& uri,
|
||||
const nsString& title);
|
||||
const nsString& title) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvShowFilePicker(const int16_t& mode,
|
||||
const int16_t& selectedType,
|
||||
@ -429,78 +436,78 @@ private:
|
||||
const InfallibleTArray<nsString>& filterNames,
|
||||
InfallibleTArray<nsString>* files,
|
||||
int16_t* retValue,
|
||||
nsresult* result);
|
||||
nsresult* result) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvShowAlertNotification(const nsString& aImageUrl, const nsString& aTitle,
|
||||
const nsString& aText, const bool& aTextClickable,
|
||||
const nsString& aCookie, const nsString& aName,
|
||||
const nsString& aBidi, const nsString& aLang,
|
||||
const IPC::Principal& aPrincipal);
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvCloseAlert(const nsString& aName,
|
||||
const IPC::Principal& aPrincipal);
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvLoadURIExternal(const URIParams& uri);
|
||||
virtual bool RecvLoadURIExternal(const URIParams& uri) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSyncMessage(const nsString& aMsg,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal,
|
||||
InfallibleTArray<nsString>* aRetvals);
|
||||
InfallibleTArray<nsString>* aRetvals) MOZ_OVERRIDE;
|
||||
virtual bool AnswerRpcMessage(const nsString& aMsg,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal,
|
||||
InfallibleTArray<nsString>* aRetvals);
|
||||
InfallibleTArray<nsString>* aRetvals) MOZ_OVERRIDE;
|
||||
virtual bool RecvAsyncMessage(const nsString& aMsg,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal);
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvFilePathUpdateNotify(const nsString& aType,
|
||||
const nsString& aStorageName,
|
||||
const nsString& aFilePath,
|
||||
const nsCString& aReason);
|
||||
const nsCString& aReason) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAddGeolocationListener(const IPC::Principal& aPrincipal,
|
||||
const bool& aHighAccuracy);
|
||||
virtual bool RecvRemoveGeolocationListener();
|
||||
virtual bool RecvSetGeolocationHigherAccuracy(const bool& aEnable);
|
||||
const bool& aHighAccuracy) MOZ_OVERRIDE;
|
||||
virtual bool RecvRemoveGeolocationListener() MOZ_OVERRIDE;
|
||||
virtual bool RecvSetGeolocationHigherAccuracy(const bool& aEnable) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvConsoleMessage(const nsString& aMessage);
|
||||
virtual bool RecvConsoleMessage(const nsString& aMessage) MOZ_OVERRIDE;
|
||||
virtual bool RecvScriptError(const nsString& aMessage,
|
||||
const nsString& aSourceName,
|
||||
const nsString& aSourceLine,
|
||||
const uint32_t& aLineNumber,
|
||||
const uint32_t& aColNumber,
|
||||
const uint32_t& aFlags,
|
||||
const nsCString& aCategory);
|
||||
const nsCString& aCategory) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvPrivateDocShellsExist(const bool& aExist);
|
||||
virtual bool RecvPrivateDocShellsExist(const bool& aExist) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvFirstIdle();
|
||||
virtual bool RecvFirstIdle() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAudioChannelGetState(const AudioChannelType& aType,
|
||||
const bool& aElementHidden,
|
||||
const bool& aElementWasHidden,
|
||||
AudioChannelState* aValue);
|
||||
AudioChannelState* aValue) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAudioChannelRegisterType(const AudioChannelType& aType,
|
||||
const bool& aWithVideo);
|
||||
const bool& aWithVideo) MOZ_OVERRIDE;
|
||||
virtual bool RecvAudioChannelUnregisterType(const AudioChannelType& aType,
|
||||
const bool& aElementHidden,
|
||||
const bool& aWithVideo);
|
||||
const bool& aWithVideo) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAudioChannelChangedNotification();
|
||||
virtual bool RecvAudioChannelChangedNotification() MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAudioChannelChangeDefVolChannel(
|
||||
const AudioChannelType& aType, const bool& aHidden);
|
||||
virtual bool RecvAudioChannelChangeDefVolChannel(const AudioChannelType& aType,
|
||||
const bool& aHidden) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvBroadcastVolume(const nsString& aVolumeName);
|
||||
virtual bool RecvBroadcastVolume(const nsString& aVolumeName) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSpeakerManagerGetSpeakerStatus(bool* aValue);
|
||||
virtual bool RecvSpeakerManagerGetSpeakerStatus(bool* aValue) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSpeakerManagerForceSpeaker(const bool& aEnable);
|
||||
virtual bool RecvSpeakerManagerForceSpeaker(const bool& aEnable) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSystemMessageHandled() MOZ_OVERRIDE;
|
||||
|
||||
@ -514,16 +521,18 @@ private:
|
||||
virtual bool RecvSetFakeVolumeState(const nsString& fsName, const int32_t& fsState) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvKeywordToURI(const nsCString& aKeyword, OptionalInputStreamParams* aPostData,
|
||||
OptionalURIParams* aURI);
|
||||
OptionalURIParams* aURI) MOZ_OVERRIDE;
|
||||
|
||||
virtual void ProcessingError(Result what) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvGetGraphicsFeatureStatus(const int32_t& aFeature,
|
||||
int32_t* aStatus,
|
||||
bool* aSuccess);
|
||||
bool* aSuccess) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvAddIdleObserver(const uint64_t& observerId, const uint32_t& aIdleTimeInS);
|
||||
virtual bool RecvRemoveIdleObserver(const uint64_t& observerId, const uint32_t& aIdleTimeInS);
|
||||
virtual bool RecvAddIdleObserver(const uint64_t& observerId,
|
||||
const uint32_t& aIdleTimeInS) MOZ_OVERRIDE;
|
||||
virtual bool RecvRemoveIdleObserver(const uint64_t& observerId,
|
||||
const uint32_t& aIdleTimeInS) MOZ_OVERRIDE;
|
||||
|
||||
// If you add strong pointers to cycle collected objects here, be sure to
|
||||
// release these objects in ShutDownProcess. See the comment there for more
|
||||
|
@ -78,12 +78,12 @@ public:
|
||||
|
||||
protected:
|
||||
virtual bool
|
||||
RecvAnnotateCrashReport(const nsCString& key, const nsCString& data) {
|
||||
RecvAnnotateCrashReport(const nsCString& key, const nsCString& data) MOZ_OVERRIDE {
|
||||
AnnotateCrashReport(key, data);
|
||||
return true;
|
||||
}
|
||||
virtual bool
|
||||
RecvAppendAppNotes(const nsCString& data);
|
||||
RecvAppendAppNotes(const nsCString& data) MOZ_OVERRIDE;
|
||||
virtual mozilla::ipc::IProtocol*
|
||||
CloneProtocol(Channel* aChannel,
|
||||
mozilla::ipc::ProtocolCloneContext *aCtx) MOZ_OVERRIDE;
|
||||
|
@ -209,45 +209,48 @@ public:
|
||||
JS::Handle<JSObject *> aCpows,
|
||||
nsIPrincipal* aPrincipal) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvLoadURL(const nsCString& uri);
|
||||
virtual bool RecvLoadURL(const nsCString& uri) MOZ_OVERRIDE;
|
||||
virtual bool RecvCacheFileDescriptor(const nsString& aPath,
|
||||
const FileDescriptor& aFileDescriptor)
|
||||
MOZ_OVERRIDE;
|
||||
virtual bool RecvShow(const nsIntSize& size);
|
||||
virtual bool RecvUpdateDimensions(const nsRect& rect, const nsIntSize& size, const ScreenOrientation& orientation);
|
||||
virtual bool RecvUpdateFrame(const mozilla::layers::FrameMetrics& aFrameMetrics);
|
||||
virtual bool RecvHandleDoubleTap(const CSSIntPoint& aPoint);
|
||||
virtual bool RecvHandleSingleTap(const CSSIntPoint& aPoint);
|
||||
virtual bool RecvHandleLongTap(const CSSIntPoint& aPoint);
|
||||
virtual bool RecvHandleLongTapUp(const CSSIntPoint& aPoint);
|
||||
virtual bool RecvNotifyTransformBegin(const ViewID& aViewId);
|
||||
virtual bool RecvNotifyTransformEnd(const ViewID& aViewId);
|
||||
virtual bool RecvActivate();
|
||||
virtual bool RecvDeactivate();
|
||||
virtual bool RecvShow(const nsIntSize& size) MOZ_OVERRIDE;
|
||||
virtual bool RecvUpdateDimensions(const nsRect& rect,
|
||||
const nsIntSize& size,
|
||||
const ScreenOrientation& orientation) MOZ_OVERRIDE;
|
||||
virtual bool RecvUpdateFrame(const mozilla::layers::FrameMetrics& aFrameMetrics) MOZ_OVERRIDE;
|
||||
virtual bool RecvHandleDoubleTap(const CSSIntPoint& aPoint) MOZ_OVERRIDE;
|
||||
virtual bool RecvHandleSingleTap(const CSSIntPoint& aPoint) MOZ_OVERRIDE;
|
||||
virtual bool RecvHandleLongTap(const CSSIntPoint& aPoint) MOZ_OVERRIDE;
|
||||
virtual bool RecvHandleLongTapUp(const CSSIntPoint& aPoint) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyTransformBegin(const ViewID& aViewId) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyTransformEnd(const ViewID& aViewId) MOZ_OVERRIDE;
|
||||
virtual bool RecvActivate() MOZ_OVERRIDE;
|
||||
virtual bool RecvDeactivate() MOZ_OVERRIDE;
|
||||
virtual bool RecvMouseEvent(const nsString& aType,
|
||||
const float& aX,
|
||||
const float& aY,
|
||||
const int32_t& aButton,
|
||||
const int32_t& aClickCount,
|
||||
const int32_t& aModifiers,
|
||||
const bool& aIgnoreRootScrollFrame);
|
||||
virtual bool RecvRealMouseEvent(const mozilla::WidgetMouseEvent& event);
|
||||
virtual bool RecvRealKeyEvent(const mozilla::WidgetKeyboardEvent& event);
|
||||
virtual bool RecvMouseWheelEvent(const mozilla::WidgetWheelEvent& event);
|
||||
const bool& aIgnoreRootScrollFrame) MOZ_OVERRIDE;
|
||||
virtual bool RecvRealMouseEvent(const mozilla::WidgetMouseEvent& event) MOZ_OVERRIDE;
|
||||
virtual bool RecvRealKeyEvent(const mozilla::WidgetKeyboardEvent& event) MOZ_OVERRIDE;
|
||||
virtual bool RecvMouseWheelEvent(const mozilla::WidgetWheelEvent& event) MOZ_OVERRIDE;
|
||||
virtual bool RecvRealTouchEvent(const WidgetTouchEvent& aEvent,
|
||||
const ScrollableLayerGuid& aGuid);
|
||||
const ScrollableLayerGuid& aGuid) MOZ_OVERRIDE;
|
||||
virtual bool RecvRealTouchMoveEvent(const WidgetTouchEvent& aEvent,
|
||||
const ScrollableLayerGuid& aGuid);
|
||||
const ScrollableLayerGuid& aGuid) MOZ_OVERRIDE;
|
||||
virtual bool RecvKeyEvent(const nsString& aType,
|
||||
const int32_t& aKeyCode,
|
||||
const int32_t& aCharCode,
|
||||
const int32_t& aModifiers,
|
||||
const bool& aPreventDefault);
|
||||
virtual bool RecvCompositionEvent(const mozilla::WidgetCompositionEvent& event);
|
||||
virtual bool RecvTextEvent(const mozilla::WidgetTextEvent& event);
|
||||
virtual bool RecvSelectionEvent(const mozilla::WidgetSelectionEvent& event);
|
||||
virtual bool RecvActivateFrameEvent(const nsString& aType, const bool& capture);
|
||||
virtual bool RecvLoadRemoteScript(const nsString& aURL, const bool& aRunInGlobalScope);
|
||||
const bool& aPreventDefault) MOZ_OVERRIDE;
|
||||
virtual bool RecvCompositionEvent(const mozilla::WidgetCompositionEvent& event) MOZ_OVERRIDE;
|
||||
virtual bool RecvTextEvent(const mozilla::WidgetTextEvent& event) MOZ_OVERRIDE;
|
||||
virtual bool RecvSelectionEvent(const mozilla::WidgetSelectionEvent& event) MOZ_OVERRIDE;
|
||||
virtual bool RecvActivateFrameEvent(const nsString& aType, const bool& capture) MOZ_OVERRIDE;
|
||||
virtual bool RecvLoadRemoteScript(const nsString& aURL,
|
||||
const bool& aRunInGlobalScope) MOZ_OVERRIDE;
|
||||
virtual bool RecvAsyncMessage(const nsString& aMessage,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
@ -257,22 +260,23 @@ public:
|
||||
AllocPDocumentRendererChild(const nsRect& documentRect, const gfx::Matrix& transform,
|
||||
const nsString& bgcolor,
|
||||
const uint32_t& renderFlags, const bool& flushLayout,
|
||||
const nsIntSize& renderSize);
|
||||
virtual bool DeallocPDocumentRendererChild(PDocumentRendererChild* actor);
|
||||
const nsIntSize& renderSize) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPDocumentRendererChild(PDocumentRendererChild* actor) MOZ_OVERRIDE;
|
||||
virtual bool RecvPDocumentRendererConstructor(PDocumentRendererChild* actor,
|
||||
const nsRect& documentRect,
|
||||
const gfx::Matrix& transform,
|
||||
const nsString& bgcolor,
|
||||
const uint32_t& renderFlags,
|
||||
const bool& flushLayout,
|
||||
const nsIntSize& renderSize);
|
||||
const nsIntSize& renderSize) MOZ_OVERRIDE;
|
||||
|
||||
virtual PContentDialogChild* AllocPContentDialogChild(const uint32_t&,
|
||||
const nsCString&,
|
||||
const nsCString&,
|
||||
const InfallibleTArray<int>&,
|
||||
const InfallibleTArray<nsString>&);
|
||||
virtual bool DeallocPContentDialogChild(PContentDialogChild* aDialog);
|
||||
const InfallibleTArray<nsString>&)
|
||||
MOZ_OVERRIDE;
|
||||
virtual bool DeallocPContentDialogChild(PContentDialogChild* aDialog) MOZ_OVERRIDE;
|
||||
static void ParamsToArrays(nsIDialogParamBlock* aParams,
|
||||
InfallibleTArray<int>& aIntParams,
|
||||
InfallibleTArray<nsString>& aStringParams);
|
||||
@ -288,16 +292,19 @@ public:
|
||||
const IPC::Principal& aPrincipal);
|
||||
#endif /* DEBUG */
|
||||
|
||||
virtual PContentPermissionRequestChild* AllocPContentPermissionRequestChild(const nsCString& aType,
|
||||
const nsCString& aAccess,
|
||||
const IPC::Principal& aPrincipal);
|
||||
virtual bool DeallocPContentPermissionRequestChild(PContentPermissionRequestChild* actor);
|
||||
virtual PContentPermissionRequestChild*
|
||||
AllocPContentPermissionRequestChild(const nsCString& aType,
|
||||
const nsCString& aAccess,
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
DeallocPContentPermissionRequestChild(PContentPermissionRequestChild* actor) MOZ_OVERRIDE;
|
||||
|
||||
virtual POfflineCacheUpdateChild* AllocPOfflineCacheUpdateChild(
|
||||
const URIParams& manifestURI,
|
||||
const URIParams& documentURI,
|
||||
const bool& stickDocument);
|
||||
virtual bool DeallocPOfflineCacheUpdateChild(POfflineCacheUpdateChild* offlineCacheUpdate);
|
||||
const bool& stickDocument) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
DeallocPOfflineCacheUpdateChild(POfflineCacheUpdateChild* offlineCacheUpdate) MOZ_OVERRIDE;
|
||||
|
||||
nsIWebNavigation* WebNavigation() { return mWebNav; }
|
||||
|
||||
@ -376,9 +383,9 @@ protected:
|
||||
|
||||
virtual PIndexedDBChild* AllocPIndexedDBChild(const nsCString& aGroup,
|
||||
const nsCString& aASCIIOrigin,
|
||||
bool* /* aAllowed */);
|
||||
bool* /* aAllowed */) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPIndexedDBChild(PIndexedDBChild* aActor);
|
||||
virtual bool DeallocPIndexedDBChild(PIndexedDBChild* aActor) MOZ_OVERRIDE;
|
||||
|
||||
private:
|
||||
/**
|
||||
@ -402,7 +409,7 @@ private:
|
||||
|
||||
bool UseDirectCompositor();
|
||||
|
||||
void ActorDestroy(ActorDestroyReason why);
|
||||
void ActorDestroy(ActorDestroyReason why) MOZ_OVERRIDE;
|
||||
|
||||
enum FrameScriptLoading { DONT_LOAD_SCRIPTS, DEFAULT_LOAD_SCRIPTS };
|
||||
bool InitTabChildGlobal(FrameScriptLoading aScriptLoading = DEFAULT_LOAD_SCRIPTS);
|
||||
|
@ -110,81 +110,82 @@ public:
|
||||
|
||||
void Destroy();
|
||||
|
||||
virtual bool RecvMoveFocus(const bool& aForward);
|
||||
virtual bool RecvEvent(const RemoteDOMEvent& aEvent);
|
||||
virtual bool RecvPRenderFrameConstructor(PRenderFrameParent* actor);
|
||||
virtual bool RecvMoveFocus(const bool& aForward) MOZ_OVERRIDE;
|
||||
virtual bool RecvEvent(const RemoteDOMEvent& aEvent) MOZ_OVERRIDE;
|
||||
virtual bool RecvPRenderFrameConstructor(PRenderFrameParent* actor) MOZ_OVERRIDE;
|
||||
virtual bool RecvInitRenderFrame(PRenderFrameParent* aFrame,
|
||||
ScrollingBehavior* scrolling,
|
||||
TextureFactoryIdentifier* identifier,
|
||||
uint64_t* layersId,
|
||||
bool *aSuccess);
|
||||
bool *aSuccess) MOZ_OVERRIDE;
|
||||
virtual bool RecvBrowserFrameOpenWindow(PBrowserParent* aOpener,
|
||||
const nsString& aURL,
|
||||
const nsString& aName,
|
||||
const nsString& aFeatures,
|
||||
bool* aOutWindowOpened);
|
||||
virtual bool AnswerCreateWindow(PBrowserParent** retval);
|
||||
bool* aOutWindowOpened) MOZ_OVERRIDE;
|
||||
virtual bool AnswerCreateWindow(PBrowserParent** retval) MOZ_OVERRIDE;
|
||||
virtual bool RecvSyncMessage(const nsString& aMessage,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal,
|
||||
InfallibleTArray<nsString>* aJSONRetVal);
|
||||
InfallibleTArray<nsString>* aJSONRetVal) MOZ_OVERRIDE;
|
||||
virtual bool AnswerRpcMessage(const nsString& aMessage,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal,
|
||||
InfallibleTArray<nsString>* aJSONRetVal);
|
||||
InfallibleTArray<nsString>* aJSONRetVal) MOZ_OVERRIDE;
|
||||
virtual bool RecvAsyncMessage(const nsString& aMessage,
|
||||
const ClonedMessageData& aData,
|
||||
const InfallibleTArray<CpowEntry>& aCpows,
|
||||
const IPC::Principal& aPrincipal);
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyIMEFocus(const bool& aFocus,
|
||||
nsIMEUpdatePreference* aPreference,
|
||||
uint32_t* aSeqno);
|
||||
uint32_t* aSeqno) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyIMETextChange(const uint32_t& aStart,
|
||||
const uint32_t& aEnd,
|
||||
const uint32_t& aNewEnd);
|
||||
const uint32_t& aNewEnd) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyIMESelectedCompositionRect(const uint32_t& aOffset,
|
||||
const nsIntRect& aRect,
|
||||
const nsIntRect& aCaretRect) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyIMESelection(const uint32_t& aSeqno,
|
||||
const uint32_t& aAnchor,
|
||||
const uint32_t& aFocus);
|
||||
virtual bool RecvNotifyIMETextHint(const nsString& aText);
|
||||
const uint32_t& aFocus) MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyIMETextHint(const nsString& aText) MOZ_OVERRIDE;
|
||||
virtual bool RecvEndIMEComposition(const bool& aCancel,
|
||||
nsString* aComposition);
|
||||
nsString* aComposition) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetInputContext(int32_t* aIMEEnabled,
|
||||
int32_t* aIMEOpen,
|
||||
intptr_t* aNativeIMEContext);
|
||||
intptr_t* aNativeIMEContext) MOZ_OVERRIDE;
|
||||
virtual bool RecvSetInputContext(const int32_t& aIMEEnabled,
|
||||
const int32_t& aIMEOpen,
|
||||
const nsString& aType,
|
||||
const nsString& aInputmode,
|
||||
const nsString& aActionHint,
|
||||
const int32_t& aCause,
|
||||
const int32_t& aFocusChange);
|
||||
virtual bool RecvRequestFocus(const bool& aCanRaise);
|
||||
virtual bool RecvSetCursor(const uint32_t& aValue);
|
||||
virtual bool RecvSetBackgroundColor(const nscolor& aValue);
|
||||
virtual bool RecvSetStatus(const uint32_t& aType, const nsString& aStatus);
|
||||
virtual bool RecvGetDPI(float* aValue);
|
||||
virtual bool RecvGetDefaultScale(double* aValue);
|
||||
virtual bool RecvGetWidgetNativeData(WindowsHandle* aValue);
|
||||
const int32_t& aFocusChange) MOZ_OVERRIDE;
|
||||
virtual bool RecvRequestFocus(const bool& aCanRaise) MOZ_OVERRIDE;
|
||||
virtual bool RecvSetCursor(const uint32_t& aValue) MOZ_OVERRIDE;
|
||||
virtual bool RecvSetBackgroundColor(const nscolor& aValue) MOZ_OVERRIDE;
|
||||
virtual bool RecvSetStatus(const uint32_t& aType, const nsString& aStatus) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetDPI(float* aValue) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetDefaultScale(double* aValue) MOZ_OVERRIDE;
|
||||
virtual bool RecvGetWidgetNativeData(WindowsHandle* aValue) MOZ_OVERRIDE;
|
||||
virtual bool RecvZoomToRect(const uint32_t& aPresShellId,
|
||||
const ViewID& aViewId,
|
||||
const CSSRect& aRect);
|
||||
const CSSRect& aRect) MOZ_OVERRIDE;
|
||||
virtual bool RecvUpdateZoomConstraints(const uint32_t& aPresShellId,
|
||||
const ViewID& aViewId,
|
||||
const bool& aIsRoot,
|
||||
const ZoomConstraints& aConstraints);
|
||||
const ZoomConstraints& aConstraints) MOZ_OVERRIDE;
|
||||
virtual bool RecvContentReceivedTouch(const ScrollableLayerGuid& aGuid,
|
||||
const bool& aPreventDefault);
|
||||
virtual PContentDialogParent* AllocPContentDialogParent(const uint32_t& aType,
|
||||
const nsCString& aName,
|
||||
const nsCString& aFeatures,
|
||||
const InfallibleTArray<int>& aIntParams,
|
||||
const InfallibleTArray<nsString>& aStringParams);
|
||||
virtual bool DeallocPContentDialogParent(PContentDialogParent* aDialog)
|
||||
const bool& aPreventDefault) MOZ_OVERRIDE;
|
||||
virtual PContentDialogParent*
|
||||
AllocPContentDialogParent(const uint32_t& aType,
|
||||
const nsCString& aName,
|
||||
const nsCString& aFeatures,
|
||||
const InfallibleTArray<int>& aIntParams,
|
||||
const InfallibleTArray<nsString>& aStringParams) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPContentDialogParent(PContentDialogParent* aDialog) MOZ_OVERRIDE
|
||||
{
|
||||
delete aDialog;
|
||||
return true;
|
||||
@ -227,15 +228,20 @@ public:
|
||||
bool SendHandleDoubleTap(const CSSIntPoint& aPoint);
|
||||
|
||||
virtual PDocumentRendererParent*
|
||||
AllocPDocumentRendererParent(const nsRect& documentRect, const gfx::Matrix& transform,
|
||||
AllocPDocumentRendererParent(const nsRect& documentRect,
|
||||
const gfx::Matrix& transform,
|
||||
const nsString& bgcolor,
|
||||
const uint32_t& renderFlags, const bool& flushLayout,
|
||||
const nsIntSize& renderSize);
|
||||
virtual bool DeallocPDocumentRendererParent(PDocumentRendererParent* actor);
|
||||
const uint32_t& renderFlags,
|
||||
const bool& flushLayout,
|
||||
const nsIntSize& renderSize) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPDocumentRendererParent(PDocumentRendererParent* actor) MOZ_OVERRIDE;
|
||||
|
||||
virtual PContentPermissionRequestParent*
|
||||
AllocPContentPermissionRequestParent(const nsCString& aType, const nsCString& aAccess, const IPC::Principal& aPrincipal);
|
||||
virtual bool DeallocPContentPermissionRequestParent(PContentPermissionRequestParent* actor);
|
||||
AllocPContentPermissionRequestParent(const nsCString& aType,
|
||||
const nsCString& aAccess,
|
||||
const IPC::Principal& aPrincipal) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
DeallocPContentPermissionRequestParent(PContentPermissionRequestParent* actor) MOZ_OVERRIDE;
|
||||
|
||||
virtual POfflineCacheUpdateParent*
|
||||
AllocPOfflineCacheUpdateParent(const URIParams& aManifestURI,
|
||||
@ -247,10 +253,9 @@ public:
|
||||
const URIParams& aDocumentURI,
|
||||
const bool& stickDocument) MOZ_OVERRIDE;
|
||||
virtual bool
|
||||
DeallocPOfflineCacheUpdateParent(POfflineCacheUpdateParent* aActor)
|
||||
MOZ_OVERRIDE;
|
||||
DeallocPOfflineCacheUpdateParent(POfflineCacheUpdateParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool RecvSetOfflinePermission(const IPC::Principal& principal);
|
||||
virtual bool RecvSetOfflinePermission(const IPC::Principal& principal) MOZ_OVERRIDE;
|
||||
|
||||
bool GetGlobalJSObject(JSContext* cx, JSObject** globalp);
|
||||
|
||||
@ -292,15 +297,15 @@ protected:
|
||||
virtual PIndexedDBParent* AllocPIndexedDBParent(
|
||||
const nsCString& aGroup,
|
||||
const nsCString& aASCIIOrigin,
|
||||
bool* /* aAllowed */);
|
||||
bool* /* aAllowed */) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool DeallocPIndexedDBParent(PIndexedDBParent* aActor);
|
||||
virtual bool DeallocPIndexedDBParent(PIndexedDBParent* aActor) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool
|
||||
RecvPIndexedDBConstructor(PIndexedDBParent* aActor,
|
||||
const nsCString& aGroup,
|
||||
const nsCString& aASCIIOrigin,
|
||||
bool* aAllowed);
|
||||
bool* aAllowed) MOZ_OVERRIDE;
|
||||
|
||||
Element* mFrameElement;
|
||||
nsCOMPtr<nsIBrowserDOMWindow> mBrowserDOMWindow;
|
||||
|
@ -105,7 +105,7 @@ static nsresult CompareDictionaries(JSContext* aCx, JSObject *aA,
|
||||
if (bprop.isUndefined()) {
|
||||
// Unknown property found in A. Bail with name
|
||||
JS::Rooted<JS::Value> nameval(aCx);
|
||||
bool success = JS_IdToValue(aCx, props[i], nameval.address());
|
||||
bool success = JS_IdToValue(aCx, props[i], &nameval);
|
||||
NS_ENSURE_TRUE(success, NS_ERROR_UNEXPECTED);
|
||||
|
||||
JS::Rooted<JSString*> namestr(aCx, JS::ToString(aCx, nameval));
|
||||
|
@ -38,8 +38,6 @@ PluginPRLibrary::NP_Initialize(NPNetscapeFuncs* bFuncs,
|
||||
NPPluginFuncs* pFuncs, NPError* error)
|
||||
{
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mozilla::AutoLocalJNIFrame jniFrame(env);
|
||||
|
||||
|
@ -125,8 +125,6 @@ AudioRunnable::Run()
|
||||
PR_SetCurrentThreadName("Android Audio");
|
||||
|
||||
JNIEnv* jenv = GetJNIForThread();
|
||||
if (!jenv)
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
mozilla::AutoLocalJNIFrame autoFrame(jenv, 2);
|
||||
|
||||
@ -210,8 +208,6 @@ anp_audio_newTrack(uint32_t sampleRate, // sampling rate in Hz
|
||||
}
|
||||
|
||||
JNIEnv *jenv = GetJNIForThread();
|
||||
if (!jenv)
|
||||
return nullptr;
|
||||
|
||||
s->at_class = init_jni_bindings(jenv);
|
||||
s->rate = sampleRate;
|
||||
@ -308,8 +304,6 @@ anp_audio_start(ANPAudioTrack* s)
|
||||
}
|
||||
|
||||
JNIEnv *jenv = GetJNIForThread();
|
||||
if (!jenv)
|
||||
return;
|
||||
|
||||
mozilla::AutoLocalJNIFrame autoFrame(jenv, 0);
|
||||
jenv->CallVoidMethod(s->output_unit, at.play);
|
||||
@ -338,8 +332,6 @@ anp_audio_pause(ANPAudioTrack* s)
|
||||
}
|
||||
|
||||
JNIEnv *jenv = GetJNIForThread();
|
||||
if (!jenv)
|
||||
return;
|
||||
|
||||
mozilla::AutoLocalJNIFrame autoFrame(jenv, 0);
|
||||
jenv->CallVoidMethod(s->output_unit, at.pause);
|
||||
@ -354,8 +346,6 @@ anp_audio_stop(ANPAudioTrack* s)
|
||||
|
||||
s->isStopped = true;
|
||||
JNIEnv *jenv = GetJNIForThread();
|
||||
if (!jenv)
|
||||
return;
|
||||
|
||||
mozilla::AutoLocalJNIFrame autoFrame(jenv, 0);
|
||||
jenv->CallVoidMethod(s->output_unit, at.stop);
|
||||
|
@ -899,7 +899,7 @@ nsJSObjWrapper::NP_Enumerate(NPObject *npobj, NPIdentifier **idarray,
|
||||
|
||||
for (uint32_t i = 0; i < *count; i++) {
|
||||
JS::Rooted<JS::Value> v(cx);
|
||||
if (!JS_IdToValue(cx, ida[i], v.address())) {
|
||||
if (!JS_IdToValue(cx, ida[i], &v)) {
|
||||
PR_Free(*idarray);
|
||||
return false;
|
||||
}
|
||||
|
@ -1569,10 +1569,10 @@ void nsPluginInstanceOwner::ExitFullScreen() {
|
||||
void nsPluginInstanceOwner::ExitFullScreen(jobject view) {
|
||||
JNIEnv* env = AndroidBridge::GetJNIEnv();
|
||||
|
||||
if (env && sFullScreenInstance && sFullScreenInstance->mInstance &&
|
||||
if (sFullScreenInstance && sFullScreenInstance->mInstance &&
|
||||
env->IsSameObject(view, (jobject)sFullScreenInstance->mInstance->GetJavaSurface())) {
|
||||
sFullScreenInstance->ExitFullScreen();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@ -643,8 +643,9 @@ PluginInstanceParent::RecvShow(const NPRect& updatedRect,
|
||||
NS_ASSERTION(image->GetFormat() == CAIRO_SURFACE, "Wrong format?");
|
||||
CairoImage* cairoImage = static_cast<CairoImage*>(image.get());
|
||||
CairoImage::Data cairoData;
|
||||
cairoData.mSurface = surface;
|
||||
cairoData.mDeprecatedSurface = surface;
|
||||
cairoData.mSize = surface->GetSize().ToIntSize();
|
||||
cairoData.mSourceSurface = gfxPlatform::GetPlatform()->GetSourceSurfaceForSurface(nullptr, surface);
|
||||
cairoImage->SetData(cairoData);
|
||||
|
||||
container->SetCurrentImage(cairoImage);
|
||||
|
@ -16,6 +16,9 @@ function checkException(func, exc)
|
||||
catch (ex) {
|
||||
exceptionThrew = true;
|
||||
is(ex.name, exc, "Expected "+exc+" exception");
|
||||
if (ex.name != exc) {
|
||||
ok(true, "The exception which was thrown is: " + ex);
|
||||
}
|
||||
}
|
||||
ok(exceptionThrew, "Exception "+exc+" threw");
|
||||
}
|
||||
|
@ -190,7 +190,7 @@ InstallXBLField(JSContext* cx,
|
||||
JSFlatString* fieldStr = JS_ASSERT_STRING_IS_FLAT(name.toString());
|
||||
fieldName.init(fieldStr);
|
||||
|
||||
MOZ_ALWAYS_TRUE(JS_ValueToId(cx, name, idp.address()));
|
||||
MOZ_ALWAYS_TRUE(JS_ValueToId(cx, name, idp));
|
||||
|
||||
// If a separate XBL scope is being used, the callee is not same-compartment
|
||||
// with the xbl prototype, and the object is a cross-compartment wrapper.
|
||||
|
@ -320,7 +320,8 @@ nsXBLProtoImplAnonymousMethod::Execute(nsIContent* aBoundElement)
|
||||
// Clone the function object, using thisObject as the parent so "this" is in
|
||||
// the scope chain of the resulting function (for backwards compat to the
|
||||
// days when this was an event handler).
|
||||
JS::Rooted<JSObject*> method(cx, ::JS_CloneFunctionObject(cx, GetCompiledMethod(), thisObject));
|
||||
JS::Rooted<JSObject*> jsMethodObject(cx, GetCompiledMethod());
|
||||
JS::Rooted<JSObject*> method(cx, ::JS_CloneFunctionObject(cx, jsMethodObject, thisObject));
|
||||
if (!method)
|
||||
return NS_ERROR_OUT_OF_MEMORY;
|
||||
|
||||
|
@ -312,7 +312,8 @@ nsXBLPrototypeHandler::ExecuteHandler(EventTarget* aTarget,
|
||||
NS_ENSURE_SUCCESS(rv, rv);
|
||||
|
||||
// Next, clone the generic handler to be parented to the target.
|
||||
JS::Rooted<JSObject*> bound(cx, JS_CloneFunctionObject(cx, genericHandler, &targetV.toObject()));
|
||||
JS::Rooted<JSObject*> target(cx, &targetV.toObject());
|
||||
JS::Rooted<JSObject*> bound(cx, JS_CloneFunctionObject(cx, genericHandler, target));
|
||||
NS_ENSURE_TRUE(bound, NS_ERROR_FAILURE);
|
||||
|
||||
// Now, wrap the bound handler into the content compartment and use it.
|
||||
|
@ -366,6 +366,9 @@ GLContextEGL::MakeCurrentImpl(bool aForce) {
|
||||
EGLSurface surface = mSurfaceOverride != EGL_NO_SURFACE
|
||||
? mSurfaceOverride
|
||||
: mSurface;
|
||||
if (surface == EGL_NO_SURFACE) {
|
||||
return false;
|
||||
}
|
||||
succeeded = sEGLLibrary.fMakeCurrent(EGL_DISPLAY(),
|
||||
surface, surface,
|
||||
mContext);
|
||||
@ -414,7 +417,7 @@ GLContextEGL::RenewSurface() {
|
||||
void
|
||||
GLContextEGL::ReleaseSurface() {
|
||||
DestroySurface(mSurface);
|
||||
mSurface = nullptr;
|
||||
mSurface = EGL_NO_SURFACE;
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -675,5 +675,22 @@ RemoteBitmapImage::DeprecatedGetAsSurface()
|
||||
return newSurf.forget();
|
||||
}
|
||||
|
||||
TemporaryRef<gfx::SourceSurface>
|
||||
RemoteBitmapImage::GetAsSourceSurface()
|
||||
{
|
||||
gfx::SurfaceFormat fmt = mFormat == RemoteImageData::BGRX32
|
||||
? gfx::SurfaceFormat::B8G8R8X8
|
||||
: gfx::SurfaceFormat::B8G8R8A8;
|
||||
RefPtr<gfx::DataSourceSurface> newSurf = gfx::Factory::CreateDataSourceSurface(mSize, fmt);
|
||||
|
||||
for (int y = 0; y < mSize.height; y++) {
|
||||
memcpy(newSurf->GetData() + newSurf->Stride() * y,
|
||||
mData + mStride * y,
|
||||
mSize.width * 4);
|
||||
}
|
||||
|
||||
return newSurf;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
} // namespace
|
||||
|
@ -41,6 +41,9 @@
|
||||
* gfxASurface. When AddRefing, we assert that we're on the main thread.
|
||||
* When Releasing, if we're not on the main thread, we post an event to
|
||||
* the main thread to do the actual release.
|
||||
*
|
||||
* This should be removed after after Image::DeprecatedGetAsSurface is
|
||||
* removed. It is replaced by nsMainThreadSourceSurfaceRef
|
||||
*/
|
||||
class nsMainThreadSurfaceRef;
|
||||
|
||||
@ -80,6 +83,49 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Same purpose as nsMainThreadSurfaceRef byt holds a gfx::SourceSurface instead.
|
||||
* The specialization of nsMainThreadSurfaceRef should be removed after
|
||||
* Image::DeprecatedGetAsSurface is removed
|
||||
*/
|
||||
class nsMainThreadSourceSurfaceRef;
|
||||
|
||||
template <>
|
||||
class nsAutoRefTraits<nsMainThreadSourceSurfaceRef> {
|
||||
public:
|
||||
typedef mozilla::gfx::SourceSurface* RawRef;
|
||||
|
||||
/**
|
||||
* The XPCOM event that will do the actual release on the main thread.
|
||||
*/
|
||||
class SurfaceReleaser : public nsRunnable {
|
||||
public:
|
||||
SurfaceReleaser(RawRef aRef) : mRef(aRef) {}
|
||||
NS_IMETHOD Run() {
|
||||
mRef->Release();
|
||||
return NS_OK;
|
||||
}
|
||||
RawRef mRef;
|
||||
};
|
||||
|
||||
static RawRef Void() { return nullptr; }
|
||||
static void Release(RawRef aRawRef)
|
||||
{
|
||||
if (NS_IsMainThread()) {
|
||||
aRawRef->Release();
|
||||
return;
|
||||
}
|
||||
nsCOMPtr<nsIRunnable> runnable = new SurfaceReleaser(aRawRef);
|
||||
NS_DispatchToMainThread(runnable);
|
||||
}
|
||||
static void AddRef(RawRef aRawRef)
|
||||
{
|
||||
NS_ASSERTION(NS_IsMainThread(),
|
||||
"Can only add a reference on the main thread");
|
||||
aRawRef->AddRef();
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef XP_WIN
|
||||
@ -877,8 +923,12 @@ protected:
|
||||
class CairoImage : public Image {
|
||||
public:
|
||||
struct Data {
|
||||
gfxASurface* mSurface;
|
||||
gfxASurface* mDeprecatedSurface;
|
||||
gfx::IntSize mSize;
|
||||
|
||||
// mSourceSurface wraps mDeprrecatedSurface's data, therefore it should not
|
||||
// outlive mDeprecatedSurface
|
||||
RefPtr<gfx::SourceSurface> mSourceSurface;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -888,14 +938,19 @@ public:
|
||||
*/
|
||||
void SetData(const Data& aData)
|
||||
{
|
||||
mSurface = aData.mSurface;
|
||||
mDeprecatedSurface = aData.mDeprecatedSurface;
|
||||
mSize = aData.mSize;
|
||||
mSourceSurface = aData.mSourceSurface;
|
||||
}
|
||||
|
||||
virtual TemporaryRef<gfx::SourceSurface> GetAsSourceSurface()
|
||||
{
|
||||
return mSourceSurface.get();
|
||||
}
|
||||
|
||||
virtual already_AddRefed<gfxASurface> DeprecatedGetAsSurface()
|
||||
{
|
||||
nsRefPtr<gfxASurface> surface = mSurface.get();
|
||||
nsRefPtr<gfxASurface> surface = mDeprecatedSurface.get();
|
||||
return surface.forget();
|
||||
}
|
||||
|
||||
@ -903,8 +958,14 @@ public:
|
||||
|
||||
CairoImage() : Image(nullptr, CAIRO_SURFACE) {}
|
||||
|
||||
nsCountedRef<nsMainThreadSurfaceRef> mSurface;
|
||||
private:
|
||||
|
||||
nsCountedRef<nsMainThreadSurfaceRef> mDeprecatedSurface;
|
||||
gfx::IntSize mSize;
|
||||
|
||||
// mSourceSurface wraps mDeprrecatedSurface's data, therefore it should not
|
||||
// outlive mDeprecatedSurface
|
||||
nsCountedRef<nsMainThreadSourceSurfaceRef> mSourceSurface;
|
||||
};
|
||||
|
||||
class RemoteBitmapImage : public Image {
|
||||
@ -912,6 +973,7 @@ public:
|
||||
RemoteBitmapImage() : Image(nullptr, REMOTE_IMAGE_BITMAP) {}
|
||||
|
||||
already_AddRefed<gfxASurface> DeprecatedGetAsSurface();
|
||||
TemporaryRef<gfx::SourceSurface> GetAsSourceSurface();
|
||||
|
||||
gfx::IntSize GetSize() { return mSize; }
|
||||
|
||||
|
@ -203,7 +203,17 @@ APZCTreeManager::UpdatePanZoomControllerTree(CompositorParent* aCompositor,
|
||||
apzc->NotifyLayersUpdated(container->GetFrameMetrics(),
|
||||
aIsFirstPaint && (aLayersId == aFirstPaintLayersId));
|
||||
|
||||
// Use the composition bounds as the hit test region.
|
||||
// Optionally, the GeckoContentController can provide a touch-sensitive
|
||||
// region that constrains all frames associated with the controller.
|
||||
// In this case we intersect the composition bounds with that region.
|
||||
ScreenRect visible(container->GetFrameMetrics().mCompositionBounds);
|
||||
CSSRect touchSensitiveRegion;
|
||||
if (state->mController->GetTouchSensitiveRegion(&touchSensitiveRegion)) {
|
||||
visible = visible.Intersect(touchSensitiveRegion
|
||||
* container->GetFrameMetrics().LayersPixelsPerCSSPixel()
|
||||
* LayerToScreenScale(1.0));
|
||||
}
|
||||
apzc->SetLayerHitTestData(visible, aTransform, aLayer->GetTransform());
|
||||
APZC_LOG("Setting rect(%f %f %f %f) as visible region for APZC %p\n", visible.x, visible.y,
|
||||
visible.width, visible.height,
|
||||
|
@ -127,13 +127,14 @@ ImageLayerD3D10::GetImageSRView(Image* aImage, bool& aHasAlpha, IDXGIKeyedMutex
|
||||
CairoImage *cairoImage =
|
||||
static_cast<CairoImage*>(aImage);
|
||||
|
||||
if (!cairoImage->mSurface) {
|
||||
nsRefPtr<gfxASurface> surf = cairoImage->DeprecatedGetAsSurface();
|
||||
if (!surf) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!aImage->GetBackendData(mozilla::layers::LAYERS_D3D10)) {
|
||||
nsAutoPtr<TextureD3D10BackendData> dat(new TextureD3D10BackendData());
|
||||
dat->mTexture = SurfaceToTexture(device(), cairoImage->mSurface, cairoImage->mSize);
|
||||
dat->mTexture = SurfaceToTexture(device(), surf, cairoImage->GetSize());
|
||||
|
||||
if (dat->mTexture) {
|
||||
device()->CreateShaderResourceView(dat->mTexture, nullptr, getter_AddRefs(dat->mSRView));
|
||||
@ -141,7 +142,7 @@ ImageLayerD3D10::GetImageSRView(Image* aImage, bool& aHasAlpha, IDXGIKeyedMutex
|
||||
}
|
||||
}
|
||||
|
||||
aHasAlpha = cairoImage->mSurface->GetContentType() == GFX_CONTENT_COLOR_ALPHA;
|
||||
aHasAlpha = surf->GetContentType() == GFX_CONTENT_COLOR_ALPHA;
|
||||
} else if (aImage->GetFormat() == ImageFormat::D3D9_RGB32_TEXTURE) {
|
||||
if (!aImage->GetBackendData(mozilla::layers::LAYERS_D3D10)) {
|
||||
// Use resource sharing to open the D3D9 texture as a D3D10 texture,
|
||||
@ -212,14 +213,14 @@ ImageLayerD3D10::RenderLayer()
|
||||
|
||||
ID3D10EffectTechnique *technique;
|
||||
nsRefPtr<IDXGIKeyedMutex> keyedMutex;
|
||||
nsRefPtr<gfxASurface> surf = image->DeprecatedGetAsSurface();
|
||||
|
||||
if (image->GetFormat() == ImageFormat::CAIRO_SURFACE ||
|
||||
image->GetFormat() == ImageFormat::REMOTE_IMAGE_BITMAP ||
|
||||
image->GetFormat() == ImageFormat::REMOTE_IMAGE_DXGI_TEXTURE ||
|
||||
image->GetFormat() == ImageFormat::D3D9_RGB32_TEXTURE) {
|
||||
NS_ASSERTION(image->GetFormat() != ImageFormat::CAIRO_SURFACE ||
|
||||
!static_cast<CairoImage*>(image)->mSurface ||
|
||||
static_cast<CairoImage*>(image)->mSurface->GetContentType() != GFX_CONTENT_ALPHA,
|
||||
!surf || surf->GetContentType() != GFX_CONTENT_ALPHA,
|
||||
"Image layer has alpha image");
|
||||
bool hasAlpha = false;
|
||||
|
||||
|
@ -344,19 +344,20 @@ ImageLayerD3D9::GetTexture(Image *aImage, bool& aHasAlpha)
|
||||
CairoImage *cairoImage =
|
||||
static_cast<CairoImage*>(aImage);
|
||||
|
||||
if (!cairoImage->mSurface) {
|
||||
nsRefPtr<gfxASurface> surf = cairoImage->DeprecatedGetAsSurface();
|
||||
if (!surf) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (!aImage->GetBackendData(mozilla::layers::LAYERS_D3D9)) {
|
||||
nsAutoPtr<TextureD3D9BackendData> dat(new TextureD3D9BackendData());
|
||||
dat->mTexture = SurfaceToTexture(device(), cairoImage->mSurface, cairoImage->mSize);
|
||||
dat->mTexture = SurfaceToTexture(device(), surf, cairoImage->GetSize());
|
||||
if (dat->mTexture) {
|
||||
aImage->SetBackendData(mozilla::layers::LAYERS_D3D9, dat.forget());
|
||||
}
|
||||
}
|
||||
|
||||
aHasAlpha = cairoImage->mSurface->GetContentType() == GFX_CONTENT_COLOR_ALPHA;
|
||||
aHasAlpha = surf->GetContentType() == GFX_CONTENT_COLOR_ALPHA;
|
||||
} else if (aImage->GetFormat() == D3D9_RGB32_TEXTURE) {
|
||||
if (!aImage->GetBackendData(mozilla::layers::LAYERS_D3D9)) {
|
||||
// The texture in which the frame is stored belongs to DXVA's D3D9 device.
|
||||
@ -413,9 +414,9 @@ ImageLayerD3D9::RenderLayer()
|
||||
image->GetFormat() == REMOTE_IMAGE_BITMAP ||
|
||||
image->GetFormat() == D3D9_RGB32_TEXTURE)
|
||||
{
|
||||
nsRefPtr<gfxASurface> surf = image->DeprecatedGetAsSurface();
|
||||
NS_ASSERTION(image->GetFormat() != CAIRO_SURFACE ||
|
||||
!static_cast<CairoImage*>(image)->mSurface ||
|
||||
static_cast<CairoImage*>(image)->mSurface->GetContentType() != GFX_CONTENT_ALPHA,
|
||||
!surf || surf->GetContentType() != GFX_CONTENT_ALPHA,
|
||||
"Image layer has alpha image");
|
||||
|
||||
bool hasAlpha = false;
|
||||
|
@ -1570,6 +1570,7 @@ void AsyncPanZoomController::NotifyLayersUpdated(const FrameMetrics& aLayerMetri
|
||||
mFrameMetrics.mZoom.scale *= parentResolutionChange;
|
||||
mFrameMetrics.mResolution = aLayerMetrics.mResolution;
|
||||
mFrameMetrics.mCumulativeResolution = aLayerMetrics.mCumulativeResolution;
|
||||
mFrameMetrics.mHasScrollgrab = aLayerMetrics.mHasScrollgrab;
|
||||
|
||||
// If the layers update was not triggered by our own repaint request, then
|
||||
// we want to take the new scroll offset.
|
||||
|
@ -86,7 +86,7 @@ public:
|
||||
virtual bool RecvResume() MOZ_OVERRIDE;
|
||||
virtual bool RecvNotifyChildCreated(const uint64_t& child) MOZ_OVERRIDE;
|
||||
virtual bool RecvMakeSnapshot(const SurfaceDescriptor& aInSnapshot,
|
||||
SurfaceDescriptor* aOutSnapshot);
|
||||
SurfaceDescriptor* aOutSnapshot) MOZ_OVERRIDE;
|
||||
virtual bool RecvFlushRendering() MOZ_OVERRIDE;
|
||||
virtual bool RecvForceComposite() MOZ_OVERRIDE;
|
||||
|
||||
@ -239,8 +239,8 @@ protected:
|
||||
AllocPLayerTransactionParent(const nsTArray<LayersBackend>& aBackendHints,
|
||||
const uint64_t& aId,
|
||||
TextureFactoryIdentifier* aTextureFactoryIdentifier,
|
||||
bool* aSuccess);
|
||||
virtual bool DeallocPLayerTransactionParent(PLayerTransactionParent* aLayers);
|
||||
bool* aSuccess) MOZ_OVERRIDE;
|
||||
virtual bool DeallocPLayerTransactionParent(PLayerTransactionParent* aLayers) MOZ_OVERRIDE;
|
||||
virtual void ScheduleTask(CancelableTask*, int);
|
||||
void Composite();
|
||||
void CompositeInTransaction();
|
||||
|
@ -81,6 +81,22 @@ public:
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* APZ uses |FrameMetrics::mCompositionBounds| for hit testing. Sometimes,
|
||||
* widget code has knowledge of a touch-sensitive region that should
|
||||
* additionally constrain hit testing for all frames associated with the
|
||||
* controller. This method allows APZ to query the controller for such a
|
||||
* region. A return value of true indicates that the controller has such a
|
||||
* region, and it is returned in |aOutRegion|.
|
||||
* TODO: once bug 928833 is implemented, this should be removed, as
|
||||
* APZ can then get the correct touch-sensitive region for each frame
|
||||
* directly from the layer.
|
||||
*/
|
||||
virtual bool GetTouchSensitiveRegion(CSSRect* aOutRegion)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* General tranformation notices for consumers. These fire any time
|
||||
* the apzc is modifying the view, including panning, zooming, and
|
||||
|
@ -55,8 +55,8 @@ public:
|
||||
DeallocPGrallocBufferParent(PGrallocBufferParent* actor) MOZ_OVERRIDE;
|
||||
|
||||
// PImageBridge
|
||||
virtual bool RecvUpdate(const EditArray& aEdits, EditReplyArray* aReply);
|
||||
virtual bool RecvUpdateNoSwap(const EditArray& aEdits);
|
||||
virtual bool RecvUpdate(const EditArray& aEdits, EditReplyArray* aReply) MOZ_OVERRIDE;
|
||||
virtual bool RecvUpdateNoSwap(const EditArray& aEdits) MOZ_OVERRIDE;
|
||||
|
||||
virtual bool IsAsync() const MOZ_OVERRIDE { return true; }
|
||||
|
||||
|
@ -240,6 +240,12 @@ SharedRGBImage::DeprecatedGetAsSurface()
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
TemporaryRef<gfx::SourceSurface>
|
||||
SharedRGBImage::GetAsSourceSurface()
|
||||
{
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
||||
} // namespace layers
|
||||
} // namespace mozilla
|
||||
|
@ -119,6 +119,8 @@ public:
|
||||
|
||||
already_AddRefed<gfxASurface> DeprecatedGetAsSurface();
|
||||
|
||||
TemporaryRef<gfx::SourceSurface> GetAsSourceSurface();
|
||||
|
||||
bool Allocate(gfx::IntSize aSize, gfx::SurfaceFormat aFormat);
|
||||
private:
|
||||
gfx::IntSize mSize;
|
||||
|
@ -27,15 +27,12 @@ public:
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
bool EnsureInitialized()
|
||||
{
|
||||
if (mInitialized)
|
||||
return true;
|
||||
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return false;
|
||||
|
||||
AutoLocalJNIFrame jniFrame(env);
|
||||
|
||||
@ -54,8 +51,6 @@ public:
|
||||
return nullptr;
|
||||
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return nullptr;
|
||||
|
||||
AutoLocalJNIFrame jniFrame(env);
|
||||
|
||||
@ -65,8 +60,6 @@ public:
|
||||
void ReleaseSurfaceTexture(jobject aSurfaceTexture)
|
||||
{
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return;
|
||||
|
||||
env->DeleteGlobalRef(aSurfaceTexture);
|
||||
}
|
||||
@ -74,8 +67,6 @@ public:
|
||||
void UpdateTexImage(jobject aSurfaceTexture)
|
||||
{
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return;
|
||||
|
||||
AutoLocalJNIFrame jniFrame(env);
|
||||
env->CallObjectMethod(aSurfaceTexture, jSurfaceTexture_updateTexImage);
|
||||
@ -84,8 +75,6 @@ public:
|
||||
bool GetTransformMatrix(jobject aSurfaceTexture, gfx3DMatrix& aMatrix)
|
||||
{
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return false;
|
||||
|
||||
AutoLocalJNIFrame jniFrame(env);
|
||||
|
||||
@ -172,8 +161,6 @@ nsSurfaceTexture::Init(GLuint aTexture)
|
||||
return false;
|
||||
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return false;
|
||||
|
||||
mSurfaceTexture = sJNIFunctions.CreateSurfaceTexture(aTexture);
|
||||
if (!mSurfaceTexture)
|
||||
@ -204,10 +191,8 @@ nsSurfaceTexture::~nsSurfaceTexture()
|
||||
}
|
||||
|
||||
JNIEnv* env = GetJNIForThread();
|
||||
if (!env)
|
||||
return;
|
||||
|
||||
if (mSurfaceTexture && env) {
|
||||
if (mSurfaceTexture) {
|
||||
GeckoAppShell::UnregisterSurfaceTextureFrameListener(mSurfaceTexture);
|
||||
|
||||
env->DeleteGlobalRef(mSurfaceTexture);
|
||||
@ -259,4 +244,4 @@ nsSurfaceTexture::NotifyFrameAvailable()
|
||||
}
|
||||
}
|
||||
|
||||
#endif // MOZ_WIDGET_ANDROID
|
||||
#endif // MOZ_WIDGET_ANDROID
|
||||
|
@ -953,9 +953,10 @@ RasterImage::GetCurrentImage()
|
||||
}
|
||||
|
||||
CairoImage::Data cairoData;
|
||||
cairoData.mSurface = imageSurface;
|
||||
cairoData.mDeprecatedSurface = imageSurface;
|
||||
GetWidth(&cairoData.mSize.width);
|
||||
GetHeight(&cairoData.mSize.height);
|
||||
cairoData.mSourceSurface = gfxPlatform::GetPlatform()->GetSourceSurfaceForSurface(nullptr, imageSurface);
|
||||
|
||||
ImageFormat cairoFormat = CAIRO_SURFACE;
|
||||
nsRefPtr<layers::Image> image = mImageContainer->CreateImage(&cairoFormat, 1);
|
||||
@ -2926,7 +2927,7 @@ RasterImage::RequestDecodeIfNeeded(nsresult aStatus,
|
||||
|
||||
// If we were a size decode and a full decode was requested, now's the time.
|
||||
if (NS_SUCCEEDED(aStatus) &&
|
||||
aIntent != eShutdownIntent_Error &&
|
||||
aIntent == eShutdownIntent_Done &&
|
||||
aDone &&
|
||||
aWasSize &&
|
||||
mWantFullDecode) {
|
||||
|
@ -105,7 +105,9 @@ MessagePump::Run(MessagePump::Delegate* aDelegate)
|
||||
// This processes messages in the Android Looper. Note that we only
|
||||
// get here if the normal Gecko event loop has been awoken above.
|
||||
// Bug 750713
|
||||
did_work |= GeckoAppShell::PumpMessageLoop();
|
||||
if (MOZ_LIKELY(AndroidBridge::HasEnv())) {
|
||||
did_work |= GeckoAppShell::PumpMessageLoop();
|
||||
}
|
||||
#endif
|
||||
|
||||
did_work |= aDelegate->DoDelayedWork(&delayed_work_time_);
|
||||
|
@ -25,49 +25,49 @@ class JavaScriptChild
|
||||
bool init();
|
||||
void trace(JSTracer *trc);
|
||||
|
||||
bool RecvDropObject(const ObjectId &objId);
|
||||
bool RecvDropObject(const ObjectId &objId) MOZ_OVERRIDE;
|
||||
|
||||
bool AnswerPreventExtensions(const ObjectId &objId, ReturnStatus *rs);
|
||||
bool AnswerPreventExtensions(const ObjectId &objId, ReturnStatus *rs) MOZ_OVERRIDE;
|
||||
bool AnswerGetPropertyDescriptor(const ObjectId &objId, const nsString &id,
|
||||
const uint32_t &flags, ReturnStatus *rs,
|
||||
PPropertyDescriptor *out);
|
||||
PPropertyDescriptor *out) MOZ_OVERRIDE;
|
||||
bool AnswerGetOwnPropertyDescriptor(const ObjectId &objId,
|
||||
const nsString &id,
|
||||
const uint32_t &flags,
|
||||
ReturnStatus *rs,
|
||||
PPropertyDescriptor *out);
|
||||
PPropertyDescriptor *out) MOZ_OVERRIDE;
|
||||
bool AnswerDefineProperty(const ObjectId &objId, const nsString &id,
|
||||
const PPropertyDescriptor &flags,
|
||||
ReturnStatus *rs);
|
||||
ReturnStatus *rs) MOZ_OVERRIDE;
|
||||
bool AnswerDelete(const ObjectId &objId, const nsString &id,
|
||||
ReturnStatus *rs, bool *success);
|
||||
ReturnStatus *rs, bool *success) MOZ_OVERRIDE;
|
||||
|
||||
bool AnswerHas(const ObjectId &objId, const nsString &id,
|
||||
ReturnStatus *rs, bool *bp);
|
||||
ReturnStatus *rs, bool *bp) MOZ_OVERRIDE;
|
||||
bool AnswerHasOwn(const ObjectId &objId, const nsString &id,
|
||||
ReturnStatus *rs, bool *bp);
|
||||
ReturnStatus *rs, bool *bp) MOZ_OVERRIDE;
|
||||
bool AnswerGet(const ObjectId &objId, const ObjectId &receiverId,
|
||||
const nsString &id,
|
||||
ReturnStatus *rs, JSVariant *result);
|
||||
ReturnStatus *rs, JSVariant *result) MOZ_OVERRIDE;
|
||||
bool AnswerSet(const ObjectId &objId, const ObjectId &receiverId,
|
||||
const nsString &id, const bool &strict,
|
||||
const JSVariant &value, ReturnStatus *rs, JSVariant *result);
|
||||
const JSVariant &value, ReturnStatus *rs, JSVariant *result) MOZ_OVERRIDE;
|
||||
|
||||
bool AnswerIsExtensible(const ObjectId &objId, ReturnStatus *rs,
|
||||
bool *result);
|
||||
bool *result) MOZ_OVERRIDE;
|
||||
bool AnswerCall(const ObjectId &objId, const nsTArray<JSParam> &argv,
|
||||
ReturnStatus *rs, JSVariant *result,
|
||||
nsTArray<JSParam> *outparams);
|
||||
nsTArray<JSParam> *outparams) MOZ_OVERRIDE;
|
||||
bool AnswerObjectClassIs(const ObjectId &objId, const uint32_t &classValue,
|
||||
bool *result);
|
||||
bool AnswerClassName(const ObjectId &objId, nsString *result);
|
||||
bool *result) MOZ_OVERRIDE;
|
||||
bool AnswerClassName(const ObjectId &objId, nsString *result) MOZ_OVERRIDE;
|
||||
|
||||
bool AnswerGetPropertyNames(const ObjectId &objId, const uint32_t &flags,
|
||||
ReturnStatus *rs, nsTArray<nsString> *names);
|
||||
ReturnStatus *rs, nsTArray<nsString> *names) MOZ_OVERRIDE;
|
||||
bool AnswerInstanceOf(const ObjectId &objId, const JSIID &iid,
|
||||
ReturnStatus *rs, bool *instanceof);
|
||||
ReturnStatus *rs, bool *instanceof) MOZ_OVERRIDE;
|
||||
bool AnswerDOMInstanceOf(const ObjectId &objId, const int &prototypeID, const int &depth,
|
||||
ReturnStatus *rs, bool *instanceof);
|
||||
ReturnStatus *rs, bool *instanceof) MOZ_OVERRIDE;
|
||||
|
||||
protected:
|
||||
JSObject *unwrap(JSContext *cx, ObjectId id);
|
||||
|
@ -137,7 +137,7 @@ bool
|
||||
JavaScriptShared::convertIdToGeckoString(JSContext *cx, JS::HandleId id, nsString *to)
|
||||
{
|
||||
RootedValue idval(cx);
|
||||
if (!JS_IdToValue(cx, id, idval.address()))
|
||||
if (!JS_IdToValue(cx, id, &idval))
|
||||
return false;
|
||||
|
||||
RootedString str(cx, ToString(cx, idval));
|
||||
@ -159,7 +159,7 @@ JavaScriptShared::convertGeckoStringToId(JSContext *cx, const nsString &from, JS
|
||||
if (!str)
|
||||
return false;
|
||||
|
||||
return JS_ValueToId(cx, StringValue(str), to.address());
|
||||
return JS_ValueToId(cx, StringValue(str), to);
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -502,7 +502,7 @@ jsd_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* nameStr)
|
||||
/* Not found in property list, look it up explicitly */
|
||||
|
||||
nameval = STRING_TO_JSVAL(name);
|
||||
if(!JS_ValueToId(cx, nameval, nameid.address()))
|
||||
if(!JS_ValueToId(cx, nameval, &nameid))
|
||||
return nullptr;
|
||||
|
||||
if(!(obj = JSVAL_TO_OBJECT(jsdval->val)))
|
||||
@ -544,7 +544,7 @@ jsd_GetValueProperty(JSDContext* jsdc, JSDValue* jsdval, JSString* nameStr)
|
||||
}
|
||||
}
|
||||
|
||||
if (!JS_IdToValue(cx, nameid, propId.address()))
|
||||
if (!JS_IdToValue(cx, nameid, &propId))
|
||||
return nullptr;
|
||||
|
||||
propAlias = JSVAL_NULL;
|
||||
|
@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
#include "mozilla/NullPtr.h"
|
||||
|
||||
|
||||
#include "jsbytecode.h"
|
||||
|
||||
#include "js/CallArgs.h"
|
||||
@ -143,7 +143,7 @@ extern JS_PUBLIC_API(JSCompartment *)
|
||||
JS_EnterCompartmentOfScript(JSContext *cx, JSScript *target);
|
||||
|
||||
extern JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, unsigned indent);
|
||||
JS_DecompileScript(JSContext *cx, JS::HandleScript script, const char *name, unsigned indent);
|
||||
|
||||
/*
|
||||
* Currently, we only support runtime-wide debugging. In the future, we should
|
||||
|
@ -3373,10 +3373,14 @@ fi
|
||||
dnl ========================================================
|
||||
dnl = Use exact stack rooting for GC
|
||||
dnl ========================================================
|
||||
MOZ_ARG_ENABLE_BOOL(exact-rooting,
|
||||
[ --enable-exact-rooting Enable use of exact stack roots for GC],
|
||||
JSGC_USE_EXACT_ROOTING=1,
|
||||
JSGC_USE_EXACT_ROOTING= )
|
||||
dnl Use exact rooting by default in all shell builds. The top-level mozilla
|
||||
dnl configure.in will configure SpiderMonkey with --disable-exact-rooting as
|
||||
dnl needed on a per-platform basis.
|
||||
JSGC_USE_EXACT_ROOTING=1
|
||||
MOZ_ARG_DISABLE_BOOL(exact-rooting,
|
||||
[ --disable-exact-rooting Enable use of conservative stack scanning for GC],
|
||||
JSGC_USE_EXACT_ROOTING= ,
|
||||
JSGC_USE_EXACT_ROOTING=1 )
|
||||
if test -n "$JSGC_USE_EXACT_ROOTING"; then
|
||||
AC_DEFINE(JSGC_USE_EXACT_ROOTING)
|
||||
fi
|
||||
|
@ -6516,7 +6516,9 @@ frontend::EmitTree(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn)
|
||||
uint32_t slot = bce->arrayCompDepth;
|
||||
if (!AdjustBlockSlot(cx, bce, &slot))
|
||||
return false;
|
||||
if (!EmitUnaliasedVarOp(cx, pn->getOp(), slot, bce))
|
||||
if (!EmitUnaliasedVarOp(cx, JSOP_GETLOCAL, slot, bce))
|
||||
return false;
|
||||
if (Emit1(cx, bce, JSOP_ARRAYPUSH) < 0)
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
|
@ -4,12 +4,12 @@
|
||||
FRAGMENT(JSObject, simple) {
|
||||
JS::Rooted<JSObject *> glob(cx, JS::CurrentGlobalOrNull(cx));
|
||||
JS::Rooted<JSObject *> plain(cx, JS_NewObject(cx, nullptr, JS::NullPtr(), JS::NullPtr()));
|
||||
JS::Rooted<JSObject *> global(cx, JS::CurrentGlobalOrNull(cx));
|
||||
JS::Rooted<JSObject *> func(cx, (JSObject *) JS_NewFunction(cx, (JSNative) 1, 0, 0,
|
||||
JS::CurrentGlobalOrNull(cx), "dys"));
|
||||
JS::Rooted<JSObject *> anon(cx, (JSObject *) JS_NewFunction(cx, (JSNative) 1, 0, 0,
|
||||
JS::CurrentGlobalOrNull(cx), 0));
|
||||
global, "dys"));
|
||||
JS::Rooted<JSObject *> anon(cx, (JSObject *) JS_NewFunction(cx, (JSNative) 1, 0, 0, global, 0));
|
||||
JS::Rooted<JSFunction *> funcPtr(cx, JS_NewFunction(cx, (JSNative) 1, 0, 0,
|
||||
JS::CurrentGlobalOrNull(cx), "formFollows"));
|
||||
global, "formFollows"));
|
||||
|
||||
JSObject &plainRef = *plain;
|
||||
JSFunction &funcRef = *funcPtr;
|
||||
|
8
js/src/jit-test/tests/bug953337.js
Normal file
8
js/src/jit-test/tests/bug953337.js
Normal file
@ -0,0 +1,8 @@
|
||||
setJitCompilerOption("ion.usecount.trigger", 20);
|
||||
Function.prototype.__proto__ = new Boolean({ get: function() {} }, {});
|
||||
function g(x, y) {}
|
||||
function f() {
|
||||
g.apply(this, arguments);
|
||||
}
|
||||
for (var i = 0; i < 130; ++i)
|
||||
f(i, i*2);
|
@ -10,6 +10,7 @@
|
||||
# include <sys/mman.h>
|
||||
#endif
|
||||
|
||||
#include "mozilla/Compression.h"
|
||||
#include "mozilla/PodOperations.h"
|
||||
|
||||
#include "jslibmath.h"
|
||||
@ -32,6 +33,7 @@ using namespace js;
|
||||
using namespace jit;
|
||||
using namespace frontend;
|
||||
using mozilla::PodEqual;
|
||||
using mozilla::Compression::LZ4;
|
||||
|
||||
void
|
||||
AsmJSModule::initHeap(Handle<ArrayBufferObject*> heap, JSContext *cx)
|
||||
@ -814,8 +816,7 @@ struct PropertyNameWrapper
|
||||
|
||||
class ModuleChars
|
||||
{
|
||||
uint32_t length_;
|
||||
const jschar *begin_;
|
||||
protected:
|
||||
uint32_t isFunCtor_;
|
||||
js::Vector<PropertyNameWrapper, 0, SystemAllocPolicy> funCtorArgs_;
|
||||
|
||||
@ -827,8 +828,34 @@ class ModuleChars
|
||||
static uint32_t endOffset(AsmJSParser &parser) {
|
||||
return parser.tokenStream.peekTokenPos().end;
|
||||
}
|
||||
};
|
||||
|
||||
class ModuleCharsForStore : ModuleChars
|
||||
{
|
||||
uint32_t uncompressedSize_;
|
||||
uint32_t compressedSize_;
|
||||
js::Vector<char, 0, SystemAllocPolicy> compressedBuffer_;
|
||||
|
||||
public:
|
||||
bool init(AsmJSParser &parser, const AsmJSModule &module) {
|
||||
JS_ASSERT(beginOffset(parser) < endOffset(parser));
|
||||
|
||||
uncompressedSize_ = (endOffset(parser) - beginOffset(parser)) * sizeof(jschar);
|
||||
size_t maxCompressedSize = LZ4::maxCompressedSize(uncompressedSize_);
|
||||
if (maxCompressedSize < uncompressedSize_)
|
||||
return false;
|
||||
|
||||
if (!compressedBuffer_.resize(maxCompressedSize))
|
||||
return false;
|
||||
|
||||
const jschar *chars = parser.tokenStream.rawBase() + beginOffset(parser);
|
||||
const char *source = reinterpret_cast<const char*>(chars);
|
||||
size_t compressedSize = LZ4::compress(source, uncompressedSize_, compressedBuffer_.begin());
|
||||
if (!compressedSize || compressedSize > UINT32_MAX)
|
||||
return false;
|
||||
|
||||
compressedSize_ = compressedSize;
|
||||
|
||||
bool initFromParsedModule(AsmJSParser &parser, const AsmJSModule &module) {
|
||||
// For a function statement or named function expression:
|
||||
// function f(x,y,z) { abc }
|
||||
// the range [beginOffset, endOffset) captures the source:
|
||||
@ -841,9 +868,6 @@ class ModuleChars
|
||||
// For functions created with 'new Function', function arguments are
|
||||
// not present in the source so we must manually explicitly serialize
|
||||
// and match the formals as a Vector of PropertyName.
|
||||
JS_ASSERT(beginOffset(parser) < endOffset(parser));
|
||||
begin_ = parser.tokenStream.rawBase() + beginOffset(parser);
|
||||
length_ = endOffset(parser) - beginOffset(parser);
|
||||
isFunCtor_ = parser.pc->isFunctionConstructorBody();
|
||||
if (isFunCtor_) {
|
||||
unsigned numArgs;
|
||||
@ -853,42 +877,65 @@ class ModuleChars
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
size_t serializedSize() const {
|
||||
return sizeof(uint32_t) +
|
||||
length_ * sizeof(jschar) +
|
||||
sizeof(uint32_t) +
|
||||
compressedSize_ +
|
||||
sizeof(uint32_t) +
|
||||
(isFunCtor_ ? SerializedVectorSize(funCtorArgs_) : 0);
|
||||
}
|
||||
|
||||
uint8_t *serialize(uint8_t *cursor) const {
|
||||
cursor = WriteScalar<uint32_t>(cursor, length_);
|
||||
cursor = WriteBytes(cursor, begin_, length_ * sizeof(jschar));
|
||||
cursor = WriteScalar<uint32_t>(cursor, uncompressedSize_);
|
||||
cursor = WriteScalar<uint32_t>(cursor, compressedSize_);
|
||||
cursor = WriteBytes(cursor, compressedBuffer_.begin(), compressedSize_);
|
||||
cursor = WriteScalar<uint32_t>(cursor, isFunCtor_);
|
||||
if (isFunCtor_)
|
||||
cursor = SerializeVector(cursor, funCtorArgs_);
|
||||
return cursor;
|
||||
}
|
||||
};
|
||||
|
||||
class ModuleCharsForLookup : ModuleChars
|
||||
{
|
||||
js::Vector<jschar, 0, SystemAllocPolicy> chars_;
|
||||
|
||||
public:
|
||||
const uint8_t *deserialize(ExclusiveContext *cx, const uint8_t *cursor) {
|
||||
cursor = ReadScalar<uint32_t>(cursor, &length_);
|
||||
begin_ = reinterpret_cast<const jschar *>(cursor);
|
||||
cursor += length_ * sizeof(jschar);
|
||||
uint32_t uncompressedSize;
|
||||
cursor = ReadScalar<uint32_t>(cursor, &uncompressedSize);
|
||||
|
||||
uint32_t compressedSize;
|
||||
cursor = ReadScalar<uint32_t>(cursor, &compressedSize);
|
||||
|
||||
if (!chars_.resize(uncompressedSize / sizeof(jschar)))
|
||||
return nullptr;
|
||||
|
||||
const char *source = reinterpret_cast<const char*>(cursor);
|
||||
char *dest = reinterpret_cast<char*>(chars_.begin());
|
||||
if (!LZ4::decompress(source, dest, uncompressedSize))
|
||||
return nullptr;
|
||||
|
||||
cursor += compressedSize;
|
||||
|
||||
cursor = ReadScalar<uint32_t>(cursor, &isFunCtor_);
|
||||
if (isFunCtor_)
|
||||
cursor = DeserializeVector(cx, cursor, &funCtorArgs_);
|
||||
|
||||
return cursor;
|
||||
}
|
||||
|
||||
bool matchUnparsedModule(AsmJSParser &parser) const {
|
||||
bool match(AsmJSParser &parser) const {
|
||||
const jschar *parseBegin = parser.tokenStream.rawBase() + beginOffset(parser);
|
||||
const jschar *parseLimit = parser.tokenStream.rawLimit();
|
||||
JS_ASSERT(parseLimit >= parseBegin);
|
||||
if (uint32_t(parseLimit - parseBegin) < length_)
|
||||
if (uint32_t(parseLimit - parseBegin) < chars_.length())
|
||||
return false;
|
||||
if (!PodEqual(begin_, parseBegin, length_))
|
||||
if (!PodEqual(chars_.begin(), parseBegin, chars_.length()))
|
||||
return false;
|
||||
if (isFunCtor_ != parser.pc->isFunctionConstructorBody())
|
||||
return false;
|
||||
@ -900,7 +947,7 @@ class ModuleChars
|
||||
// new Function('"use asm"; function f() {} return f')
|
||||
// from incorrectly matching
|
||||
// new Function('"use asm"; function f() {} return ff')
|
||||
if (parseBegin + length_ != parseLimit)
|
||||
if (parseBegin + chars_.length() != parseLimit)
|
||||
return false;
|
||||
unsigned numArgs;
|
||||
ParseNode *arg = FunctionArgsList(parser.pc->maybeFunction, &numArgs);
|
||||
@ -942,8 +989,8 @@ js::StoreAsmJSModuleInCache(AsmJSParser &parser,
|
||||
if (!machineId.extractCurrentState(cx))
|
||||
return false;
|
||||
|
||||
ModuleChars moduleChars;
|
||||
if (!moduleChars.initFromParsedModule(parser, module))
|
||||
ModuleCharsForStore moduleChars;
|
||||
if (!moduleChars.init(parser, module))
|
||||
return false;
|
||||
|
||||
size_t serializedSize = machineId.serializedSize() +
|
||||
@ -1021,9 +1068,9 @@ js::LookupAsmJSModuleInCache(ExclusiveContext *cx,
|
||||
if (machineId != cachedMachineId)
|
||||
return true;
|
||||
|
||||
ModuleChars moduleChars;
|
||||
ModuleCharsForLookup moduleChars;
|
||||
cursor = moduleChars.deserialize(cx, cursor);
|
||||
if (!moduleChars.matchUnparsedModule(parser))
|
||||
if (!moduleChars.match(parser))
|
||||
return true;
|
||||
|
||||
ScopedJSDeletePtr<AsmJSModule> module(
|
||||
|
@ -5092,7 +5092,7 @@ IonBuilder::testShouldDOMCall(types::TypeSet *inTypes,
|
||||
compartment->runtime()->DOMcallbacks()->instanceClassMatchesProto;
|
||||
|
||||
const JSJitInfo *jinfo = func->jitInfo();
|
||||
if (jinfo->type != opType)
|
||||
if (jinfo->type() != opType)
|
||||
return false;
|
||||
|
||||
for (unsigned i = 0; i < inTypes->getObjectCount(); i++) {
|
||||
@ -5243,16 +5243,16 @@ DOMCallNeedsBarrier(const JSJitInfo* jitinfo, types::TemporaryTypeSet *types)
|
||||
{
|
||||
// If the return type of our DOM native is in "types" already, we don't
|
||||
// actually need a barrier.
|
||||
if (jitinfo->returnType == JSVAL_TYPE_UNKNOWN)
|
||||
if (jitinfo->returnType() == JSVAL_TYPE_UNKNOWN)
|
||||
return true;
|
||||
|
||||
// JSVAL_TYPE_OBJECT doesn't tell us much; we still have to barrier on the
|
||||
// actual type of the object.
|
||||
if (jitinfo->returnType == JSVAL_TYPE_OBJECT)
|
||||
if (jitinfo->returnType() == JSVAL_TYPE_OBJECT)
|
||||
return true;
|
||||
|
||||
// No need for a barrier if we're already expecting the type we'll produce.
|
||||
return jitinfo->returnType != types->getKnownTypeTag();
|
||||
return jitinfo->returnType() != types->getKnownTypeTag();
|
||||
}
|
||||
|
||||
bool
|
||||
@ -6225,12 +6225,12 @@ IonBuilder::pushDOMTypeBarrier(MInstruction *ins, types::TemporaryTypeSet *obser
|
||||
// JSValueType than codegen can, short of jitinfo->returnType just being
|
||||
// JSVAL_TYPE_UNKNOWN.
|
||||
MDefinition* replace = ins;
|
||||
if (jitinfo->returnType != JSVAL_TYPE_DOUBLE ||
|
||||
if (jitinfo->returnType() != JSVAL_TYPE_DOUBLE ||
|
||||
observed->getKnownTypeTag() != JSVAL_TYPE_INT32) {
|
||||
JS_ASSERT(jitinfo->returnType == JSVAL_TYPE_UNKNOWN ||
|
||||
JS_ASSERT(jitinfo->returnType() == JSVAL_TYPE_UNKNOWN ||
|
||||
observed->getKnownTypeTag() == JSVAL_TYPE_UNKNOWN ||
|
||||
jitinfo->returnType == observed->getKnownTypeTag());
|
||||
replace = ensureDefiniteType(ins, jitinfo->returnType);
|
||||
jitinfo->returnType() == observed->getKnownTypeTag());
|
||||
replace = ensureDefiniteType(ins, jitinfo->returnType());
|
||||
if (replace != ins) {
|
||||
current->pop();
|
||||
current->push(replace);
|
||||
@ -8835,7 +8835,7 @@ IonBuilder::setPropTryCommonDOMSetter(bool *emitted, MDefinition *obj,
|
||||
return true;
|
||||
|
||||
// Emit SetDOMProperty.
|
||||
JS_ASSERT(setter->jitInfo()->type == JSJitInfo::Setter);
|
||||
JS_ASSERT(setter->jitInfo()->type() == JSJitInfo::Setter);
|
||||
MSetDOMProperty *set = MSetDOMProperty::New(alloc(), setter->jitInfo()->setter, obj, value);
|
||||
|
||||
current->add(set);
|
||||
|
@ -964,6 +964,7 @@ class CallInfo
|
||||
}
|
||||
|
||||
void setImplicitlyUsedUnchecked() {
|
||||
fun_->setImplicitlyUsedUnchecked();
|
||||
thisArg_->setImplicitlyUsedUnchecked();
|
||||
for (uint32_t i = 0; i < argc(); i++)
|
||||
getArg(i)->setImplicitlyUsedUnchecked();
|
||||
|
@ -196,6 +196,7 @@ IonBuilder::inlineMathFunction(CallInfo &callInfo, MMathFunction::Function funct
|
||||
if (!cache)
|
||||
return InliningStatus_NotInlined;
|
||||
|
||||
callInfo.fun()->setImplicitlyUsedUnchecked();
|
||||
callInfo.thisArg()->setImplicitlyUsedUnchecked();
|
||||
|
||||
MMathFunction *ins = MMathFunction::New(alloc(), callInfo.getArg(0), function, cache);
|
||||
@ -246,6 +247,9 @@ IonBuilder::inlineArray(CallInfo &callInfo)
|
||||
initLength = arg->toConstant()->value().toInt32();
|
||||
if (initLength >= JSObject::NELEMENTS_LIMIT)
|
||||
return InliningStatus_NotInlined;
|
||||
|
||||
if (initLength <= ArrayObject::EagerAllocationMaxLength)
|
||||
allocating = MNewArray::NewArray_Allocating;
|
||||
}
|
||||
|
||||
callInfo.setImplicitlyUsedUnchecked();
|
||||
|
@ -671,11 +671,11 @@ MCallDOMNative::getAliasSet() const
|
||||
const JSJitInfo *jitInfo = getSingleTarget()->jitInfo();
|
||||
JS_ASSERT(jitInfo);
|
||||
|
||||
JS_ASSERT(jitInfo->aliasSet != JSJitInfo::AliasNone);
|
||||
JS_ASSERT(jitInfo->aliasSet() != JSJitInfo::AliasNone);
|
||||
// If we don't know anything about the types of our arguments, we have to
|
||||
// assume that type-coercions can have side-effects, so we need to alias
|
||||
// everything.
|
||||
if (jitInfo->aliasSet != JSJitInfo::AliasDOMSets || !jitInfo->isTypedMethodJitInfo())
|
||||
if (jitInfo->aliasSet() != JSJitInfo::AliasDOMSets || !jitInfo->isTypedMethodJitInfo())
|
||||
return AliasSet::Store(AliasSet::Any);
|
||||
|
||||
uint32_t argIndex = 0;
|
||||
@ -723,7 +723,7 @@ MCallDOMNative::computeMovable()
|
||||
JS_ASSERT(jitInfo);
|
||||
|
||||
JS_ASSERT_IF(jitInfo->isMovable,
|
||||
jitInfo->aliasSet != JSJitInfo::AliasEverything);
|
||||
jitInfo->aliasSet() != JSJitInfo::AliasEverything);
|
||||
|
||||
if (jitInfo->isMovable && !isEffectful())
|
||||
setMovable();
|
||||
|
@ -7918,7 +7918,7 @@ class MGetDOMProperty
|
||||
: info_(jitinfo)
|
||||
{
|
||||
JS_ASSERT(jitinfo);
|
||||
JS_ASSERT(jitinfo->type == JSJitInfo::Getter);
|
||||
JS_ASSERT(jitinfo->type() == JSJitInfo::Getter);
|
||||
|
||||
setOperand(0, obj);
|
||||
|
||||
@ -7927,7 +7927,7 @@ class MGetDOMProperty
|
||||
|
||||
// We are movable iff the jitinfo says we can be.
|
||||
if (isDomMovable()) {
|
||||
JS_ASSERT(jitinfo->aliasSet != JSJitInfo::AliasEverything);
|
||||
JS_ASSERT(jitinfo->aliasSet() != JSJitInfo::AliasEverything);
|
||||
setMovable();
|
||||
}
|
||||
|
||||
@ -7957,7 +7957,7 @@ class MGetDOMProperty
|
||||
return info_->isMovable;
|
||||
}
|
||||
JSJitInfo::AliasSet domAliasSet() const {
|
||||
return info_->aliasSet;
|
||||
return info_->aliasSet();
|
||||
}
|
||||
size_t domMemberSlotIndex() const {
|
||||
MOZ_ASSERT(info_->isInSlot);
|
||||
|
@ -22,12 +22,12 @@ BEGIN_TEST(testDefineGetterSetterNonEnumerable)
|
||||
CHECK(obj);
|
||||
vobj = OBJECT_TO_JSVAL(obj);
|
||||
|
||||
JSFunction *funGet = JS_NewFunction(cx, NativeGetterSetter, 0, 0, nullptr, "get");
|
||||
JSFunction *funGet = JS_NewFunction(cx, NativeGetterSetter, 0, 0, JS::NullPtr(), "get");
|
||||
CHECK(funGet);
|
||||
JS::RootedObject funGetObj(cx, JS_GetFunctionObject(funGet));
|
||||
JS::RootedValue vget(cx, OBJECT_TO_JSVAL(funGetObj));
|
||||
|
||||
JSFunction *funSet = JS_NewFunction(cx, NativeGetterSetter, 1, 0, nullptr, "set");
|
||||
JSFunction *funSet = JS_NewFunction(cx, NativeGetterSetter, 1, 0, JS::NullPtr(), "set");
|
||||
CHECK(funSet);
|
||||
JS::RootedObject funSetObj(cx, JS_GetFunctionObject(funSet));
|
||||
JS::RootedValue vset(cx, OBJECT_TO_JSVAL(funSetObj));
|
||||
|
@ -55,7 +55,7 @@ document_resolve(JSContext *cx, JS::HandleObject obj, JS::HandleId id, unsigned
|
||||
{
|
||||
// If id is "all", resolve document.all=true.
|
||||
JS::RootedValue v(cx);
|
||||
if (!JS_IdToValue(cx, id, v.address()))
|
||||
if (!JS_IdToValue(cx, id, &v))
|
||||
return false;
|
||||
if (JSVAL_IS_STRING(v)) {
|
||||
JSString *str = JSVAL_TO_STRING(v);
|
||||
|
@ -2225,28 +2225,22 @@ JS_DestroyIdArray(JSContext *cx, JSIdArray *ida)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_ValueToId(JSContext *cx, jsval valueArg, jsid *idp)
|
||||
JS_ValueToId(JSContext *cx, jsval valueArg, MutableHandleId idp)
|
||||
{
|
||||
RootedValue value(cx, valueArg);
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, value);
|
||||
|
||||
RootedId id(cx);
|
||||
if (!ValueToId<CanGC>(cx, value, &id))
|
||||
return false;
|
||||
|
||||
*idp = id;
|
||||
return true;
|
||||
return ValueToId<CanGC>(cx, value, idp);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_IdToValue(JSContext *cx, jsid id, jsval *vp)
|
||||
JS_IdToValue(JSContext *cx, jsid id, MutableHandleValue vp)
|
||||
{
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
*vp = IdToJsval(id);
|
||||
assertSameCompartment(cx, *vp);
|
||||
vp.set(IdToJsval(id));
|
||||
assertSameCompartment(cx, vp);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -2661,20 +2655,17 @@ JS_GetObjectRuntime(JSObject *obj)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_FreezeObject(JSContext *cx, JSObject *objArg)
|
||||
JS_FreezeObject(JSContext *cx, HandleObject obj)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
|
||||
return JSObject::freeze(cx, obj);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_DeepFreezeObject(JSContext *cx, JSObject *objArg)
|
||||
JS_DeepFreezeObject(JSContext *cx, HandleObject obj)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3685,10 +3676,8 @@ static const Class prop_iter_class = {
|
||||
};
|
||||
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_NewPropertyIterator(JSContext *cx, JSObject *objArg)
|
||||
JS_NewPropertyIterator(JSContext *cx, HandleObject obj)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3717,10 +3706,8 @@ JS_NewPropertyIterator(JSContext *cx, JSObject *objArg)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_NextProperty(JSContext *cx, JSObject *iterobjArg, jsid *idp)
|
||||
JS_NextProperty(JSContext *cx, HandleObject iterobj, jsid *idp)
|
||||
{
|
||||
RootedObject iterobj(cx, iterobjArg);
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, iterobj);
|
||||
@ -3789,9 +3776,8 @@ JS_IsArrayObject(JSContext *cx, JSObject *objArg)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_GetArrayLength(JSContext *cx, JSObject *objArg, uint32_t *lengthp)
|
||||
JS_GetArrayLength(JSContext *cx, HandleObject obj, uint32_t *lengthp)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3799,9 +3785,8 @@ JS_GetArrayLength(JSContext *cx, JSObject *objArg, uint32_t *lengthp)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_SetArrayLength(JSContext *cx, JSObject *objArg, uint32_t length)
|
||||
JS_SetArrayLength(JSContext *cx, HandleObject obj, uint32_t length)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj);
|
||||
@ -3809,19 +3794,13 @@ JS_SetArrayLength(JSContext *cx, JSObject *objArg, uint32_t length)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_CheckAccess(JSContext *cx, JSObject *objArg, jsid idArg, JSAccessMode mode,
|
||||
jsval *vp, unsigned *attrsp)
|
||||
JS_CheckAccess(JSContext *cx, HandleObject obj, HandleId id, JSAccessMode mode,
|
||||
MutableHandleValue vp, unsigned *attrsp)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
RootedId id(cx, idArg);
|
||||
RootedValue value(cx, *vp);
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, obj, id);
|
||||
bool status = CheckAccess(cx, obj, id, mode, &value, attrsp);
|
||||
*vp = value;
|
||||
return status;
|
||||
return CheckAccess(cx, obj, id, mode, vp, attrsp);
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(void)
|
||||
@ -3867,9 +3846,8 @@ JS_InitDestroyPrincipalsCallback(JSRuntime *rt, JSDestroyPrincipalsOp destroyPri
|
||||
|
||||
JS_PUBLIC_API(JSFunction *)
|
||||
JS_NewFunction(JSContext *cx, JSNative native, unsigned nargs, unsigned flags,
|
||||
JSObject *parentArg, const char *name)
|
||||
HandleObject parent, const char *name)
|
||||
{
|
||||
RootedObject parent(cx, parentArg);
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
@ -3888,10 +3866,9 @@ JS_NewFunction(JSContext *cx, JSNative native, unsigned nargs, unsigned flags,
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSFunction *)
|
||||
JS_NewFunctionById(JSContext *cx, JSNative native, unsigned nargs, unsigned flags, JSObject *parentArg,
|
||||
jsid id)
|
||||
JS_NewFunctionById(JSContext *cx, JSNative native, unsigned nargs, unsigned flags,
|
||||
HandleObject parent, HandleId id)
|
||||
{
|
||||
RootedObject parent(cx, parentArg);
|
||||
JS_ASSERT(JSID_IS_STRING(id));
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
JS_ASSERT(native);
|
||||
@ -3905,7 +3882,7 @@ JS_NewFunctionById(JSContext *cx, JSNative native, unsigned nargs, unsigned flag
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSFunction *)
|
||||
JS::GetSelfHostedFunction(JSContext *cx, const char *selfHostedName, jsid id, unsigned nargs)
|
||||
JS::GetSelfHostedFunction(JSContext *cx, const char *selfHostedName, HandleId id, unsigned nargs)
|
||||
{
|
||||
JS_ASSERT(JSID_IS_STRING(id));
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
@ -3923,10 +3900,10 @@ JS::GetSelfHostedFunction(JSContext *cx, const char *selfHostedName, jsid id, un
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSObject *)
|
||||
JS_CloneFunctionObject(JSContext *cx, JSObject *funobjArg, JSObject *parentArg)
|
||||
JS_CloneFunctionObject(JSContext *cx, HandleObject funobj, HandleObject parentArg)
|
||||
{
|
||||
RootedObject funobj(cx, funobjArg);
|
||||
RootedObject parent(cx, parentArg);
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, parent);
|
||||
@ -4024,9 +4001,8 @@ JS_IsConstructor(JSFunction *fun)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSObject*)
|
||||
JS_BindCallable(JSContext *cx, JSObject *targetArg, JSObject *newThis)
|
||||
JS_BindCallable(JSContext *cx, HandleObject target, HandleObject newThis)
|
||||
{
|
||||
RootedObject target(cx, targetArg);
|
||||
RootedValue thisArg(cx, ObjectValue(*newThis));
|
||||
return js_fun_bind(cx, target, thisArg, nullptr, 0);
|
||||
}
|
||||
@ -4060,14 +4036,13 @@ js_generic_native_method_dispatcher(JSContext *cx, unsigned argc, Value *vp)
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_DefineFunctions(JSContext *cx, JSObject *objArg, const JSFunctionSpec *fs)
|
||||
JS_DefineFunctions(JSContext *cx, HandleObject obj, const JSFunctionSpec *fs)
|
||||
{
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, objArg);
|
||||
assertSameCompartment(cx, obj);
|
||||
|
||||
RootedObject obj(cx, objArg);
|
||||
RootedObject ctor(cx);
|
||||
|
||||
for (; fs->name; fs++) {
|
||||
@ -4512,9 +4487,8 @@ JS_CompileUCScript(JSContext *cx, JS::HandleObject obj, const jschar *chars,
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(bool)
|
||||
JS_BufferIsCompilableUnit(JSContext *cx, JSObject *objArg, const char *utf8, size_t length)
|
||||
JS_BufferIsCompilableUnit(JSContext *cx, HandleObject obj, const char *utf8, size_t length)
|
||||
{
|
||||
RootedObject obj(cx, objArg);
|
||||
bool result;
|
||||
JSExceptionState *exnState;
|
||||
JSErrorReporter older;
|
||||
@ -4642,13 +4616,12 @@ JS_CompileFunction(JSContext *cx, JS::HandleObject obj, const char *name,
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileScript(JSContext *cx, JSScript *scriptArg, const char *name, unsigned indent)
|
||||
JS_DecompileScript(JSContext *cx, HandleScript script, const char *name, unsigned indent)
|
||||
{
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
RootedScript script(cx, scriptArg);
|
||||
script->ensureNonLazyCanonicalFunction(cx);
|
||||
RootedFunction fun(cx, script->functionNonDelazifying());
|
||||
if (fun)
|
||||
@ -4660,24 +4633,22 @@ JS_DecompileScript(JSContext *cx, JSScript *scriptArg, const char *name, unsigne
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunction(JSContext *cx, JSFunction *funArg, unsigned indent)
|
||||
JS_DecompileFunction(JSContext *cx, HandleFunction fun, unsigned indent)
|
||||
{
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, funArg);
|
||||
RootedFunction fun(cx, funArg);
|
||||
assertSameCompartment(cx, fun);
|
||||
return FunctionToString(cx, fun, false, !(indent & JS_DONT_PRETTY_PRINT));
|
||||
}
|
||||
|
||||
JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunctionBody(JSContext *cx, JSFunction *funArg, unsigned indent)
|
||||
JS_DecompileFunctionBody(JSContext *cx, HandleFunction fun, unsigned indent)
|
||||
{
|
||||
JS_ASSERT(!cx->runtime()->isAtomsCompartment(cx->compartment()));
|
||||
AssertHeapIsIdle(cx);
|
||||
CHECK_REQUEST(cx);
|
||||
assertSameCompartment(cx, funArg);
|
||||
RootedFunction fun(cx, funArg);
|
||||
assertSameCompartment(cx, fun);
|
||||
return FunctionToString(cx, fun, true, !(indent & JS_DONT_PRETTY_PRINT));
|
||||
}
|
||||
|
||||
|
@ -2309,10 +2309,10 @@ class AutoIdArray : private AutoGCRooter
|
||||
} /* namespace JS */
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_ValueToId(JSContext *cx, jsval v, jsid *idp);
|
||||
JS_ValueToId(JSContext *cx, jsval v, JS::MutableHandle<jsid> idp);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_IdToValue(JSContext *cx, jsid id, jsval *vp);
|
||||
JS_IdToValue(JSContext *cx, jsid id, JS::MutableHandle<JS::Value> vp);
|
||||
|
||||
/*
|
||||
* JSNewResolveOp flag bits.
|
||||
@ -2745,13 +2745,13 @@ JS_NewObjectWithGivenProto(JSContext *cx, const JSClass *clasp, JS::Handle<JSObj
|
||||
* deep-frozen.
|
||||
*/
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_DeepFreezeObject(JSContext *cx, JSObject *obj);
|
||||
JS_DeepFreezeObject(JSContext *cx, JS::Handle<JSObject*> obj);
|
||||
|
||||
/*
|
||||
* Freezes an object; see ES5's Object.freeze(obj) method.
|
||||
*/
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_FreezeObject(JSContext *cx, JSObject *obj);
|
||||
JS_FreezeObject(JSContext *cx, JS::Handle<JSObject*> obj);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_PreventExtensions(JSContext *cx, JS::HandleObject obj);
|
||||
@ -3060,10 +3060,10 @@ extern JS_PUBLIC_API(bool)
|
||||
JS_IsArrayObject(JSContext *cx, JSObject *obj);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_GetArrayLength(JSContext *cx, JSObject *obj, uint32_t *lengthp);
|
||||
JS_GetArrayLength(JSContext *cx, JS::Handle<JSObject*> obj, uint32_t *lengthp);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_SetArrayLength(JSContext *cx, JSObject *obj, uint32_t length);
|
||||
JS_SetArrayLength(JSContext *cx, JS::Handle<JSObject*> obj, uint32_t length);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_DefineElement(JSContext *cx, JSObject *obj, uint32_t index, jsval value,
|
||||
@ -3158,7 +3158,7 @@ JS_Enumerate(JSContext *cx, JSObject *obj);
|
||||
* order, which uses order of property definition in obj.
|
||||
*/
|
||||
extern JS_PUBLIC_API(JSObject *)
|
||||
JS_NewPropertyIterator(JSContext *cx, JSObject *obj);
|
||||
JS_NewPropertyIterator(JSContext *cx, JS::Handle<JSObject*> obj);
|
||||
|
||||
/*
|
||||
* Return true on success with *idp containing the id of the next enumerable
|
||||
@ -3166,11 +3166,11 @@ JS_NewPropertyIterator(JSContext *cx, JSObject *obj);
|
||||
* left to visit. Return false on error.
|
||||
*/
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_NextProperty(JSContext *cx, JSObject *iterobj, jsid *idp);
|
||||
JS_NextProperty(JSContext *cx, JS::Handle<JSObject*> iterobj, jsid *idp);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_CheckAccess(JSContext *cx, JSObject *obj, jsid id, JSAccessMode mode,
|
||||
jsval *vp, unsigned *attrsp);
|
||||
JS_CheckAccess(JSContext *cx, JS::Handle<JSObject*> obj, JS::Handle<jsid> id, JSAccessMode mode,
|
||||
JS::MutableHandle<JS::Value> vp, unsigned *attrsp);
|
||||
|
||||
extern JS_PUBLIC_API(jsval)
|
||||
JS_GetReservedSlot(JSObject *obj, uint32_t index);
|
||||
@ -3257,7 +3257,7 @@ JS_InitDestroyPrincipalsCallback(JSRuntime *rt, JSDestroyPrincipalsOp destroyPri
|
||||
*/
|
||||
extern JS_PUBLIC_API(JSFunction *)
|
||||
JS_NewFunction(JSContext *cx, JSNative call, unsigned nargs, unsigned flags,
|
||||
JSObject *parent, const char *name);
|
||||
JS::Handle<JSObject*> parent, const char *name);
|
||||
|
||||
/*
|
||||
* Create the function with the name given by the id. JSID_IS_STRING(id) must
|
||||
@ -3265,12 +3265,13 @@ JS_NewFunction(JSContext *cx, JSNative call, unsigned nargs, unsigned flags,
|
||||
*/
|
||||
extern JS_PUBLIC_API(JSFunction *)
|
||||
JS_NewFunctionById(JSContext *cx, JSNative call, unsigned nargs, unsigned flags,
|
||||
JSObject *parent, jsid id);
|
||||
JS::Handle<JSObject*> parent, JS::Handle<jsid> id);
|
||||
|
||||
namespace JS {
|
||||
|
||||
extern JS_PUBLIC_API(JSFunction *)
|
||||
GetSelfHostedFunction(JSContext *cx, const char *selfHostedName, jsid id, unsigned nargs);
|
||||
GetSelfHostedFunction(JSContext *cx, const char *selfHostedName, JS::Handle<jsid> id,
|
||||
unsigned nargs);
|
||||
|
||||
} /* namespace JS */
|
||||
|
||||
@ -3327,10 +3328,10 @@ JS_IsConstructor(JSFunction *fun);
|
||||
* If |callable| is not callable, will throw and return nullptr.
|
||||
*/
|
||||
extern JS_PUBLIC_API(JSObject*)
|
||||
JS_BindCallable(JSContext *cx, JSObject *callable, JSObject *newThis);
|
||||
JS_BindCallable(JSContext *cx, JS::Handle<JSObject*> callable, JS::Handle<JSObject*> newThis);
|
||||
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_DefineFunctions(JSContext *cx, JSObject *obj, const JSFunctionSpec *fs);
|
||||
JS_DefineFunctions(JSContext *cx, JS::Handle<JSObject*> obj, const JSFunctionSpec *fs);
|
||||
|
||||
extern JS_PUBLIC_API(JSFunction *)
|
||||
JS_DefineFunction(JSContext *cx, JSObject *obj, const char *name, JSNative call,
|
||||
@ -3350,7 +3351,7 @@ JS_DefineFunctionById(JSContext *cx, JSObject *obj, jsid id, JSNative call,
|
||||
* fail if funobj was lexically nested inside some other function.
|
||||
*/
|
||||
extern JS_PUBLIC_API(JSObject *)
|
||||
JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent);
|
||||
JS_CloneFunctionObject(JSContext *cx, JS::Handle<JSObject*> funobj, JS::Handle<JSObject*> parent);
|
||||
|
||||
/*
|
||||
* Given a buffer, return false if the buffer might become a valid
|
||||
@ -3360,7 +3361,8 @@ JS_CloneFunctionObject(JSContext *cx, JSObject *funobj, JSObject *parent);
|
||||
* the compiler.
|
||||
*/
|
||||
extern JS_PUBLIC_API(bool)
|
||||
JS_BufferIsCompilableUnit(JSContext *cx, JSObject *obj, const char *utf8, size_t length);
|
||||
JS_BufferIsCompilableUnit(JSContext *cx, JS::Handle<JSObject*> obj, const char *utf8,
|
||||
size_t length);
|
||||
|
||||
extern JS_PUBLIC_API(JSScript *)
|
||||
JS_CompileScript(JSContext *cx, JS::HandleObject obj,
|
||||
@ -3684,7 +3686,7 @@ CompileFunction(JSContext *cx, JS::HandleObject obj, const ReadOnlyCompileOption
|
||||
} /* namespace JS */
|
||||
|
||||
extern JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, unsigned indent);
|
||||
JS_DecompileScript(JSContext *cx, JS::Handle<JSScript*> script, const char *name, unsigned indent);
|
||||
|
||||
/*
|
||||
* API extension: OR this into indent to avoid pretty-printing the decompiled
|
||||
@ -3693,10 +3695,10 @@ JS_DecompileScript(JSContext *cx, JSScript *script, const char *name, unsigned i
|
||||
#define JS_DONT_PRETTY_PRINT ((unsigned)0x8000)
|
||||
|
||||
extern JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunction(JSContext *cx, JSFunction *fun, unsigned indent);
|
||||
JS_DecompileFunction(JSContext *cx, JS::Handle<JSFunction*> fun, unsigned indent);
|
||||
|
||||
extern JS_PUBLIC_API(JSString *)
|
||||
JS_DecompileFunctionBody(JSContext *cx, JSFunction *fun, unsigned indent);
|
||||
JS_DecompileFunctionBody(JSContext *cx, JS::Handle<JSFunction*> fun, unsigned indent);
|
||||
|
||||
/*
|
||||
* NB: JS_ExecuteScript and the JS_Evaluate*Script* quadruplets use the obj
|
||||
|
@ -2004,8 +2004,8 @@ js::array_sort(JSContext *cx, unsigned argc, Value *vp)
|
||||
return true;
|
||||
}
|
||||
|
||||
static JS_ALWAYS_INLINE bool
|
||||
NewbornArrayPushImpl(JSContext *cx, HandleObject obj, const Value &v)
|
||||
bool
|
||||
js::NewbornArrayPush(JSContext *cx, HandleObject obj, const Value &v)
|
||||
{
|
||||
Rooted<ArrayObject*> arr(cx, &obj->as<ArrayObject>());
|
||||
|
||||
@ -2024,12 +2024,6 @@ NewbornArrayPushImpl(JSContext *cx, HandleObject obj, const Value &v)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool
|
||||
js_NewbornArrayPush(JSContext *cx, HandleObject obj, const Value &vp)
|
||||
{
|
||||
return NewbornArrayPushImpl(cx, obj, vp);
|
||||
}
|
||||
|
||||
/* ES5 15.4.4.7 */
|
||||
bool
|
||||
js::array_push(JSContext *cx, unsigned argc, Value *vp)
|
||||
@ -3052,10 +3046,8 @@ js_Array(JSContext *cx, unsigned argc, Value *vp)
|
||||
* Allocate dense elements eagerly for small arrays, to avoid reallocating
|
||||
* elements when filling the array.
|
||||
*/
|
||||
static const uint32_t ArrayEagerAllocationMaxLength = 2048;
|
||||
|
||||
RootedObject obj(cx);
|
||||
obj = (length <= ArrayEagerAllocationMaxLength)
|
||||
obj = (length <= ArrayObject::EagerAllocationMaxLength)
|
||||
? NewDenseAllocatedArray(cx, length)
|
||||
: NewDenseUnallocatedArray(cx, length);
|
||||
if (!obj)
|
||||
|
@ -140,13 +140,6 @@ ArrayShiftMoveElements(JSObject *obj);
|
||||
extern bool
|
||||
array_shift(JSContext *cx, unsigned argc, js::Value *vp);
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
#ifdef DEBUG
|
||||
extern bool
|
||||
js_ArrayInfo(JSContext *cx, unsigned argc, js::Value *vp);
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Append the given (non-hole) value to the end of an array. The array must be
|
||||
* a newborn array -- that is, one which has not been exposed to script for
|
||||
@ -155,7 +148,14 @@ js_ArrayInfo(JSContext *cx, unsigned argc, js::Value *vp);
|
||||
* sparse, which requires that the array be completely filled.)
|
||||
*/
|
||||
extern bool
|
||||
js_NewbornArrayPush(JSContext *cx, js::HandleObject obj, const js::Value &v);
|
||||
NewbornArrayPush(JSContext *cx, HandleObject obj, const Value &v);
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
#ifdef DEBUG
|
||||
extern bool
|
||||
js_ArrayInfo(JSContext *cx, unsigned argc, js::Value *vp);
|
||||
#endif
|
||||
|
||||
/* Array constructor native. Exposed only so the JIT can know its address. */
|
||||
bool
|
||||
|
@ -1448,11 +1448,13 @@ typedef bool
|
||||
void *specializedThis, const JSJitMethodCallArgs& args);
|
||||
|
||||
struct JSJitInfo {
|
||||
enum OpType MOZ_ENUM_TYPE(uint8_t) {
|
||||
enum OpType {
|
||||
Getter,
|
||||
Setter,
|
||||
Method,
|
||||
ParallelNative
|
||||
ParallelNative,
|
||||
// Must be last
|
||||
OpTypeCount
|
||||
};
|
||||
|
||||
enum ArgType {
|
||||
@ -1476,7 +1478,7 @@ struct JSJitInfo {
|
||||
ArgTypeListEnd = (1 << 31)
|
||||
};
|
||||
|
||||
enum AliasSet MOZ_ENUM_TYPE(uint8_t) {
|
||||
enum AliasSet {
|
||||
// An enum that describes what this getter/setter/method aliases. This
|
||||
// determines what things can be hoisted past this call, and if this
|
||||
// call is movable what it can be hoisted past.
|
||||
@ -1491,17 +1493,20 @@ struct JSJitInfo {
|
||||
|
||||
// Alias the world. Calling this can change arbitrary values anywhere
|
||||
// in the system. Most things fall in this bucket.
|
||||
AliasEverything
|
||||
AliasEverything,
|
||||
|
||||
// Must be last.
|
||||
AliasSetCount
|
||||
};
|
||||
|
||||
bool hasParallelNative() const
|
||||
{
|
||||
return type == ParallelNative;
|
||||
return type() == ParallelNative;
|
||||
}
|
||||
|
||||
bool isDOMJitInfo() const
|
||||
{
|
||||
return type != ParallelNative;
|
||||
return type() != ParallelNative;
|
||||
}
|
||||
|
||||
bool isTypedMethodJitInfo() const
|
||||
@ -1509,6 +1514,21 @@ struct JSJitInfo {
|
||||
return isTypedMethod;
|
||||
}
|
||||
|
||||
OpType type() const
|
||||
{
|
||||
return OpType(type_);
|
||||
}
|
||||
|
||||
AliasSet aliasSet() const
|
||||
{
|
||||
return AliasSet(aliasSet_);
|
||||
}
|
||||
|
||||
JSValueType returnType() const
|
||||
{
|
||||
return JSValueType(returnType_);
|
||||
}
|
||||
|
||||
union {
|
||||
JSJitGetterOp getter;
|
||||
JSJitSetterOp setter;
|
||||
@ -1519,30 +1539,53 @@ struct JSJitInfo {
|
||||
|
||||
uint16_t protoID;
|
||||
uint16_t depth;
|
||||
// type not being ParallelNative means this is a DOM method. If you
|
||||
// change that, come up with a different way of implementing
|
||||
|
||||
// These fields are carefully packed to take up 4 bytes. If you need more
|
||||
// bits for whatever reason, please see if you can steal bits from existing
|
||||
// fields before adding more members to this structure.
|
||||
|
||||
#define JITINFO_OP_TYPE_BITS 4
|
||||
#define JITINFO_ALIAS_SET_BITS 4
|
||||
#define JITINFO_RETURN_TYPE_BITS 8
|
||||
|
||||
// If this field is not ParallelNative, then this is a DOM method.
|
||||
// If you change that, come up with a different way of implementing
|
||||
// isDOMJitInfo().
|
||||
OpType type;
|
||||
JSValueType returnType; /* The return type tag. Might be JSVAL_TYPE_UNKNOWN */
|
||||
uint16_t isInfallible : 1; /* Is op fallible? False in setters. */
|
||||
uint16_t isMovable : 1; /* Is op movable? To be movable the op must
|
||||
uint32_t type_ : JITINFO_OP_TYPE_BITS;
|
||||
|
||||
// The alias set for this op. This is a _minimal_ alias set; in
|
||||
// particular for a method it does not include whatever argument
|
||||
// conversions might do. That's covered by argTypes and runtime
|
||||
// analysis of the actual argument types being passed in.
|
||||
uint32_t aliasSet_ : JITINFO_ALIAS_SET_BITS;
|
||||
|
||||
// The return type tag. Might be JSVAL_TYPE_UNKNOWN.
|
||||
uint32_t returnType_ : JITINFO_RETURN_TYPE_BITS;
|
||||
|
||||
static_assert(OpTypeCount <= (1 << JITINFO_OP_TYPE_BITS),
|
||||
"Not enough space for OpType");
|
||||
static_assert(AliasSetCount <= (1 << JITINFO_ALIAS_SET_BITS),
|
||||
"Not enough space for AliasSet");
|
||||
static_assert((sizeof(JSValueType) * 8) <= JITINFO_RETURN_TYPE_BITS,
|
||||
"Not enough space for JSValueType");
|
||||
|
||||
#undef JITINFO_RETURN_TYPE_BITS
|
||||
#undef JITINFO_ALIAS_SET_BITS
|
||||
#undef JITINFO_OP_TYPE_BITS
|
||||
|
||||
uint32_t isInfallible : 1; /* Is op fallible? False in setters. */
|
||||
uint32_t isMovable : 1; /* Is op movable? To be movable the op must
|
||||
not AliasEverything, but even that might
|
||||
not be enough (e.g. in cases when it can
|
||||
throw). */
|
||||
// XXXbz should we have a JSValueType for the type of the member?
|
||||
uint16_t isInSlot : 1; /* True if this is a getter that can get a member
|
||||
uint32_t isInSlot : 1; /* True if this is a getter that can get a member
|
||||
from a slot of the "this" object directly. */
|
||||
uint16_t isTypedMethod : 1; /* True if this is an instance of
|
||||
uint32_t isTypedMethod : 1; /* True if this is an instance of
|
||||
JSTypedMethodJitInfo. */
|
||||
uint16_t slotIndex : 12; /* If isInSlot is true, the index of the slot to
|
||||
uint32_t slotIndex : 12; /* If isInSlot is true, the index of the slot to
|
||||
get the value from. Otherwise 0. */
|
||||
|
||||
AliasSet aliasSet; /* The alias set for this op. This is a _minimal_
|
||||
alias set; in particular for a method it does not
|
||||
include whatever argument conversions might do.
|
||||
That's covered by argTypes and runtime analysis
|
||||
of the actual argument types being passed in. */
|
||||
|
||||
private:
|
||||
static void staticAsserts()
|
||||
{
|
||||
@ -1555,6 +1598,12 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
static_assert(sizeof(JSJitInfo) == (sizeof(void*) + 2 * sizeof(uint32_t)),
|
||||
"There are several thousand instances of JSJitInfo stored in "
|
||||
"a binary. Please don't increase its space requirements without "
|
||||
"verifying that there is no other way forward (better packing, "
|
||||
"smaller datatypes for fields, subclassing, etc.).");
|
||||
|
||||
struct JSTypedMethodJitInfo
|
||||
{
|
||||
// We use C-style inheritance here, rather than C++ style inheritance
|
||||
@ -1604,7 +1653,7 @@ inline int CheckIsParallelNative(JSParallelNative parallelNative);
|
||||
*/
|
||||
#define JS_JITINFO_NATIVE_PARALLEL(infoName, parallelOp) \
|
||||
const JSJitInfo infoName = \
|
||||
{{JS_CAST_PARALLEL_NATIVE_TO(parallelOp, JSJitGetterOp)},0,0,JSJitInfo::ParallelNative,JSVAL_TYPE_MISSING,false,false,false,false,0,JSJitInfo::AliasEverything}
|
||||
{{JS_CAST_PARALLEL_NATIVE_TO(parallelOp, JSJitGetterOp)},0,0,JSJitInfo::ParallelNative,JSJitInfo::AliasEverything,JSVAL_TYPE_MISSING,false,false,false,false,0}
|
||||
|
||||
#define JS_JITINFO_NATIVE_PARALLEL_THREADSAFE(infoName, wrapperName, serialOp) \
|
||||
bool wrapperName##_ParallelNativeThreadSafeWrapper(js::ForkJoinSlice *slice, unsigned argc, \
|
||||
|
@ -875,7 +875,8 @@ ToDisassemblySource(JSContext *cx, HandleValue v, JSAutoByteString *bytes)
|
||||
}
|
||||
|
||||
if (obj->is<JSFunction>()) {
|
||||
JSString *str = JS_DecompileFunction(cx, &obj->as<JSFunction>(), JS_DONT_PRETTY_PRINT);
|
||||
RootedFunction fun(cx, &obj->as<JSFunction>());
|
||||
JSString *str = JS_DecompileFunction(cx, fun, JS_DONT_PRETTY_PRINT);
|
||||
if (!str)
|
||||
return false;
|
||||
return bytes->encodeLatin1(cx, str);
|
||||
|
@ -439,7 +439,7 @@ OPDEF(JSOP_UNUSED201, 201,"unused201", NULL, 1, 0, 0, JOF_BYTE)
|
||||
*/
|
||||
OPDEF(JSOP_GENERATOR, 202,"generator", NULL, 1, 0, 0, JOF_BYTE)
|
||||
OPDEF(JSOP_YIELD, 203,"yield", NULL, 1, 1, 1, JOF_BYTE)
|
||||
OPDEF(JSOP_ARRAYPUSH, 204,"arraypush", NULL, 4, 1, 0, JOF_LOCAL)
|
||||
OPDEF(JSOP_ARRAYPUSH, 204,"arraypush", NULL, 1, 2, 0, JOF_BYTE)
|
||||
|
||||
OPDEF(JSOP_UNUSED205, 205, "unused205", NULL, 1, 0, 0, JOF_BYTE)
|
||||
OPDEF(JSOP_UNUSED206, 206, "unused206", NULL, 1, 0, 0, JOF_BYTE)
|
||||
|
@ -33,6 +33,7 @@
|
||||
#include "jit/IonCode.h"
|
||||
#include "js/OldDebugAPI.h"
|
||||
#include "vm/ArgumentsObject.h"
|
||||
#include "vm/Compression.h"
|
||||
#include "vm/Debugger.h"
|
||||
#include "vm/Shape.h"
|
||||
#include "vm/Xdr.h"
|
||||
@ -1239,7 +1240,7 @@ ScriptSource::setSource(const jschar *src, size_t length)
|
||||
}
|
||||
|
||||
bool
|
||||
SourceCompressionTask::compress()
|
||||
SourceCompressionTask::work()
|
||||
{
|
||||
// A given compression token can be compressed on any thread, and the ss
|
||||
// not being ready indicates to other threads that its fields might change
|
||||
|
@ -27,121 +27,6 @@ using namespace js;
|
||||
using mozilla::CeilingLog2Size;
|
||||
using mozilla::PodArrayZero;
|
||||
|
||||
#if USE_ZLIB
|
||||
static void *
|
||||
zlib_alloc(void *cx, uInt items, uInt size)
|
||||
{
|
||||
return js_calloc(items, size);
|
||||
}
|
||||
|
||||
static void
|
||||
zlib_free(void *cx, void *addr)
|
||||
{
|
||||
js_free(addr);
|
||||
}
|
||||
|
||||
Compressor::Compressor(const unsigned char *inp, size_t inplen)
|
||||
: inp(inp),
|
||||
inplen(inplen),
|
||||
outbytes(0)
|
||||
{
|
||||
JS_ASSERT(inplen > 0);
|
||||
zs.opaque = nullptr;
|
||||
zs.next_in = (Bytef *)inp;
|
||||
zs.avail_in = 0;
|
||||
zs.next_out = nullptr;
|
||||
zs.avail_out = 0;
|
||||
zs.zalloc = zlib_alloc;
|
||||
zs.zfree = zlib_free;
|
||||
}
|
||||
|
||||
|
||||
Compressor::~Compressor()
|
||||
{
|
||||
int ret = deflateEnd(&zs);
|
||||
if (ret != Z_OK) {
|
||||
// If we finished early, we can get a Z_DATA_ERROR.
|
||||
JS_ASSERT(ret == Z_DATA_ERROR);
|
||||
JS_ASSERT(uInt(zs.next_in - inp) < inplen || !zs.avail_out);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
Compressor::init()
|
||||
{
|
||||
if (inplen >= UINT32_MAX)
|
||||
return false;
|
||||
// zlib is slow and we'd rather be done compression sooner
|
||||
// even if it means decompression is slower which penalizes
|
||||
// Function.toString()
|
||||
int ret = deflateInit(&zs, Z_BEST_SPEED);
|
||||
if (ret != Z_OK) {
|
||||
JS_ASSERT(ret == Z_MEM_ERROR);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Compressor::setOutput(unsigned char *out, size_t outlen)
|
||||
{
|
||||
JS_ASSERT(outlen > outbytes);
|
||||
zs.next_out = out + outbytes;
|
||||
zs.avail_out = outlen - outbytes;
|
||||
}
|
||||
|
||||
Compressor::Status
|
||||
Compressor::compressMore()
|
||||
{
|
||||
JS_ASSERT(zs.next_out);
|
||||
uInt left = inplen - (zs.next_in - inp);
|
||||
bool done = left <= CHUNKSIZE;
|
||||
if (done)
|
||||
zs.avail_in = left;
|
||||
else if (zs.avail_in == 0)
|
||||
zs.avail_in = CHUNKSIZE;
|
||||
Bytef *oldout = zs.next_out;
|
||||
int ret = deflate(&zs, done ? Z_FINISH : Z_NO_FLUSH);
|
||||
outbytes += zs.next_out - oldout;
|
||||
if (ret == Z_MEM_ERROR) {
|
||||
zs.avail_out = 0;
|
||||
return OOM;
|
||||
}
|
||||
if (ret == Z_BUF_ERROR || (done && ret == Z_OK)) {
|
||||
JS_ASSERT(zs.avail_out == 0);
|
||||
return MOREOUTPUT;
|
||||
}
|
||||
JS_ASSERT_IF(!done, ret == Z_OK);
|
||||
JS_ASSERT_IF(done, ret == Z_STREAM_END);
|
||||
return done ? DONE : CONTINUE;
|
||||
}
|
||||
|
||||
bool
|
||||
js::DecompressString(const unsigned char *inp, size_t inplen, unsigned char *out, size_t outlen)
|
||||
{
|
||||
JS_ASSERT(inplen <= UINT32_MAX);
|
||||
z_stream zs;
|
||||
zs.zalloc = zlib_alloc;
|
||||
zs.zfree = zlib_free;
|
||||
zs.opaque = nullptr;
|
||||
zs.next_in = (Bytef *)inp;
|
||||
zs.avail_in = inplen;
|
||||
zs.next_out = out;
|
||||
JS_ASSERT(outlen);
|
||||
zs.avail_out = outlen;
|
||||
int ret = inflateInit(&zs);
|
||||
if (ret != Z_OK) {
|
||||
JS_ASSERT(ret == Z_MEM_ERROR);
|
||||
return false;
|
||||
}
|
||||
ret = inflate(&zs, Z_FINISH);
|
||||
JS_ASSERT(ret == Z_STREAM_END);
|
||||
ret = inflateEnd(&zs);
|
||||
JS_ASSERT(ret == Z_OK);
|
||||
return true;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG
|
||||
/* For JS_OOM_POSSIBLY_FAIL in jsutil.h. */
|
||||
JS_PUBLIC_DATA(uint32_t) OOM_maxAllocations = UINT32_MAX;
|
||||
|
@ -16,10 +16,6 @@
|
||||
|
||||
#include <limits.h>
|
||||
|
||||
#ifdef USE_ZLIB
|
||||
#include <zlib.h>
|
||||
#endif
|
||||
|
||||
#include "js/Utility.h"
|
||||
|
||||
static JS_ALWAYS_INLINE void *
|
||||
@ -264,41 +260,6 @@ ClearAllBitArrayElements(size_t *array, size_t length)
|
||||
array[i] = 0;
|
||||
}
|
||||
|
||||
#ifdef USE_ZLIB
|
||||
class Compressor
|
||||
{
|
||||
/* Number of bytes we should hand to zlib each compressMore() call. */
|
||||
static const size_t CHUNKSIZE = 2048;
|
||||
z_stream zs;
|
||||
const unsigned char *inp;
|
||||
size_t inplen;
|
||||
size_t outbytes;
|
||||
|
||||
public:
|
||||
enum Status {
|
||||
MOREOUTPUT,
|
||||
DONE,
|
||||
CONTINUE,
|
||||
OOM
|
||||
};
|
||||
|
||||
Compressor(const unsigned char *inp, size_t inplen);
|
||||
~Compressor();
|
||||
bool init();
|
||||
void setOutput(unsigned char *out, size_t outlen);
|
||||
size_t outWritten() const { return outbytes; }
|
||||
/* Compress some of the input. Return true if it should be called again. */
|
||||
Status compressMore();
|
||||
};
|
||||
|
||||
/*
|
||||
* Decompress a string. The caller must know the length of the output and
|
||||
* allocate |out| to a string of that length.
|
||||
*/
|
||||
bool DecompressString(const unsigned char *inp, size_t inplen,
|
||||
unsigned char *out, size_t outlen);
|
||||
#endif
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
/* Crash diagnostics */
|
||||
|
@ -369,7 +369,7 @@ JS_NondeterministicGetWeakMapKeys(JSContext *cx, JSObject *objArg, JSObject **re
|
||||
RootedObject key(cx, r.front().key());
|
||||
if (!cx->compartment()->wrap(cx, &key))
|
||||
return false;
|
||||
if (!js_NewbornArrayPush(cx, arr, ObjectValue(*key)))
|
||||
if (!NewbornArrayPush(cx, arr, ObjectValue(*key)))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -870,7 +870,7 @@ WorkerThread::handleCompressionWorkload(WorkerThreadState &state)
|
||||
|
||||
{
|
||||
AutoUnlockWorkerThreadState unlock(runtime);
|
||||
if (!compressionTask->compress())
|
||||
if (!compressionTask->work())
|
||||
compressionTask->setOOM();
|
||||
}
|
||||
|
||||
|
@ -413,7 +413,7 @@ struct SourceCompressionTask
|
||||
complete();
|
||||
}
|
||||
|
||||
bool compress();
|
||||
bool work();
|
||||
bool complete();
|
||||
void abort() { abort_ = 1; }
|
||||
bool active() const { return !!ss; }
|
||||
|
@ -155,6 +155,7 @@ UNIFIED_SOURCES += [
|
||||
'vm/ArgumentsObject.cpp',
|
||||
'vm/CallNonGenericMethod.cpp',
|
||||
'vm/CharacterEncoding.cpp',
|
||||
'vm/Compression.cpp',
|
||||
'vm/DateTime.cpp',
|
||||
'vm/Debugger.cpp',
|
||||
'vm/ErrorObject.cpp',
|
||||
|
@ -3675,14 +3675,15 @@ NestedShell(JSContext *cx, unsigned argc, jsval *vp)
|
||||
|
||||
static bool
|
||||
DecompileFunctionSomehow(JSContext *cx, unsigned argc, Value *vp,
|
||||
JSString *(*decompiler)(JSContext *, JSFunction *, unsigned))
|
||||
JSString *(*decompiler)(JSContext *, HandleFunction, unsigned))
|
||||
{
|
||||
CallArgs args = CallArgsFromVp(argc, vp);
|
||||
if (args.length() < 1 || !args[0].isObject() || !args[0].toObject().is<JSFunction>()) {
|
||||
args.rval().setUndefined();
|
||||
return true;
|
||||
}
|
||||
JSString *result = decompiler(cx, &args[0].toObject().as<JSFunction>(), 0);
|
||||
RootedFunction fun(cx, &args[0].toObject().as<JSFunction>());
|
||||
JSString *result = decompiler(cx, fun, 0);
|
||||
if (!result)
|
||||
return false;
|
||||
args.rval().setString(result);
|
||||
@ -4833,14 +4834,14 @@ static const JSJitInfo dom_x_getterinfo = {
|
||||
{ (JSJitGetterOp)dom_get_x },
|
||||
0, /* protoID */
|
||||
0, /* depth */
|
||||
JSJitInfo::AliasNone, /* aliasSet */
|
||||
JSJitInfo::Getter,
|
||||
JSVAL_TYPE_UNKNOWN, /* returnType */
|
||||
true, /* isInfallible. False in setters. */
|
||||
true, /* isMovable */
|
||||
false, /* isInSlot */
|
||||
false, /* isTypedMethod */
|
||||
0, /* slotIndex */
|
||||
JSJitInfo::AliasNone /* aliasSet */
|
||||
0 /* slotIndex */
|
||||
};
|
||||
|
||||
static const JSJitInfo dom_x_setterinfo = {
|
||||
@ -4848,13 +4849,13 @@ static const JSJitInfo dom_x_setterinfo = {
|
||||
0, /* protoID */
|
||||
0, /* depth */
|
||||
JSJitInfo::Setter,
|
||||
JSJitInfo::AliasEverything, /* aliasSet */
|
||||
JSVAL_TYPE_UNKNOWN, /* returnType */
|
||||
false, /* isInfallible. False in setters. */
|
||||
false, /* isMovable. */
|
||||
false, /* isInSlot */
|
||||
false, /* isTypedMethod */
|
||||
0, /* slotIndex */
|
||||
JSJitInfo::AliasEverything /* aliasSet */
|
||||
0 /* slotIndex */
|
||||
};
|
||||
|
||||
static const JSJitInfo doFoo_methodinfo = {
|
||||
@ -4862,13 +4863,13 @@ static const JSJitInfo doFoo_methodinfo = {
|
||||
0, /* protoID */
|
||||
0, /* depth */
|
||||
JSJitInfo::Method,
|
||||
JSJitInfo::AliasEverything, /* aliasSet */
|
||||
JSVAL_TYPE_UNKNOWN, /* returnType */
|
||||
false, /* isInfallible. False in setters. */
|
||||
false, /* isMovable */
|
||||
false, /* isInSlot */
|
||||
false, /* isTypedMethod */
|
||||
0, /* slotIndex */
|
||||
JSJitInfo::AliasEverything /* aliasSet */
|
||||
0 /* slotIndex */
|
||||
};
|
||||
|
||||
static const JSPropertySpec dom_props[] = {
|
||||
@ -4925,7 +4926,7 @@ dom_genericGetter(JSContext *cx, unsigned argc, JS::Value *vp)
|
||||
JS::Value val = js::GetReservedSlot(obj, DOM_OBJECT_SLOT);
|
||||
|
||||
const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));
|
||||
MOZ_ASSERT(info->type == JSJitInfo::Getter);
|
||||
MOZ_ASSERT(info->type() == JSJitInfo::Getter);
|
||||
JSJitGetterOp getter = info->getter;
|
||||
return getter(cx, obj, val.toPrivate(), JSJitGetterCallArgs(args));
|
||||
}
|
||||
@ -4948,7 +4949,7 @@ dom_genericSetter(JSContext* cx, unsigned argc, JS::Value* vp)
|
||||
JS::Value val = js::GetReservedSlot(obj, DOM_OBJECT_SLOT);
|
||||
|
||||
const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));
|
||||
MOZ_ASSERT(info->type == JSJitInfo::Setter);
|
||||
MOZ_ASSERT(info->type() == JSJitInfo::Setter);
|
||||
JSJitSetterOp setter = info->setter;
|
||||
if (!setter(cx, obj, val.toPrivate(), JSJitSetterCallArgs(args)))
|
||||
return false;
|
||||
@ -4972,7 +4973,7 @@ dom_genericMethod(JSContext* cx, unsigned argc, JS::Value *vp)
|
||||
JS::Value val = js::GetReservedSlot(obj, DOM_OBJECT_SLOT);
|
||||
|
||||
const JSJitInfo *info = FUNCTION_VALUE_TO_JITINFO(JS_CALLEE(cx, vp));
|
||||
MOZ_ASSERT(info->type == JSJitInfo::Method);
|
||||
MOZ_ASSERT(info->type() == JSJitInfo::Method);
|
||||
JSJitMethodOp method = info->method;
|
||||
return method(cx, obj, val.toPrivate(), JSJitMethodCallArgs(args));
|
||||
}
|
||||
|
@ -14,6 +14,9 @@ namespace js {
|
||||
class ArrayObject : public JSObject
|
||||
{
|
||||
public:
|
||||
// Array(x) eagerly allocates dense elements if x <= this value.
|
||||
static const uint32_t EagerAllocationMaxLength = 2048;
|
||||
|
||||
static const Class class_;
|
||||
|
||||
bool lengthIsWritable() const {
|
||||
|
127
js/src/vm/Compression.cpp
Normal file
127
js/src/vm/Compression.cpp
Normal file
@ -0,0 +1,127 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
||||
* 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 "vm/Compression.h"
|
||||
|
||||
#include "js/Utility.h"
|
||||
|
||||
using namespace js;
|
||||
|
||||
#if USE_ZLIB
|
||||
static void *
|
||||
zlib_alloc(void *cx, uInt items, uInt size)
|
||||
{
|
||||
return js_calloc(items, size);
|
||||
}
|
||||
|
||||
static void
|
||||
zlib_free(void *cx, void *addr)
|
||||
{
|
||||
js_free(addr);
|
||||
}
|
||||
|
||||
Compressor::Compressor(const unsigned char *inp, size_t inplen)
|
||||
: inp(inp),
|
||||
inplen(inplen),
|
||||
outbytes(0)
|
||||
{
|
||||
JS_ASSERT(inplen > 0);
|
||||
zs.opaque = nullptr;
|
||||
zs.next_in = (Bytef *)inp;
|
||||
zs.avail_in = 0;
|
||||
zs.next_out = nullptr;
|
||||
zs.avail_out = 0;
|
||||
zs.zalloc = zlib_alloc;
|
||||
zs.zfree = zlib_free;
|
||||
}
|
||||
|
||||
|
||||
Compressor::~Compressor()
|
||||
{
|
||||
int ret = deflateEnd(&zs);
|
||||
if (ret != Z_OK) {
|
||||
// If we finished early, we can get a Z_DATA_ERROR.
|
||||
JS_ASSERT(ret == Z_DATA_ERROR);
|
||||
JS_ASSERT(uInt(zs.next_in - inp) < inplen || !zs.avail_out);
|
||||
}
|
||||
}
|
||||
|
||||
bool
|
||||
Compressor::init()
|
||||
{
|
||||
if (inplen >= UINT32_MAX)
|
||||
return false;
|
||||
// zlib is slow and we'd rather be done compression sooner
|
||||
// even if it means decompression is slower which penalizes
|
||||
// Function.toString()
|
||||
int ret = deflateInit(&zs, Z_BEST_SPEED);
|
||||
if (ret != Z_OK) {
|
||||
JS_ASSERT(ret == Z_MEM_ERROR);
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
Compressor::setOutput(unsigned char *out, size_t outlen)
|
||||
{
|
||||
JS_ASSERT(outlen > outbytes);
|
||||
zs.next_out = out + outbytes;
|
||||
zs.avail_out = outlen - outbytes;
|
||||
}
|
||||
|
||||
Compressor::Status
|
||||
Compressor::compressMore()
|
||||
{
|
||||
JS_ASSERT(zs.next_out);
|
||||
uInt left = inplen - (zs.next_in - inp);
|
||||
bool done = left <= CHUNKSIZE;
|
||||
if (done)
|
||||
zs.avail_in = left;
|
||||
else if (zs.avail_in == 0)
|
||||
zs.avail_in = CHUNKSIZE;
|
||||
Bytef *oldout = zs.next_out;
|
||||
int ret = deflate(&zs, done ? Z_FINISH : Z_NO_FLUSH);
|
||||
outbytes += zs.next_out - oldout;
|
||||
if (ret == Z_MEM_ERROR) {
|
||||
zs.avail_out = 0;
|
||||
return OOM;
|
||||
}
|
||||
if (ret == Z_BUF_ERROR || (done && ret == Z_OK)) {
|
||||
JS_ASSERT(zs.avail_out == 0);
|
||||
return MOREOUTPUT;
|
||||
}
|
||||
JS_ASSERT_IF(!done, ret == Z_OK);
|
||||
JS_ASSERT_IF(done, ret == Z_STREAM_END);
|
||||
return done ? DONE : CONTINUE;
|
||||
}
|
||||
|
||||
bool
|
||||
js::DecompressString(const unsigned char *inp, size_t inplen, unsigned char *out, size_t outlen)
|
||||
{
|
||||
JS_ASSERT(inplen <= UINT32_MAX);
|
||||
z_stream zs;
|
||||
zs.zalloc = zlib_alloc;
|
||||
zs.zfree = zlib_free;
|
||||
zs.opaque = nullptr;
|
||||
zs.next_in = (Bytef *)inp;
|
||||
zs.avail_in = inplen;
|
||||
zs.next_out = out;
|
||||
JS_ASSERT(outlen);
|
||||
zs.avail_out = outlen;
|
||||
int ret = inflateInit(&zs);
|
||||
if (ret != Z_OK) {
|
||||
JS_ASSERT(ret == Z_MEM_ERROR);
|
||||
return false;
|
||||
}
|
||||
ret = inflate(&zs, Z_FINISH);
|
||||
JS_ASSERT(ret == Z_STREAM_END);
|
||||
ret = inflateEnd(&zs);
|
||||
JS_ASSERT(ret == Z_OK);
|
||||
return true;
|
||||
}
|
||||
#endif /* USE_ZLIB */
|
||||
|
54
js/src/vm/Compression.h
Normal file
54
js/src/vm/Compression.h
Normal file
@ -0,0 +1,54 @@
|
||||
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 4 -*-
|
||||
* vim: set ts=8 sts=4 et sw=4 tw=99:
|
||||
* 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 vm_Compression_h
|
||||
#define vm_Compression_h
|
||||
|
||||
#ifdef USE_ZLIB
|
||||
|
||||
#include <zlib.h>
|
||||
|
||||
#include "jstypes.h"
|
||||
|
||||
namespace js {
|
||||
|
||||
class Compressor
|
||||
{
|
||||
/* Number of bytes we should hand to zlib each compressMore() call. */
|
||||
static const size_t CHUNKSIZE = 2048;
|
||||
z_stream zs;
|
||||
const unsigned char *inp;
|
||||
size_t inplen;
|
||||
size_t outbytes;
|
||||
|
||||
public:
|
||||
enum Status {
|
||||
MOREOUTPUT,
|
||||
DONE,
|
||||
CONTINUE,
|
||||
OOM
|
||||
};
|
||||
|
||||
Compressor(const unsigned char *inp, size_t inplen);
|
||||
~Compressor();
|
||||
bool init();
|
||||
void setOutput(unsigned char *out, size_t outlen);
|
||||
size_t outWritten() const { return outbytes; }
|
||||
/* Compress some of the input. Return true if it should be called again. */
|
||||
Status compressMore();
|
||||
};
|
||||
|
||||
/*
|
||||
* Decompress a string. The caller must know the length of the output and
|
||||
* allocate |out| to a string of that length.
|
||||
*/
|
||||
bool DecompressString(const unsigned char *inp, size_t inplen,
|
||||
unsigned char *out, size_t outlen);
|
||||
|
||||
} /* namespace js */
|
||||
|
||||
#endif /* USE_ZLIB */
|
||||
#endif /* vm_Compression_h */
|
@ -2737,7 +2737,7 @@ Debugger::findAllGlobals(JSContext *cx, unsigned argc, Value *vp)
|
||||
RootedValue globalValue(cx, ObjectValue(*global));
|
||||
if (!dbg->wrapDebuggeeValue(cx, &globalValue))
|
||||
return false;
|
||||
if (!js_NewbornArrayPush(cx, result, globalValue))
|
||||
if (!NewbornArrayPush(cx, result, globalValue))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3028,7 +3028,7 @@ DebuggerScript_getChildScripts(JSContext *cx, unsigned argc, Value *vp)
|
||||
if (!funScript)
|
||||
return false;
|
||||
s = dbg->wrapScript(cx, funScript);
|
||||
if (!s || !js_NewbornArrayPush(cx, result, ObjectValue(*s)))
|
||||
if (!s || !NewbornArrayPush(cx, result, ObjectValue(*s)))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3360,7 +3360,7 @@ DebuggerScript_getAllOffsets(JSContext *cx, unsigned argc, Value *vp)
|
||||
}
|
||||
|
||||
/* Append the current offset to the offsets array. */
|
||||
if (!js_NewbornArrayPush(cx, offsets, NumberValue(offset)))
|
||||
if (!NewbornArrayPush(cx, offsets, NumberValue(offset)))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3413,7 +3413,7 @@ DebuggerScript_getAllColumnOffsets(JSContext *cx, unsigned argc, Value *vp)
|
||||
if (!JSObject::defineGeneric(cx, entry, id, value))
|
||||
return false;
|
||||
|
||||
if (!js_NewbornArrayPush(cx, result, ObjectValue(*entry)))
|
||||
if (!NewbornArrayPush(cx, result, ObjectValue(*entry)))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3462,7 +3462,7 @@ DebuggerScript_getLineOffsets(JSContext *cx, unsigned argc, Value *vp)
|
||||
!flowData[offset].hasNoEdges() &&
|
||||
flowData[offset].lineno() != lineno)
|
||||
{
|
||||
if (!js_NewbornArrayPush(cx, result, NumberValue(offset)))
|
||||
if (!NewbornArrayPush(cx, result, NumberValue(offset)))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -3575,7 +3575,7 @@ DebuggerScript_getBreakpoints(JSContext *cx, unsigned argc, Value *vp)
|
||||
if (site && (!pc || site->pc == pc)) {
|
||||
for (Breakpoint *bp = site->firstBreakpoint(); bp; bp = bp->nextInSite()) {
|
||||
if (bp->debugger == dbg &&
|
||||
!js_NewbornArrayPush(cx, arr, ObjectValue(*bp->getHandler())))
|
||||
!NewbornArrayPush(cx, arr, ObjectValue(*bp->getHandler())))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
@ -5649,7 +5649,7 @@ DebuggerEnv_names(JSContext *cx, unsigned argc, Value *vp)
|
||||
if (JSID_IS_ATOM(id) && IsIdentifier(JSID_TO_ATOM(id))) {
|
||||
if (!cx->compartment()->wrapId(cx, id.address()))
|
||||
return false;
|
||||
if (!js_NewbornArrayPush(cx, arr, StringValue(JSID_TO_STRING(id))))
|
||||
if (!NewbornArrayPush(cx, arr, StringValue(JSID_TO_STRING(id))))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
@ -3395,14 +3395,11 @@ CASE(JSOP_YIELD)
|
||||
|
||||
CASE(JSOP_ARRAYPUSH)
|
||||
{
|
||||
uint32_t slot = GET_LOCALNO(REGS.pc);
|
||||
JS_ASSERT(script->nfixed() <= slot);
|
||||
JS_ASSERT(slot < script->nslots());
|
||||
RootedObject &obj = rootObject0;
|
||||
obj = ®S.fp()->unaliasedLocal(slot).toObject();
|
||||
if (!js_NewbornArrayPush(cx, obj, REGS.sp[-1]))
|
||||
obj = ®S.sp[-1].toObject();
|
||||
if (!NewbornArrayPush(cx, obj, REGS.sp[-2]))
|
||||
goto error;
|
||||
REGS.sp--;
|
||||
REGS.sp -= 2;
|
||||
}
|
||||
END_CASE(JSOP_ARRAYPUSH)
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
#include "builtin/Intl.h"
|
||||
#include "builtin/TypedObject.h"
|
||||
#include "gc/Marking.h"
|
||||
#include "vm/Compression.h"
|
||||
#include "vm/ForkJoin.h"
|
||||
#include "vm/Interpreter.h"
|
||||
|
||||
|
@ -22,7 +22,7 @@ namespace js {
|
||||
* and saved versions. If deserialization fails, the data should be
|
||||
* invalidated if possible.
|
||||
*/
|
||||
static const uint32_t XDR_BYTECODE_VERSION = uint32_t(0xb973c0de - 162);
|
||||
static const uint32_t XDR_BYTECODE_VERSION = uint32_t(0xb973c0de - 163);
|
||||
|
||||
class XDRBuffer {
|
||||
public:
|
||||
|
@ -1295,7 +1295,7 @@ mozJSComponentLoader::ImportInto(const nsACString &aLocation,
|
||||
for (uint32_t i = 0; i < symbolCount; ++i) {
|
||||
if (!JS_GetElement(mContext, symbolsObj, i, &value) ||
|
||||
!value.isString() ||
|
||||
!JS_ValueToId(mContext, value, symbolId.address())) {
|
||||
!JS_ValueToId(mContext, value, &symbolId)) {
|
||||
return ReportOnCaller(cxhelper, ERROR_ARRAY_ELEMENT,
|
||||
PromiseFlatCString(aLocation).get(), i);
|
||||
}
|
||||
|
@ -170,7 +170,7 @@ SandboxImport(JSContext *cx, unsigned argc, Value *vp)
|
||||
}
|
||||
|
||||
RootedId id(cx);
|
||||
if (!JS_ValueToId(cx, StringValue(funname), id.address()))
|
||||
if (!JS_ValueToId(cx, StringValue(funname), &id))
|
||||
return false;
|
||||
|
||||
// We need to resolve the this object, because this function is used
|
||||
@ -294,7 +294,7 @@ ExportFunction(JSContext *cx, HandleValue vfunction, HandleValue vscope, HandleV
|
||||
|
||||
RootedValue vname(cx);
|
||||
vname.setString(funName);
|
||||
if (!JS_ValueToId(cx, vname, id.address()))
|
||||
if (!JS_ValueToId(cx, vname, &id))
|
||||
return false;
|
||||
}
|
||||
MOZ_ASSERT(JSID_IS_STRING(id));
|
||||
@ -1447,7 +1447,7 @@ OptionsBase::ParseId(const char *name, MutableHandleId prop)
|
||||
if (!found)
|
||||
return true;
|
||||
|
||||
return JS_ValueToId(mCx, value, prop.address());
|
||||
return JS_ValueToId(mCx, value, prop);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -263,9 +263,11 @@ nsXPCComponents_Interfaces::NewEnumerate(nsIXPConnectWrappedNative *wrapper,
|
||||
JSString* idstr;
|
||||
const char* name;
|
||||
|
||||
JS::Rooted<jsid> id(cx);
|
||||
if (NS_SUCCEEDED(interface->GetNameShared(&name)) && name &&
|
||||
nullptr != (idstr = JS_NewStringCopyZ(cx, name)) &&
|
||||
JS_ValueToId(cx, STRING_TO_JSVAL(idstr), idp)) {
|
||||
JS_ValueToId(cx, StringValue(idstr), &id)) {
|
||||
*idp = id;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
@ -512,7 +514,9 @@ nsXPCComponents_InterfacesByID::NewEnumerate(nsIXPConnectWrappedNative *wrapper,
|
||||
if (NS_SUCCEEDED(interface->GetIIDShared(&iid))) {
|
||||
iid->ToProvidedString(idstr);
|
||||
jsstr = JS_NewStringCopyZ(cx, idstr);
|
||||
if (jsstr && JS_ValueToId(cx, STRING_TO_JSVAL(jsstr), idp)) {
|
||||
JS::Rooted<jsid> id(cx);
|
||||
if (jsstr && JS_ValueToId(cx, StringValue(jsstr), &id)) {
|
||||
*idp = id;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
@ -766,8 +770,10 @@ nsXPCComponents_Classes::NewEnumerate(nsIXPConnectWrappedNative *wrapper,
|
||||
nsAutoCString name;
|
||||
if (NS_SUCCEEDED(holder->GetData(name))) {
|
||||
JSString* idstr = JS_NewStringCopyN(cx, name.get(), name.Length());
|
||||
JS::Rooted<jsid> id(cx);
|
||||
if (idstr &&
|
||||
JS_ValueToId(cx, STRING_TO_JSVAL(idstr), idp)) {
|
||||
JS_ValueToId(cx, StringValue(idstr), &id)) {
|
||||
*idp = id;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
@ -1006,8 +1012,10 @@ nsXPCComponents_ClassesByID::NewEnumerate(nsIXPConnectWrappedNative *wrapper,
|
||||
if (NS_SUCCEEDED(holder->ToString(&name)) && name) {
|
||||
JSString* idstr = JS_NewStringCopyZ(cx, name);
|
||||
nsMemory::Free(name);
|
||||
JS::Rooted<jsid> id(cx);
|
||||
if (idstr &&
|
||||
JS_ValueToId(cx, STRING_TO_JSVAL(idstr), idp)) {
|
||||
JS_ValueToId(cx, StringValue(idstr), &id)) {
|
||||
*idp = id;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
@ -1258,8 +1266,11 @@ nsXPCComponents_Results::NewEnumerate(nsIXPConnectWrappedNative *wrapper,
|
||||
iter = (const void**) JSVAL_TO_PRIVATE(*statep);
|
||||
if (nsXPCException::IterateNSResults(nullptr, &name, nullptr, iter)) {
|
||||
JSString* idstr = JS_NewStringCopyZ(cx, name);
|
||||
if (idstr && JS_ValueToId(cx, STRING_TO_JSVAL(idstr), idp))
|
||||
JS::Rooted<jsid> id(cx);
|
||||
if (idstr && JS_ValueToId(cx, StringValue(idstr), &id)) {
|
||||
*idp = id;
|
||||
return NS_OK;
|
||||
}
|
||||
}
|
||||
// else... FALL THROUGH
|
||||
}
|
||||
@ -2399,7 +2410,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
|
||||
|
||||
RootedString str(cx, ToString(cx, args[1]));
|
||||
RootedId id(cx);
|
||||
if (!str || !JS_ValueToId(cx, StringValue(str), id.address()))
|
||||
if (!str || !JS_ValueToId(cx, StringValue(str), &id))
|
||||
return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
|
||||
|
||||
RootedValue val(cx);
|
||||
@ -2447,7 +2458,7 @@ nsXPCComponents_Constructor::CallOrConstruct(nsIXPConnectWrappedNative *wrapper,
|
||||
|
||||
RootedString str(cx, ToString(cx, args[0]));
|
||||
RootedId id(cx);
|
||||
if (!str || !JS_ValueToId(cx, StringValue(str), id.address()))
|
||||
if (!str || !JS_ValueToId(cx, StringValue(str), &id))
|
||||
return ThrowAndFail(NS_ERROR_XPC_BAD_CONVERT_JS, cx, _retval);
|
||||
|
||||
RootedValue val(cx);
|
||||
|
@ -610,7 +610,7 @@ PropertyOpForwarder(JSContext *cx, unsigned argc, jsval *vp)
|
||||
|
||||
JS::RootedValue argval(cx, (argc > 0) ? args.get(0) : JSVAL_VOID);
|
||||
JS::RootedId id(cx);
|
||||
if (!JS_ValueToId(cx, v, id.address()))
|
||||
if (!JS_ValueToId(cx, v, &id))
|
||||
return false;
|
||||
args.rval().set(argval);
|
||||
return ApplyPropertyOp<Op>(cx, *popp, obj, id, args.rval());
|
||||
|
@ -731,7 +731,7 @@ env_setProperty(JSContext *cx, HandleObject obj, HandleId id, bool strict, Mutab
|
||||
int rv;
|
||||
|
||||
RootedValue idval(cx);
|
||||
if (!JS_IdToValue(cx, id, idval.address()))
|
||||
if (!JS_IdToValue(cx, id, &idval))
|
||||
return false;
|
||||
|
||||
idstr = ToString(cx, idval);
|
||||
@ -814,7 +814,7 @@ env_resolve(JSContext *cx, HandleObject obj, HandleId id, unsigned flags,
|
||||
JSString *idstr, *valstr;
|
||||
|
||||
RootedValue idval(cx);
|
||||
if (!JS_IdToValue(cx, id, idval.address()))
|
||||
if (!JS_IdToValue(cx, id, &idval))
|
||||
return false;
|
||||
|
||||
idstr = ToString(cx, idval);
|
||||
|
@ -335,7 +335,7 @@ nsXPCWrappedJSClass::GetNamedPropertyAsVariant(XPCCallContext& ccx,
|
||||
|
||||
RootedId id(cx);
|
||||
nsresult rv = NS_OK;
|
||||
if (!JS_ValueToId(cx, value, id.address()) ||
|
||||
if (!JS_ValueToId(cx, value, &id) ||
|
||||
!GetNamedPropertyAsVariantRaw(ccx, aJSObj, id, aResult, &rv)) {
|
||||
if (NS_FAILED(rv))
|
||||
return rv;
|
||||
@ -378,7 +378,7 @@ nsXPCWrappedJSClass::BuildPropertyEnumerator(XPCCallContext& ccx,
|
||||
}
|
||||
|
||||
RootedValue jsvalName(cx);
|
||||
if (!JS_IdToValue(cx, idName, jsvalName.address()))
|
||||
if (!JS_IdToValue(cx, idName, &jsvalName))
|
||||
return NS_ERROR_FAILURE;
|
||||
|
||||
JSString* name = ToString(cx, jsvalName);
|
||||
|
@ -3818,8 +3818,9 @@ ContainerState::SetupMaskLayer(Layer *aLayer, const DisplayItemClip& aClip,
|
||||
nsRefPtr<Image> image = container->CreateImage(&format, 1);
|
||||
NS_ASSERTION(image, "Could not create image container for mask layer.");
|
||||
CairoImage::Data data;
|
||||
data.mSurface = surface;
|
||||
data.mDeprecatedSurface = surface;
|
||||
data.mSize = surfaceSizeInt;
|
||||
data.mSourceSurface = gfxPlatform::GetPlatform()->GetSourceSurfaceForSurface(nullptr, surface);
|
||||
static_cast<CairoImage*>(image.get())->SetData(data);
|
||||
container->SetCurrentImageInTransaction(image);
|
||||
|
||||
|
@ -623,7 +623,11 @@ RestyleManager::ProcessRestyledFrames(nsStyleChangeList& aChangeList)
|
||||
|
||||
if ((hint & nsChangeHint_AddOrRemoveTransform) && frame &&
|
||||
!(hint & nsChangeHint_ReconstructFrame)) {
|
||||
if (NeedToReframeForAddingOrRemovingTransform(frame)) {
|
||||
if (NeedToReframeForAddingOrRemovingTransform(frame) ||
|
||||
frame->GetType() == nsGkAtoms::fieldSetFrame ||
|
||||
frame->GetContentInsertionFrame() != frame) {
|
||||
// The frame has positioned children that need to be reparented, or
|
||||
// it can't easily be converted to/from being an abs-pos container correctly.
|
||||
NS_UpdateHint(hint, nsChangeHint_ReconstructFrame);
|
||||
} else {
|
||||
for (nsIFrame *cont = frame; cont;
|
||||
|
@ -68,6 +68,7 @@
|
||||
#include "nsPageContentFrame.h"
|
||||
#include "RestyleManager.h"
|
||||
#include "StickyScrollContainer.h"
|
||||
#include "nsFieldSetFrame.h"
|
||||
|
||||
#ifdef MOZ_XUL
|
||||
#include "nsIRootBox.h"
|
||||
@ -5650,21 +5651,32 @@ nsCSSFrameConstructor::GetAbsoluteContainingBlock(nsIFrame* aFrame,
|
||||
(aType == FIXED_POS && !frame->StyleDisplay()->HasTransform(frame))) {
|
||||
continue;
|
||||
}
|
||||
nsIFrame* absPosCBCandidate = nullptr;
|
||||
if (frame->GetType() == nsGkAtoms::scrollFrame) {
|
||||
nsIScrollableFrame* scrollFrame = do_QueryFrame(frame);
|
||||
absPosCBCandidate = scrollFrame->GetScrolledFrame();
|
||||
} else {
|
||||
// Only first continuations can be containing blocks.
|
||||
absPosCBCandidate = frame->FirstContinuation();
|
||||
nsIFrame* absPosCBCandidate = frame;
|
||||
nsIAtom* type = absPosCBCandidate->GetType();
|
||||
if (type == nsGkAtoms::fieldSetFrame) {
|
||||
absPosCBCandidate = static_cast<nsFieldSetFrame*>(absPosCBCandidate)->GetInner();
|
||||
if (!absPosCBCandidate) {
|
||||
continue;
|
||||
}
|
||||
type = absPosCBCandidate->GetType();
|
||||
}
|
||||
if (type == nsGkAtoms::scrollFrame) {
|
||||
nsIScrollableFrame* scrollFrame = do_QueryFrame(absPosCBCandidate);
|
||||
absPosCBCandidate = scrollFrame->GetScrolledFrame();
|
||||
if (!absPosCBCandidate) {
|
||||
continue;
|
||||
}
|
||||
type = absPosCBCandidate->GetType();
|
||||
}
|
||||
// Only first continuations can be containing blocks.
|
||||
absPosCBCandidate = absPosCBCandidate->FirstContinuation();
|
||||
// Is the frame really an absolute container?
|
||||
if (!absPosCBCandidate || !absPosCBCandidate->IsAbsoluteContainer()) {
|
||||
if (!absPosCBCandidate->IsAbsoluteContainer()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// For tables, skip the inner frame and consider the outer table frame.
|
||||
if (absPosCBCandidate->GetType() == nsGkAtoms::tableFrame) {
|
||||
if (type == nsGkAtoms::tableFrame) {
|
||||
continue;
|
||||
}
|
||||
// For outer table frames, we can just return absPosCBCandidate.
|
||||
|
@ -1735,6 +1735,12 @@ nsCSSRendering::DetermineBackgroundColor(nsPresContext* aPresContext,
|
||||
bool& aDrawBackgroundImage,
|
||||
bool& aDrawBackgroundColor)
|
||||
{
|
||||
if (aFrame->IsThemed()) {
|
||||
aDrawBackgroundColor = false;
|
||||
aDrawBackgroundImage = false;
|
||||
return NS_RGBA(0,0,0,0);
|
||||
}
|
||||
|
||||
aDrawBackgroundImage = true;
|
||||
aDrawBackgroundColor = true;
|
||||
|
||||
|
@ -1055,7 +1055,8 @@ nsPresContext::Init(nsDeviceContext* aDeviceContext)
|
||||
|
||||
// Initialise refresh tick counters for OMTA
|
||||
mLastStyleUpdateForAllAnimations =
|
||||
mLastUpdateThrottledStyle = mRefreshDriver->MostRecentRefresh();
|
||||
mLastUpdateThrottledAnimationStyle =
|
||||
mLastUpdateThrottledTransitionStyle = mRefreshDriver->MostRecentRefresh();
|
||||
|
||||
mLangService = do_GetService(NS_LANGUAGEATOMSERVICE_CONTRACTID);
|
||||
|
||||
@ -1579,15 +1580,29 @@ nsPresContext::GetDocShell() const
|
||||
}
|
||||
|
||||
bool
|
||||
nsPresContext::ThrottledStyleIsUpToDate() const
|
||||
nsPresContext::ThrottledTransitionStyleIsUpToDate() const
|
||||
{
|
||||
return mLastUpdateThrottledStyle == mRefreshDriver->MostRecentRefresh();
|
||||
return
|
||||
mLastUpdateThrottledTransitionStyle == mRefreshDriver->MostRecentRefresh();
|
||||
}
|
||||
|
||||
void
|
||||
nsPresContext::TickLastUpdateThrottledStyle()
|
||||
nsPresContext::TickLastUpdateThrottledTransitionStyle()
|
||||
{
|
||||
mLastUpdateThrottledStyle = mRefreshDriver->MostRecentRefresh();
|
||||
mLastUpdateThrottledTransitionStyle = mRefreshDriver->MostRecentRefresh();
|
||||
}
|
||||
|
||||
bool
|
||||
nsPresContext::ThrottledAnimationStyleIsUpToDate() const
|
||||
{
|
||||
return
|
||||
mLastUpdateThrottledAnimationStyle == mRefreshDriver->MostRecentRefresh();
|
||||
}
|
||||
|
||||
void
|
||||
nsPresContext::TickLastUpdateThrottledAnimationStyle()
|
||||
{
|
||||
mLastUpdateThrottledAnimationStyle = mRefreshDriver->MostRecentRefresh();
|
||||
}
|
||||
|
||||
bool
|
||||
|
@ -664,8 +664,10 @@ public:
|
||||
/**
|
||||
* Getter and setter for OMTA time counters
|
||||
*/
|
||||
bool ThrottledStyleIsUpToDate() const;
|
||||
void TickLastUpdateThrottledStyle();
|
||||
bool ThrottledTransitionStyleIsUpToDate() const;
|
||||
void TickLastUpdateThrottledTransitionStyle();
|
||||
bool ThrottledAnimationStyleIsUpToDate() const;
|
||||
void TickLastUpdateThrottledAnimationStyle();
|
||||
bool StyleUpdateForAllAnimationsIsUpToDate();
|
||||
void TickLastStyleUpdateForAllAnimations();
|
||||
|
||||
@ -1240,8 +1242,10 @@ protected:
|
||||
|
||||
mozilla::TimeStamp mReflowStartTime;
|
||||
|
||||
// last time animations/transition styles were flushed to their primary frames
|
||||
mozilla::TimeStamp mLastUpdateThrottledStyle;
|
||||
// last time animations styles were flushed to their primary frames
|
||||
mozilla::TimeStamp mLastUpdateThrottledAnimationStyle;
|
||||
// last time transition styles were flushed to their primary frames
|
||||
mozilla::TimeStamp mLastUpdateThrottledTransitionStyle;
|
||||
// last time we did a full style flush
|
||||
mozilla::TimeStamp mLastStyleUpdateForAllAnimations;
|
||||
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user