зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1189822 part 1. Switch DOMProxyHandler::EnsureExpandoObject to using normal wrapper preservation instead of RegisterDOMExpandoObject. r=peterv
This commit is contained in:
Родитель
519ddbd6c7
Коммит
17e91105ca
|
@ -76,17 +76,9 @@ DOMProxyHandler::ClearExternalRefsForWrapperRelease(JSObject* obj)
|
|||
{
|
||||
MOZ_ASSERT(IsDOMProxy(obj), "expected a DOM proxy object");
|
||||
JS::Value v = js::GetProxyPrivate(obj);
|
||||
if (v.isUndefined()) {
|
||||
// No expando.
|
||||
return;
|
||||
}
|
||||
|
||||
// See EnsureExpandoObject for the work we're trying to undo here.
|
||||
|
||||
if (v.isObject()) {
|
||||
// Drop us from the DOM expando hashtable. Don't worry about clearing our
|
||||
// slot reference to the expando; we're about to die anyway.
|
||||
xpc::ObjectScope(obj)->RemoveDOMExpandoObject(obj);
|
||||
if (v.isUndefined() || v.isObject()) {
|
||||
// No expando, or an expando that we reference from our slot anyway, so
|
||||
// don't have to clear state for.
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -109,7 +101,6 @@ DOMProxyHandler::GetAndClearExpandoObject(JSObject* obj)
|
|||
|
||||
if (v.isObject()) {
|
||||
js::SetProxyPrivate(obj, UndefinedValue());
|
||||
xpc::ObjectScope(obj)->RemoveDOMExpandoObject(obj);
|
||||
} else {
|
||||
js::ExpandoAndGeneration* expandoAndGeneration =
|
||||
static_cast<js::ExpandoAndGeneration*>(v.toPrivate());
|
||||
|
@ -166,18 +157,13 @@ DOMProxyHandler::EnsureExpandoObject(JSContext* cx, JS::Handle<JSObject*> obj)
|
|||
nsISupports* native = UnwrapDOMObject<nsISupports>(obj);
|
||||
nsWrapperCache* cache;
|
||||
CallQueryInterface(native, &cache);
|
||||
if (expandoAndGeneration) {
|
||||
cache->PreserveWrapper(native);
|
||||
expandoAndGeneration->expando.setObject(*expando);
|
||||
cache->PreserveWrapper(native);
|
||||
|
||||
if (expandoAndGeneration) {
|
||||
expandoAndGeneration->expando.setObject(*expando);
|
||||
return expando;
|
||||
}
|
||||
|
||||
if (!xpc::ObjectScope(obj)->RegisterDOMExpandoObject(obj)) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
cache->SetPreservingWrapper(true);
|
||||
js::SetProxyPrivate(obj, ObjectValue(*expando));
|
||||
|
||||
return expando;
|
||||
|
|
Загрузка…
Ссылка в новой задаче