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
--- /dev/null
+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\""
--- /dev/null
+<frameset>
+ <frame id="Mr. Frame" src="resources/frameElement-contents.html">
+</frameset>
--- /dev/null
+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
--- /dev/null
+<html>
+<body>
+<iframe id="Mr. Frame" src="resources/frameElement-contents.html"></iframe>
+</body>
+</html>
--- /dev/null
+<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>
+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.
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
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);
}
}
}