LayoutTests:
authorweinig <weinig@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jul 2007 05:10:24 +0000 (05:10 +0000)
committerweinig <weinig@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Jul 2007 05:10:24 +0000 (05:10 +0000)
        Reviewed by Oliver.

        * fast/dom/Window/get-set-properties-expected.txt: Added.
        * fast/dom/Window/get-set-properties.html: Added.

WebCore:

        Reviewed by Oliver.

        Move more attributes from the pure JS bindings in KJS::Window
        to the implementation in DOMWindow and autogenerate the new bindings

        Test: fast/dom/Window/get-set-properties.html

        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Change to use propHashTable in
        JSDOMWindow instead of KJS::Window
        * bindings/js/kjs_window.cpp:
        (KJS::Window::getValueProperty):
        (KJS::Window::put):
        * bindings/js/kjs_window.h:
        (KJS::Window::):
        * bindings/scripts/CodeGeneratorJS.pm: Cleanup getValueProperty and put generation
        to reduce code duplication.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::closed):
        (WebCore::DOMWindow::length):
        (WebCore::DOMWindow::name):
        (WebCore::DOMWindow::setName):
        (WebCore::DOMWindow::status):
        (WebCore::DOMWindow::setStatus):
        (WebCore::DOMWindow::defaultStatus):
        (WebCore::DOMWindow::setDefaultStatus):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::defaultstatus):
        (WebCore::DOMWindow::setDefaultstatus):
        * page/DOMWindow.idl:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@24182 268f45cc-cd09-0410-ab3c-d52691b4dbfc

LayoutTests/ChangeLog
LayoutTests/fast/dom/Window/get-set-properties-expected.txt [new file with mode: 0644]
LayoutTests/fast/dom/Window/get-set-properties.html [new file with mode: 0644]
WebCore/ChangeLog
WebCore/bindings/js/JSDOMWindowCustom.cpp
WebCore/bindings/js/kjs_window.cpp
WebCore/bindings/js/kjs_window.h
WebCore/bindings/scripts/CodeGeneratorJS.pm
WebCore/page/DOMWindow.cpp
WebCore/page/DOMWindow.h
WebCore/page/DOMWindow.idl

index 0c7898168e577952597efcb283abaea48b00d038..6630ac6925b852627de913aeded5f90a7a9e774c 100644 (file)
@@ -1,3 +1,10 @@
+2007-07-10  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver.
+
+        * fast/dom/Window/get-set-properties-expected.txt: Added.
+        * fast/dom/Window/get-set-properties.html: Added.
+
 2007-07-10  Sam Weinig  <sam@webkit.org>
 
         Reviewed by Geoff.
