JavaScriptCore:
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Apr 2005 01:03:57 +0000 (01:03 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 27 Apr 2005 01:03:57 +0000 (01:03 +0000)
Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla

We were incompatible with Mozilla's implementation of the scripting APIs in
two ways:

Their NPN_SetException has the following signature:

            void NPN_SetException(NPObject *npobj, const NPUTF8 *message);

ours has:

            void NPN_SetException (NPObject * npobj, const NPString *message);

Also, they expect the string returned from NPN_UTF8FromIdentifier() to be freed by caller.
We do not.

I changed both behaviors to match Mozilla.

        Reviewed by Chris.

        * bindings/NP_jsobject.cpp:
        (_NPN_SetException):
        * bindings/npruntime.cpp:
        (_NPN_UTF8FromIdentifier):
        (_NPN_IntFromIdentifier):
        (_NPN_SetExceptionWithUTF8):
        * bindings/npruntime.h:
        * bindings/npruntime_impl.h:

WebKit:
Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla

        Reviewed by Chris.

        * Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:

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

JavaScriptCore/ChangeLog
JavaScriptCore/bindings/NP_jsobject.cpp
JavaScriptCore/bindings/npruntime.cpp
JavaScriptCore/bindings/npruntime.h
JavaScriptCore/bindings/npruntime_impl.h
WebKit/ChangeLog
WebKit/Plugins.subproj/npfunctions.h
WebKit/Plugins.subproj/npruntime.h

index 31e3f95070664fde5e72f563ca52ca69558aa781..6e9ed2542b7e7363f3b1cc0323766f7f08cfea56 100644 (file)
@@ -1,3 +1,34 @@
+2005-04-26  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla
+       
+       We were incompatible with Mozilla's implementation of the scripting APIs in
+       two ways:
+
+       Their NPN_SetException has the following signature:
+
+            void NPN_SetException(NPObject *npobj, const NPUTF8 *message);
+
+       ours has:
+
+            void NPN_SetException (NPObject * npobj, const NPString *message);
+
+       Also, they expect the string returned from NPN_UTF8FromIdentifier() to be freed by caller.
+       We do not.
+
+       I changed both behaviors to match Mozilla.
+
+        Reviewed by Chris.
+
+        * bindings/NP_jsobject.cpp:
+        (_NPN_SetException):
+        * bindings/npruntime.cpp:
+        (_NPN_UTF8FromIdentifier):
+        (_NPN_IntFromIdentifier):
+        (_NPN_SetExceptionWithUTF8):
+        * bindings/npruntime.h:
+        * bindings/npruntime_impl.h:
+
 2005-04-26  Maciej Stachowiak  <mjs@apple.com>
 
         Reviewed by Chris.
index efa71fffb6075159f8e89bee1209ef86914bd2df..6a24d098a63b9b10dc8d5e970f03cb61489ad8fe 100644 (file)
@@ -411,17 +411,13 @@ bool _NPN_HasMethod(NPP npp, NPObject *o, NPIdentifier methodName)
     return false;
 }
 
-void _NPN_SetException (NPObject *o, NPString *message)
+void _NPN_SetException (NPObject *o, const NPUTF8 *message)
 {
     if (o->_class == NPScriptObjectClass) {
         JavaScriptObject *obj = (JavaScriptObject *)o; 
         ExecState *exec = obj->executionContext->interpreter()->globalExec();
         Interpreter::lock();
-        char *msg = (char *)malloc (message->UTF8Length + 1);
-        strncpy (msg, message->UTF8Characters, message->UTF8Length);
-        msg[message->UTF8Length] = 0;
-        Object err = Error::create(exec, GeneralError, msg);
-        free (msg);
+        Object err = Error::create(exec, GeneralError, message);
         exec->setException (err);
         Interpreter::unlock();
     }
index 7d6e426baa0fc7337b66e495c29acf8c1147f3a5..162fb8d0ff483ee5b3eaa50db556de2ca88495ee 100644 (file)
@@ -163,16 +163,18 @@ bool _NPN_IdentifierIsString(NPIdentifier identifier)
 NPUTF8 *_NPN_UTF8FromIdentifier (NPIdentifier identifier)
 {
     PrivateIdentifier *i = (PrivateIdentifier *)identifier;
-    if (!i->isString)
+    if (!i->isString || !i->value.string)
         return NULL;
         
-    return (NPUTF8 *)i->value.string;
+    return (NPUTF8 *)strdup(i->value.string);
 }
 
 int32_t _NPN_IntFromIdentifier(NPIdentifier identifier)
 {
-    // FIXME: Implement!
-    return 0;
+    PrivateIdentifier *i = (PrivateIdentifier *)identifier;
+    if (!i->isString)
+        return 0;
+    return i->value.number;
 }
 
 NPBool NPN_VariantIsVoid (const NPVariant *variant)
@@ -434,9 +436,6 @@ void _NPN_SetExceptionWithUTF8 (NPObject *obj, const NPUTF8 *message, int32_t le
     assert (message);
  
     if (obj && message) {
-        NPString string;
-        string.UTF8Characters = message;
-        string.UTF8Length = length;
-        _NPN_SetException (obj, &string);
+        _NPN_SetException (obj, message);
     }
 }
index 9af6a6aef75bdd72ee53a788f4898b6754ad6903..b248ce6c5877e6e9d2a4c0be5465b758fdf61ae7 100644 (file)
@@ -329,7 +329,7 @@ bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
     NPN_SetException may be called to trigger a script exception upon return
     from entry points into NPObjects.
 */
-void NPN_SetException (NPObject *obj, NPString *message);
+void NPN_SetException (NPObject *obj, const NPUTF8 *message);
 
 #ifdef __cplusplus
 }
