Reviewed by Vicki.
authordarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 May 2005 18:39:16 +0000 (18:39 +0000)
committerdarin <darin@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 2 May 2005 18:39:16 +0000 (18:39 +0000)
        Added two layout tests for regression testing.

        - redid frameElement (fix for 4091082 below)

        The first version lacked a security check, and was also broken.

        * khtml/ecma/kjs_window.cpp:
        (frameElement): Refactored into separate function; added isSafeScript check.
        (Window::get): Call the new frameElement function.

        * fast/frames/frameElement-frame.html: Added.
        * fast/frames/frameElement-frame-expected.txt: Added.
        * fast/frames/frameElement-iframe.html: Added.
        * fast/frames/frameElement-iframe-expected.txt: Added.
        * fast/frames/resources/frameElement-contents.html: Added.

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

LayoutTests/fast/frames/frameElement-frame-expected.txt [new file with mode: 0644]
LayoutTests/fast/frames/frameElement-frame.html [new file with mode: 0644]
LayoutTests/fast/frames/frameElement-iframe-expected.txt [new file with mode: 0644]
LayoutTests/fast/frames/frameElement-iframe.html [new file with mode: 0644]
LayoutTests/fast/frames/resources/frameElement-contents.html [new file with mode: 0644]
WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_window.cpp

diff --git a/LayoutTests/fast/frames/frameElement-frame-expected.txt b/LayoutTests/fast/frames/frameElement-frame-expected.txt
new file mode 100644 (file)
index 0000000..b862fda
--- /dev/null
@@ -0,0 +1,14 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderFrameSet {FRAMESET} at (0,0) size 800x600
+      RenderFrame {FRAME} at (0,0) size 800x600
+        layer at (0,0) size 783x596
+          RenderCanvas at (0,0) size 783x596
+        layer at (0,0) size 783x596
+          RenderBlock {HTML} at (0,0) size 783x596
+            RenderBody {BODY} at (8,8) size 767x580
+              RenderBlock {DIV} at (0,0) size 767x18
+                RenderText {TEXT} at (0,0) size 208x18
+                  text run at (0,0) width 208: "frameElement ID is \"Mr. Frame\""
diff --git a/LayoutTests/fast/frames/frameElement-frame.html b/LayoutTests/fast/frames/frameElement-frame.html
new file mode 100644 (file)
index 0000000..e8ca83a
--- /dev/null
@@ -0,0 +1,3 @@
+<frameset>
+      <frame id="Mr. Frame" src="resources/frameElement-contents.html">
+</frameset>
diff --git a/LayoutTests/fast/frames/frameElement-iframe-expected.txt b/LayoutTests/fast/frames/frameElement-iframe-expected.txt
new file mode 100644 (file)
index 0000000..771a79d
--- /dev/null
@@ -0,0 +1,16 @@
+layer at (0,0) size 800x600
+  RenderCanvas at (0,0) size 800x600
+layer at (0,0) size 800x600
+  RenderBlock {HTML} at (0,0) size 800x600
+    RenderBody {BODY} at (8,8) size 784x584
+      RenderPartObject {IFRAME} at (0,0) size 300x150
+        layer at (0,0) size 285x150
+          RenderCanvas at (0,0) size 285x150
+        layer at (0,0) size 285x150
+          RenderBlock {HTML} at (0,0) size 285x150
+            RenderBody {BODY} at (8,8) size 269x134
+              RenderBlock {DIV} at (0,0) size 269x18
+                RenderText {TEXT} at (0,0) size 208x18
+                  text run at (0,0) width 208: "frameElement ID is \"Mr. Frame\""
+      RenderText {TEXT} at (0,0) size 0x0
+      RenderText {TEXT} at (0,0) size 0x0
diff --git a/LayoutTests/fast/frames/frameElement-iframe.html b/LayoutTests/fast/frames/frameElement-iframe.html
new file mode 100644 (file)
index 0000000..18aa0de
--- /dev/null
@@ -0,0 +1,5 @@
+<html>
+<body>
+<iframe id="Mr. Frame" src="resources/frameElement-contents.html"></iframe>
+</body>
+</html>
diff --git a/LayoutTests/fast/frames/resources/frameElement-contents.html b/LayoutTests/fast/frames/resources/frameElement-contents.html
new file mode 100644 (file)
index 0000000..1a1a388
--- /dev/null
@@ -0,0 +1,16 @@
+<html>
+<head>
+<script>
+function testFrameElement()
+{
+    var message = document.getElementById("message");
+    var element = window.frameElement;
+    var elementID = element.getAttribute("id");
+    message.appendChild(document.createTextNode("frameElement ID is \"" + elementID + "\"")); 
+}
+</script>
+</head>
+<body onload="testFrameElement()">
+<div id="message"></div>
+</body>
+</html>
index 80c8159df874e2e9956ac9d901ea8408a0c229bd..10f01de5f10475079932649a0ca73b20b24d1a50 100644 (file)
@@ -1,3 +1,22 @@
+2005-05-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Vicki.
+        Added two layout tests for regression testing.
+
+        - redid frameElement (fix for 4091082 below)
+
+        The first version lacked a security check, and was also broken.
+
+        * khtml/ecma/kjs_window.cpp:
+        (frameElement): Refactored into separate function; added isSafeScript check.
+        (Window::get): Call the new frameElement function.
+
+        * fast/frames/frameElement-frame.html: Added.
+        * fast/frames/frameElement-frame-expected.txt: Added.
+        * fast/frames/frameElement-iframe.html: Added.
+        * fast/frames/frameElement-iframe-expected.txt: Added.
+        * fast/frames/resources/frameElement-contents.html: Added.
+
 2005-05-02  David Harrison  <harrison@apple.com>
 
         Reviewed by Vicki.
index 1b0ec939c20bddb02198e92c7c85e3b12bf50573..730de3067f4e2b45ecdea9e2e49dce03322e6c75 100644 (file)
@@ -460,6 +460,32 @@ UString Window::toString(ExecState *) const
   return "[object Window]";
 }
 
+static ElementImpl *frameElement(ExecState *exec, KHTMLPart *part)
+{
+    // Find the frame element.
+    DocumentImpl *document = part->xmlDocImpl();
+    if (!document)
+        return 0;
+    ElementImpl *frameElement = document->ownerElement();
+    if (!frameElement)
+        return 0;
+
+    // Find the window object for the frame element, and do a cross-domain check.
+    DocumentImpl *frameElementDocument = frameElement->getDocument();
+    if (!frameElementDocument)
+        return 0;
+    KHTMLPart *frameElementPart = frameElementDocument->part();
+    if (!frameElementPart)
+        return 0;
+    Window *frameElementWindow = Window::retrieveWindow(frameElementPart);
+    if (!frameElementWindow)
+        return 0;
+    if (!frameElementWindow->isSafeScript(exec))
+        return 0;
+
+    return frameElement;
+}
+
 Value Window::get(ExecState *exec, const Identifier &p) const
 {
 #ifdef KJS_VERBOSE
@@ -833,13 +859,10 @@ Value Window::get(ExecState *exec, const Identifier &p) const
       else
         return Undefined();
     case FrameElement: {
-        DocumentImpl *document = m_part->xmlDocImpl();
-        if (!document)
-            return Undefined();
-        ElementImpl *frameElement = document->ownerElement();
-        if (!frameElement)
-            return Undefined();
-        return Value(frameElement);
+      ElementImpl *fe = frameElement(exec, m_part);
+      if (!fe)
+        return Undefined();
+      return getDOMNode(exec, fe);
     }
     }
   }