Unreviewed, rolling out r245068.
[WebKit.git] / Source / WebCore / bindings / js / JSWindowProxy.cpp
index 9cf5b59..bf0e225 100644 (file)
@@ -43,6 +43,8 @@
 
 namespace WebCore {
 
+using namespace JSC;
+
 const ClassInfo JSWindowProxy::s_info = { "JSWindowProxy", &Base::s_info, nullptr, nullptr, CREATE_METHOD_TABLE(JSWindowProxy) };
 
 inline JSWindowProxy::JSWindowProxy(VM& vm, Structure& structure, DOMWrapperWorld& world)
@@ -58,10 +60,10 @@ void JSWindowProxy::finishCreation(VM& vm, AbstractDOMWindow& window)
     setWindow(window);
 }
 
-JSWindowProxy& JSWindowProxy::create(JSC::VM& vm, AbstractDOMWindow& window, DOMWrapperWorld& world)
+JSWindowProxy& JSWindowProxy::create(VM& vm, AbstractDOMWindow& window, DOMWrapperWorld& world)
 {
-    auto& structure = *JSC::Structure::create(vm, 0, jsNull(), JSC::TypeInfo(JSC::PureForwardingProxyType, StructureFlags), info());
-    auto& proxy = *new (NotNull, JSC::allocateCell<JSWindowProxy>(vm.heap)) JSWindowProxy(vm, structure, world);
+    auto& structure = *Structure::create(vm, 0, jsNull(), TypeInfo(PureForwardingProxyType, StructureFlags), info());
+    auto& proxy = *new (NotNull, allocateCell<JSWindowProxy>(vm.heap)) JSWindowProxy(vm, structure, world);
     proxy.finishCreation(vm, window);
     return proxy;
 }
@@ -75,7 +77,7 @@ void JSWindowProxy::setWindow(VM& vm, JSDOMGlobalObject& window)
 {
     ASSERT(window.classInfo() == JSDOMWindow::info() || window.classInfo() == JSRemoteDOMWindow::info());
     setTarget(vm, &window);
-    structure()->setGlobalObject(vm, &window);
+    structure(vm)->setGlobalObject(vm, &window);
     GCController::singleton().garbageCollectSoon();
 }
 
@@ -105,11 +107,11 @@ void JSWindowProxy::setWindow(AbstractDOMWindow& domWindow)
         window = JSDOMWindow::create(vm, &windowStructure, downcast<DOMWindow>(domWindow), this);
     }
 
-    prototype->structure()->setGlobalObject(vm, window);
+    prototype->structure(vm)->setGlobalObject(vm, window);
 
     auto& propertiesStructure = *JSDOMWindowProperties::createStructure(vm, window, JSEventTarget::prototype(vm, *window));
     auto& properties = *JSDOMWindowProperties::create(&propertiesStructure, *window);
-    prototype->structure()->setPrototypeWithoutTransition(vm, &properties);
+    prototype->structure(vm)->setPrototypeWithoutTransition(vm, &properties);
 
     setWindow(vm, *window);
 
@@ -117,6 +119,12 @@ void JSWindowProxy::setWindow(AbstractDOMWindow& domWindow)
     ASSERT(prototype->globalObject() == window);
 }
 
+WindowProxy* JSWindowProxy::windowProxy() const
+{
+    auto& window = wrapped();
+    return window.frame() ? &window.frame()->windowProxy() : nullptr;
+}
+
 void JSWindowProxy::attachDebugger(JSC::Debugger* debugger)
 {
     auto* globalObject = window();
@@ -136,20 +144,25 @@ AbstractDOMWindow& JSWindowProxy::wrapped() const
     return jsCast<JSDOMWindowBase*>(window)->wrapped();
 }
 
-AbstractDOMWindow* JSWindowProxy::toWrapped(VM& vm, JSObject* value)
+JSValue toJS(ExecState* state, WindowProxy& windowProxy)
 {
-    auto* wrapper = jsDynamicCast<JSWindowProxy*>(vm, value);
-    return wrapper ? &wrapper->wrapped() : nullptr;
+    auto* jsWindowProxy = windowProxy.jsWindowProxy(currentWorld(*state));
+    return jsWindowProxy ? JSValue(jsWindowProxy) : jsNull();
 }
 
-JSValue toJS(ExecState* state, WindowProxy& windowProxy)
+JSWindowProxy* toJSWindowProxy(WindowProxy& windowProxy, DOMWrapperWorld& world)
 {
-    return &windowProxy.jsWindowProxy(currentWorld(*state));
+    return windowProxy.jsWindowProxy(world);
 }
 
-JSWindowProxy& toJSWindowProxy(WindowProxy& windowProxy, DOMWrapperWorld& world)
+WindowProxy* JSWindowProxy::toWrapped(VM& vm, JSValue value)
 {
-    return windowProxy.jsWindowProxy(world);
+    if (!value.isObject())
+        return nullptr;
+    JSObject* object = asObject(value);
+    if (object->inherits<JSWindowProxy>(vm))
+        return jsCast<JSWindowProxy*>(object)->windowProxy();
+    return nullptr;
 }
 
 } // namespace WebCore