Merged the following patch from David Faure to fix:
authormjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Dec 2003 11:00:40 +0000 (11:00 +0000)
committermjs <mjs@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Tue, 2 Dec 2003 11:00:40 +0000 (11:00 +0000)
<rdar://problem/3497663>: Can't look up frames by number using windw[i] notation

    2003-11-25  David Faure  <faure@kde.org>

        * ecma/kjs_window.cpp: Implement hasProperty and get for frames by number in Window,
        to fix window[0] and parent[1] etc. (#56983)

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

WebCore/ChangeLog-2005-08-23
WebCore/khtml/ecma/kjs_window.cpp

index 571baa9..f8c5676 100644 (file)
@@ -1,3 +1,14 @@
+2003-12-02  Maciej Stachowiak  <mjs@apple.com>
+
+       Merged the following patch from David Faure to fix:
+
+       <rdar://problem/3497663>: Can't look up frames by number using windw[i] notation
+
+    2003-11-25  David Faure  <faure@kde.org>
+
+        * ecma/kjs_window.cpp: Implement hasProperty and get for frames by number in Window,
+        to fix window[0] and parent[1] etc. (#56983)
+
 2003-11-21  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Richard.
index 2464ef2..574acfa 100644 (file)
@@ -698,6 +698,21 @@ Value Window::get(ExecState *exec, const Identifier &p) const
   if (kp)
     return Value(retrieve(kp));
 
+  // allow window[1] or parent[1] etc. (#56983)
+  bool ok;
+  unsigned int i = p.toArrayIndex(&ok);
+  if (ok) {
+    QPtrList<KParts::ReadOnlyPart> frames = m_part->frames();
+    unsigned int len = frames.count();
+    if (i < len) {
+      KParts::ReadOnlyPart* frame = frames.at(i);
+      if (frame && frame->inherits("KHTMLPart")) {
+       KHTMLPart *khtml = static_cast<KHTMLPart*>(frame);
+       return Window::retrieve(khtml);
+      }
+    }
+  }
+
   // allow shortcuts like 'Image1' instead of document.images.Image1
   if (isSafeScript(exec) &&
       m_part->document().isHTMLDocument()) { // might be XML
@@ -1757,7 +1772,7 @@ Value FrameArray::get(ExecState *exec, const Identifier &p) const
     return Undefined();
 
   QPtrList<KParts::ReadOnlyPart> frames = part->frames();
-  int len = frames.count();
+  unsigned int len = frames.count();
   if (p == lengthPropertyName)
     return Number(len);
   else if (p== "location") // non-standard property, but works in NS and IE
@@ -1771,10 +1786,10 @@ Value FrameArray::get(ExecState *exec, const Identifier &p) const
   // check for the name or number
   KParts::ReadOnlyPart *frame = part->findFrame(p.qstring());
   if (!frame) {
-    int i = (int)p.toDouble();
-    if (i >= 0 && i < len){
+    bool ok;
+    unsigned int i = p.toArrayIndex(&ok);
+    if (ok && i < len)
       frame = frames.at(i);
-    }
   }
 
   // we are potentially fetching a reference to a another Window object here.