Reviewed by Darin.
authoradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Aug 2004 21:52:24 +0000 (21:52 +0000)
committeradele <adele@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 27 Aug 2004 21:52:24 +0000 (21:52 +0000)
Fix for:
<rdar://problem/3689949> Provide contentWindow access on an iframe

        * khtml/ecma/kjs_html.cpp:
        (KJS::HTMLElement::getValueProperty): added cases for contentWindow for frames and iframes
        * khtml/ecma/kjs_html.h: added contentWindow to the list of properties for frames and iframes
        * khtml/ecma/kjs_html.lut.h: regenerated file
        * khtml/html/html_baseimpl.cpp:
        (HTMLFrameElementImpl::contentPart): factored out old contentDocument code to return KHTMLPart for frame
        (HTMLFrameElementImpl::contentDocument): now just gets the contentDocument from contentPart
        * khtml/html/html_baseimpl.h: added declaration for contentPart

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_html.cpp
WebCore/khtml/ecma/kjs_html.h
WebCore/khtml/ecma/kjs_html.lut.h
WebCore/khtml/html/html_baseimpl.cpp
WebCore/khtml/html/html_baseimpl.h

index dc9dae166e9ee8db930a7403165eb6456de22a80..d061dc69ac940abfbc16b965c24d3639691c2967 100644 (file)
@@ -1,3 +1,19 @@
+2004-08-27  Adele Amchan  <adele@apple.com>
+
+        Reviewed by Darin.
+
+       Fix for:
+       <rdar://problem/3689949> Provide contentWindow access on an iframe
+
+        * khtml/ecma/kjs_html.cpp:
+        (KJS::HTMLElement::getValueProperty): added cases for contentWindow for frames and iframes
+        * khtml/ecma/kjs_html.h: added contentWindow to the list of properties for frames and iframes
+        * khtml/ecma/kjs_html.lut.h: regenerated file
+        * khtml/html/html_baseimpl.cpp:
+        (HTMLFrameElementImpl::contentPart): factored out old contentDocument code to return KHTMLPart for frame
+        (HTMLFrameElementImpl::contentDocument): now just gets the contentDocument from contentPart
+        * khtml/html/html_baseimpl.h: added declaration for contentPart
+
 === Safari-161 ===
 
 2004-08-27  Ken Kocienda  <kocienda@apple.com>
