[SCM] WebKit Debian packaging branch, debian/experimental, updated. upstream/1.3.3-9427-gc2be6fc

andersca at apple.com andersca at apple.com
Wed Dec 22 11:35:03 UTC 2010


The following commit has been merged in the debian/experimental branch:
commit 022916bd4b0fa8ee55e4fdb55148978802360736
Author: andersca at apple.com <andersca at apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Thu Jul 29 22:21:43 2010 +0000

    Implement NPN_Enumerate
    https://bugs.webkit.org/show_bug.cgi?id=43215
    
    Reviewed by Sam Weinig.
    
    * WebProcess/Plugins/JSNPObject.cpp:
    (WebKit::npIdentifierFromIdentifier):
    Get the UTF-8 string representation instead of the lossy ASCII representation.
    
    (WebKit::JSNPObject::getOwnPropertyNames):
    Implement by calling the NPClass::enumerate function.
    
    * WebProcess/Plugins/JSNPObject.h:
    * WebProcess/Plugins/NPJSObject.cpp:
    (WebKit::NPJSObject::enumerate):
    Implement by calling JSObject::getPropertyNames.
    
    (WebKit::NPJSObject::npClass):
    (WebKit::NPJSObject::NP_Enumerate):
    Call NPJSObject::enumerate.
    
    * WebProcess/Plugins/NPJSObject.h:
    * WebProcess/Plugins/NPRuntimeUtilities.cpp:
    (WebKit::createNPObject):
    Fix a comment.
    
    * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
    (WebKit::NPN_Enumerate):
    Call the NPClass::enumerate function.
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@64312 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebKit2/ChangeLog b/WebKit2/ChangeLog
index 1f5d579..63c2795 100644
--- a/WebKit2/ChangeLog
+++ b/WebKit2/ChangeLog
@@ -1,3 +1,35 @@
+2010-07-29  Anders Carlsson  <andersca at apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Implement NPN_Enumerate
+        https://bugs.webkit.org/show_bug.cgi?id=43215
+
+        * WebProcess/Plugins/JSNPObject.cpp:
+        (WebKit::npIdentifierFromIdentifier):
+        Get the UTF-8 string representation instead of the lossy ASCII representation.
+        
+        (WebKit::JSNPObject::getOwnPropertyNames):
+        Implement by calling the NPClass::enumerate function.
+
+        * WebProcess/Plugins/JSNPObject.h:
+        * WebProcess/Plugins/NPJSObject.cpp:
+        (WebKit::NPJSObject::enumerate):
+        Implement by calling JSObject::getPropertyNames.
+
+        (WebKit::NPJSObject::npClass):
+        (WebKit::NPJSObject::NP_Enumerate):
+        Call NPJSObject::enumerate.
+
+        * WebProcess/Plugins/NPJSObject.h:
+        * WebProcess/Plugins/NPRuntimeUtilities.cpp:
+        (WebKit::createNPObject):
+        Fix a comment.
+
+        * WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp:
+        (WebKit::NPN_Enumerate):
+        Call the NPClass::enumerate function.
+
 2010-07-29  John Sullivan  <sullivan at apple.com>
 
         <https://bugs.webkit.org/show_bug.cgi?id=43203>
diff --git a/WebKit2/WebProcess/Plugins/JSNPObject.cpp b/WebKit2/WebProcess/Plugins/JSNPObject.cpp
index bafb54b..28c0821 100644
--- a/WebKit2/WebProcess/Plugins/JSNPObject.cpp
+++ b/WebKit2/WebProcess/Plugins/JSNPObject.cpp
@@ -33,6 +33,7 @@
 #include <JavaScriptCore/ObjectPrototype.h>
 #include <JavaScriptCore/JSLock.h>
 #include <WebCore/IdentifierRep.h>
+#include <WebCore/PlatformString.h>
 
 using namespace WebCore;
 using namespace JSC;