diff --git a/LayoutTests/fast/dom/Window/get-set-properties-expected.txt b/LayoutTests/fast/dom/Window/get-set-properties-expected.txt
new file mode 100644 (file)
index 0000000..07a57f7
--- /dev/null
@@ -0,0 +1,390 @@
+Tests getting and setting window properties and functions.
+
+
+----- tests for getting/setting read-write properties -----
+
+PASS: canGet('addEventListener') should be 'true' and is.
+PASS: canSet('addEventListener') should be 'true' and is.
+PASS: canGet('alert') should be 'true' and is.
+PASS: canSet('alert') should be 'true' and is.
+PASS: canGet('atob') should be 'true' and is.
+PASS: canSet('atob') should be 'true' and is.
+PASS: canGet('Attr') should be 'true' and is.
+PASS: canSet('Attr') should be 'true' and is.
+PASS: canGet('btoa') should be 'true' and is.
+PASS: canSet('btoa') should be 'true' and is.
+PASS: canGet('captureEvents') should be 'true' and is.
+PASS: canSet('captureEvents') should be 'true' and is.
+PASS: canGet('CDATASection') should be 'true' and is.
+PASS: canSet('CDATASection') should be 'true' and is.
+PASS: canGet('CharacterData') should be 'true' and is.
+PASS: canSet('CharacterData') should be 'true' and is.
+PASS: canGet('clearInterval') should be 'true' and is.
+PASS: canSet('clearInterval') should be 'true' and is.
+PASS: canGet('clearTimeout') should be 'true' and is.
+PASS: canSet('clearTimeout') should be 'true' and is.
+PASS: canGet('Comment') should be 'true' and is.
+PASS: canSet('Comment') should be 'true' and is.
+PASS: canGet('console') should be 'true' and is.
+PASS: canSet('console') should be 'true' and is.
+PASS: canGet('CSSPrimitiveValue') should be 'true' and is.
+PASS: canSet('CSSPrimitiveValue') should be 'true' and is.
+PASS: canGet('CSSRule') should be 'true' and is.
+PASS: canSet('CSSRule') should be 'true' and is.
+PASS: canGet('CSSStyleDeclaration') should be 'true' and is.
+PASS: canSet('CSSStyleDeclaration') should be 'true' and is.
+PASS: canGet('CSSValue') should be 'true' and is.
+PASS: canSet('CSSValue') should be 'true' and is.
+PASS: canGet('Document') should be 'true' and is.
+PASS: canSet('Document') should be 'true' and is.
+PASS: canGet('DocumentFragment') should be 'true' and is.
+PASS: canSet('DocumentFragment') should be 'true' and is.
+PASS: canGet('DocumentType') should be 'true' and is.
+PASS: canSet('DocumentType') should be 'true' and is.
+PASS: canGet('DOMException') should be 'true' and is.
+PASS: canSet('DOMException') should be 'true' and is.
+PASS: canGet('DOMImplementation') should be 'true' and is.
+PASS: canSet('DOMImplementation') should be 'true' and is.
+PASS: canGet('DOMParser') should be 'true' and is.
+PASS: canSet('DOMParser') should be 'true' and is.
+PASS: canGet('Element') should be 'true' and is.
+PASS: canSet('Element') should be 'true' and is.
+PASS: canGet('Entity') should be 'true' and is.
+PASS: canSet('Entity') should be 'true' and is.
+PASS: canGet('EntityReference') should be 'true' and is.
+PASS: canSet('EntityReference') should be 'true' and is.
+PASS: canGet('EvalError') should be 'true' and is.
+PASS: canSet('EvalError') should be 'true' and is.
+PASS: canGet('Event') should be 'true' and is.
+PASS: canSet('Event') should be 'true' and is.
+PASS: canGet('event') should be 'true' and is.
+PASS: canSet('event') should be 'true' and is.
+PASS: canGet('HTMLAnchorElement') should be 'true' and is.
+PASS: canSet('HTMLAnchorElement') should be 'true' and is.
+PASS: canGet('HTMLAppletElement') should be 'true' and is.
+PASS: canSet('HTMLAppletElement') should be 'true' and is.
+PASS: canGet('HTMLAreaElement') should be 'true' and is.
+PASS: canSet('HTMLAreaElement') should be 'true' and is.
+PASS: canGet('HTMLBaseElement') should be 'true' and is.
+PASS: canSet('HTMLBaseElement') should be 'true' and is.
+PASS: canGet('HTMLBaseFontElement') should be 'true' and is.
+PASS: canSet('HTMLBaseFontElement') should be 'true' and is.
+PASS: canGet('HTMLBodyElement') should be 'true' and is.
+PASS: canSet('HTMLBodyElement') should be 'true' and is.
+PASS: canGet('HTMLBRElement') should be 'true' and is.
+PASS: canSet('HTMLBRElement') should be 'true' and is.
+PASS: canGet('HTMLButtonElement') should be 'true' and is.
+PASS: canSet('HTMLButtonElement') should be 'true' and is.
+PASS: canGet('HTMLCanvasElement') should be 'true' and is.
+PASS: canSet('HTMLCanvasElement') should be 'true' and is.
+PASS: canGet('HTMLDirectoryElement') should be 'true' and is.
+PASS: canSet('HTMLDirectoryElement') should be 'true' and is.
+PASS: canGet('HTMLDivElement') should be 'true' and is.
+PASS: canSet('HTMLDivElement') should be 'true' and is.
+PASS: canGet('HTMLDListElement') should be 'true' and is.
+PASS: canSet('HTMLDListElement') should be 'true' and is.
+PASS: canGet('HTMLDocument') should be 'true' and is.
+PASS: canSet('HTMLDocument') should be 'true' and is.
+PASS: canGet('HTMLElement') should be 'true' and is.
+PASS: canSet('HTMLElement') should be 'true' and is.
+PASS: canGet('HTMLFieldSetElement') should be 'true' and is.
+PASS: canSet('HTMLFieldSetElement') should be 'true' and is.
+PASS: canGet('HTMLFontElement') should be 'true' and is.
+PASS: canSet('HTMLFontElement') should be 'true' and is.
+PASS: canGet('HTMLFormElement') should be 'true' and is.
+PASS: canSet('HTMLFormElement') should be 'true' and is.
+PASS: canGet('HTMLFrameElement') should be 'true' and is.
+PASS: canSet('HTMLFrameElement') should be 'true' and is.
+PASS: canGet('HTMLFrameSetElement') should be 'true' and is.
+PASS: canSet('HTMLFrameSetElement') should be 'true' and is.
+PASS: canGet('HTMLHeadElement') should be 'true' and is.
+PASS: canSet('HTMLHeadElement') should be 'true' and is.
+PASS: canGet('HTMLHeadingElement') should be 'true' and is.
+PASS: canSet('HTMLHeadingElement') should be 'true' and is.
+PASS: canGet('HTMLHRElement') should be 'true' and is.
+PASS: canSet('HTMLHRElement') should be 'true' and is.
+PASS: canGet('HTMLHtmlElement') should be 'true' and is.
+PASS: canSet('HTMLHtmlElement') should be 'true' and is.
+PASS: canGet('HTMLIFrameElement') should be 'true' and is.
+PASS: canSet('HTMLIFrameElement') should be 'true' and is.
+PASS: canGet('HTMLImageElement') should be 'true' and is.
+PASS: canSet('HTMLImageElement') should be 'true' and is.
+PASS: canGet('HTMLInputElement') should be 'true' and is.
+PASS: canSet('HTMLInputElement') should be 'true' and is.
+PASS: canGet('HTMLIsIndexElement') should be 'true' and is.
+PASS: canSet('HTMLIsIndexElement') should be 'true' and is.
+PASS: canGet('HTMLLabelElement') should be 'true' and is.
+PASS: canSet('HTMLLabelElement') should be 'true' and is.
+PASS: canGet('HTMLLegendElement') should be 'true' and is.
+PASS: canSet('HTMLLegendElement') should be 'true' and is.
+PASS: canGet('HTMLLIElement') should be 'true' and is.
+PASS: canSet('HTMLLIElement') should be 'true' and is.
+PASS: canGet('HTMLLinkElement') should be 'true' and is.
+PASS: canSet('HTMLLinkElement') should be 'true' and is.
+PASS: canGet('HTMLMapElement') should be 'true' and is.
+PASS: canSet('HTMLMapElement') should be 'true' and is.
+PASS: canGet('HTMLMarqueeElement') should be 'true' and is.
+PASS: canSet('HTMLMarqueeElement') should be 'true' and is.
+PASS: canGet('HTMLMenuElement') should be 'true' and is.
+PASS: canSet('HTMLMenuElement') should be 'true' and is.
+PASS: canGet('HTMLMetaElement') should be 'true' and is.
+PASS: canSet('HTMLMetaElement') should be 'true' and is.
+PASS: canGet('HTMLModElement') should be 'true' and is.
+PASS: canSet('HTMLModElement') should be 'true' and is.
+PASS: canGet('HTMLOListElement') should be 'true' and is.
+PASS: canSet('HTMLOListElement') should be 'true' and is.
+PASS: canGet('HTMLOptGroupElement') should be 'true' and is.
+PASS: canSet('HTMLOptGroupElement') should be 'true' and is.
+PASS: canGet('HTMLOptionElement') should be 'true' and is.
+PASS: canSet('HTMLOptionElement') should be 'true' and is.
+PASS: canGet('HTMLParagraphElement') should be 'true' and is.
+PASS: canSet('HTMLParagraphElement') should be 'true' and is.
+PASS: canGet('HTMLParamElement') should be 'true' and is.
+PASS: canSet('HTMLParamElement') should be 'true' and is.
+PASS: canGet('HTMLPreElement') should be 'true' and is.
+PASS: canSet('HTMLPreElement') should be 'true' and is.
+PASS: canGet('HTMLQuoteElement') should be 'true' and is.
+PASS: canSet('HTMLQuoteElement') should be 'true' and is.
+PASS: canGet('HTMLScriptElement') should be 'true' and is.
+PASS: canSet('HTMLScriptElement') should be 'true' and is.
+PASS: canGet('HTMLSelectElement') should be 'true' and is.
+PASS: canSet('HTMLSelectElement') should be 'true' and is.
+PASS: canGet('HTMLStyleElement') should be 'true' and is.
+PASS: canSet('HTMLStyleElement') should be 'true' and is.
+PASS: canGet('HTMLTableCaptionElement') should be 'true' and is.
+PASS: canSet('HTMLTableCaptionElement') should be 'true' and is.
+PASS: canGet('HTMLTableCellElement') should be 'true' and is.
+PASS: canSet('HTMLTableCellElement') should be 'true' and is.
+PASS: canGet('HTMLTableColElement') should be 'true' and is.
+PASS: canSet('HTMLTableColElement') should be 'true' and is.
+PASS: canGet('HTMLTableElement') should be 'true' and is.
+PASS: canSet('HTMLTableElement') should be 'true' and is.
+PASS: canGet('HTMLTableRowElement') should be 'true' and is.
+PASS: canSet('HTMLTableRowElement') should be 'true' and is.
+PASS: canGet('HTMLTableSectionElement') should be 'true' and is.
+PASS: canSet('HTMLTableSectionElement') should be 'true' and is.
+PASS: canGet('HTMLTextAreaElement') should be 'true' and is.
+PASS: canSet('HTMLTextAreaElement') should be 'true' and is.
+PASS: canGet('HTMLTitleElement') should be 'true' and is.
+PASS: canSet('HTMLTitleElement') should be 'true' and is.
+PASS: canGet('HTMLUListElement') should be 'true' and is.
+PASS: canSet('HTMLUListElement') should be 'true' and is.
+PASS: canGet('Image') should be 'true' and is.
+PASS: canSet('Image') should be 'true' and is.
+PASS: canGet('MutationEvent') should be 'true' and is.
+PASS: canSet('MutationEvent') should be 'true' and is.
+PASS: canGet('Node') should be 'true' and is.
+PASS: canSet('Node') should be 'true' and is.
+PASS: canGet('NodeFilter') should be 'true' and is.
+PASS: canSet('NodeFilter') should be 'true' and is.
+PASS: canGet('Notation') should be 'true' and is.
+PASS: canSet('Notation') should be 'true' and is.
+PASS: canGet('Option') should be 'true' and is.
+PASS: canSet('Option') should be 'true' and is.
+PASS: canGet('ProcessingInstruction') should be 'true' and is.
+PASS: canSet('ProcessingInstruction') should be 'true' and is.
+PASS: canGet('Range') should be 'true' and is.
+PASS: canSet('Range') should be 'true' and is.
+PASS: canGet('RangeError') should be 'true' and is.
+PASS: canSet('RangeError') should be 'true' and is.
+PASS: canGet('RangeException') should be 'true' and is.
+PASS: canSet('RangeException') should be 'true' and is.
+PASS: canGet('ReferenceError') should be 'true' and is.
+PASS: canSet('ReferenceError') should be 'true' and is.
+PASS: canGet('SyntaxError') should be 'true' and is.
+PASS: canSet('SyntaxError') should be 'true' and is.
+PASS: canGet('Text') should be 'true' and is.
+PASS: canSet('Text') should be 'true' and is.
+PASS: canGet('TypeError') should be 'true' and is.
+PASS: canSet('TypeError') should be 'true' and is.
+PASS: canGet('URIError') should be 'true' and is.
+PASS: canSet('URIError') should be 'true' and is.
+PASS: canGet('XMLDocument') should be 'true' and is.
+PASS: canSet('XMLDocument') should be 'true' and is.
+PASS: canGet('XMLHttpRequest') should be 'true' and is.
+PASS: canSet('XMLHttpRequest') should be 'true' and is.
+PASS: canGet('XMLSerializer') should be 'true' and is.
+PASS: canSet('XMLSerializer') should be 'true' and is.
+PASS: canGet('XPathEvaluator') should be 'true' and is.
+PASS: canSet('XPathEvaluator') should be 'true' and is.
+PASS: canGet('XPathResult') should be 'true' and is.
+PASS: canSet('XPathResult') should be 'true' and is.
+PASS: canGet('XSLTProcessor') should be 'true' and is.
+PASS: canSet('XSLTProcessor') should be 'true' and is.
+
+----- tests for getting/setting readonly properties -----
+
+PASS: canGet('clientInformation') should be 'true' and is.
+PASS: canSet('clientInformation') should be 'false' and is.
+PASS: canGet('closed') should be 'true' and is.
+PASS: canSet('closed') should be 'false' and is.
+PASS: canGet('defaultStatus') should be 'true' and is.
+PASS: canSet('defaultStatus') should be 'false' and is.
+PASS: canGet('defaultstatus') should be 'true' and is.
+PASS: canSet('defaultstatus') should be 'false' and is.
+PASS: canGet('devicePixelRatio') should be 'true' and is.
+PASS: canSet('devicePixelRatio') should be 'false' and is.
+PASS: canGet('document') should be 'true' and is.
+PASS: canSet('document') should be 'false' and is.
+PASS: canGet('frames') should be 'true' and is.
+PASS: canSet('frames') should be 'false' and is.
+PASS: canGet('history') should be 'true' and is.
+PASS: canSet('history') should be 'false' and is.
+PASS: canGet('innerHeight') should be 'true' and is.
+PASS: canSet('innerHeight') should be 'false' and is.
+PASS: canGet('innerWidth') should be 'true' and is.
+PASS: canSet('innerWidth') should be 'false' and is.
+PASS: canGet('length') should be 'true' and is.
+PASS: canSet('length') should be 'false' and is.
+PASS: canGet('locationbar') should be 'true' and is.
+PASS: canSet('locationbar') should be 'false' and is.
+PASS: canGet('menubar') should be 'true' and is.
+PASS: canSet('menubar') should be 'false' and is.
+PASS: canGet('name') should be 'true' and is.
+PASS: canSet('name') should be 'false' and is.
+PASS: canGet('navigator') should be 'true' and is.
+PASS: canSet('navigator') should be 'false' and is.
+PASS: canGet('offscreenBuffering') should be 'true' and is.
+PASS: canSet('offscreenBuffering') should be 'false' and is.
+PASS: canGet('opener') should be 'true' and is.
+PASS: canSet('opener') should be 'false' and is.
+PASS: canGet('outerHeight') should be 'true' and is.
+PASS: canSet('outerHeight') should be 'false' and is.
+PASS: canGet('outerWidth') should be 'true' and is.
+PASS: canSet('outerWidth') should be 'false' and is.
+PASS: canGet('pageXOffset') should be 'true' and is.
+PASS: canSet('pageXOffset') should be 'false' and is.
+PASS: canGet('pageYOffset') should be 'true' and is.
+PASS: canSet('pageYOffset') should be 'false' and is.
+PASS: canGet('parent') should be 'true' and is.
+PASS: canSet('parent') should be 'false' and is.
+PASS: canGet('personalbar') should be 'true' and is.
+PASS: canSet('personalbar') should be 'false' and is.
+PASS: canGet('screen') should be 'true' and is.
+PASS: canSet('screen') should be 'false' and is.
+PASS: canGet('screenLeft') should be 'true' and is.
+PASS: canSet('screenLeft') should be 'false' and is.
+PASS: canGet('screenTop') should be 'true' and is.
+PASS: canSet('screenTop') should be 'false' and is.
+PASS: canGet('screenX') should be 'true' and is.
+PASS: canSet('screenX') should be 'false' and is.
+PASS: canGet('screenY') should be 'true' and is.
+PASS: canSet('screenY') should be 'false' and is.
+PASS: canGet('scrollbars') should be 'true' and is.
+PASS: canSet('scrollbars') should be 'false' and is.
+PASS: canGet('scrollX') should be 'true' and is.
+PASS: canSet('scrollX') should be 'false' and is.
+PASS: canGet('scrollY') should be 'true' and is.
+PASS: canSet('scrollY') should be 'false' and is.
+PASS: canGet('self') should be 'true' and is.
+PASS: canSet('self') should be 'false' and is.
+PASS: canGet('status') should be 'true' and is.
+PASS: canSet('status') should be 'false' and is.
+PASS: canGet('statusbar') should be 'true' and is.
+PASS: canSet('statusbar') should be 'false' and is.
+PASS: canGet('toolbar') should be 'true' and is.
+PASS: canSet('toolbar') should be 'false' and is.
+PASS: canGet('top') should be 'true' and is.
+PASS: canSet('top') should be 'false' and is.
+PASS: canGet('window') should be 'true' and is.
+PASS: canSet('window') should be 'false' and is.
+
+----- tests for getting/setting function -----
+
+PASS: canGet('blur') should be 'true' and is.
+PASS: canSet('blur') should be 'true' and is.
+PASS: canGet('close') should be 'true' and is.
+PASS: canSet('close') should be 'true' and is.
+PASS: canGet('confirm') should be 'true' and is.
+PASS: canSet('confirm') should be 'true' and is.
+PASS: canGet('find') should be 'true' and is.
+PASS: canSet('find') should be 'true' and is.
+PASS: canGet('focus') should be 'true' and is.
+PASS: canSet('focus') should be 'true' and is.
+PASS: canGet('getComputedStyle') should be 'true' and is.
+PASS: canSet('getComputedStyle') should be 'true' and is.
+PASS: canGet('getMatchedCSSRules') should be 'true' and is.
+PASS: canSet('getMatchedCSSRules') should be 'true' and is.
+PASS: canGet('getSelection') should be 'true' and is.
+PASS: canSet('getSelection') should be 'true' and is.
+PASS: canGet('moveBy') should be 'true' and is.
+PASS: canSet('moveBy') should be 'true' and is.
+PASS: canGet('moveTo') should be 'true' and is.
+PASS: canSet('moveTo') should be 'true' and is.
+PASS: canGet('onabort') should be 'true' and is.
+PASS: canSet('onabort') should be 'true' and is.
+PASS: canGet('onbeforeunload') should be 'true' and is.
+PASS: canSet('onbeforeunload') should be 'true' and is.
+PASS: canGet('onblur') should be 'true' and is.
+PASS: canSet('onblur') should be 'true' and is.
+PASS: canGet('onchange') should be 'true' and is.
+PASS: canSet('onchange') should be 'true' and is.
+PASS: canGet('onclick') should be 'true' and is.
+PASS: canSet('onclick') should be 'true' and is.
+PASS: canGet('ondblclick') should be 'true' and is.
+PASS: canSet('ondblclick') should be 'true' and is.
+PASS: canGet('onerror') should be 'true' and is.
+PASS: canSet('onerror') should be 'true' and is.
+PASS: canGet('onfocus') should be 'true' and is.
+PASS: canSet('onfocus') should be 'true' and is.
+PASS: canGet('onkeydown') should be 'true' and is.
+PASS: canSet('onkeydown') should be 'true' and is.
+PASS: canGet('onkeypress') should be 'true' and is.
+PASS: canSet('onkeypress') should be 'true' and is.
+PASS: canGet('onkeyup') should be 'true' and is.
+PASS: canSet('onkeyup') should be 'true' and is.
+PASS: canGet('onload') should be 'true' and is.
+PASS: canSet('onload') should be 'true' and is.
+PASS: canGet('onmousedown') should be 'true' and is.
+PASS: canSet('onmousedown') should be 'true' and is.
+PASS: canGet('onmousemove') should be 'true' and is.
+PASS: canSet('onmousemove') should be 'true' and is.
+PASS: canGet('onmouseout') should be 'true' and is.
+PASS: canSet('onmouseout') should be 'true' and is.
+PASS: canGet('onmouseover') should be 'true' and is.
+PASS: canSet('onmouseover') should be 'true' and is.
+PASS: canGet('onmouseup') should be 'true' and is.
+PASS: canSet('onmouseup') should be 'true' and is.
+PASS: canGet('onmousewheel') should be 'true' and is.
+PASS: canSet('onmousewheel') should be 'true' and is.
+PASS: canGet('onreset') should be 'true' and is.
+PASS: canSet('onreset') should be 'true' and is.
+PASS: canGet('onresize') should be 'true' and is.
+PASS: canSet('onresize') should be 'true' and is.
+PASS: canGet('onscroll') should be 'true' and is.
+PASS: canSet('onscroll') should be 'true' and is.
+PASS: canGet('onsearch') should be 'true' and is.
+PASS: canSet('onsearch') should be 'true' and is.
+PASS: canGet('onselect') should be 'true' and is.
+PASS: canSet('onselect') should be 'true' and is.
+PASS: canGet('onsubmit') should be 'true' and is.
+PASS: canSet('onsubmit') should be 'true' and is.
+PASS: canGet('onunload') should be 'true' and is.
+PASS: canSet('onunload') should be 'true' and is.
+PASS: canGet('open') should be 'true' and is.
+PASS: canSet('open') should be 'true' and is.
+PASS: canGet('print') should be 'true' and is.
+PASS: canSet('print') should be 'true' and is.
+PASS: canGet('prompt') should be 'true' and is.
+PASS: canSet('prompt') should be 'true' and is.
+PASS: canGet('releaseEvents') should be 'true' and is.
+PASS: canSet('releaseEvents') should be 'true' and is.
+PASS: canGet('removeEventListener') should be 'true' and is.
+PASS: canSet('removeEventListener') should be 'true' and is.
+PASS: canGet('resizeBy') should be 'true' and is.
+PASS: canSet('resizeBy') should be 'true' and is.
+PASS: canGet('resizeTo') should be 'true' and is.
+PASS: canSet('resizeTo') should be 'true' and is.
+PASS: canGet('scroll') should be 'true' and is.
+PASS: canSet('scroll') should be 'true' and is.
+PASS: canGet('scrollBy') should be 'true' and is.
+PASS: canSet('scrollBy') should be 'true' and is.
+PASS: canGet('scrollTo') should be 'true' and is.
+PASS: canSet('scrollTo') should be 'true' and is.
+PASS: canGet('setInterval') should be 'true' and is.
+PASS: canSet('setInterval') should be 'true' and is.
+PASS: canGet('setTimeout') should be 'true' and is.
+PASS: canSet('setTimeout') should be 'true' and is.
+PASS: canGet('stop') should be 'true' and is.
+PASS: canSet('stop') should be 'true' and is.
+
diff --git a/LayoutTests/fast/dom/Window/get-set-properties.html b/LayoutTests/fast/dom/Window/get-set-properties.html
new file mode 100644 (file)
index 0000000..b7c0f06
--- /dev/null
@@ -0,0 +1,287 @@
+<p>Tests getting and setting window properties and functions.</p>
+<pre id="console"></pre>
+
+<script>
+function log(s)
+{
+    document.getElementById("console").appendChild(document.createTextNode(s + "\n"));
+}
+
+function shouldBe(a, b)
+{
+    var evalA, evalB;
+    try {
+        evalA = eval(a);
+        evalB = eval(b);
+    } catch(e) {
+        evalA = e;
+    }
+
+    var message = (evalA === evalB)
+                    ? "PASS: " + a + " should be '" + evalB + "' and is."
+                    : "*** FAIL: " + a + " should be '" + evalB + "' but instead is " + evalA + ". ***";
+    log(message);
+}
+
+function shouldBeTrue(a) 
+{ 
+    shouldBe(a, "true"); 
+}
+
+function shouldBeFalse(b) 
+{ 
+    shouldBe(b, "false"); 
+}
+
+function canGet(keyPath)
+{
+    try {
+        return eval("window." + keyPath) !== undefined;
+    } catch(e) {
+        return false;
+    }
+}
+
+window.marker = { "foo": "bar" };
+
+function canSet(keyPath)
+{
+    var valuePath = "window.marker";
+
+    try {
+        eval("window." + keyPath + " = " + valuePath);
+        return eval("window." + keyPath) === eval("window." + valuePath);
+    } catch(e) {
+        return false;
+    }
+}
+
+var windowReadWriteProperties = [
+    "addEventListener", 
+    "alert", 
+    "atob", 
+    "Attr", 
+    "btoa", 
+    "captureEvents", 
+    "CDATASection", 
+    "CharacterData", 
+    "clearInterval", 
+    "clearTimeout",
+    "Comment", 
+    "console", 
+    "CSSPrimitiveValue", 
+    "CSSRule", 
+    "CSSStyleDeclaration", 
+    "CSSValue", 
+    "Document", 
+    "DocumentFragment", 
+    "DocumentType", 
+    "DOMException", 
+    "DOMImplementation", 
+    "DOMParser", 
+    "Element", 
+    "Entity", 
+    "EntityReference", 
+    "EvalError", 
+    "Event", 
+    "event", 
+    "HTMLAnchorElement", 
+    "HTMLAppletElement", 
+    "HTMLAreaElement", 
+    "HTMLBaseElement", 
+    "HTMLBaseFontElement", 
+    "HTMLBodyElement", 
+    "HTMLBRElement", 
+    "HTMLButtonElement", 
+    "HTMLCanvasElement", 
+    "HTMLDirectoryElement", 
+    "HTMLDivElement", 
+    "HTMLDListElement", 
+    "HTMLDocument", 
+    "HTMLElement", 
+    "HTMLFieldSetElement", 
+    "HTMLFontElement", 
+    "HTMLFormElement", 
+    "HTMLFrameElement", 
+    "HTMLFrameSetElement", 
+    "HTMLHeadElement", 
+    "HTMLHeadingElement", 
+    "HTMLHRElement", 
+    "HTMLHtmlElement", 
+    "HTMLIFrameElement", 
+    "HTMLImageElement", 
+    "HTMLInputElement", 
+    "HTMLIsIndexElement", 
+    "HTMLLabelElement", 
+    "HTMLLegendElement", 
+    "HTMLLIElement", 
+    "HTMLLinkElement", 
+    "HTMLMapElement", 
+    "HTMLMarqueeElement", 
+    "HTMLMenuElement", 
+    "HTMLMetaElement", 
+    "HTMLModElement", 
+    "HTMLOListElement", 
+    "HTMLOptGroupElement", 
+    "HTMLOptionElement", 
+    "HTMLParagraphElement", 
+    "HTMLParamElement", 
+    "HTMLPreElement", 
+    "HTMLQuoteElement", 
+    "HTMLScriptElement", 
+    "HTMLSelectElement", 
+    "HTMLStyleElement", 
+    "HTMLTableCaptionElement", 
+    "HTMLTableCellElement", 
+    "HTMLTableColElement", 
+    "HTMLTableElement", 
+    "HTMLTableRowElement", 
+    "HTMLTableSectionElement", 
+    "HTMLTextAreaElement", 
+    "HTMLTitleElement", 
+    "HTMLUListElement", 
+    "Image", 
+    "MutationEvent", 
+    "Node", 
+    "NodeFilter", 
+    "Notation", 
+    "Option", 
+    "ProcessingInstruction", 
+    "Range", 
+    "RangeError", 
+    "RangeException", 
+    "ReferenceError", 
+    "SyntaxError", 
+    "Text", 
+    "TypeError", 
+    "URIError", 
+    "XMLDocument", 
+    "XMLHttpRequest", 
+    "XMLSerializer", 
+    "XPathEvaluator", 
+    "XPathResult", 
+    "XSLTProcessor",
+];
+
+var windowReadOnlyProperties = [
+    "clientInformation", 
+    "closed",
+    "defaultStatus", 
+    "defaultstatus", 
+    "devicePixelRatio", 
+    "document",
+    "frames",
+    "history",
+    "innerHeight", 
+    "innerWidth", 
+    "length",
+    "locationbar", 
+    "menubar", 
+    "name",
+    "navigator", 
+    "offscreenBuffering", 
+    "opener",
+    "outerHeight", 
+    "outerWidth", 
+    "pageXOffset", 
+    "pageYOffset", 
+    "parent",
+    "personalbar",
+    "screen", 
+    "screenLeft", 
+    "screenTop", 
+    "screenX", 
+    "screenY", 
+    "scrollbars",
+    "scrollX", 
+    "scrollY", 
+    "self",
+    "status", 
+    "statusbar",
+    "toolbar",
+    "top",
+    "window"
+];
+
+
+var windowFunctions = [
+    "blur",
+    "close",
+    "confirm",
+    "find", 
+    "focus",
+    "getComputedStyle",
+    "getMatchedCSSRules", 
+    "getSelection",
+    "moveBy", 
+    "moveTo", 
+    "onabort", 
+    "onbeforeunload", 
+    "onblur", 
+    "onchange", 
+    "onclick", 
+    "ondblclick", 
+    "onerror", 
+    "onfocus", 
+    "onkeydown", 
+    "onkeypress", 
+    "onkeyup", 
+    "onload", 
+    "onmousedown", 
+    "onmousemove", 
+    "onmouseout", 
+    "onmouseover", 
+    "onmouseup", 
+    "onmousewheel", 
+    "onreset", 
+    "onresize", 
+    "onscroll", 
+    "onsearch", 
+    "onselect", 
+    "onsubmit", 
+    "onunload", 
+    "open", 
+    "print", 
+    "prompt", 
+    "releaseEvents", 
+    "removeEventListener", 
+    "resizeBy", 
+    "resizeTo", 
+    "scroll", 
+    "scrollBy", 
+    "scrollTo", 
+    "setInterval", 
+    "setTimeout", 
+    "stop"
+];
+
+window.onload = function()
+{
+    if (window.layoutTestController)
+        layoutTestController.dumpAsText();
+
+    log("\n----- tests for getting/setting read-write properties -----\n");
+
+    for (var i = 0; i < windowReadWriteProperties.length; i++) { //>
+        var property = windowReadWriteProperties[i];
+        shouldBeTrue("canGet('" + property + "')");
+        shouldBeTrue("canSet('" + property + "')");
+    }
+
+    log("\n----- tests for getting/setting readonly properties -----\n");
+
+    for (var i = 0; i < windowReadOnlyProperties.length; i++) { //>
+        var property = windowReadOnlyProperties[i];
+        shouldBeTrue("canGet('" + property + "')");
+        shouldBeFalse("canSet('" + property + "')");
+    }
+
+    log("\n----- tests for getting/setting function -----\n");
+
+    for (var i = 0; i < windowFunctions.length; i++) { //>
+        var property = windowFunctions[i];
+        shouldBeTrue("canGet('" + property + "')");
+        shouldBeTrue("canSet('" + property + "')");
+    }
+}
+</script>
index 9b9221ba3e0fa726f48f16427de39399d74199b2..dd288ca2012fb5a7bbc85ada902229b5f3972fa0 100644 (file)
@@ -1,3 +1,36 @@
+2007-07-10  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver.
+
+        Move more attributes from the pure JS bindings in KJS::Window
+        to the implementation in DOMWindow and autogenerate the new bindings
+
+        Test: fast/dom/Window/get-set-properties.html
+
+        * bindings/js/JSDOMWindowCustom.cpp:
+        (WebCore::JSDOMWindow::customGetOwnPropertySlot): Change to use propHashTable in
+        JSDOMWindow instead of KJS::Window
+        * bindings/js/kjs_window.cpp:
+        (KJS::Window::getValueProperty):
+        (KJS::Window::put):
+        * bindings/js/kjs_window.h:
+        (KJS::Window::):
+        * bindings/scripts/CodeGeneratorJS.pm: Cleanup getValueProperty and put generation
+        to reduce code duplication. 
+        * page/DOMWindow.cpp:
+        (WebCore::DOMWindow::closed):
+        (WebCore::DOMWindow::length):
+        (WebCore::DOMWindow::name):
+        (WebCore::DOMWindow::setName):
+        (WebCore::DOMWindow::status):
+        (WebCore::DOMWindow::setStatus):
+        (WebCore::DOMWindow::defaultStatus):
+        (WebCore::DOMWindow::setDefaultStatus):
+        * page/DOMWindow.h:
+        (WebCore::DOMWindow::defaultstatus):
+        (WebCore::DOMWindow::setDefaultstatus):
+        * page/DOMWindow.idl:
+
 2007-07-10  Sam Weinig  <sam@webkit.org>
 
         Reviewed by Geoff.
