WebKit:
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Oct 2004 00:24:39 +0000 (00:24 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 1 Oct 2004 00:24:39 +0000 (00:24 +0000)
Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass

Also changed dashboard regions dictionary to use "control"
for scroller region label, instead of "scroller, per
request from ouch.

        Reviewed by Chris.

        * Plugins.subproj/npruntime.h:
        * WebView.subproj/WebView.m:
        (-[WebView _addScrollerDashboardRegions:from:]):

JavaScriptCore:
Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (_NPN_GetProperty):
        (_NPN_HasProperty):
        (_NPN_HasMethod):
        * bindings/c/c_class.cpp:
        (CClass::methodsNamed):
        (CClass::fieldNamed):
        * bindings/c/c_class.h:
        * bindings/c/c_instance.cpp:
        (CInstance::invokeMethod):
        * bindings/jni/jni_class.cpp:
        (JavaClass::methodsNamed):
        * bindings/jni/jni_class.h:
        * bindings/npruntime.h:
        * bindings/objc/objc_class.h:
        * bindings/objc/objc_class.mm:
        (ObjcClass::methodsNamed):
        * bindings/runtime.h:
        * bindings/runtime_object.cpp:
        (RuntimeObjectImp::get):
        (RuntimeObjectImp::hasProperty):

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

15 files changed:
JavaScriptCore/ChangeLog
JavaScriptCore/bindings/NP_jsobject.cpp
JavaScriptCore/bindings/c/c_class.cpp
JavaScriptCore/bindings/c/c_class.h
JavaScriptCore/bindings/c/c_instance.cpp
JavaScriptCore/bindings/jni/jni_class.cpp
JavaScriptCore/bindings/jni/jni_class.h
JavaScriptCore/bindings/npruntime.h
JavaScriptCore/bindings/objc/objc_class.h
JavaScriptCore/bindings/objc/objc_class.mm
JavaScriptCore/bindings/runtime.h
JavaScriptCore/bindings/runtime_object.cpp
WebKit/ChangeLog
WebKit/Plugins.subproj/npruntime.h
WebKit/WebView.subproj/WebView.m

index 47e0cb60f8ede15a838481f4635f39aabca1edc0..7f5ded4625cdce53d83219c395390744a9733c7e 100644 (file)
@@ -1,3 +1,31 @@
+2004-09-30  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass
+
+        Reviewed by Chris.
+
+        * bindings/NP_jsobject.cpp:
+        (_NPN_GetProperty):
+        (_NPN_HasProperty):
+        (_NPN_HasMethod):
+        * bindings/c/c_class.cpp:
+        (CClass::methodsNamed):
+        (CClass::fieldNamed):
+        * bindings/c/c_class.h:
+        * bindings/c/c_instance.cpp:
+        (CInstance::invokeMethod):
+        * bindings/jni/jni_class.cpp:
+        (JavaClass::methodsNamed):
+        * bindings/jni/jni_class.h:
+        * bindings/npruntime.h:
+        * bindings/objc/objc_class.h:
+        * bindings/objc/objc_class.mm:
+        (ObjcClass::methodsNamed):
+        * bindings/runtime.h:
+        * bindings/runtime_object.cpp:
+        (RuntimeObjectImp::get):
+        (RuntimeObjectImp::hasProperty):
+
 2004-09-29  Chris Blumenberg  <cblu@apple.com>
 
        Prepended underscores to NPN methods so that when the QT plug-in loads these symbols, it uses the non-underscore versions in WebKit. Without this, the QT plug-in was failing to load when launching Safari from the command-line.
index d611a6ff8f7e754bc7872236bdc76a492f151bbf..992e7a9b0cbd0388ced361a136c52e9a8050b2b6 100644 (file)
@@ -240,7 +240,7 @@ bool _NPN_GetProperty (NPP npp, NPObject *o, NPIdentifier propertyName, NPVarian
         return true;
     }
     else if (o->_class->hasProperty && o->_class->getProperty) {
-        if (o->_class->hasProperty (o->_class, propertyName)) {
+        if (o->_class->hasProperty (o, propertyName)) {
             return o->_class->getProperty (o, propertyName, variant);
         }
         else {
@@ -330,7 +330,7 @@ bool _NPN_HasProperty(NPP npp, NPObject *o, NPIdentifier propertyName)
         return result;
     }
     else if (o->_class->hasProperty) {
-        return o->_class->hasProperty (o->_class, propertyName);
+        return o->_class->hasProperty (o, propertyName);
     }
     
     return false;
@@ -359,7 +359,7 @@ bool _NPN_HasMethod(NPP npp, NPObject *o, NPIdentifier methodName)
     }
     
     else if (o->_class->hasMethod) {
-        return o->_class->hasMethod (o->_class, methodName);
+        return o->_class->hasMethod (o, methodName);
     }
     
     return false;
index 0a5f9335ed4c7e38abc155e09aefca30f6d07a7f..a0c2d42a1ff52c4255a6d5fdf8a6f38c9b2f058a 100644 (file)
@@ -83,7 +83,7 @@ const char *CClass::name() const
     return "";
 }
 
-MethodList CClass::methodsNamed(const char *_name) const
+MethodList CClass::methodsNamed(const char *_name, Instance *instance) const
 {
     MethodList methodList;
 
@@ -96,7 +96,9 @@ MethodList CClass::methodsNamed(const char *_name) const
     }
     
     NPIdentifier ident = _NPN_GetStringIdentifier (_name);
-    if (_isa->hasMethod && _isa->hasMethod (_isa, ident)){
+    const CInstance *inst = static_cast<const CInstance*>(instance);
+    NPObject *obj = inst->getObject();
+    if (_isa->hasMethod && _isa->hasMethod (obj, ident)){
         Method *aMethod = new CMethod (ident);
         CFDictionaryAddValue ((CFMutableDictionaryRef)_methods, methodName, aMethod);
         methodList.addMethod (aMethod);
@@ -118,7 +120,9 @@ Field *CClass::fieldNamed(const char *name, Instance *instance) const
     }
 
     NPIdentifier ident = _NPN_GetStringIdentifier (name);
-    if (_isa->hasProperty && _isa->hasProperty (_isa, ident)){
+    const CInstance *inst = static_cast<const CInstance*>(instance);
+    NPObject *obj = inst->getObject();
+    if (_isa->hasProperty && _isa->hasProperty (obj, ident)){
         aField = new CField (ident);
         CFDictionaryAddValue ((CFMutableDictionaryRef)_fields, fieldName, aField);
     }
index 45cc21b4a68a306433c777fbf682e6ab479f3c0f..91222c3d623995b2f0a162b901f2366c97b2e0eb 100644 (file)
@@ -73,7 +73,7 @@ public:
 
     virtual const char *name() const;
     
-    virtual MethodList methodsNamed(const char *name) const;
+    virtual MethodList methodsNamed(const char *name, Instance *instance) const;
     
     virtual Field *fieldNamed(const char *name, Instance *instance) const;
     
index f77bed912d279a96935021240c38575aa6626e0d..8062ad118f09d09bbe849e5aa255dae305d11a2a 100644 (file)
@@ -104,7 +104,7 @@ Value CInstance::invokeMethod (KJS::ExecState *exec, const MethodList &methodLis
     method = static_cast<CMethod*>(methodList.methodAt(0));
 
     NPIdentifier ident = _NPN_GetStringIdentifier (method->name());
-    if (!_object->_class->hasMethod (_object->_class, ident)) {
+    if (!_object->_class->hasMethod (_object, ident)) {
         return Undefined();
     }
 
index d15923f8f34a63c21352de9e9267d179ef15a719..ee6d72f8023ba96f9503adb340a9ff261137c3fa 100644 (file)
@@ -159,7 +159,7 @@ JavaClass *JavaClass::classForInstance (jobject instance)
     return aClass;
 }
 
-MethodList JavaClass::methodsNamed(const char *name) const
+MethodList JavaClass::methodsNamed(const char *name, Instance *instance) const
 {
     CFStringRef methodName = CFStringCreateWithCString(NULL, name, kCFStringEncodingASCII);
     MethodList *methodList = (MethodList *)CFDictionaryGetValue(_methods, methodName);
index 63034a800a5f2422de8543cd07cf7061bf22fbd4..c7ad4e3def5c6daf715a2df1888584654138411c 100644 (file)
@@ -98,7 +98,7 @@ public:
 
     virtual const char *name() const { return _name; };
     
-    virtual MethodList methodsNamed(const char *name) const;
+    virtual MethodList methodsNamed(const char *name, Instance *instance) const;
     
     virtual Field *fieldNamed(const char *name, Instance *instance) const;
     
index c18f4fd24d7da3f77eea8bc0cfc77e8769e6375c..9af6a6aef75bdd72ee53a788f4898b6754ad6903 100644 (file)
@@ -238,10 +238,10 @@ int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
 typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
 typedef void (*NPDeallocateFunctionPtr)(NPObject *obj);
 typedef void (*NPInvalidateFunctionPtr)(NPObject *obj);
-typedef bool (*NPHasMethodFunctionPtr)(NPClass *theClass, NPIdentifier name);
+typedef bool (*NPHasMethodFunctionPtr)(NPObject *obj, NPIdentifier name);
 typedef bool (*NPInvokeFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
 typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
-typedef bool (*NPHasPropertyFunctionPtr)(NPClass *theClass, NPIdentifier name);
+typedef bool (*NPHasPropertyFunctionPtr)(NPObject *obj, NPIdentifier name);
 typedef bool (*NPGetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, NPVariant *result);
 typedef bool (*NPSetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *value);
 typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
index 540730daf20a6f9cc126f4adae503da705ae0227..1272e1cb5d4a60d6ecf932d5f7ee2444d7790ff7 100644 (file)
@@ -73,7 +73,7 @@ public:
 
     virtual const char *name() const;
     
-    virtual MethodList methodsNamed(const char *name) const;
+    virtual MethodList methodsNamed(const char *name, Instance *instance) const;
     
     virtual Field *fieldNamed(const char *name, Instance *instance) const;
 
index af0a0e678ccacf677ab2de516466229a73c66b4d..58bd28cb8f29b2d12435e9efad876e1fda20228b 100644 (file)
@@ -85,7 +85,7 @@ const char *ObjcClass::name() const
     return _isa->name;
 }
 
-MethodList ObjcClass::methodsNamed(const char *_name) const
+MethodList ObjcClass::methodsNamed(const char *_name, Instance *instance) const
 {
     MethodList methodList;
     char name[4096];
index 9aa1dc153dac75b57bc05b38f240d66431ac43a5..a39446cd17d877d09d3ca29fa16b5bf3e3086d6c 100644 (file)
@@ -110,7 +110,7 @@ class Class
 public:
     virtual const char *name() const = 0;
     
-    virtual MethodList methodsNamed(const char *name) const = 0;
+    virtual MethodList methodsNamed(const char *name, Instance *instance) const = 0;
     
     virtual Constructor *constructorAt(long i) const = 0;
     virtual long numConstructors() const = 0;
index 08385c972e1e25172a5c4c1e2947eaa72cb48959..543492f386ab3644aca18daad4f93fd950bbcf9c 100644 (file)
@@ -78,7 +78,7 @@ Value RuntimeObjectImp::get(ExecState *exec, const Identifier &propertyName) con
         else {
             // Now check if a method with specified name exists, if so return a function object for
             // that method.
-            MethodList methodList = aClass->methodsNamed(propertyName.ascii());
+            MethodList methodList = aClass->methodsNamed(propertyName.ascii(), instance);
             if (methodList.length() > 0) {
                 result = Object (new RuntimeMethodImp(exec, propertyName, methodList));
             }
@@ -135,7 +135,7 @@ bool RuntimeObjectImp::hasProperty(ExecState *exec,
         return true;
     }
         
-    MethodList methodList = instance->getClass()->methodsNamed(propertyName.ascii());
+    MethodList methodList = instance->getClass()->methodsNamed(propertyName.ascii(), instance);
 
     instance->end();
 
index 8b24a6f2e6f85238b50fe8a0b5232f9234aa469c..1584512682ced728390402492a8208261c6dfa7b 100644 (file)
@@ -1,3 +1,17 @@
+2004-09-30  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/3821215> NPN hasMethod and hasProperty functions should take NPObjects, not NPClass
+
+       Also changed dashboard regions dictionary to use "control"
+       for scroller region label, instead of "scroller, per
+       request from ouch. 
+               
+        Reviewed by Chris.
+
+        * Plugins.subproj/npruntime.h:
+        * WebView.subproj/WebView.m:
+        (-[WebView _addScrollerDashboardRegions:from:]):
+
 2004-09-30  Chris Blumenberg  <cblu@apple.com>
 
        Fixed: <rdar://problem/3498680> switching back and forth between tabs stops calling anything in a plug-in
index c18f4fd24d7da3f77eea8bc0cfc77e8769e6375c..9af6a6aef75bdd72ee53a788f4898b6754ad6903 100644 (file)
@@ -238,10 +238,10 @@ int32_t NPN_IntFromIdentifier(NPIdentifier identifier);
 typedef NPObject *(*NPAllocateFunctionPtr)(NPP npp, NPClass *aClass);
 typedef void (*NPDeallocateFunctionPtr)(NPObject *obj);
 typedef void (*NPInvalidateFunctionPtr)(NPObject *obj);
-typedef bool (*NPHasMethodFunctionPtr)(NPClass *theClass, NPIdentifier name);
+typedef bool (*NPHasMethodFunctionPtr)(NPObject *obj, NPIdentifier name);
 typedef bool (*NPInvokeFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *args, uint32_t argCount, NPVariant *result);
 typedef bool (*NPInvokeDefaultFunctionPtr)(NPObject *npobj, const NPVariant *args, uint32_t argCount, NPVariant *result);
-typedef bool (*NPHasPropertyFunctionPtr)(NPClass *theClass, NPIdentifier name);
+typedef bool (*NPHasPropertyFunctionPtr)(NPObject *obj, NPIdentifier name);
 typedef bool (*NPGetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, NPVariant *result);
 typedef bool (*NPSetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *value);
 typedef bool (*NPRemovePropertyFunctionPtr)(NPObject *npobj, NPIdentifier name);
index 2435e4e9107de97bfa34b2a419d90c8d1a9a086d..3badff33b6b5093f6db9921eb6995aceef2ad3c6 100644 (file)
@@ -1128,6 +1128,7 @@ NSString *_WebMainFrameURLKey =         @"mainFrameURL";
     _private->initiatedDrag = initiatedDrag;
 }
 
+#define DASHBOARD_CONTROL_LABEL @"control"
 
 - (void)_addScrollerDashboardRegions:(NSMutableDictionary *)regions from:(NSArray *)views
 {
@@ -1157,10 +1158,10 @@ NSString *_WebMainFrameURLKey =         @"mainFrameURL";
                         [[[WebDashboardRegion alloc] initWithRect:adjustedBounds 
                                     clip:adjustedClip type:WebDashboardRegionTypeScrollerRectangle] autorelease];
             NSMutableArray *scrollerRegions;
-            scrollerRegions = [regions objectForKey:@"scroller"];
+            scrollerRegions = [regions objectForKey:DASHBOARD_CONTROL_LABEL];
             if (!scrollerRegions) {
                 scrollerRegions = [NSMutableArray array];
-                [regions setObject:scrollerRegions forKey:@"scroller"];
+                [regions setObject:scrollerRegions forKey:DASHBOARD_CONTROL_LABEL];
             }
             [scrollerRegions addObject:aRegion];
         }