index 6fdef39d7fee41e43d7e0a86578594783447ba29..d9ddd9fc77ec5b6d3b8c4a5a9b0aee4cbbdb16da 100644 (file)
@@ -50,7 +50,7 @@ extern bool _NPN_SetProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName
 extern bool _NPN_RemoveProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
 extern bool _NPN_HasProperty(NPP npp, NPObject *npobj, NPIdentifier propertyName);
 extern bool _NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
-extern void _NPN_SetException(NPObject *obj, NPString *message);
+extern void _NPN_SetException(NPObject *obj, const NPUTF8 *message);
 
 #ifdef __cplusplus
 }  /* end extern "C" */
index eb5df0966784ee1a145885e70c2ef5218e5769ea..b1176eb40b111436d632e4a03aa8fcf277601361 100644 (file)
@@ -1,3 +1,12 @@
+2005-04-26  Richard Williamson   <rjw@apple.com>
+
+       Fixed <rdar://problem/4098713> Scripting API is incompatible with Mozilla
+
+        Reviewed by Chris.
+
+        * Plugins.subproj/npfunctions.h:
+        * Plugins.subproj/npruntime.h:
+
 2005-04-26  Darin Adler  <darin@apple.com>
 
         Reviewed by John.
index d1cd83e04112234540d5db1d5bdcd427939284a0..18aa2aaaf70250185efd5aab3f4f94721d03fd84 100644 (file)
@@ -50,7 +50,7 @@ typedef bool (*NPN_SetPropertyProcPtr) (NPP npp, NPObject *obj, NPIdentifier  pr
 typedef bool (*NPN_HasPropertyProcPtr) (NPP, NPObject *npobj, NPIdentifier propertyName);
 typedef bool (*NPN_HasMethodProcPtr) (NPP npp, NPObject *npobj, NPIdentifier methodName);
 typedef bool (*NPN_RemovePropertyProcPtr) (NPP npp, NPObject *obj, NPIdentifier propertyName);
-typedef void (*NPN_SetExceptionProcPtr) (NPObject *obj, NPString *message);
+typedef void (*NPN_SetExceptionProcPtr) (NPObject *obj, const NPUTF8 *message);
 
 typedef NPError        (*NPP_NewProcPtr)(NPMIMEType pluginType, NPP instance, uint16 mode, int16 argc, char* argn[], char* argv[], NPSavedData* saved);
 typedef NPError        (*NPP_DestroyProcPtr)(NPP instance, NPSavedData** save);
index 9af6a6aef75bdd72ee53a788f4898b6754ad6903..b248ce6c5877e6e9d2a4c0be5465b758fdf61ae7 100644 (file)
@@ -329,7 +329,7 @@ bool NPN_HasMethod(NPP npp, NPObject *npobj, NPIdentifier methodName);
     NPN_SetException may be called to trigger a script exception upon return
     from entry points into NPObjects.
 */
-void NPN_SetException (NPObject *obj, NPString *message);
+void NPN_SetException (NPObject *obj, const NPUTF8 *message);
 
 #ifdef __cplusplus
 }