[SCM] WebKit Debian packaging branch, debian/unstable, updated. debian/1.1.15-1-40151-g37bb677

mjs mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 08:46:28 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit a14d9168108633525d618f3b195b36eb3de90846
Author: mjs <mjs at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Tue Jun 15 08:12:00 2004 +0000

            Reviewed by Darin.
    
    	<rdar://problem/3685309>: (properties not shared for JS wrappers of same DOM object, accessed from different frames)
    
            * khtml/ecma/kjs_binding.cpp:
            (ScriptInterpreter::domObjects):
            (ScriptInterpreter::domObjectsPerDocument):
            (ScriptInterpreter::ScriptInterpreter):
            (ScriptInterpreter::forgetDOMObject):
            (ScriptInterpreter::getDOMObjectForDocument):
            (ScriptInterpreter::putDOMObjectForDocument):
            (ScriptInterpreter::deleteDOMObjectsForDocument):
            (ScriptInterpreter::mark):
            (ScriptInterpreter::forgetDOMObjectsForDocument):
            (ScriptInterpreter::updateDOMObjectDocument):
            * khtml/ecma/kjs_binding.h:
            (KJS::ScriptInterpreter::getDOMObject):
            (KJS::ScriptInterpreter::putDOMObject):
            (KJS::ScriptInterpreter::deleteDOMObject):
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@6851 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/ChangeLog-2005-08-23 b/WebCore/ChangeLog-2005-08-23
index cfdf378..10230d3 100644
--- a/WebCore/ChangeLog-2005-08-23
+++ b/WebCore/ChangeLog-2005-08-23
@@ -1,3 +1,25 @@
+2004-06-15  Maciej Stachowiak  <mjs at apple.com>
+
+        Reviewed by Darin.
+
+	<rdar://problem/3685309>: (properties not shared for JS wrappers of same DOM object, accessed from different frames)
+
+        * khtml/ecma/kjs_binding.cpp:
+        (ScriptInterpreter::domObjects):
+        (ScriptInterpreter::domObjectsPerDocument):
+        (ScriptInterpreter::ScriptInterpreter):
+        (ScriptInterpreter::forgetDOMObject):
+        (ScriptInterpreter::getDOMObjectForDocument):
+        (ScriptInterpreter::putDOMObjectForDocument):
+        (ScriptInterpreter::deleteDOMObjectsForDocument):
+        (ScriptInterpreter::mark):
+        (ScriptInterpreter::forgetDOMObjectsForDocument):
+        (ScriptInterpreter::updateDOMObjectDocument):
+        * khtml/ecma/kjs_binding.h:
+        (KJS::ScriptInterpreter::getDOMObject):
+        (KJS::ScriptInterpreter::putDOMObject):
+        (KJS::ScriptInterpreter::deleteDOMObject):
+
 2004-06-15  Darin Adler  <darin at apple.com>
 
         - rolled out Ken's fix for <rdar://problem/3672377> assertion failure in AppendNodeCommandImpl::doApply due to non-0 exception code trying to insert a DIV markup string
diff --git a/WebCore/khtml/ecma/kjs_binding.cpp b/WebCore/khtml/ecma/kjs_binding.cpp
index e9799ac..5219686 100644
--- a/WebCore/khtml/ecma/kjs_binding.cpp
+++ b/WebCore/khtml/ecma/kjs_binding.cpp
@@ -140,14 +140,34 @@ Value DOMFunction::call(ExecState *exec, Object &thisObj, const List &args)
   return val;
 }
 
