author | Boris Zbarsky <bzbarsky@mit.edu> |
Thu, 26 Feb 2015 15:58:59 -0500 | |
changeset 231124 | 2e9b1150861bab37b5120e712fea7e872f4d8bd8 |
parent 231123 | 84c7cadc7dd22d536019a6b8b5eec86b1f1c4c84 |
child 231125 | eafeefc2a038a0eb02e9c6171a44b2754cdadde0 |
push id | 28344 |
push user | ryanvm@gmail.com |
push date | Fri, 27 Feb 2015 18:20:08 +0000 |
treeherder | mozilla-central@9dd9d1e5b43c [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | waldo |
bugs | 1136925 |
milestone | 39.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/dom/base/WindowNamedPropertiesHandler.cpp +++ b/dom/base/WindowNamedPropertiesHandler.cpp @@ -275,14 +275,13 @@ WindowNamedPropertiesHandler::Create(JSC // chain, it needs a singleton type to avoid polluting type information // for properties on the window. JS::Rooted<JSObject*> gsp(aCx); js::ProxyOptions options; options.setSingleton(true); options.setClass(&WindowNamedPropertiesClass.mBase); return js::NewProxyObject(aCx, WindowNamedPropertiesHandler::getInstance(), JS::NullHandleValue, aProto, - js::GetGlobalForObjectCrossCompartment(aProto), options); } } // namespace dom } // namespace mozilla
--- a/dom/bindings/BindingUtils.h +++ b/dom/bindings/BindingUtils.h @@ -2797,17 +2797,17 @@ public: const DOMProxyHandler* aHandler, JS::Handle<JSObject*> aProto, T* aNative, JS::MutableHandle<JSObject*> aReflector) { js::ProxyOptions options; options.setClass(aClass); JS::Rooted<JS::Value> proxyPrivateVal(aCx, JS::PrivateValue(aNative)); aReflector.set(js::NewProxyObject(aCx, aHandler, proxyPrivateVal, aProto, - /* parent= */nullptr, options)); + options)); if (aReflector) { mNative = aNative; mReflector = aReflector; } } void CreateObject(JSContext* aCx, const JSClass* aClass,
--- a/js/ipc/WrapperOwner.cpp +++ b/js/ipc/WrapperOwner.cpp @@ -1015,17 +1015,16 @@ WrapperOwner::fromRemoteObjectVariant(JS RootedValue v(cx, UndefinedValue()); // We need to setLazyProto for the getPrototypeOf hook. ProxyOptions options; options.setLazyProto(true); obj = NewProxyObject(cx, &CPOWProxyHandler::singleton, v, nullptr, - junkScope, options); if (!obj) return nullptr; if (!cpows_.add(objId, obj)) return nullptr; // Incref once we know the decref will be called.
--- a/js/public/Proxy.h +++ b/js/public/Proxy.h @@ -576,17 +576,17 @@ class MOZ_STACK_CLASS ProxyOptions { private: bool singleton_; bool lazyProto_; const Class *clasp_; }; JS_FRIEND_API(JSObject *) NewProxyObject(JSContext *cx, const BaseProxyHandler *handler, HandleValue priv, - JSObject *proto, JSObject *parent, const ProxyOptions &options = ProxyOptions()); + JSObject *proto, const ProxyOptions &options = ProxyOptions()); JSObject * RenewProxyObject(JSContext *cx, JSObject *obj, BaseProxyHandler *handler, Value priv); class JS_FRIEND_API(AutoEnterPolicy) { public: typedef BaseProxyHandler::Action Action;
--- a/js/src/jsapi-tests/testSetPropertyIgnoringNamedGetter.cpp +++ b/js/src/jsapi-tests/testSetPropertyIgnoringNamedGetter.cpp @@ -67,17 +67,17 @@ BEGIN_TEST(testSetPropertyIgnoringNamedG { RootedValue protov(cx); EVAL("Object.prototype", &protov); RootedValue targetv(cx); EVAL("({})", &targetv); RootedObject proxyObj(cx, NewProxyObject(cx, &customProxyHandler, targetv, - &protov.toObject(), global, ProxyOptions())); + &protov.toObject(), ProxyOptions())); CHECK(proxyObj); CHECK(JS_DefineProperty(cx, global, "target", targetv, 0)); CHECK(JS_DefineProperty(cx, global, "proxy", proxyObj, 0)); RootedValue v(cx); EVAL("Object.getOwnPropertyDescriptor(proxy, 'phantom').value", &v); CHECK_SAME(v, Int32Value(42));
--- a/js/src/proxy/Proxy.cpp +++ b/js/src/proxy/Proxy.cpp @@ -723,24 +723,24 @@ js::proxy_GetElements(JSContext *cx, Han const Class js::ProxyObject::class_ = PROXY_CLASS_DEF("Proxy", JSCLASS_HAS_CACHED_PROTO(JSProto_Proxy)); const Class* const js::ProxyClassPtr = &js::ProxyObject::class_; JS_FRIEND_API(JSObject *) js::NewProxyObject(JSContext *cx, const BaseProxyHandler *handler, HandleValue priv, JSObject *proto_, - JSObject *parent_, const ProxyOptions &options) + const ProxyOptions &options) { if (options.lazyProto()) { MOZ_ASSERT(!proto_); proto_ = TaggedProto::LazyProto; } - return ProxyObject::New(cx, handler, priv, TaggedProto(proto_), parent_, + return ProxyObject::New(cx, handler, priv, TaggedProto(proto_), nullptr, options); } void ProxyObject::renew(JSContext *cx, const BaseProxyHandler *handler, Value priv) { MOZ_ASSERT_IF(IsCrossCompartmentWrapper(this), IsDeadProxyObject(this)); MOZ_ASSERT(getParent() == cx->global());
--- a/js/src/proxy/ScriptedDirectProxyHandler.cpp +++ b/js/src/proxy/ScriptedDirectProxyHandler.cpp @@ -1201,17 +1201,17 @@ NewScriptedProxy(JSContext *cx, CallArgs if (!target) return false; RootedObject handler(cx, NonNullObject(cx, args[1])); if (!handler) return false; RootedValue priv(cx, ObjectValue(*target)); JSObject *proxy_ = NewProxyObject(cx, &ScriptedDirectProxyHandler::singleton, - priv, TaggedProto::LazyProto, cx->global()); + priv, TaggedProto::LazyProto); if (!proxy_) return false; Rooted<ProxyObject*> proxy(cx, &proxy_->as<ProxyObject>()); proxy->setExtra(ScriptedDirectProxyHandler::HANDLER_EXTRA, ObjectValue(*handler)); // Assign [[Call]] and [[Construct]] uint32_t callable = target->isCallable() ? ScriptedDirectProxyHandler::IS_CALLABLE : 0; uint32_t constructor = target->isConstructor() ? ScriptedDirectProxyHandler::IS_CONSTRUCTOR : 0;
--- a/js/src/proxy/ScriptedIndirectProxyHandler.cpp +++ b/js/src/proxy/ScriptedIndirectProxyHandler.cpp @@ -401,29 +401,26 @@ js::proxy_create(JSContext *cx, unsigned if (args.length() < 1) { JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED, "create", "0", "s"); return false; } JSObject *handler = NonNullObject(cx, args[0]); if (!handler) return false; - JSObject *proto, *parent = nullptr; + JSObject *proto; if (args.get(1).isObject()) { proto = &args[1].toObject(); - parent = proto->getParent(); } else { MOZ_ASSERT(IsFunctionObject(&args.callee())); proto = nullptr; } - if (!parent) - parent = args.callee().getParent(); RootedValue priv(cx, ObjectValue(*handler)); JSObject *proxy = NewProxyObject(cx, &ScriptedIndirectProxyHandler::singleton, - priv, proto, parent); + priv, proto); if (!proxy) return false; args.rval().setObject(*proxy); return true; } bool @@ -433,22 +430,19 @@ js::proxy_createFunction(JSContext *cx, if (args.length() < 2) { JS_ReportErrorNumber(cx, js_GetErrorMessage, nullptr, JSMSG_MORE_ARGS_NEEDED, "createFunction", "1", ""); return false; } RootedObject handler(cx, NonNullObject(cx, args[0])); if (!handler) return false; - RootedObject proto(cx), parent(cx); - parent = args.callee().getParent(); - proto = parent->global().getOrCreateFunctionPrototype(cx); + RootedObject proto(cx, args.callee().global().getOrCreateFunctionPrototype(cx)); if (!proto) return false; - parent = proto->getParent(); RootedObject call(cx, ValueToCallable(cx, args[1], args.length() - 2)); if (!call) return false; RootedObject construct(cx, nullptr); if (args.length() > 2) { construct = ValueToCallable(cx, args[2], args.length() - 3); if (!construct) @@ -464,16 +458,16 @@ js::proxy_createFunction(JSContext *cx, if (!ccHolder) return false; ccHolder->as<NativeObject>().setReservedSlot(0, ObjectValue(*call)); ccHolder->as<NativeObject>().setReservedSlot(1, ObjectValue(*construct)); RootedValue priv(cx, ObjectValue(*handler)); JSObject *proxy = NewProxyObject(cx, &CallableScriptedIndirectProxyHandler::singleton, - priv, proto, parent); + priv, proto); if (!proxy) return false; proxy->as<ProxyObject>().setExtra(0, ObjectValue(*ccHolder)); args.rval().setObject(*proxy); return true; }
--- a/js/src/proxy/Wrapper.cpp +++ b/js/src/proxy/Wrapper.cpp @@ -32,17 +32,17 @@ Wrapper::defaultValue(JSContext *cx, Han return ToPrimitive(cx, hint, vp); } JSObject * Wrapper::New(JSContext *cx, JSObject *obj, const Wrapper *handler, const WrapperOptions &options) { RootedValue priv(cx, ObjectValue(*obj)); - return NewProxyObject(cx, handler, priv, options.proto(), nullptr, options); + return NewProxyObject(cx, handler, priv, options.proto(), options); } JSObject * Wrapper::Renew(JSContext *cx, JSObject *existing, JSObject *obj, const Wrapper *handler) { existing->as<ProxyObject>().renew(cx, handler, ObjectValue(*obj)); return existing; }
--- a/js/src/vm/ScopeObject.cpp +++ b/js/src/vm/ScopeObject.cpp @@ -1731,17 +1731,17 @@ const char DebugScopeProxy::family = 0; const DebugScopeProxy DebugScopeProxy::singleton; /* static */ DebugScopeObject * DebugScopeObject::create(JSContext *cx, ScopeObject &scope, HandleObject enclosing) { MOZ_ASSERT(scope.compartment() == cx->compartment()); RootedValue priv(cx, ObjectValue(scope)); JSObject *obj = NewProxyObject(cx, &DebugScopeProxy::singleton, priv, - nullptr /* proto */, &scope.global()); + nullptr /* proto */); if (!obj) return nullptr; MOZ_ASSERT(!enclosing->is<ScopeObject>()); DebugScopeObject *debugScope = &obj->as<DebugScopeObject>(); debugScope->setExtra(ENCLOSING_EXTRA, ObjectValue(*enclosing)); debugScope->setExtra(SNAPSHOT_EXTRA, NullValue());
--- a/js/xpconnect/src/Sandbox.cpp +++ b/js/xpconnect/src/Sandbox.cpp @@ -642,17 +642,17 @@ WrapCallable(JSContext *cx, HandleObject // callable as the private. We put the given sandboxProtoProxy in // an extra slot,, and our call() hook depends on that. MOZ_ASSERT(js::IsProxy(sandboxProtoProxy) && js::GetProxyHandler(sandboxProtoProxy) == &xpc::sandboxProxyHandler); RootedValue priv(cx, ObjectValue(*callable)); JSObject *obj = js::NewProxyObject(cx, &xpc::sandboxCallableProxyHandler, - priv, nullptr, nullptr); + priv, nullptr); if (obj) { js::SetProxyExtra(obj, SandboxCallableProxyHandler::SandboxProxySlot, ObjectValue(*sandboxProtoProxy)); } return obj; } @@ -967,17 +967,17 @@ xpc::CreateSandboxObject(JSContext *cx, JSObject *unwrappedProto = js::UncheckedUnwrap(options.proto, false); const js::Class *unwrappedClass = js::GetObjectClass(unwrappedProto); if (IS_WN_CLASS(unwrappedClass) || mozilla::dom::IsDOMClass(Jsvalify(unwrappedClass))) { // Wrap it up in a proxy that will do the right thing in terms // of this-binding for methods. RootedValue priv(cx, ObjectValue(*options.proto)); options.proto = js::NewProxyObject(cx, &xpc::sandboxProxyHandler, - priv, nullptr, nullptr); + priv, nullptr); if (!options.proto) return NS_ERROR_OUT_OF_MEMORY; } ok = JS_SetPrototype(cx, sandbox, options.proto); if (!ok) return NS_ERROR_XPC_UNEXPECTED; }