index b7f58e036c1c56293b2896ceb118af8838c0f115..2495ac217c572640cfbdc63f71c21896321dd68c 100644 (file)
@@ -29,10 +29,10 @@ bool JSDOMWindow::customGetOwnPropertySlot(KJS::ExecState* exec, const KJS::Iden
     // we don't want any properties other than "closed" on a closed window
     if (!frame()) {
         if (propertyName == "closed") {
-            const KJS::HashEntry* entry = KJS::Lookup::findEntry(KJS::Window::classInfo()->propHashTable, propertyName);
+            const KJS::HashEntry* entry = KJS::Lookup::findEntry(classInfo()->propHashTable, propertyName);
             ASSERT(entry);
             if (entry) {
-                slot.setStaticEntry(this, entry, KJS::staticValueGetter<KJS::Window>);
+                slot.setStaticEntry(this, entry, KJS::staticValueGetter<JSDOMWindow>);
                 return true;
             }
         }
index e83260216c19e4ce783fdf28bf0cfe78e1cf45df..265328b7e682ecc4438bdb3496941086d6a76616 100644 (file)
@@ -174,16 +174,10 @@ const ClassInfo Window::info = { "Window", 0, &WindowTable, 0 };
   find                  Window::Find                DontDelete|Function 7
   stop                  Window::Stop                DontDelete|Function 0
 # -- Attributes --
-  closed                Window::Closed              DontDelete|ReadOnly
   crypto                Window::Crypto              DontDelete|ReadOnly
-  defaultStatus         Window::DefaultStatus       DontDelete
-  defaultstatus         Window::DefaultStatus       DontDelete
-  status                Window::Status              DontDelete
   frames                Window::Frames              DontDelete|ReadOnly
   event                 Window::Event_              DontDelete
-  length                Window::Length              DontDelete|ReadOnly
   location              Window::Location_           DontDelete
-  name                  Window::Name                DontDelete
   navigator             Window::Navigator_          DontDelete|ReadOnly
   clientInformation     Window::ClientInformation   DontDelete|ReadOnly
   opener                Window::Opener              DontDelete|ReadOnly
@@ -517,27 +511,17 @@ static JSValue* showModalDialog(ExecState* exec, Window* openerWindow, const Lis
 
 JSValue *Window::getValueProperty(ExecState *exec, int token) const
 {
-   ASSERT(token == Closed || m_frame);
+   ASSERT(m_frame);
 
    switch (token) {
-   case Closed:
-      return jsBoolean(!m_frame);
    case Crypto:
       if (!isSafeScript(exec))
         return jsUndefined();
       return jsUndefined(); // FIXME: implement this
-   case DefaultStatus:
-      if (!isSafeScript(exec))
-        return jsUndefined();
-      return jsString(UString(m_frame->jsDefaultStatusBarText()));
    case DOMException:
       if (!isSafeScript(exec))
         return jsUndefined();
       return getDOMExceptionConstructor(exec);
-   case Status:
-      if (!isSafeScript(exec))
-        return jsUndefined();
-      return jsString(UString(m_frame->jsStatusBarText()));
     case Frames:
       return retrieve(m_frame);
     case Event_:
@@ -546,14 +530,8 @@ JSValue *Window::getValueProperty(ExecState *exec, int token) const
       if (!d->m_evt)
         return jsUndefined();
       return toJS(exec, d->m_evt);
-    case Length:
-      return jsNumber(m_frame->tree()->childCount());
     case Location_:
       return location();
-    case Name:
-      if (!isSafeScript(exec))
-        return jsUndefined();
-      return jsString(m_frame->tree()->name());
     case Navigator_:
     case ClientInformation: {
       if (!isSafeScript(exec))
@@ -761,14 +739,6 @@ void Window::put(ExecState* exec, const Identifier& propertyName, JSValue* value
        return;
 
     switch (entry->value) {
-    case Status:
-      if (isSafeScript(exec))
-        m_frame->setJSStatusBarText(value->toString(exec));
-      return;
-    case DefaultStatus:
-      if (isSafeScript(exec))
-        m_frame->setJSDefaultStatusBarText(value->toString(exec));
-      return;
     case Location_: {
       Frame* p = Window::retrieveActive(exec)->m_frame;
       if (p) {
@@ -881,10 +851,6 @@ void Window::put(ExecState* exec, const Identifier& propertyName, JSValue* value
       if (isSafeScript(exec))
         setListener(exec, unloadEvent, value);
       return;
-    case Name:
-      if (isSafeScript(exec))
-        m_frame->tree()->setName(value->toString(exec));
-      return;
     default:
       break;
     }
index fd4fd9996e56d3c7e3c2003577313b2e0f311430..ae9825ff4abe9e2dc008e94ba787ab4995ebc4de 100644 (file)
@@ -156,9 +156,8 @@ namespace KJS {
         Stop,
 
         // Attributes
-        Closed, Crypto, DefaultStatus, Status,
-        Frames, Event_, Length, Location_,
-        Name, Navigator_, ClientInformation, Opener,
+        Crypto, Frames, Event_, Location_,
+        Navigator_, ClientInformation, Opener,
         Parent, Self, Window_, Top,
         FrameElement,
 
index 5d60949622f2ac9e928e174626e0eef5fe9bb796..6d91d1a76d795f539723365dbaefd96144bc8123 100644 (file)
@@ -878,35 +878,28 @@ sub GenerateImplementation
                 $implClassNameForValueConversion = $implClassName;
             }
 
+            if ($attribute->signature->type =~ /Constructor$/) {
+                push(@implContent, "    case " . $name . "ConstructorAttrNum: {\n");
+            } else {
+                push(@implContent, "    case " . WK_ucfirst($name) . "AttrNum: {\n");
+            }
+
+            if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"}) {
+                push(@implContent, "        if (!isSafeScript(exec))\n");
+                push(@implContent, "            return jsUndefined();\n");
+            }
+
             if ($attribute->signature->extendedAttributes->{"Custom"}) {
-                push(@implContent, "    case " . WK_ucfirst($name) . "AttrNum:\n");
-                if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"}) {
-                    push(@implContent, "        if (!isSafeScript(exec))\n");
-                    push(@implContent, "            return jsUndefined();");
-                }
                 push(@implContent, "        return $name(exec);\n");
             } elsif ($attribute->signature->extendedAttributes->{"CheckFrameSecurity"}) {
-                push(@implContent, "    case " . WK_ucfirst($name) . "AttrNum:\n");
-                push(@implContent, "        return checkNodeSecurity(exec, imp->contentDocument()) ? " . NativeToJSValue($attribute->signature,  $implClassNameForValueConversion, "imp->$name()") . " : jsUndefined();\n");
                 $implIncludes{"Document.h"} = 1;
                 $implIncludes{"kjs_dom.h"} = 1;
+                push(@implContent, "        return checkNodeSecurity(exec, imp->contentDocument()) ? " . NativeToJSValue($attribute->signature,  $implClassNameForValueConversion, "imp->$name()") . " : jsUndefined();\n");
             } elsif ($attribute->signature->type =~ /Constructor$/) {
                 my $constructorType = $codeGenerator->StripModule($attribute->signature->type);
                 $constructorType =~ s/Constructor$//;
-
-                push(@implContent, "    case " . $name . "ConstructorAttrNum:\n");
-                if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"}) {
-                    push(@implContent, "        if (!isSafeScript(exec))\n");
-                    push(@implContent, "            return jsUndefined();\n");
-                }
                 push(@implContent, "        return JS" . $constructorType . "::getConstructor(exec);\n");
             } elsif (!@{$attribute->getterExceptions}) {
-                push(@implContent, "    case " . WK_ucfirst($name) . "AttrNum:\n");
-                if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"}) {
-                    push(@implContent, "        if (!isSafeScript(exec))\n");
-                    push(@implContent, "            return jsUndefined();\n");
-                }
-        
                 if ($podType) {
                     if ($podType eq "double") { # Special case for JSSVGNumber
                         push(@implContent, "        return " . NativeToJSValue($attribute->signature, "", "imp") . ";\n");
@@ -918,7 +911,6 @@ sub GenerateImplementation
                     my $jsType = NativeToJSValue($attribute->signature, $implClassNameForValueConversion, "imp->$name()");
 
                     if ($codeGenerator->IsSVGAnimatedType($type)) {
-                        push(@implContent, "    {\n");   
                         push(@implContent, "        ASSERT(exec && exec->dynamicInterpreter());\n\n");
                         push(@implContent, "        RefPtr<$type> obj = $jsType;\n");
                         push(@implContent, "        Frame* activeFrame = static_cast<ScriptInterpreter*>(exec->dynamicInterpreter())->frame();\n");
@@ -932,7 +924,6 @@ sub GenerateImplementation
                         push(@implContent, "            }\n");
                         push(@implContent, "        }\n\n");
                         push(@implContent, "        return toJS(exec, obj.get());\n");
-                        push(@implContent, "    }\n");
                     } elsif ($attribute->signature->extendedAttributes->{"NullCheck"}) {
                         push(@implContent, "        return imp->$name() ? $jsType : jsUndefined();\n");
                     } else {
@@ -940,11 +931,6 @@ sub GenerateImplementation
                     }
                 }
             } else {
-                push(@implContent, "    case " . WK_ucfirst($name) . "AttrNum: {\n");
-                if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"}) {
-                    push(@implContent, "        if (!isSafeScript(exec))\n");
-                    push(@implContent, "            return jsUndefined();\n");
-                }
                 push(@implContent, "        ExceptionCode ec = 0;\n");
         
                 if ($podType) {
@@ -957,8 +943,8 @@ sub GenerateImplementation
 
                 push(@implContent, "        setDOMException(exec, ec);\n");
                 push(@implContent, "        return result;\n");
-                push(@implContent, "    }\n");
             }
+            push(@implContent, "    }\n");
         }
 
         if ($dataNode->extendedAttributes->{"GenerateConstructor"}) {
@@ -966,7 +952,8 @@ sub GenerateImplementation
             push(@implContent, "        return getConstructor(exec);\n");
         }
 
-        push(@implContent, "    }\n    return 0;\n}\n\n");
+        push(@implContent, "    }\n");
+        push(@implContent, "    return 0;\n}\n\n");
 
         # Check if we have any writable attributes
         my $hasReadWriteProperties = 0;
@@ -1007,22 +994,26 @@ sub GenerateImplementation
                 if ($attribute->type !~ /^readonly/) {
                     my $name = $attribute->signature->name;
 
-                    if ($attribute->signature->extendedAttributes->{"Custom"}) {
+                    if ($attribute->signature->type =~ /Constructor$/) {
+                        push(@implContent, "    case " . $name ."ConstructorAttrNum: {\n");
+                    } else {
                         push(@implContent, "    case " . WK_ucfirst($name) . "AttrNum: {\n");
+                    }
+
+                    if ($dataNode->extendedAttributes->{"CheckDomainSecurity"} && !$attribute->signature->extendedAttributes->{"DoNotCheckDomainSecurity"}) {
+                        push(@implContent, "        if (!isSafeScript(exec))\n");
+                        push(@implContent, "            return;\n");
+                    }
+
+                    if ($attribute->signature->extendedAttributes->{"Custom"}) {
                         push(@implContent, "        set" . WK_ucfirst($name) . "(exec, value);\n");
                     } elsif ($attribute->signature->type =~ /Constructor$/) {
                         my $constructorType = $attribute->signature->type;
                         $constructorType =~ s/Constructor$//;
-
                         $implIncludes{"JS" . $constructorType . ".h"} = 1;
-                        push(@implContent, "    case " . $name ."ConstructorAttrNum: {\n");
                         push(@implContent, "        // Shadowing a built-in constructor\n");
-
-                        # FIXME: We need to provide scalable hooks/attributes for this kind of extension
-                        push(@implContent, "        if (isSafeScript(exec))\n");
-                        push(@implContent, "            JSObject::put(exec, \"$name\", value);\n");
+                        push(@implContent, "        JSObject::put(exec, \"$name\", value);\n");
                     } else {
-                        push(@implContent, "    case " . WK_ucfirst($name) ."AttrNum: {\n");
                         if ($podType) {
                             if ($podType eq "double") { # Special case for JSSVGNumber
                                 push(@implContent, "        imp = " . JSValueToNative($attribute->signature, "value") . ";\n");
@@ -1045,10 +1036,7 @@ sub GenerateImplementation
             push(@implContent, "    }\n"); # end switch
 
             my $contextInterfaceName = CreateSVGContextInterfaceName($interfaceName);
-            if ($interfaceName eq "DOMWindow") {
-                push(@implContent, "    // FIXME: Hack to prevent unused variable warning -- remove once DOMWindow includes a settable property\n");
-                push(@implContent, "    (void)imp;\n");
-            } elsif ($contextInterfaceName ne "") {
+            if ($contextInterfaceName ne "") {
                 push(@implContent, "    ASSERT(exec && exec->dynamicInterpreter());\n");
                 push(@implContent, "    Frame* activeFrame = static_cast<ScriptInterpreter*>(exec->dynamicInterpreter())->frame();\n");
                 push(@implContent, "    if (!activeFrame)\n        return;\n\n");
index 2495825dc42cd6c7441d77e05dbecba11de1a1c5..1222bde1689431c137a49d280768e3f44de21438 100644 (file)
 #include "Element.h"
 #include "Frame.h"
 #include "FrameLoader.h"
+#include "FrameTree.h"
 #include "FrameView.h"
 #include "History.h"
 #include "Page.h"
 #include "PlatformScreen.h"
+#include "PlatformString.h"
 #include "Screen.h"
 #include "cssstyleselector.h"
 
@@ -280,6 +282,67 @@ int DOMWindow::scrollY() const
     return view->contentsY();
 }
 
+bool DOMWindow::closed() const
+{
+    return !m_frame;
+}
+
+unsigned DOMWindow::length() const
+{
+    if (!m_frame)
+        return 0;
+
+    return m_frame->tree()->childCount();
+}
+
+String DOMWindow::name() const
+{
+    if (!m_frame)
+        return String();
+
+    return m_frame->tree()->name();
+}
+
+void DOMWindow::setName(const String& string)
+{
+    if (!m_frame)
+        return;
+
+    m_frame->tree()->setName(string);
+}
+
+String DOMWindow::status() const
+{
+    if (!m_frame)
+        return String();
+
+    return m_frame->jsStatusBarText();
+}
+
+void DOMWindow::setStatus(const String& string)
+{
+    if (!m_frame)
+        return;
+
+    m_frame->setJSStatusBarText(string);
+}
+
+String DOMWindow::defaultStatus() const
+{
+    if (!m_frame)
+        return String();
+
+    return m_frame->jsDefaultStatusBarText();
+}
+
+void DOMWindow::setDefaultStatus(const String& string)
+{
+    if (!m_frame)
+        return;
+
+    m_frame->setJSDefaultStatusBarText(string);
+}
+
 Document* DOMWindow::document() const
 {
     if (!m_frame)
index 711e7f851bda4625d9ff70ec1286ed9bc8ed562b..390884b27cddd1297dbfae7dd30231afe3303423 100644 (file)
@@ -26,6 +26,7 @@
 #ifndef DOMWindow_h
 #define DOMWindow_h
 
+#include "PlatformString.h"
 #include "Shared.h"
 #include <wtf/Forward.h>
 #include <wtf/RefPtr.h>
@@ -41,7 +42,6 @@ namespace WebCore {
     class Frame;
     class History;
     class Screen;
-    class String;
     
     class DOMWindow : public Shared<DOMWindow> {
     public:
@@ -82,6 +82,21 @@ namespace WebCore {
         int pageXOffset() const { return scrollX(); }
         int pageYOffset() const { return scrollY(); }
 
+        bool closed() const;
+
+        unsigned length() const;
+
+        String name() const;
+        void setName(const String&);
+
+        String status() const;
+        void setStatus(const String&);
+        String defaultStatus() const;
+        void setDefaultStatus(const String&);
+        // This attribute is an alias of defaultStatus and is necessary for legacy uses.
+        String defaultstatus() const { return defaultStatus(); }
+        void setDefaultstatus(const String& string) { setDefaultStatus(string); }
+
         // DOM Level 2 AbstractView Interface
         Document* document() const;
 
index f20f0d0ea3b7757d18f460e45ef845bf4b58b842..6a3f3ebbbac7da26a10764622983b87deee26d23 100644 (file)
@@ -57,6 +57,19 @@ module window {
         readonly attribute long pageXOffset;
         readonly attribute long pageYOffset;
 
+        readonly attribute [DoNotCheckDomainSecurity] boolean closed;
+
+        readonly attribute [DoNotCheckDomainSecurity] unsigned long length;
+
+                 attribute DOMString name;
+
+                 attribute DOMString status;
+                 attribute DOMString defaultStatus;
+#if defined(LANGUAGE_JAVASCRIPT)
+                 // This attribute is an alias of defaultStatus and is necessary for legacy uses.
+                 attribute DOMString defaultstatus;
+#endif
+
         // DOM Level 2 AbstractView Interface
         readonly attribute Document document;