+static QPtrDict<DOMObject> * staticDomObjects = 0;
+QPtrDict< QPtrDict<DOMObject> > * staticDomObjectsPerDocument = 0;
+
+QPtrDict<DOMObject> & ScriptInterpreter::domObjects()
+{
+  if (!staticDomObjects) {
+    staticDomObjects = new QPtrDict<DOMObject>(1021);
+  }
+  return *staticDomObjects;
+}
+
+QPtrDict< QPtrDict<DOMObject> > & ScriptInterpreter::domObjectsPerDocument()
+{
+  if (!staticDomObjects) {
+    staticDomObjectsPerDocument = new QPtrDict<QPtrDict<DOMObject> >();
+    staticDomObjectsPerDocument->setAutoDelete(true);
+  }
+  return *staticDomObjectsPerDocument;
+}
+
+
 ScriptInterpreter::ScriptInterpreter( const Object &global, KHTMLPart* part )
-  : Interpreter( global ), m_part( part ), m_domObjects(1021),
+  : Interpreter( global ), m_part( part ),
     m_evt( 0L ), m_inlineCode(false), m_timerCallback(false)
 {
 #ifdef KJS_VERBOSE
   kdDebug(6070) << "ScriptInterpreter::ScriptInterpreter " << this << " for part=" << m_part << endl;
 #endif
-  m_domObjectsPerDocument.setAutoDelete(true);
 }
 
 ScriptInterpreter::~ScriptInterpreter()
@@ -159,20 +179,12 @@ ScriptInterpreter::~ScriptInterpreter()
 
 void ScriptInterpreter::forgetDOMObject( void* objectHandle )
 {
-  InterpreterImp *first = InterpreterImp::firstInterpreter();
-  if (first) {
-    InterpreterImp *scr = first;
-    do {
-      if ( scr->interpreter()->rtti() == 1 )
-        static_cast<ScriptInterpreter *>(scr->interpreter())->deleteDOMObject( objectHandle );
-      scr = scr->nextInterpreter();
-    } while (scr != first);
-  }
+  deleteDOMObject( objectHandle );
 }
 
