Updates to plugin binding APIs.
authorrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Apr 2004 21:54:33 +0000 (21:54 +0000)
committerrjw <rjw@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Thu, 22 Apr 2004 21:54:33 +0000 (21:54 +0000)
Updates to Java plugin APIs.
Transparency fix for Dashboard.

        Reviewed by John and Greg Bolsinga.

        * Plugins.subproj/WebPluginJava.h: Added.
New API for Java plugin.

* Plugins.subproj/npfunctions.h:
        * Plugins.subproj/npruntime.h:
        (_NPString::):
        (_NPString::_NPVariant::):
        * Plugins.subproj/npsap.h: Added.
New API for plugin bindings.

* WebView.subproj/WebHTMLView.m:
        (-[WebHTMLView drawRect:]):
Update for Dashboard.  View must fill with transparency when not
drawing background.

* copy-webcore-files-to-webkit:

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

WebKit/ChangeLog
WebKit/Plugins.subproj/WebPluginJava.h [new file with mode: 0644]
WebKit/Plugins.subproj/npfunctions.h
WebKit/Plugins.subproj/npruntime.h
WebKit/Plugins.subproj/npsap.h [new file with mode: 0644]
WebKit/WebView.subproj/WebHTMLView.m
WebKit/copy-webcore-files-to-webkit

index 6b39978..b33d14f 100644 (file)
@@ -1,3 +1,28 @@
+2004-04-22  Richard Williamson   <rjw@apple.com>
+
+       Updates to plugin binding APIs.
+       Updates to Java plugin APIs.
+       Transparency fix for Dashboard.
+       
+        Reviewed by John and Greg Bolsinga.
+
+        * Plugins.subproj/WebPluginJava.h: Added.
+       New API for Java plugin.        
+
+       * Plugins.subproj/npfunctions.h:
+        * Plugins.subproj/npruntime.h:
+        (_NPString::):
+        (_NPString::_NPVariant::):
+        * Plugins.subproj/npsap.h: Added.
+       New API for plugin bindings.        
+
+       * WebView.subproj/WebHTMLView.m:
+        (-[WebHTMLView drawRect:]):
+       Update for Dashboard.  View must fill with transparency when not
+       drawing background.        
+
+       * copy-webcore-files-to-webkit:
+
 2004-04-22  Ken Kocienda  <kocienda@apple.com>
 
         Reviewed by Hyatt
diff --git a/WebKit/Plugins.subproj/WebPluginJava.h b/WebKit/Plugins.subproj/WebPluginJava.h
new file mode 100644 (file)
index 0000000..8ffc7e9
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+ *  WebPluginJava.h
+ *  JavaDeploy
+ *
+ *  Created by Greg Bolsinga on Wed Apr 21 2004.
+ *  Copyright (c) 2004 Apple Computer. All rights reserved.
+ *
+ */
+
+#import <JavaVM/JavaVM.h>
+
+// The WebPluginContainer will call these methods for LiveConnect support. The
+//  WebPluginContainer should see if the WebPlugin supports these methods before
+//  calling them.
+
+@protocol WebPluginJava <NSObject>
+
+// This returns the jobject representing the java applet to the WebPluginContainer.
+//  It should always be called from the AppKit Main Thread.
+- (jobject) getApplet;
+
+// This will call the given method on the given jobject with the given arguments
+//  from the proper thread for this WebPlugin. This way, no java applet code will
+//  be run on the AppKit Main Thread, it will be called on a thread belonging to the
+//  java applet.
+//  It should always be called from the AppKit Main Thread.
+- (jvalue) callJavaOn:(jobject)object withMethod:(jmethodID) withArgs:(jvalue*)args;
+
+@end
index 98ad665..6c40244 100644 (file)
@@ -47,9 +47,13 @@ typedef void (*NPP_ShutdownProcPtr)(void);
 typedef void *(*NPP_GetJavaClassProcPtr)(void);
 typedef void*  JRIGlobalRef; //not using this right now
 