@@ -41,7 +42,7 @@ namespace WebKit {
 
 static NPIdentifier npIdentifierFromIdentifier(const Identifier& identifier)
 {
-    return static_cast<NPIdentifier>(IdentifierRep::get(identifier.ascii()));
+    return static_cast<NPIdentifier>(IdentifierRep::get(identifier.ustring().UTF8String().data()));
 }
 
 const ClassInfo JSNPObject::s_info = { "NPObject", 0, 0, 0 };
@@ -227,6 +228,48 @@ void JSNPObject::put(ExecState* exec, const Identifier& propertyName, JSValue va
     releaseNPVariantValue(&variant);
 }
 
+void JSNPObject::getOwnPropertyNames(ExecState* exec, PropertyNameArray& propertyNameArray, EnumerationMode mode)
+{
+    if (!m_npObject) {
+        throwInvalidAccessError(exec);
+        return;
+    }
+
+    if (!NP_CLASS_STRUCT_VERSION_HAS_ENUM(m_npObject->_class) || !m_npObject->_class->enumerate)
+        return;
+
+    NPIdentifier* identifiers = 0;
+    uint32_t identifierCount = 0;
+    
+    {
+        JSLock::DropAllLocks dropAllLocks(SilenceAssertionsOnly);
+
+        // FIXME: Handle enumerate setting an exception.
+        // FIXME: Find out what happens if calling enumerate causes the plug-in to go away.
+        // FIXME: Should we throw an exception if enumerate returns false?
+        if (!m_npObject->_class->enumerate(m_npObject, &identifiers, &identifierCount))
+            return;
+    }
+
+    for (uint32_t i = 0; i < identifierCount; ++i) {
+        IdentifierRep* identifierRep = static_cast<IdentifierRep*>(identifiers[i]);
+        
+        Identifier identifier;
+        if (identifierRep->isString()) {
+            const char* string = identifierRep->string();
+            int length = strlen(string);
+            
+            identifier = Identifier(exec, String::fromUTF8WithLatin1Fallback(string, length).impl());
+        } else
+            identifier = Identifier::from(exec, identifierRep->number());
+
+        propertyNameArray.add(identifier);
+    }
+
+    // This should use NPN_MemFree, but we know that it uses free under the hood.
+    free(identifiers);
+}
+
 JSValue JSNPObject::propertyGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName)
 {
     JSNPObject* thisObj = static_cast<JSNPObject*>(asObject(slotBase));
diff --git a/WebKit2/WebProcess/Plugins/JSNPObject.h b/WebKit2/WebProcess/Plugins/JSNPObject.h
index 9c9dba0..9685a59 100644
--- a/WebKit2/WebProcess/Plugins/JSNPObject.h
+++ b/WebKit2/WebProcess/Plugins/JSNPObject.h
@@ -61,6 +61,8 @@ private:
     virtual bool getOwnPropertyDescriptor(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::PropertyDescriptor&);
     virtual void put(JSC::ExecState*, const JSC::Identifier& propertyName, JSC::JSValue, JSC::PutPropertySlot&);
 
+    virtual void getOwnPropertyNames(JSC::ExecState*, JSC::PropertyNameArray&, JSC::EnumerationMode mode = JSC::ExcludeDontEnumProperties);
+
     static JSC::JSValue propertyGetter(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
     static JSC::JSValue methodGetter(JSC::ExecState*, JSC::JSValue, const JSC::Identifier&);
     static JSC::JSObject* throwInvalidAccessError(JSC::ExecState*);
diff --git a/WebKit2/WebProcess/Plugins/NPJSObject.cpp b/WebKit2/WebProcess/Plugins/NPJSObject.cpp
index 2eadfbc..002257e 100644
--- a/WebKit2/WebProcess/Plugins/NPJSObject.cpp
+++ b/WebKit2/WebProcess/Plugins/NPJSObject.cpp
@@ -171,6 +171,29 @@ bool NPJSObject::getProperty(NPIdentifier propertyName, NPVariant* result)
     return true;
 }
 
+bool NPJSObject::enumerate(NPIdentifier** identifiers, uint32_t* identifierCount)
+{
+    ExecState* exec = m_objectMap->globalExec();
+    if (!exec)
+        return false;
+    
+    JSLock lock(SilenceAssertionsOnly);
+
+    PropertyNameArray propertyNames(exec);
+    m_jsObject->getPropertyNames(exec, propertyNames);
+
+    // This should use NPN_MemAlloc, but we know that it uses malloc under the hood.
+    NPIdentifier* nameIdentifiers = static_cast<NPIdentifier*>(malloc(sizeof(NPIdentifier) * propertyNames.size()));
+
+    for (size_t i = 0; i < propertyNames.size(); ++i)
+        nameIdentifiers[i] = static_cast<NPIdentifier>(IdentifierRep::get(propertyNames[i].ustring().UTF8String().data()));
+
+    *identifiers = nameIdentifiers;
+    *identifierCount = propertyNames.size();
+
+    return true;
+}
+
 bool NPJSObject::construct(const NPVariant *arguments, uint32_t argumentCount, NPVariant *result)
 {
     ExecState* exec = m_objectMap->globalExec();
@@ -237,7 +260,7 @@ NPClass* NPJSObject::npClass()
         NP_GetProperty,
         NP_SetProperty,
         0,
-        0,
+        NP_Enumerate,
         NP_Construct
     };
 
@@ -288,6 +311,11 @@ bool NPJSObject::NP_SetProperty(NPObject*, NPIdentifier propertyName, const NPVa
     return false;
 }
 
+bool NPJSObject::NP_Enumerate(NPObject* npObject, NPIdentifier** identifiers, uint32_t* identifierCount)
+{
+    return toNPJSObject(npObject)->enumerate(identifiers, identifierCount);
+}
+
 bool NPJSObject::NP_Construct(NPObject* npObject, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result)
 {
     return toNPJSObject(npObject)->construct(arguments, argumentCount, result);
diff --git a/WebKit2/WebProcess/Plugins/NPJSObject.h b/WebKit2/WebProcess/Plugins/NPJSObject.h
index 554f94a..281b2c0 100644
--- a/WebKit2/WebProcess/Plugins/NPJSObject.h
+++ b/WebKit2/WebProcess/Plugins/NPJSObject.h
@@ -65,6 +65,7 @@ private:
     bool invokeDefault(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
     bool hasProperty(NPIdentifier propertyName);
     bool getProperty(NPIdentifier propertyName, NPVariant* result);
+    bool enumerate(NPIdentifier** identifiers, uint32_t* identifierCount);
     bool construct(const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
 
     bool invoke(JSC::ExecState*, JSC::JSGlobalObject*, JSC::JSValue function, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
@@ -78,6 +79,7 @@ private:
     static bool NP_HasProperty(NPObject*, NPIdentifier propertyName);
     static bool NP_GetProperty(NPObject*, NPIdentifier propertyName, NPVariant* result);
     static bool NP_SetProperty(NPObject*, NPIdentifier propertyName, const NPVariant* value);
+    static bool NP_Enumerate(NPObject*, NPIdentifier** identifiers, uint32_t* identifierCount);
     static bool NP_Construct(NPObject*, const NPVariant* arguments, uint32_t argumentCount, NPVariant* result);
     
     NPRuntimeObjectMap* m_objectMap;
diff --git a/WebKit2/WebProcess/Plugins/NPRuntimeUtilities.cpp b/WebKit2/WebProcess/Plugins/NPRuntimeUtilities.cpp
index 3b3ecec..1c7270f 100644
--- a/WebKit2/WebProcess/Plugins/NPRuntimeUtilities.cpp
+++ b/WebKit2/WebProcess/Plugins/NPRuntimeUtilities.cpp
@@ -35,8 +35,7 @@ NPObject* createNPObject(NPP npp, NPClass* npClass)
     if (npClass->allocate)
         npObject = npClass->allocate(npp, npClass);
     else {
-        // This should really call NPN_MemAlloc, but we know that it uses malloc
-        // under the hood so it's fine.
+        // This should use NPN_MemAlloc, but we know that it uses malloc under the hood.
         npObject = static_cast<NPObject*>(malloc(sizeof(NPObject)));
     }
 
diff --git a/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp b/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
index ea6b18a..ad65717 100644
--- a/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
+++ b/WebKit2/WebProcess/Plugins/Netscape/NetscapeBrowserFuncs.cpp
@@ -631,9 +631,11 @@ static void NPN_PopPopupsEnabledState(NPP instance)
     notImplemented();
 }
     
-static bool NPN_Enumerate(NPP npp, NPObject* npobj, NPIdentifier** identifier, uint32_t* count)
+static bool NPN_Enumerate(NPP, NPObject* npObject, NPIdentifier** identifiers, uint32_t* identifierCount)
 {
-    notImplemented();
+    if (NP_CLASS_STRUCT_VERSION_HAS_ENUM(npObject->_class) && npObject->_class->enumerate)
+        return npObject->_class->enumerate(npObject, identifiers, identifierCount);
+
     return false;
 }
 

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list