-DOMObject* ScriptInterpreter::getDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle ) const
+DOMObject* ScriptInterpreter::getDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle )
 {
-  QPtrDict<DOMObject> *documentDict = (QPtrDict<DOMObject> *)m_domObjectsPerDocument[documentHandle];
+  QPtrDict<DOMObject> *documentDict = (QPtrDict<DOMObject> *)domObjectsPerDocument()[documentHandle];
   if (documentDict) {
     return (*documentDict)[objectHandle];
   }
@@ -182,10 +194,10 @@ DOMObject* ScriptInterpreter::getDOMObjectForDocument( DOM::DocumentImpl* docume
 
 void ScriptInterpreter::putDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle, DOMObject *obj )
 {
-  QPtrDict<DOMObject> *documentDict = (QPtrDict<DOMObject> *)m_domObjectsPerDocument[documentHandle];
+  QPtrDict<DOMObject> *documentDict = (QPtrDict<DOMObject> *)domObjectsPerDocument()[documentHandle];
   if (!documentDict) {
     documentDict = new QPtrDict<DOMObject>();
-    m_domObjectsPerDocument.insert(documentHandle, documentDict);
+    domObjectsPerDocument().insert(documentHandle, documentDict);
   }
 
   documentDict->insert( objectHandle, obj );
@@ -193,12 +205,12 @@ void ScriptInterpreter::putDOMObjectForDocument( DOM::DocumentImpl* documentHand
 
 bool ScriptInterpreter::deleteDOMObjectsForDocument( DOM::DocumentImpl* documentHandle )
 {
-  return m_domObjectsPerDocument.remove( documentHandle );
+  return domObjectsPerDocument().remove( documentHandle );
 }
 
 void ScriptInterpreter::mark()
 {
-  QPtrDictIterator<QPtrDict<DOMObject> > dictIterator(m_domObjectsPerDocument);
+  QPtrDictIterator<QPtrDict<DOMObject> > dictIterator(domObjectsPerDocument());
 
   QPtrDict<DOMObject> *objectDict;
   while ((objectDict = dictIterator.current())) {
@@ -217,34 +229,14 @@ void ScriptInterpreter::mark()
 
 void ScriptInterpreter::forgetDOMObjectsForDocument( DOM::DocumentImpl* documentHandle )
 {
-  InterpreterImp *first = InterpreterImp::firstInterpreter();
-  if (first) {
-    InterpreterImp *scr = first;
-    do {
-      if ( scr->interpreter()->rtti() == 1 )
-        static_cast<ScriptInterpreter *>(scr->interpreter())->deleteDOMObjectsForDocument( documentHandle );
-      scr = scr->nextInterpreter();
-    } while (scr != first);
-  }
+  deleteDOMObjectsForDocument( documentHandle );
 }
 
 void ScriptInterpreter::updateDOMObjectDocument(void *objectHandle, DOM::DocumentImpl *oldDoc, DOM::DocumentImpl *newDoc)
 {
-  InterpreterImp *first = InterpreterImp::firstInterpreter();
-  if (first) {
-    InterpreterImp *scr = first;
-    do {
-      if ( scr->interpreter()->rtti() == 1 ) {
-	ScriptInterpreter *interp = static_cast<ScriptInterpreter *>(scr->interpreter());
-	
-	DOMObject* cachedObject = interp->getDOMObjectForDocument(oldDoc, objectHandle);
-	if (cachedObject) {
-	  interp->putDOMObjectForDocument(newDoc, objectHandle, cachedObject);
-	}
-      }
-	
-      scr = scr->nextInterpreter();
-    } while (scr != first);
+  DOMObject* cachedObject = getDOMObjectForDocument(oldDoc, objectHandle);
+  if (cachedObject) {
+    putDOMObjectForDocument(newDoc, objectHandle, cachedObject);
   }
 }
 
diff --git a/WebCore/khtml/ecma/kjs_binding.h b/WebCore/khtml/ecma/kjs_binding.h
index 304e5b6..29785c8 100644
--- a/WebCore/khtml/ecma/kjs_binding.h
+++ b/WebCore/khtml/ecma/kjs_binding.h
@@ -90,19 +90,19 @@ namespace KJS {
     ScriptInterpreter( const Object &global, KHTMLPart* part );
     virtual ~ScriptInterpreter();
 
-    DOMObject* getDOMObject( void* objectHandle ) const {
-      return m_domObjects[objectHandle];
+    static DOMObject* getDOMObject( void* objectHandle ) {
+      return domObjects()[objectHandle];
     }
-    void putDOMObject( void* objectHandle, DOMObject* obj ) {
-      m_domObjects.insert( objectHandle, obj );
+    static void putDOMObject( void* objectHandle, DOMObject* obj ) {
+      domObjects().insert( objectHandle, obj );
     }
-    bool deleteDOMObject( void* objectHandle ) {
-      return m_domObjects.remove( objectHandle );
+    static bool deleteDOMObject( void* objectHandle ) {
+      return domObjects().remove( objectHandle );
     }
 
-    DOMObject* getDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle ) const;
-    void putDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle, DOMObject *obj );
-    bool deleteDOMObjectsForDocument( DOM::DocumentImpl* documentHandle );
+    static DOMObject* getDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle );
+    static void putDOMObjectForDocument( DOM::DocumentImpl* documentHandle, void *objectHandle, DOMObject *obj );
+    static bool deleteDOMObjectsForDocument( DOM::DocumentImpl* documentHandle );
 
     /**
      * Static method. Makes all interpreters forget about the object
@@ -134,8 +134,9 @@ namespace KJS {
     
   private:
     KHTMLPart* m_part;
-    QPtrDict<DOMObject> m_domObjects;
-    QPtrDict<QPtrDict<DOMObject> > m_domObjectsPerDocument;
+
+    static QPtrDict<DOMObject> &domObjects();
+    static QPtrDict<QPtrDict<DOMObject> > &domObjectsPerDocument();
 
     DOM::Event *m_evt;
     bool m_inlineCode;

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list