+typedef void *(*NPN_GenericFunction)(void);
+typedef NPN_GenericFunction (*NPN_GetFunctionProcPtr)(const char *functionName);
+
 typedef struct _NPNetscapeFuncs {
     uint16 size;
     uint16 version;
+    
     NPN_GetURLProcPtr geturl;
     NPN_PostURLProcPtr posturl;
     NPN_RequestReadProcPtr requestread;
@@ -71,6 +75,10 @@ typedef struct _NPNetscapeFuncs {
     NPN_InvalidateRectProcPtr invalidaterect;
     NPN_InvalidateRegionProcPtr invalidateregion;
     NPN_ForceRedrawProcPtr forceredraw;
+    
+    // Version 12+
+    NPN_GetFunctionProcPtr getFunction;
+    
 } NPNetscapeFuncs;
 
 typedef struct _NPPluginFuncs {
index 12e311b..440df3a 100644 (file)
  * type names.
  * Renamed "JavaScript" types to "Script".
  *
+ * Revision 7 (April 21, 2004):
+ * NPIdentifier becomes a void*, was int32_t
+ * Remove NP_IsValidIdentifier, renamed NP_IdentifierFromUTF8 to NP_GetIdentifier
+ * Added NPVariant and modified functions to use this new type.
  */
 #ifndef _NP_RUNTIME_H_
 #define _NP_RUNTIME_H_
@@ -93,38 +97,125 @@ typedef struct NPClass NPClass;
 */
 typedef NPObject NPScriptObject;
 
+typedef char NPUTF8;
+typedef struct _NPString {
+    const NPUTF8 *UTF8Characters;
+    uint32_t UTF8Length;
+} NPString;
+
+#ifndef _NPAPI_H_
+// Ack!  Temporary hack to get build working.
+typedef unsigned char NPBool;
+#endif
+  
+typedef enum {
+    NPVariantVoidType,
+    NPVariantNullType,
+    NPVariantUndefinedType,
+    NPVariantBoolType,
+    NPVariantInt32Type,
+    NPVariantDoubleType,
+    NPVariantStringType,
+    NPVariantObjectType
+} NPVariantType;
+
+typedef struct _NPVariant {
+    NPVariantType type;
+    union {
+        NPBool boolValue;
+        int32_t intValue;
+        double doubleValue;
+        NPString stringValue;
+        NPObject *objectValue;
+    } value;
+} NPVariant;
+
 /*
-       Type mappings (JavaScript types have been used for illustration
-    purposes):
+    NPN_ReleaseVariantValue is called on all 'out' parameters references.
+    Specifically it is called on variants that are resultant out parameters
+    in NPGetPropertyFunctionPtr and NPInvokeFunctionPtr.  Resultant variants
+    from these two functions should be initialized using the
+    NPN_InitializeVariantXXX() functions.
+    
+    After calling NPReleaseVariantValue, the type of the variant will
+    be set to NPVariantUndefinedType.
+*/
+void NPN_ReleaseVariantValue (NPVariant *variant);
+
+NPBool NPN_VariantIsVoid (const NPVariant *variant);
+NPBool NPN_VariantIsNull (const NPVariant *variant);
+NPBool NPN_VariantIsUndefined (const NPVariant *variant);
+NPBool NPN_VariantIsBool (const NPVariant *variant);
+NPBool NPN_VariantIsInt32 (const NPVariant *variant);
+NPBool NPN_VariantIsDouble (const NPVariant *variant);
+NPBool NPN_VariantIsString (const NPVariant *variant);
+NPBool NPN_VariantIsObject (const NPVariant *variant);
+NPBool NPN_VariantToBool (const NPVariant *variant, NPBool *result);
+NPBool NPN_VariantToInt32 (const NPVariant *variant, int32_t *result);
+NPBool NPN_VariantToDouble (const NPVariant *variant, double *result);
+NPString NPN_VariantToString (const NPVariant *variant);
+NPString NPN_VariantToStringCopy (const NPVariant *variant);
+NPBool NPN_VariantToObject (const NPVariant *variant, NPObject **result);
 
-       script    to             C
-       Boolean                  NPBoolean      
-       Number                   NPNumber
-       String                   NPString
-       Undefined                NPUndefined
-       Null                     NPNull
-       Object (including Array) NPScriptObject
-       Object wrapper           NPObject
-
-
-       C          to            script
-       NPBoolean                Boolean        
-       NPNumber                 Number
-       NPString                 String
-       NPUndefined              Undefined
-       NPNull                   Null
-       NPArray                  Array (restricted)
-       NPScriptObject           Object
-       other NPObject           Object wrapper
+/*
+    NPVariants initialized with the NPN_InitializeVariantXXX() functions
+    must be released using the NPN_ReleaseVariantValue() function.
+*/
+void NPN_InitializeVariantAsVoid (NPVariant *variant);
+void NPN_InitializeVariantAsNull (NPVariant *variant);
+void NPN_InitializeVariantAsUndefined (NPVariant *variant);
+void NPN_InitializeVariantWithBool (NPVariant *variant, NPBool value);
+void NPN_InitializeVariantWithInt32 (NPVariant *variant, int32_t value);
+void NPN_InitializeVariantWithDouble (NPVariant *variant, double value);
 
+/*
+    NPN_InitializeVariantWithString() does not copy string data.  However
+    the string data will be deallocated by calls to NPReleaseVariantValue().
 */
+void NPN_InitializeVariantWithString (NPVariant *variant, const NPString *value);
 
-typedef uint32_t NPIdentifier;
+/*
+    NPN_InitializeVariantWithStringCopy() will copy string data.  The string data
+    will be deallocated by calls to NPReleaseVariantValue().
+*/
+void NPN_InitializeVariantWithStringCopy (NPVariant *variant, const NPString *value);
 
 /*
-    NPUTF8 strings are null terminated.
+    NPN_InitializeVariantWithObject() retains the NPObject.  The object will be released
+    by calls to NPReleaseVariantValue();
 */
-typedef char NPUTF8;
+void NPN_InitializeVariantWithObject (NPVariant *variant, NPObject *value);
+
+void NPN_InitializeVariantWithVariant (NPVariant *destination, const NPVariant *source);
+
+/*
+       Type mappings (JavaScript types have been used for illustration
+    purposes):
+
+       script    to                C
+       Boolean                     NPVariant (with type NPVariantBoolType) 
+       Number                      NPVariant (with type NPVariantDoubleType)
+       String                      NPVariant (with type NPVariantStringType)
+       Undefined                   NPVariant (with type NPVariantUndefinedType)
+       Null                        NPVariant (with type NPVariantNullType)
+       Object (including Array)    NPVariant (with type NPVariantObjectType, objectValue will be a NPScriptObject)
+       Object (NPObject wrapper)   NPVariant (with type NPVariantObjectType)
+
+
+       C          to                                         script
+       NPVariant (with type NPVariantBoolType)               Boolean   
+       NPVariant (with type NPVariantInt32Type)              Number
+       NPVariant (with type NPVariantDoubleType)             Number
+       NPVariant (with type NPVariantStringType)             String
+       NPVariant (with type NPVariantUndefinedType)          Undefined
+       NPVariant (with type NPVariantNullType)               Null
+       NPArray                                               Array (restricted)
+       NPScriptObject                                        Object
+       other NPObject                                        Object (NPObject wrapper)
+
+*/
+
+typedef void *NPIdentifier;
 
 /*
     NPObjects have methods and properties.  Methods and properties are named with NPIdentifiers.
@@ -133,8 +224,7 @@ typedef char NPUTF8;
     NPN_IsValidIdentifier will return true if an identifier for the name has already been
     assigned with either NPIdentifierFromUTF8() or NPN_GetIdentifiers();
 */
-NPIdentifier NPN_IdentifierFromUTF8 (const NPUTF8 *name);
-bool NPN_IsValidIdentifier (const NPUTF8 *name);
+NPIdentifier NPN_GetIdentifier (const NPUTF8 *name);
 void NPN_GetIdentifiers (const NPUTF8 **names, int nameCount, NPIdentifier *identifiers);
 
 /*
@@ -144,15 +234,19 @@ const NPUTF8 *NPN_UTF8FromIdentifier (NPIdentifier identifier);
 
 /*
     NPObject behavior is implemented using the following set of callback functions.
+    
+    The NPVariant *result parameter of NPInvokeFunctionPtr and NPGetPropertyFunctionPtr functions
+    should be initialized using one of the NPN_InitializeVariantXXX functions.  The variant result
+    of the two functions will be released using NPN_ReleaseVariantValue().
 */
 typedef NPObject *(*NPAllocateFunctionPtr)();
 typedef void (*NPDeallocateFunctionPtr)(NPObject *obj);
-typedef void (*NPInvalidateFunctionPtr)();
+typedef void (*NPInvalidateFunctionPtr)(NPObject *obj);
 typedef bool (*NPHasMethodFunctionPtr)(NPClass *theClass, NPIdentifier name);
-typedef NPObject *(*NPInvokeFunctionPtr)(NPObject *obj, NPIdentifier name, NPObject **args, unsigned argCount);
+typedef void (*NPInvokeFunctionPtr)(NPObject *obj, NPIdentifier name, NPVariant *args, unsigned argCount, NPVariant *result);
 typedef bool (*NPHasPropertyFunctionPtr)(NPClass *theClass, NPIdentifier name);
-typedef NPObject *(*NPGetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name);
-typedef void (*NPSetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, NPObject *value);
+typedef void (*NPGetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, NPVariant *result);
+typedef void (*NPSetPropertyFunctionPtr)(NPObject *obj, NPIdentifier name, const NPVariant *value);
 
 /*
     NPObjects returned by create, retain, invoke, and getProperty 
@@ -214,20 +308,10 @@ void NPN_ReleaseObject (NPObject *obj);
 /*
     Built-in data types.  These classes can be passed to NPN_IsKindOfClass().
 */
-extern NPClass *NPBooleanClass;
-extern NPClass *NPNullClass;
-extern NPClass *NPUndefinedClass;
 extern NPClass *NPArrayClass;
-extern NPClass *NPNumberClass;
-extern NPClass *NPStringClass;
 extern NPClass *NPScriptObjectClass;
 
-typedef NPObject NPBoolean;
-typedef NPObject NPNull;
-typedef NPObject NPUndefined;
 typedef NPObject NPArray;
-typedef NPObject NPNumber;
-typedef NPObject NPString;
 
 /*
     Functions to access script objects represented by NPScriptObject.
@@ -240,53 +324,16 @@ typedef NPObject NPString;
     Calls made from script to the plugin will always be made on the main
     user agent thread, this include calls to NPScriptResultFunctionPtr callbacks.
 */
-typedef void (*NPScriptResultFunctionPtr)(NPObject *obj, void *resultContext);
+typedef void (*NPScriptResultFunctionPtr)(const NPVariant *result, void *resultContext);
 
-void NPN_Call (NPScriptObject *obj, NPIdentifier methodName, NPObject **args, unsigned argCount, NPScriptResultFunctionPtr resultCallback);
+void NPN_Call (NPScriptObject *obj, NPIdentifier methodName, const NPVariant *args, unsigned argCount, NPScriptResultFunctionPtr resultCallback);
 void NPN_Evaluate (NPScriptObject *obj, NPString *script, NPScriptResultFunctionPtr resultCallback, void *resultContext);
 void NPN_GetProperty (NPScriptObject *obj, NPIdentifier  propertyName, NPScriptResultFunctionPtr resultCallback, void *resultContext);
-void NPN_SetProperty (NPScriptObject *obj, NPIdentifier  propertyName, NPObject *value);
+void NPN_SetProperty (NPScriptObject *obj, NPIdentifier  propertyName, const NPVariant *value);
 void NPN_RemoveProperty (NPScriptObject *obj, NPIdentifier propertyName);
 void NPN_ToString (NPScriptObject *obj, NPScriptResultFunctionPtr result, void *resultContext);
 void NPN_GetPropertyAtIndex (NPScriptObject *obj, int32_t index, NPScriptResultFunctionPtr resultCallback, void *resultContext);
-void NPN_SetPropertyAtIndex (NPScriptObject *obj, unsigned index, NPObject *value);
-
-/*
-    Functions for dealing with data types.
-*/
-NPNumber *NPN_CreateNumberWithInt (int i);
-NPNumber *NPN_CreateNumberWithFloat (float f);
-NPNumber *NPN_CreateNumberWithDouble (double d);
-int NPN_IntFromNumber (NPNumber *obj);
-float NPN_FloatFromNumber (NPNumber *obj);
-double NPN_DoubleFromNumber (NPNumber *obj);
-
-/*
-    NPN_CreateStringWithUTF8() takes a UTF8 string and length.  -1 may be passed for the
-    length if the string is null terminated.
-*/
-NPString *NPN_CreateStringWithUTF8 (const NPUTF8 *utf8String, int32_t length);
-
-/*
-    Memory returned from NPUTF8FromString must be deallocated
-    by calling NPN_DeallocateUTF8.
-*/
-NPUTF8 *NPN_UTF8FromString (NPString *obj);
-void NPN_DeallocateUTF8 (NPUTF8 *UTF8Buffer);
-int32_t NPN_StringLength (NPString *obj);
-
-NPBoolean *NPN_CreateBoolean (bool f);
-bool NPN_BoolFromBoolean (NPBoolean *aBool);
-
-/*
-    NPNull returns a NPNull singleton.
-*/
-NPNull *NPN_GetNull();
-
-/*
-    NPUndefined returns a NPUndefined singleton.
-*/
-NPUndefined *NPN_GetUndefined ();
+void NPN_SetPropertyAtIndex (NPScriptObject *obj, unsigned index, const NPVariant *value);
 
 /*
     NPArrays are immutable.  They are used to pass arguments to 
@@ -297,7 +344,7 @@ NPUndefined *NPN_GetUndefined ();
     
     Objects added to arrays are retained by the array.
 */
-NPArray *NPN_CreateArray (NPObject **, int32_t count);
+NPArray *NPN_CreateArray (NPVariant **, int32_t count);
 NPArray *NPN_CreateArrayV (int32_t count, ...);
 
 /*
diff --git a/WebKit/Plugins.subproj/npsap.h b/WebKit/Plugins.subproj/npsap.h
new file mode 100644 (file)
index 0000000..e70a516
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2003 Apple Computer, Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+#ifndef _NP_SAP_H_
+#define _NP_SAP_H_
+
+#include <npruntime.h>
+
+/*
+       NPP_GetNativeObjectForScript allows user agents to retrieve a plugin's exported
+       interface.
+*/
+NPObject *(*NPP_GetNativeObjectForScript) (NPP instance);
+
+/*
+       Get the window object for the page that contains the plugin.
+*/
+NPScriptObject *(*NPN_GetWindowScriptObject) (NPP instance);
+
+/*
+       Get the script DOM object that refers to the plugin.
+*/
+NPScriptObject *(*NPN_GetInstanceScriptObject) (NPP instance);
+
+#endif
+
index 4081ed0..87ce9c1 100644 (file)
@@ -1462,6 +1462,11 @@ static WebHTMLView *lastHitView = nil;
             [textRendererFactoryIfCoalescing startCoalesceTextDrawing];
         }
 
+        if (![[self _webView] drawsBackground]) {
+            [[NSColor clearColor] set];
+            NSRectFill (rect);
+        }
+        
         //double start = CFAbsoluteTimeGetCurrent();
         [[self _bridge] drawRect:rect];
         //LOG(Timing, "draw time %e", CFAbsoluteTimeGetCurrent() - start);
index f69ea81..eaa577c 100755 (executable)
@@ -22,6 +22,7 @@ my %WebCoreFiles = (
 
 my %JavaScriptCoreFiles = (
     'bindings/npruntime.h' => 'Plugins.subproj/npruntime.h',
+    'bindings/npsap.h' => 'Plugins.subproj/npsap.h',
 );
 
 my $JavaScriptCorePath = '';