index 7baec27f9a563204fdbfb91bc951563dafea3bb4..2a144d935e18d9b7434b74cbda2e1a7b041b0ceb 100644 (file)
@@ -2,7 +2,7 @@
 /*
  *  This file is part of the KDE libraries
  *  Copyright (C) 1999-2000 Harri Porten (porten@kde.org)
- *  Copyright (C) 2003 Apple Computer, Inc.
+ *  Copyright (C) 2004 Apple Computer, Inc.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Lesser General Public
 
 #include <ApplicationServices/ApplicationServices.h>
 
-
 using namespace KJS;
 
+using DOM::HTMLFrameElementImpl;
+using DOM::HTMLIFrameElementImpl;
+
 IMPLEMENT_PROTOFUNC(HTMLDocFunction)
 
 Value KJS::HTMLDocFunction::tryCall(ExecState *exec, Object &thisObj, const List &args)
@@ -1070,6 +1072,7 @@ const ClassInfo* KJS::HTMLElement::classInfo() const
 @end
 @begin HTMLFrameElementTable 9
   contentDocument KJS::HTMLElement::FrameContentDocument        DontDelete|ReadOnly
+  contentWindow   KJS::HTMLElement::FrameContentWindow          DontDelete|ReadOnly
   frameBorder     KJS::HTMLElement::FrameFrameBorder           DontDelete
   longDesc       KJS::HTMLElement::FrameLongDesc               DontDelete
   marginHeight   KJS::HTMLElement::FrameMarginHeight           DontDelete
@@ -1083,6 +1086,7 @@ const ClassInfo* KJS::HTMLElement::classInfo() const
 @begin HTMLIFrameElementTable 12
   align                  KJS::HTMLElement::IFrameAlign                 DontDelete
   contentDocument KJS::HTMLElement::IFrameContentDocument       DontDelete|ReadOnly
+  contentWindow   KJS::HTMLElement::IFrameContentWindow         DontDelete|ReadOnly
   document       KJS::HTMLElement::IFrameDocument              DontDelete|ReadOnly
   frameBorder    KJS::HTMLElement::IFrameFrameBorder           DontDelete
   height         KJS::HTMLElement::IFrameHeight                DontDelete
@@ -1795,6 +1799,9 @@ Value KJS::HTMLElement::getValueProperty(ExecState *exec, int token) const
     switch (token) {
     case FrameContentDocument: return checkNodeSecurity(exec,frameElement.contentDocument()) ? 
                                      getDOMNode(exec, frameElement.contentDocument()) : Undefined();
+    case FrameContentWindow:   return checkNodeSecurity(exec,frameElement.contentDocument())
+                                    ? Window::retrieve(static_cast<HTMLFrameElementImpl *>(frameElement.handle())->contentPart())
+                                    : Undefined();
     case FrameFrameBorder:     return String(frameElement.frameBorder());
     case FrameLongDesc:        return String(frameElement.longDesc());
     case FrameMarginHeight:    return String(frameElement.marginHeight());
@@ -1815,6 +1822,9 @@ Value KJS::HTMLElement::getValueProperty(ExecState *exec, int token) const
     case IFrameDocument: // non-standard, mapped to contentDocument
     case IFrameContentDocument: return checkNodeSecurity(exec,iFrame.contentDocument()) ? 
                                  getDOMNode(exec, iFrame.contentDocument()) : Undefined();
+    case IFrameContentWindow:  return checkNodeSecurity(exec,iFrame.contentDocument()) 
+                                    ? Window::retrieve(static_cast<HTMLIFrameElementImpl *>(iFrame.handle())->contentPart())
+                                    : Undefined();
     case IFrameFrameBorder:     return String(iFrame.frameBorder());
     case IFrameHeight:          return String(iFrame.height());
     case IFrameLongDesc:        return String(iFrame.longDesc());
index abb2fa382fc70964915e21a53f59e048e29d2f87..5d9b7b28b69e37bf1eecc0beabeb9b85d96e3ac8 100644 (file)
@@ -2,7 +2,7 @@
 /*
  *  This file is part of the KDE libraries
  *  Copyright (C) 1999 Harri Porten (porten@kde.org)
- *  Copyright (C) 2003 Apple Computer, Inc.
+ *  Copyright (C) 2004 Apple Computer, Inc.
  *
  *  This library is free software; you can redistribute it and/or
  *  modify it under the terms of the GNU Lesser General Public
@@ -143,10 +143,10 @@ namespace KJS {
            TableCellCh, TableCellVAlign, TableCellRowSpan, TableCellHeaders,
            TableCellAlign, TableCellAxis, TableCellScope, FrameSetCols,
            FrameSetRows, FrameSrc, FrameLocation, FrameFrameBorder, FrameScrolling,
-           FrameMarginWidth, FrameLongDesc, FrameMarginHeight, FrameName, FrameContentDocument,
+           FrameMarginWidth, FrameLongDesc, FrameMarginHeight, FrameName, FrameContentDocument, FrameContentWindow, 
            FrameNoResize, IFrameLongDesc, IFrameDocument, IFrameAlign,
            IFrameFrameBorder, IFrameSrc, IFrameName, IFrameHeight,
-           IFrameMarginHeight, IFrameMarginWidth, IFrameScrolling, IFrameWidth, IFrameContentDocument,
+           IFrameMarginHeight, IFrameMarginWidth, IFrameScrolling, IFrameWidth, IFrameContentDocument, IFrameContentWindow,
            MarqueeStart, MarqueeStop,
            GetContext,
            ElementInnerHTML, ElementTitle, ElementId, ElementDir, ElementLang,
index b6e9fd7957ad800162dea6bf746a3631b4e2b140..8d5546e6691044a814dd88ad6058dac95c184d9d 100644 (file)
@@ -943,7 +943,7 @@ const struct HashTable HTMLFrameSetElementTable = { 2, 3, HTMLFrameSetElementTab
 namespace KJS {
 
 const struct HashEntry HTMLFrameElementTableEntries[] = {
-   { 0, 0, 0, 0, 0 },
+   { "contentWindow", KJS::HTMLElement::FrameContentWindow, DontDelete|ReadOnly, 0, 0 },
    { "contentDocument", KJS::HTMLElement::FrameContentDocument, DontDelete|ReadOnly, 0, &HTMLFrameElementTableEntries[9] },
    { "location", KJS::HTMLElement::FrameLocation, DontDelete, 0, 0 },
    { "name", KJS::HTMLElement::FrameName, DontDelete, 0, 0 },
@@ -965,25 +965,26 @@ namespace KJS {
 
 const struct HashEntry HTMLIFrameElementTableEntries[] = {
    { 0, 0, 0, 0, 0 },
-   { "frameBorder", KJS::HTMLElement::IFrameFrameBorder, DontDelete, 0, &HTMLIFrameElementTableEntries[15] },
+   { "frameBorder", KJS::HTMLElement::IFrameFrameBorder, DontDelete, 0, &HTMLIFrameElementTableEntries[16] },
    { 0, 0, 0, 0, 0 },
-   { "marginHeight", KJS::HTMLElement::IFrameMarginHeight, DontDelete, 0, 0 },
-   { "src", KJS::HTMLElement::IFrameSrc, DontDelete, 0, &HTMLIFrameElementTableEntries[16] },
+   { "contentWindow", KJS::HTMLElement::IFrameContentWindow, DontDelete|ReadOnly, 0, &HTMLIFrameElementTableEntries[13] },
+   { "src", KJS::HTMLElement::IFrameSrc, DontDelete, 0, &HTMLIFrameElementTableEntries[17] },
    { 0, 0, 0, 0, 0 },
    { 0, 0, 0, 0, 0 },
    { "align", KJS::HTMLElement::IFrameAlign, DontDelete, 0, 0 },
    { 0, 0, 0, 0, 0 },
-   { "height", KJS::HTMLElement::IFrameHeight, DontDelete, 0, &HTMLIFrameElementTableEntries[14] },
-   { "contentDocument", KJS::HTMLElement::IFrameContentDocument, DontDelete|ReadOnly, 0, &HTMLIFrameElementTableEntries[13] },
+   { "height", KJS::HTMLElement::IFrameHeight, DontDelete, 0, &HTMLIFrameElementTableEntries[15] },
+   { "contentDocument", KJS::HTMLElement::IFrameContentDocument, DontDelete|ReadOnly, 0, &HTMLIFrameElementTableEntries[14] },
    { "document", KJS::HTMLElement::IFrameDocument, DontDelete|ReadOnly, 0, &HTMLIFrameElementTableEntries[12] },
    { "longDesc", KJS::HTMLElement::IFrameLongDesc, DontDelete, 0, 0 },
+   { "marginHeight", KJS::HTMLElement::IFrameMarginHeight, DontDelete, 0, 0 },
    { "marginWidth", KJS::HTMLElement::IFrameMarginWidth, DontDelete, 0, 0 },
    { "name", KJS::HTMLElement::IFrameName, DontDelete, 0, 0 },
    { "scrolling", KJS::HTMLElement::IFrameScrolling, DontDelete, 0, 0 },
    { "width", KJS::HTMLElement::IFrameWidth, DontDelete, 0, 0 }
 };
 
-const struct HashTable HTMLIFrameElementTable = { 2, 17, HTMLIFrameElementTableEntries, 12 };
+const struct HashTable HTMLIFrameElementTable = { 2, 18, HTMLIFrameElementTableEntries, 12 };
 
 } // namespace
 
index acee15698cfa14f66c79126b9024b8a6f904c94c..30acbd87dc209ab231e3d39034e63fdd10579173 100644 (file)
@@ -5,7 +5,7 @@
  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
  *           (C) 2000 Simon Hausmann (hausmann@kde.org)
  *           (C) 2001 Dirk Mueller (mueller@kde.org)
- * Copyright (C) 2003 Apple Computer, Inc.
+ * Copyright (C) 2004 Apple Computer, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -485,18 +485,27 @@ void HTMLFrameElementImpl::setFocus(bool received)
        renderFrame->widget()->clearFocus();
 }
 
-DocumentImpl* HTMLFrameElementImpl::contentDocument() const
+KHTMLPart* HTMLFrameElementImpl::contentPart() const
 {
-    KHTMLPart* p = getDocument()->part();
+    // Start with the part that contains this element, our ownerDocument.
+    KHTMLPart* ownerDocumentPart = getDocument()->part();
+    if (!ownerDocumentPart) {
+        return 0;
+    }
 
-    if (p) {
-        KHTMLPart *part = p->findFrame( name.string() );
-        if (part) {
-            return part->xmlDocImpl();
-        }
+    // Find the part for the subframe that this element represents.
+    return ownerDocumentPart->findFrame(name.string());
+}
+
+DocumentImpl* HTMLFrameElementImpl::contentDocument() const
+{
+    KHTMLPart* part = contentPart();
+    if (!part) {
+        return 0;
     }
 
-    return 0;
+    // Return the document for that part, which is our contentDocument.
+    return part->xmlDocImpl();
 }
 
 bool HTMLFrameElementImpl::isURLAttribute(AttributeImpl *attr) const
index 9103d3bb7bd03e88e4ae799ca478c62d09eb6820..d06ee706e3b3e36eb44d7cdc9f3377aeda04d9e6 100644 (file)
@@ -4,7 +4,7 @@
  * Copyright (C) 1999 Lars Knoll (knoll@kde.org)
  *           (C) 1999 Antti Koivisto (koivisto@kde.org)
  *           (C) 2000 Simon Hausmann <hausmann@kde.org>
- * Copyright (C) 2003 Apple Computer, Inc.
+ * Copyright (C) 2004 Apple Computer, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Library General Public
@@ -32,6 +32,7 @@
 
 #include <qscrollview.h>
 
+class KHTMLPart;
 class KHTMLView;
 
 namespace khtml {
@@ -95,6 +96,7 @@ public:
     virtual bool isFocusable() const;
     virtual void setFocus(bool);
 
+    KHTMLPart* contentPart() const;
     DocumentImpl* contentDocument() const;
     
     virtual bool isURLAttribute(AttributeImpl *attr) const;