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

cblu cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Sat Sep 26 05:53:48 UTC 2009


The following commit has been merged in the debian/unstable branch:
commit d0036af6b9135f0104672f0561abaf3e6b6404b9
Author: cblu <cblu at 268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Date:   Mon Jan 7 21:31:10 2002 +0000

    Moved plug-in instance creation to WKPluginView from WKPlugin
    
    
    git-svn-id: http://svn.webkit.org/repository/webkit/trunk@524 268f45cc-cd09-0410-ab3c-d52691b4dbfc

diff --git a/WebCore/kwq/KWQKHTMLPart.mm b/WebCore/kwq/KWQKHTMLPart.mm
index d6669b1..0847c43 100644
--- a/WebCore/kwq/KWQKHTMLPart.mm
+++ b/WebCore/kwq/KWQKHTMLPart.mm
@@ -1397,24 +1397,19 @@ bool KHTMLPart::requestObject( khtml::RenderPart *frame, const QString &url, con
                     const QStringList &args)
 {
     WKPlugin *plugin;
-    //KWQPlugin pluginWidget;
-    NPP_t instance;
+    KWQPlugin *pluginWidget;
     
     if(url.isEmpty() || serviceType.isEmpty()){
         return FALSE;
     }
-
     plugin = [[WKPluginDatabase installedPlugins] getPluginForMimeType:QSTRING_TO_NSSTRING(serviceType)];
     if(plugin == nil){
         return FALSE;
     }
     [plugin load];
-    [plugin newInstance:&instance withType:QSTRING_TO_NSSTRING(serviceType) withMode:NP_EMBED withArguments:nil withValues:nil];
-    [plugin destroyInstance:&instance]; // this needs to be moved 
-    
-    //frame->setWidget(&pluginWidget);
-
-    return FALSE;
+    pluginWidget = new KWQPlugin(0, plugin, url, serviceType, args);
+    frame->setWidget(pluginWidget);
+    return TRUE;
 }
 
 
diff --git a/WebCore/kwq/KWQKHTMLPartImpl.mm b/WebCore/kwq/KWQKHTMLPartImpl.mm
index d6669b1..0847c43 100644
--- a/WebCore/kwq/KWQKHTMLPartImpl.mm
+++ b/WebCore/kwq/KWQKHTMLPartImpl.mm
@@ -1397,24 +1397,19 @@ bool KHTMLPart::requestObject( khtml::RenderPart *frame, const QString &url, con
                     const QStringList &args)
 {
     WKPlugin *plugin;
-    //KWQPlugin pluginWidget;
-    NPP_t instance;
+    KWQPlugin *pluginWidget;
     
     if(url.isEmpty() || serviceType.isEmpty()){
         return FALSE;
     }
-
     plugin = [[WKPluginDatabase installedPlugins] getPluginForMimeType:QSTRING_TO_NSSTRING(serviceType)];
     if(plugin == nil){
         return FALSE;
     }
     [plugin load];
-    [plugin newInstance:&instance withType:QSTRING_TO_NSSTRING(serviceType) withMode:NP_EMBED withArguments:nil withValues:nil];
-    [plugin destroyInstance:&instance]; // this needs to be moved 
-    
-    //frame->setWidget(&pluginWidget);
-
-    return FALSE;
+    pluginWidget = new KWQPlugin(0, plugin, url, serviceType, args);
+    frame->setWidget(pluginWidget);
+    return TRUE;
 }
 
 
diff --git a/WebCore/kwq/KWQPlugin.h b/WebCore/kwq/KWQPlugin.h
index cdf6a25..0b390c1 100644
--- a/WebCore/kwq/KWQPlugin.h
+++ b/WebCore/kwq/KWQPlugin.h
@@ -34,6 +34,7 @@
 #include "qstring.h"
 
 #import <WKPluginView.h>
+#import <WKPlugin.h>
     
 // class KWQPlugin ===============================================================
 
@@ -47,7 +48,7 @@ public:
     
     // constructors, copy constructors, and destructors ------------------------
 
-    KWQPlugin(QWidget *parent=0);
+    KWQPlugin(QWidget *parent=0, WKPlugin *plugin=nil, const QString &url=0, const QString &serviceType=0, const QStringList &args=0);
     ~KWQPlugin();
 
     // member functions --------------------------------------------------------
diff --git a/WebCore/kwq/KWQPlugin.mm b/WebCore/kwq/KWQPlugin.mm
index 1e690ef..267e298 100644
--- a/WebCore/kwq/KWQPlugin.mm
+++ b/WebCore/kwq/KWQPlugin.mm
@@ -27,9 +27,10 @@
 #include <KWQView.h>
 #include <kwqdebug.h>
 
-KWQPlugin::KWQPlugin(QWidget *parent)
+KWQPlugin::KWQPlugin(QWidget *parent, WKPlugin *plugin, const QString &url, const QString &serviceType,
+                    const QStringList &args)
 {
-    setView ([[[WKPluginView alloc] initWithFrame: NSMakeRect (0,0,0,0) widget: this] autorelease]);
+    setView ([[[WKPluginView alloc] initWithFrame: NSMakeRect (0,0,0,0) widget: this plugin: plugin url:QSTRING_TO_NSSTRING(url) mime:QSTRING_TO_NSSTRING(serviceType) ] autorelease]);
 }
 
 void * KWQPlugin::getPort()
diff --git a/WebCore/kwq/WKPlugin.h b/WebCore/kwq/WKPlugin.h
index cd780bc..fbbbe90 100644
--- a/WebCore/kwq/WKPlugin.h
+++ b/WebCore/kwq/WKPlugin.h
@@ -15,15 +15,38 @@
     NSString *name;
     NSString *executablePath;
     BOOL isLoaded;
-    
+    NPPluginFuncs pluginFuncs;
+    NPNetscapeFuncs browserFuncs;
+    uint16 pluginSize;
+    uint16 pluginVersion;
+    NPP_NewProcPtr NPP_New;
+    NPP_DestroyProcPtr NPP_Destroy;
+    NPP_SetWindowProcPtr NPP_SetWindow;
+    NPP_NewStreamProcPtr NPP_NewStream;
+    NPP_DestroyStreamProcPtr NPP_DestroyStream;
+    NPP_StreamAsFileProcPtr NPP_StreamAsFile;
+    NPP_WriteReadyProcPtr NPP_WriteReady;
+    NPP_WriteProcPtr NPP_Write;
+    NPP_PrintProcPtr NPP_Print;
+    NPP_HandleEventProcPtr NPP_HandleEvent;
+    NPP_URLNotifyProcPtr NPP_URLNotify;
+    NPP_GetValueProcPtr NPP_GetValue;
+    NPP_SetValueProcPtr NPP_SetValue;
+    NPP_ShutdownProcPtr NPP_Shutdown; 
+
 }
 
 - (BOOL)initializeWithPath:(NSString *)plugin;
 - (void)load;
-- (void)newInstance:(NPP)instance withType:(NSString *)mimeType withMode:(uint16)mode withArguments:(NSArray *)arguments withValues:(NSArray *)values;
-- (void)destroyInstance:(NPP)instance;
 - (void)unload;
 
+- (NPP_NewProcPtr)NPP_New;
+- (NPP_SetWindowProcPtr)NPP_SetWindow;
+- (NPP_NewStreamProcPtr)NPP_NewStream;
+- (NPP_WriteReadyProcPtr)NPP_WriteReady;
+- (NPP_WriteProcPtr)NPP_Write;
+- (NPP_DestroyStreamProcPtr)NPP_DestroyStream;
+- (NPP_HandleEventProcPtr)NPP_HandleEvent;
 - (NSDictionary *)mimeTypes;
 - (NSString *)name;
 - (NSString *)executablePath;
@@ -34,4 +57,4 @@
 @end
     
 NSMutableDictionary *getMimeTypesForResourceFile(SInt16 resRef);
-NPError InitializePlugin(mainFuncPtr pluginMainFunc);
\ No newline at end of file
+
diff --git a/WebCore/kwq/WKPlugin.mm b/WebCore/kwq/WKPlugin.mm
index f96bcc2..23cd3f7 100644
--- a/WebCore/kwq/WKPlugin.mm
+++ b/WebCore/kwq/WKPlugin.mm
@@ -9,24 +9,6 @@
 #import "WKPlugin.h"
 #include "kwqdebug.h"
 
-NPPluginFuncs pluginFuncs;
-NPNetscapeFuncs browserFuncs;
-uint16 pluginSize;
-uint16 pluginVersion;
-NPP_NewProcPtr NPP_New;
-NPP_DestroyProcPtr NPP_Destroy;
-NPP_SetWindowProcPtr NPP_SetWindow;
-NPP_NewStreamProcPtr NPP_NewStream;
-NPP_DestroyStreamProcPtr NPP_DestroyStream;
-NPP_StreamAsFileProcPtr NPP_StreamAsFile;
-NPP_WriteReadyProcPtr NPP_WriteReady;
-NPP_WriteProcPtr NPP_Write;
-NPP_PrintProcPtr NPP_Print;
-NPP_HandleEventProcPtr NPP_HandleEvent;
-NPP_URLNotifyProcPtr NPP_URLNotify;
-NPP_GetValueProcPtr NPP_GetValue;
-NPP_SetValueProcPtr NPP_SetValue;
-NPP_ShutdownProcPtr NPP_Shutdown; 
 
 @implementation WKPlugin
 
@@ -111,31 +93,88 @@ NPP_ShutdownProcPtr NPP_Shutdown;
         KWQDebug("WKPlugin: load: GetDiskFragment failed. Error=%d\n", err);
         return;
     }
-    InitializePlugin(pluginMainFunc);
+        NPError npErr;
+    
+    browserFuncs.version = 11;
+    browserFuncs.size = sizeof(NPNetscapeFuncs);
+    browserFuncs.geturl = tVectorForFunctionPointer(NPN_GetURLNotify);
+    browserFuncs.posturl = tVectorForFunctionPointer(NPN_PostURLNotify);
+    browserFuncs.requestread = tVectorForFunctionPointer(NPN_RequestRead);
+    browserFuncs.newstream = tVectorForFunctionPointer(NPN_NewStream);
+    browserFuncs.write = tVectorForFunctionPointer(NPN_Write);
+    browserFuncs.destroystream = tVectorForFunctionPointer(NPN_DestroyStream);
+    browserFuncs.status = tVectorForFunctionPointer(NPN_Status);
+    browserFuncs.uagent = tVectorForFunctionPointer(NPN_UserAgent);
+    browserFuncs.memalloc = tVectorForFunctionPointer(NPN_MemAlloc);
+    browserFuncs.memfree = tVectorForFunctionPointer(NPN_MemFree);
+    browserFuncs.memflush = tVectorForFunctionPointer(NPN_MemFlush);
+    browserFuncs.reloadplugins = tVectorForFunctionPointer(NPN_ReloadPlugins);
+    browserFuncs.geturlnotify = tVectorForFunctionPointer(NPN_GetURLNotify);
+    browserFuncs.posturlnotify = tVectorForFunctionPointer(NPN_PostURLNotify);
+    browserFuncs.getvalue = tVectorForFunctionPointer(NPN_GetValue);
+    browserFuncs.setvalue = tVectorForFunctionPointer(NPN_SetValue);
+    browserFuncs.invalidaterect = tVectorForFunctionPointer(NPN_InvalidateRect);
+    browserFuncs.invalidateregion = tVectorForFunctionPointer(NPN_InvalidateRegion);
+    browserFuncs.forceredraw = tVectorForFunctionPointer(NPN_ForceRedraw);
+    
+    pluginMainFunc = functionPointerForTVector(pluginMainFunc);
+    npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &NPP_Shutdown);
+    
+    pluginSize = pluginFuncs.size;
+    pluginVersion = pluginFuncs.version;
+    KWQDebug("pluginMainFunc: %d, size=%d, version=%d\n", npErr, pluginSize, pluginVersion);
+    
+    NPP_New = functionPointerForTVector(pluginFuncs.newp);
+    NPP_Destroy = functionPointerForTVector(pluginFuncs.destroy);
+    NPP_SetWindow = functionPointerForTVector(pluginFuncs.setwindow);
+    NPP_NewStream = functionPointerForTVector(pluginFuncs.newstream);
+    NPP_DestroyStream = functionPointerForTVector(pluginFuncs.destroystream);
+    NPP_StreamAsFile = functionPointerForTVector(pluginFuncs.asfile);
+    NPP_WriteReady = functionPointerForTVector(pluginFuncs.writeready);
+    NPP_Write = functionPointerForTVector(pluginFuncs.write);
+    NPP_Print = functionPointerForTVector(pluginFuncs.print);
+    NPP_HandleEvent = functionPointerForTVector(pluginFuncs.event);
+    NPP_URLNotify = functionPointerForTVector(pluginFuncs.urlnotify);
+    NPP_GetValue = functionPointerForTVector(pluginFuncs.getvalue);
+    NPP_SetValue = functionPointerForTVector(pluginFuncs.setvalue);
+    
     KWQDebug("Plugin Loaded\n");
     isLoaded = TRUE;
+    
 }
 
-- (void)newInstance:(NPP)instance withType:(NSString *)mimeType withMode:(uint16)mode withArguments:(NSArray *)arguments withValues:(NSArray *)values{
-    NPError npErr;
-    char mime[200];
+- (void)unload{
+    // unload library here
+    NPP_Shutdown();
+}
 
-    [mimeType getCString:mime];
-    npErr = NPP_New(mime, instance, mode, 0, NULL, NULL, NULL);
-    KWQDebug("NPP_New: %d\n", npErr);
+- (NPP_SetWindowProcPtr)NPP_SetWindow{
+    return NPP_SetWindow;
 }
 
-- (void)destroyInstance:(NPP)instance{
-    NPError npErr;
-    
-    npErr = NPP_Destroy(instance, NULL);
-    KWQDebug("NPP_Destroy: %d\n", npErr);
+- (NPP_NewProcPtr)NPP_New{
+    return NPP_New;
 }
 
-- (void)unload{
-    // unload library here
-    NPP_Shutdown();
+- (NPP_NewStreamProcPtr)NPP_NewStream{
+    return NPP_NewStream;
+}
+
+- (NPP_DestroyStreamProcPtr)NPP_DestroyStream{
+    return NPP_DestroyStream;
+}
+
+- (NPP_WriteReadyProcPtr)NPP_WriteReady{
+    return NPP_WriteReady;
 }
+- (NPP_WriteProcPtr)NPP_Write{
+    return NPP_Write;
+}
+
+- (NPP_HandleEventProcPtr)NPP_HandleEvent{
+    return NPP_HandleEvent;
+}
+
 - (NSDictionary *)mimeTypes{
     return mimeTypes;
 }
@@ -176,54 +215,6 @@ NPP_ShutdownProcPtr NPP_Shutdown;
 }
 @end
 
-NPError InitializePlugin(mainFuncPtr pluginMainFunc){
-    NPError npErr;
-    
-    browserFuncs.version = 11;
-    browserFuncs.size = sizeof(NPNetscapeFuncs);
-    browserFuncs.geturl = tVectorForFunctionPointer(NPN_GetURLNotify);
-    browserFuncs.posturl = tVectorForFunctionPointer(NPN_PostURLNotify);
-    browserFuncs.requestread = tVectorForFunctionPointer(NPN_RequestRead);
-    browserFuncs.newstream = tVectorForFunctionPointer(NPN_NewStream);
-    browserFuncs.write = tVectorForFunctionPointer(NPN_Write);
-    browserFuncs.destroystream = tVectorForFunctionPointer(NPN_DestroyStream);
-    browserFuncs.status = tVectorForFunctionPointer(NPN_Status);
-    browserFuncs.uagent = tVectorForFunctionPointer(NPN_UserAgent);
-    browserFuncs.memalloc = tVectorForFunctionPointer(NPN_MemAlloc);
-    browserFuncs.memfree = tVectorForFunctionPointer(NPN_MemFree);
-    browserFuncs.memflush = tVectorForFunctionPointer(NPN_MemFlush);
-    browserFuncs.reloadplugins = tVectorForFunctionPointer(NPN_ReloadPlugins);
-    browserFuncs.geturlnotify = tVectorForFunctionPointer(NPN_GetURLNotify);
-    browserFuncs.posturlnotify = tVectorForFunctionPointer(NPN_PostURLNotify);
-    browserFuncs.getvalue = tVectorForFunctionPointer(NPN_GetValue);
-    browserFuncs.setvalue = tVectorForFunctionPointer(NPN_SetValue);
-    browserFuncs.invalidaterect = tVectorForFunctionPointer(NPN_InvalidateRect);
-    browserFuncs.invalidateregion = tVectorForFunctionPointer(NPN_InvalidateRegion);
-    browserFuncs.forceredraw = tVectorForFunctionPointer(NPN_ForceRedraw);
-    
-    pluginMainFunc = functionPointerForTVector(pluginMainFunc);
-    npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &NPP_Shutdown);
-    
-    pluginSize = pluginFuncs.size;
-    pluginVersion = pluginFuncs.version;
-    KWQDebug("pluginMainFunc: %d, size=%d, version=%d\n", npErr, pluginSize, pluginVersion);
-    
-    NPP_New = functionPointerForTVector(pluginFuncs.newp);
-    NPP_Destroy = functionPointerForTVector(pluginFuncs.destroy);
-    NPP_SetWindow = functionPointerForTVector(pluginFuncs.setwindow);
-    NPP_NewStream = functionPointerForTVector(pluginFuncs.newstream);
-    NPP_DestroyStream = functionPointerForTVector(pluginFuncs.destroystream);
-    NPP_StreamAsFile = functionPointerForTVector(pluginFuncs.asfile);
-    NPP_WriteReady = functionPointerForTVector(pluginFuncs.writeready);
-    NPP_Write = functionPointerForTVector(pluginFuncs.write);
-    NPP_Print = functionPointerForTVector(pluginFuncs.print);
-    NPP_HandleEvent = functionPointerForTVector(pluginFuncs.event);
-    NPP_URLNotify = functionPointerForTVector(pluginFuncs.urlnotify);
-    NPP_GetValue = functionPointerForTVector(pluginFuncs.getvalue);
-    NPP_SetValue = functionPointerForTVector(pluginFuncs.setvalue);
-    return npErr;
-}
-
 NSMutableDictionary *getMimeTypesForResourceFile(SInt16 resRef){
     NSMutableDictionary *mimeDict;
     Str255 theString;
@@ -241,4 +232,10 @@ NSMutableDictionary *getMimeTypesForResourceFile(SInt16 resRef){
         [mimeDict setObject:[NSString stringWithCString:extString] forKey:[NSString stringWithCString:mimeString]];
     }
     return mimeDict;
-}
\ No newline at end of file
+}
+
+
+
+
+
+
diff --git a/WebCore/kwq/WKPluginView.h b/WebCore/kwq/WKPluginView.h
index d8da685..1918d9c 100644
--- a/WebCore/kwq/WKPluginView.h
+++ b/WebCore/kwq/WKPluginView.h
@@ -8,12 +8,55 @@
 
 #import <AppKit/AppKit.h>
 #include <qwidget.h>
+#import <WKPlugin.h>
+#include "npapi.h"
+#include "kwqdebug.h"
+
+typedef NPStream* NPS;
+
+typedef UInt16 EventKind;
+typedef UInt16 EventModifiers;
+struct EventRecord {
+  EventKind           what;
+  UInt32              message;
+  UInt32              when;
+  Point               where;
+  EventModifiers      modifiers;
+};
+typedef struct EventRecord EventRecord;
+
 
 @interface WKPluginView : NSQuickDrawView {
     QWidget *widget;
     bool isFlipped;
+    NPP instance;
+    NPP_t instanceStruct;
+    NPStream streamStruct;
+    NPS stream;
+    int32 streamOffset;
+    NSString *url, *mime;
+    WKPlugin *plugin;
+    bool transferred;
+    
+    NPP_NewProcPtr NPP_New;
+    NPP_DestroyProcPtr NPP_Destroy;
+    NPP_SetWindowProcPtr NPP_SetWindow;
+    NPP_NewStreamProcPtr NPP_NewStream;
+    NPP_DestroyStreamProcPtr NPP_DestroyStream;
+    NPP_StreamAsFileProcPtr NPP_StreamAsFile;
+    NPP_WriteReadyProcPtr NPP_WriteReady;
+    NPP_WriteProcPtr NPP_Write;
+    NPP_PrintProcPtr NPP_Print;
+    NPP_HandleEventProcPtr NPP_HandleEvent;
+    NPP_URLNotifyProcPtr NPP_URLNotify;
+    NPP_GetValueProcPtr NPP_GetValue;
+    NPP_SetValueProcPtr NPP_SetValue;
+    NPP_ShutdownProcPtr NPP_Shutdown; 
 }
 
-- initWithFrame: (NSRect) r widget: (QWidget *)w;
+- initWithFrame: (NSRect) r widget: (QWidget *)w plugin: (WKPlugin *)plug url: (NSString *)location mime:(NSString *)mime;
+-(void)drawRect:(NSRect)rect;
+-(BOOL)acceptsFirstResponder;
+-(void)sendNullEvent;
 
 @end
diff --git a/WebCore/kwq/WKPluginView.mm b/WebCore/kwq/WKPluginView.mm
index dfc2fec..e59e52f 100644
--- a/WebCore/kwq/WKPluginView.mm
+++ b/WebCore/kwq/WKPluginView.mm
@@ -7,20 +7,131 @@
 //
 
 #import "WKPluginView.h"
-
+#include <WCURICacheData.h>
+#include <WCURICache.h>
 
 @implementation WKPluginView
 
-- initWithFrame: (NSRect) r widget: (QWidget *)w 
+- initWithFrame: (NSRect) r widget: (QWidget *)w plugin: (WKPlugin *)plug url: (NSString *)location mime:(NSString *)mimeType
 {
+    NPError npErr;
+    char cMime[200];
+    NPSavedData saved;
+    
     [super initWithFrame: r];
     widget = w;
     isFlipped = YES;
+    instance = &instanceStruct;
+    stream = &streamStruct;
+    streamOffset = 0;
+
+    mime = mimeType;
+    url = location;
+    plugin = plug;
+    NPP_New = 		[plugin NPP_New]; // copy function pointers
+    NPP_SetWindow = 	[plugin NPP_SetWindow];
+    NPP_NewStream = 	[plugin NPP_NewStream];
+    NPP_WriteReady = 	[plugin NPP_WriteReady];
+    NPP_Write = 	[plugin NPP_Write];
+    NPP_DestroyStream = [plugin NPP_DestroyStream];
+    NPP_HandleEvent = 	[plugin NPP_HandleEvent];
+    
+    [mime getCString:cMime];
+    npErr = NPP_New(cMime, instance, NP_EMBED, 0, NULL, NULL, &saved);
+    KWQDebug("NPP_New: %d\n", npErr);
+    transferred = FALSE;
     return self;
 }
 
 - (void)drawRect:(NSRect)rect {
-    // Drawing code here.
+    NPError npErr;
+    NPWindow window;
+    NP_Port nPort;
+   // Point pt;
+    char cMime[200], cURL[800];
+    uint16 stype;
+    id <WCURICache> cache;
+    
+    nPort.port = [self qdPort];
+    nPort.portx = 0;
+    nPort.porty = 0;
+    
+    window.window = &nPort;
+    window.x = 20;
+    window.y = 20;
+    window.width = 640;
+    window.height = 450;
+    window.clipRect.top = 0;
+    window.clipRect.left = 0;
+    window.clipRect.bottom = 450;
+    window.clipRect.right = 640;
+    window.type = NPWindowTypeDrawable;
+    /*SetPort(nPort.port);
+    LineTo((int)rect.size.width, (int)rect.size.height);
+    MoveTo(0,0);*/
+    npErr = NPP_SetWindow(instance, &window);
+    KWQDebug("NPP_SetWindow: %d rect.size.height=%d rect.size.width=%d port=%d\n", npErr, (int)rect.size.height, (int)rect.size.width, (int)nPort.port);
+    
+    if(!transferred){
+        [url getCString:cURL];
+        stream->url = cURL;
+        stream->end = 0;
+        stream->lastmodified = 0;
+        stream->notifyData = NULL;
+        [mime getCString:cMime];
+        
+        npErr = NPP_NewStream(instance, cMime, stream, TRUE, &stype);
+        KWQDebug("NPP_NewStream: %d\n", npErr);
+        
+        cache = WCGetDefaultURICache();
+        if(stype == NP_NORMAL){
+            KWQDebug("Stream type: NP_NORMAL\n");
+            [cache requestWithString:url requestor:self userData:nil];
+        }else if(stype == NP_ASFILEONLY){
+            KWQDebug("Stream type: NP_ASFILEONLY\n");
+        }else if(stype == NP_ASFILE){
+            KWQDebug("Stream type: NP_ASFILE\n");
+        }else if(stype == NP_SEEK){
+            KWQDebug("Stream type: NP_SEEK\n");
+        }
+        transferred = TRUE;
+    }
+}
+
+
+-(void)cacheDataAvailable:(NSNotification *)notification
+{
+    id <WCURICacheData> data;
+    int32 bytes;
+    
+    data = [notification object];
+    bytes = NPP_WriteReady(instance, stream);
+    KWQDebug("NPP_WriteReady bytes=%d\n", (int)bytes);
+    
+    bytes = NPP_Write(instance, stream, streamOffset, [data cacheDataSize], [data cacheData]);
+    KWQDebug("NPP_Write bytes=%d\n", (int)bytes);
+    streamOffset += [data cacheDataSize];
+}
+
+-(void)cacheFinished:(NSNotification *)notification
+{
+    NPError npErr;
+    streamOffset = 0;
+    npErr = NPP_DestroyStream(instance, stream, NPRES_DONE);
+    KWQDebug("NPP_DestroyStream: %d\n", npErr);
+}
+
+-(BOOL)acceptsFirstResponder
+{
+    return true;
+}
+
+-(void)sendNullEvent
+{
+    EventRecord event;
+    
+    event.what = 0;
+    KWQDebug("NPP_HandleEvent: %d\n", NPP_HandleEvent(instance, &event));
 }
 
 @end
diff --git a/WebCore/src/kwq/KWQKHTMLPart.mm b/WebCore/src/kwq/KWQKHTMLPart.mm
index d6669b1..0847c43 100644
--- a/WebCore/src/kwq/KWQKHTMLPart.mm
+++ b/WebCore/src/kwq/KWQKHTMLPart.mm
@@ -1397,24 +1397,19 @@ bool KHTMLPart::requestObject( khtml::RenderPart *frame, const QString &url, con
                     const QStringList &args)
 {
     WKPlugin *plugin;
-    //KWQPlugin pluginWidget;
-    NPP_t instance;
+    KWQPlugin *pluginWidget;
     
     if(url.isEmpty() || serviceType.isEmpty()){
         return FALSE;
     }
-
     plugin = [[WKPluginDatabase installedPlugins] getPluginForMimeType:QSTRING_TO_NSSTRING(serviceType)];
     if(plugin == nil){
         return FALSE;
     }
     [plugin load];
-    [plugin newInstance:&instance withType:QSTRING_TO_NSSTRING(serviceType) withMode:NP_EMBED withArguments:nil withValues:nil];
-    [plugin destroyInstance:&instance]; // this needs to be moved 
-    
-    //frame->setWidget(&pluginWidget);
-
-    return FALSE;
+    pluginWidget = new KWQPlugin(0, plugin, url, serviceType, args);
+    frame->setWidget(pluginWidget);
+    return TRUE;
 }
 
 
diff --git a/WebCore/src/kwq/KWQPlugin.h b/WebCore/src/kwq/KWQPlugin.h
index cdf6a25..0b390c1 100644
--- a/WebCore/src/kwq/KWQPlugin.h
+++ b/WebCore/src/kwq/KWQPlugin.h
@@ -34,6 +34,7 @@
 #include "qstring.h"
 
 #import <WKPluginView.h>
+#import <WKPlugin.h>
     
 // class KWQPlugin ===============================================================
 
@@ -47,7 +48,7 @@ public:
     
     // constructors, copy constructors, and destructors ------------------------
 
-    KWQPlugin(QWidget *parent=0);
+    KWQPlugin(QWidget *parent=0, WKPlugin *plugin=nil, const QString &url=0, const QString &serviceType=0, const QStringList &args=0);
     ~KWQPlugin();
 
     // member functions --------------------------------------------------------
diff --git a/WebCore/src/kwq/KWQPlugin.mm b/WebCore/src/kwq/KWQPlugin.mm
index 1e690ef..267e298 100644
--- a/WebCore/src/kwq/KWQPlugin.mm
+++ b/WebCore/src/kwq/KWQPlugin.mm
@@ -27,9 +27,10 @@
 #include <KWQView.h>
 #include <kwqdebug.h>
 
-KWQPlugin::KWQPlugin(QWidget *parent)
+KWQPlugin::KWQPlugin(QWidget *parent, WKPlugin *plugin, const QString &url, const QString &serviceType,
+                    const QStringList &args)
 {
-    setView ([[[WKPluginView alloc] initWithFrame: NSMakeRect (0,0,0,0) widget: this] autorelease]);
+    setView ([[[WKPluginView alloc] initWithFrame: NSMakeRect (0,0,0,0) widget: this plugin: plugin url:QSTRING_TO_NSSTRING(url) mime:QSTRING_TO_NSSTRING(serviceType) ] autorelease]);
 }
 
 void * KWQPlugin::getPort()
diff --git a/WebCore/src/kwq/WKPlugin.h b/WebCore/src/kwq/WKPlugin.h
index cd780bc..fbbbe90 100644
--- a/WebCore/src/kwq/WKPlugin.h
+++ b/WebCore/src/kwq/WKPlugin.h
@@ -15,15 +15,38 @@
     NSString *name;
     NSString *executablePath;
     BOOL isLoaded;
-    
+    NPPluginFuncs pluginFuncs;
+    NPNetscapeFuncs browserFuncs;
+    uint16 pluginSize;
+    uint16 pluginVersion;
+    NPP_NewProcPtr NPP_New;
+    NPP_DestroyProcPtr NPP_Destroy;
+    NPP_SetWindowProcPtr NPP_SetWindow;
+    NPP_NewStreamProcPtr NPP_NewStream;
+    NPP_DestroyStreamProcPtr NPP_DestroyStream;
+    NPP_StreamAsFileProcPtr NPP_StreamAsFile;
+    NPP_WriteReadyProcPtr NPP_WriteReady;
+    NPP_WriteProcPtr NPP_Write;
+    NPP_PrintProcPtr NPP_Print;
+    NPP_HandleEventProcPtr NPP_HandleEvent;
+    NPP_URLNotifyProcPtr NPP_URLNotify;
+    NPP_GetValueProcPtr NPP_GetValue;
+    NPP_SetValueProcPtr NPP_SetValue;
+    NPP_ShutdownProcPtr NPP_Shutdown; 
+
 }
 
 - (BOOL)initializeWithPath:(NSString *)plugin;
 - (void)load;
-- (void)newInstance:(NPP)instance withType:(NSString *)mimeType withMode:(uint16)mode withArguments:(NSArray *)arguments withValues:(NSArray *)values;
-- (void)destroyInstance:(NPP)instance;
 - (void)unload;
 
+- (NPP_NewProcPtr)NPP_New;
+- (NPP_SetWindowProcPtr)NPP_SetWindow;
+- (NPP_NewStreamProcPtr)NPP_NewStream;
+- (NPP_WriteReadyProcPtr)NPP_WriteReady;
+- (NPP_WriteProcPtr)NPP_Write;
+- (NPP_DestroyStreamProcPtr)NPP_DestroyStream;
+- (NPP_HandleEventProcPtr)NPP_HandleEvent;
 - (NSDictionary *)mimeTypes;
 - (NSString *)name;
 - (NSString *)executablePath;
@@ -34,4 +57,4 @@
 @end
     
 NSMutableDictionary *getMimeTypesForResourceFile(SInt16 resRef);
-NPError InitializePlugin(mainFuncPtr pluginMainFunc);
\ No newline at end of file
+
diff --git a/WebCore/src/kwq/WKPlugin.mm b/WebCore/src/kwq/WKPlugin.mm
index f96bcc2..23cd3f7 100644
--- a/WebCore/src/kwq/WKPlugin.mm
+++ b/WebCore/src/kwq/WKPlugin.mm
@@ -9,24 +9,6 @@
 #import "WKPlugin.h"
 #include "kwqdebug.h"
 
-NPPluginFuncs pluginFuncs;
-NPNetscapeFuncs browserFuncs;
-uint16 pluginSize;
-uint16 pluginVersion;
-NPP_NewProcPtr NPP_New;
-NPP_DestroyProcPtr NPP_Destroy;
-NPP_SetWindowProcPtr NPP_SetWindow;
-NPP_NewStreamProcPtr NPP_NewStream;
-NPP_DestroyStreamProcPtr NPP_DestroyStream;
-NPP_StreamAsFileProcPtr NPP_StreamAsFile;
-NPP_WriteReadyProcPtr NPP_WriteReady;
-NPP_WriteProcPtr NPP_Write;
-NPP_PrintProcPtr NPP_Print;
-NPP_HandleEventProcPtr NPP_HandleEvent;
-NPP_URLNotifyProcPtr NPP_URLNotify;
-NPP_GetValueProcPtr NPP_GetValue;
-NPP_SetValueProcPtr NPP_SetValue;
-NPP_ShutdownProcPtr NPP_Shutdown; 
 
 @implementation WKPlugin
 
@@ -111,31 +93,88 @@ NPP_ShutdownProcPtr NPP_Shutdown;
         KWQDebug("WKPlugin: load: GetDiskFragment failed. Error=%d\n", err);
         return;
     }
-    InitializePlugin(pluginMainFunc);
+        NPError npErr;
+    
+    browserFuncs.version = 11;
+    browserFuncs.size = sizeof(NPNetscapeFuncs);
+    browserFuncs.geturl = tVectorForFunctionPointer(NPN_GetURLNotify);
+    browserFuncs.posturl = tVectorForFunctionPointer(NPN_PostURLNotify);
+    browserFuncs.requestread = tVectorForFunctionPointer(NPN_RequestRead);
+    browserFuncs.newstream = tVectorForFunctionPointer(NPN_NewStream);
+    browserFuncs.write = tVectorForFunctionPointer(NPN_Write);
+    browserFuncs.destroystream = tVectorForFunctionPointer(NPN_DestroyStream);
+    browserFuncs.status = tVectorForFunctionPointer(NPN_Status);
+    browserFuncs.uagent = tVectorForFunctionPointer(NPN_UserAgent);
+    browserFuncs.memalloc = tVectorForFunctionPointer(NPN_MemAlloc);
+    browserFuncs.memfree = tVectorForFunctionPointer(NPN_MemFree);
+    browserFuncs.memflush = tVectorForFunctionPointer(NPN_MemFlush);
+    browserFuncs.reloadplugins = tVectorForFunctionPointer(NPN_ReloadPlugins);
+    browserFuncs.geturlnotify = tVectorForFunctionPointer(NPN_GetURLNotify);
+    browserFuncs.posturlnotify = tVectorForFunctionPointer(NPN_PostURLNotify);
+    browserFuncs.getvalue = tVectorForFunctionPointer(NPN_GetValue);
+    browserFuncs.setvalue = tVectorForFunctionPointer(NPN_SetValue);
+    browserFuncs.invalidaterect = tVectorForFunctionPointer(NPN_InvalidateRect);
+    browserFuncs.invalidateregion = tVectorForFunctionPointer(NPN_InvalidateRegion);
+    browserFuncs.forceredraw = tVectorForFunctionPointer(NPN_ForceRedraw);
+    
+    pluginMainFunc = functionPointerForTVector(pluginMainFunc);
+    npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &NPP_Shutdown);
+    
+    pluginSize = pluginFuncs.size;
+    pluginVersion = pluginFuncs.version;
+    KWQDebug("pluginMainFunc: %d, size=%d, version=%d\n", npErr, pluginSize, pluginVersion);
+    
+    NPP_New = functionPointerForTVector(pluginFuncs.newp);
+    NPP_Destroy = functionPointerForTVector(pluginFuncs.destroy);
+    NPP_SetWindow = functionPointerForTVector(pluginFuncs.setwindow);
+    NPP_NewStream = functionPointerForTVector(pluginFuncs.newstream);
+    NPP_DestroyStream = functionPointerForTVector(pluginFuncs.destroystream);
+    NPP_StreamAsFile = functionPointerForTVector(pluginFuncs.asfile);
+    NPP_WriteReady = functionPointerForTVector(pluginFuncs.writeready);
+    NPP_Write = functionPointerForTVector(pluginFuncs.write);
+    NPP_Print = functionPointerForTVector(pluginFuncs.print);
+    NPP_HandleEvent = functionPointerForTVector(pluginFuncs.event);
+    NPP_URLNotify = functionPointerForTVector(pluginFuncs.urlnotify);
+    NPP_GetValue = functionPointerForTVector(pluginFuncs.getvalue);
+    NPP_SetValue = functionPointerForTVector(pluginFuncs.setvalue);
+    
     KWQDebug("Plugin Loaded\n");
     isLoaded = TRUE;
+    
 }
 
-- (void)newInstance:(NPP)instance withType:(NSString *)mimeType withMode:(uint16)mode withArguments:(NSArray *)arguments withValues:(NSArray *)values{
-    NPError npErr;
-    char mime[200];
+- (void)unload{
+    // unload library here
+    NPP_Shutdown();
+}
 
-    [mimeType getCString:mime];
-    npErr = NPP_New(mime, instance, mode, 0, NULL, NULL, NULL);
-    KWQDebug("NPP_New: %d\n", npErr);
+- (NPP_SetWindowProcPtr)NPP_SetWindow{
+    return NPP_SetWindow;
 }
 
-- (void)destroyInstance:(NPP)instance{
-    NPError npErr;
-    
-    npErr = NPP_Destroy(instance, NULL);
-    KWQDebug("NPP_Destroy: %d\n", npErr);
+- (NPP_NewProcPtr)NPP_New{
+    return NPP_New;
 }
 
-- (void)unload{
-    // unload library here
-    NPP_Shutdown();
+- (NPP_NewStreamProcPtr)NPP_NewStream{
+    return NPP_NewStream;
+}
+
+- (NPP_DestroyStreamProcPtr)NPP_DestroyStream{
+    return NPP_DestroyStream;
+}
+
+- (NPP_WriteReadyProcPtr)NPP_WriteReady{
+    return NPP_WriteReady;
 }
+- (NPP_WriteProcPtr)NPP_Write{
+    return NPP_Write;
+}
+
+- (NPP_HandleEventProcPtr)NPP_HandleEvent{
+    return NPP_HandleEvent;
+}
+
 - (NSDictionary *)mimeTypes{
     return mimeTypes;
 }
@@ -176,54 +215,6 @@ NPP_ShutdownProcPtr NPP_Shutdown;
 }
 @end
 
-NPError InitializePlugin(mainFuncPtr pluginMainFunc){
-    NPError npErr;
-    
-    browserFuncs.version = 11;
-    browserFuncs.size = sizeof(NPNetscapeFuncs);
-    browserFuncs.geturl = tVectorForFunctionPointer(NPN_GetURLNotify);
-    browserFuncs.posturl = tVectorForFunctionPointer(NPN_PostURLNotify);
-    browserFuncs.requestread = tVectorForFunctionPointer(NPN_RequestRead);
-    browserFuncs.newstream = tVectorForFunctionPointer(NPN_NewStream);
-    browserFuncs.write = tVectorForFunctionPointer(NPN_Write);
-    browserFuncs.destroystream = tVectorForFunctionPointer(NPN_DestroyStream);
-    browserFuncs.status = tVectorForFunctionPointer(NPN_Status);
-    browserFuncs.uagent = tVectorForFunctionPointer(NPN_UserAgent);
-    browserFuncs.memalloc = tVectorForFunctionPointer(NPN_MemAlloc);
-    browserFuncs.memfree = tVectorForFunctionPointer(NPN_MemFree);
-    browserFuncs.memflush = tVectorForFunctionPointer(NPN_MemFlush);
-    browserFuncs.reloadplugins = tVectorForFunctionPointer(NPN_ReloadPlugins);
-    browserFuncs.geturlnotify = tVectorForFunctionPointer(NPN_GetURLNotify);
-    browserFuncs.posturlnotify = tVectorForFunctionPointer(NPN_PostURLNotify);
-    browserFuncs.getvalue = tVectorForFunctionPointer(NPN_GetValue);
-    browserFuncs.setvalue = tVectorForFunctionPointer(NPN_SetValue);
-    browserFuncs.invalidaterect = tVectorForFunctionPointer(NPN_InvalidateRect);
-    browserFuncs.invalidateregion = tVectorForFunctionPointer(NPN_InvalidateRegion);
-    browserFuncs.forceredraw = tVectorForFunctionPointer(NPN_ForceRedraw);
-    
-    pluginMainFunc = functionPointerForTVector(pluginMainFunc);
-    npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &NPP_Shutdown);
-    
-    pluginSize = pluginFuncs.size;
-    pluginVersion = pluginFuncs.version;
-    KWQDebug("pluginMainFunc: %d, size=%d, version=%d\n", npErr, pluginSize, pluginVersion);
-    
-    NPP_New = functionPointerForTVector(pluginFuncs.newp);
-    NPP_Destroy = functionPointerForTVector(pluginFuncs.destroy);
-    NPP_SetWindow = functionPointerForTVector(pluginFuncs.setwindow);
-    NPP_NewStream = functionPointerForTVector(pluginFuncs.newstream);
-    NPP_DestroyStream = functionPointerForTVector(pluginFuncs.destroystream);
-    NPP_StreamAsFile = functionPointerForTVector(pluginFuncs.asfile);
-    NPP_WriteReady = functionPointerForTVector(pluginFuncs.writeready);
-    NPP_Write = functionPointerForTVector(pluginFuncs.write);
-    NPP_Print = functionPointerForTVector(pluginFuncs.print);
-    NPP_HandleEvent = functionPointerForTVector(pluginFuncs.event);
-    NPP_URLNotify = functionPointerForTVector(pluginFuncs.urlnotify);
-    NPP_GetValue = functionPointerForTVector(pluginFuncs.getvalue);
-    NPP_SetValue = functionPointerForTVector(pluginFuncs.setvalue);
-    return npErr;
-}
-
 NSMutableDictionary *getMimeTypesForResourceFile(SInt16 resRef){
     NSMutableDictionary *mimeDict;
     Str255 theString;
@@ -241,4 +232,10 @@ NSMutableDictionary *getMimeTypesForResourceFile(SInt16 resRef){
         [mimeDict setObject:[NSString stringWithCString:extString] forKey:[NSString stringWithCString:mimeString]];
     }
     return mimeDict;
-}
\ No newline at end of file
+}
+
+
+
+
+
+
diff --git a/WebCore/src/kwq/WKPluginView.h b/WebCore/src/kwq/WKPluginView.h
index d8da685..1918d9c 100644
--- a/WebCore/src/kwq/WKPluginView.h
+++ b/WebCore/src/kwq/WKPluginView.h
@@ -8,12 +8,55 @@
 
 #import <AppKit/AppKit.h>
 #include <qwidget.h>
+#import <WKPlugin.h>
+#include "npapi.h"
+#include "kwqdebug.h"
+
+typedef NPStream* NPS;
+
+typedef UInt16 EventKind;
+typedef UInt16 EventModifiers;
+struct EventRecord {
+  EventKind           what;
+  UInt32              message;
+  UInt32              when;
+  Point               where;
+  EventModifiers      modifiers;
+};
+typedef struct EventRecord EventRecord;
+
 
 @interface WKPluginView : NSQuickDrawView {
     QWidget *widget;
     bool isFlipped;
+    NPP instance;
+    NPP_t instanceStruct;
+    NPStream streamStruct;
+    NPS stream;
+    int32 streamOffset;
+    NSString *url, *mime;
+    WKPlugin *plugin;
+    bool transferred;
+    
+    NPP_NewProcPtr NPP_New;
+    NPP_DestroyProcPtr NPP_Destroy;
+    NPP_SetWindowProcPtr NPP_SetWindow;
+    NPP_NewStreamProcPtr NPP_NewStream;
+    NPP_DestroyStreamProcPtr NPP_DestroyStream;
+    NPP_StreamAsFileProcPtr NPP_StreamAsFile;
+    NPP_WriteReadyProcPtr NPP_WriteReady;
+    NPP_WriteProcPtr NPP_Write;
+    NPP_PrintProcPtr NPP_Print;
+    NPP_HandleEventProcPtr NPP_HandleEvent;
+    NPP_URLNotifyProcPtr NPP_URLNotify;
+    NPP_GetValueProcPtr NPP_GetValue;
+    NPP_SetValueProcPtr NPP_SetValue;
+    NPP_ShutdownProcPtr NPP_Shutdown; 
 }
 
-- initWithFrame: (NSRect) r widget: (QWidget *)w;
+- initWithFrame: (NSRect) r widget: (QWidget *)w plugin: (WKPlugin *)plug url: (NSString *)location mime:(NSString *)mime;
+-(void)drawRect:(NSRect)rect;
+-(BOOL)acceptsFirstResponder;
+-(void)sendNullEvent;
 
 @end
diff --git a/WebCore/src/kwq/WKPluginView.mm b/WebCore/src/kwq/WKPluginView.mm
index dfc2fec..e59e52f 100644
--- a/WebCore/src/kwq/WKPluginView.mm
+++ b/WebCore/src/kwq/WKPluginView.mm
@@ -7,20 +7,131 @@
 //
 
 #import "WKPluginView.h"
-
+#include <WCURICacheData.h>
+#include <WCURICache.h>
 
 @implementation WKPluginView
 
-- initWithFrame: (NSRect) r widget: (QWidget *)w 
+- initWithFrame: (NSRect) r widget: (QWidget *)w plugin: (WKPlugin *)plug url: (NSString *)location mime:(NSString *)mimeType
 {
+    NPError npErr;
+    char cMime[200];
+    NPSavedData saved;
+    
     [super initWithFrame: r];
     widget = w;
     isFlipped = YES;
+    instance = &instanceStruct;
+    stream = &streamStruct;
+    streamOffset = 0;
+
+    mime = mimeType;
+    url = location;
+    plugin = plug;
+    NPP_New = 		[plugin NPP_New]; // copy function pointers
+    NPP_SetWindow = 	[plugin NPP_SetWindow];
+    NPP_NewStream = 	[plugin NPP_NewStream];
+    NPP_WriteReady = 	[plugin NPP_WriteReady];
+    NPP_Write = 	[plugin NPP_Write];
+    NPP_DestroyStream = [plugin NPP_DestroyStream];
+    NPP_HandleEvent = 	[plugin NPP_HandleEvent];
+    
+    [mime getCString:cMime];
+    npErr = NPP_New(cMime, instance, NP_EMBED, 0, NULL, NULL, &saved);
+    KWQDebug("NPP_New: %d\n", npErr);
+    transferred = FALSE;
     return self;
 }
 
 - (void)drawRect:(NSRect)rect {
-    // Drawing code here.
+    NPError npErr;
+    NPWindow window;
+    NP_Port nPort;
+   // Point pt;
+    char cMime[200], cURL[800];
+    uint16 stype;
+    id <WCURICache> cache;
+    
+    nPort.port = [self qdPort];
+    nPort.portx = 0;
+    nPort.porty = 0;
+    
+    window.window = &nPort;
+    window.x = 20;
+    window.y = 20;
+    window.width = 640;
+    window.height = 450;
+    window.clipRect.top = 0;
+    window.clipRect.left = 0;
+    window.clipRect.bottom = 450;
+    window.clipRect.right = 640;
+    window.type = NPWindowTypeDrawable;
+    /*SetPort(nPort.port);
+    LineTo((int)rect.size.width, (int)rect.size.height);
+    MoveTo(0,0);*/
+    npErr = NPP_SetWindow(instance, &window);
+    KWQDebug("NPP_SetWindow: %d rect.size.height=%d rect.size.width=%d port=%d\n", npErr, (int)rect.size.height, (int)rect.size.width, (int)nPort.port);
+    
+    if(!transferred){
+        [url getCString:cURL];
+        stream->url = cURL;
+        stream->end = 0;
+        stream->lastmodified = 0;
+        stream->notifyData = NULL;
+        [mime getCString:cMime];
+        
+        npErr = NPP_NewStream(instance, cMime, stream, TRUE, &stype);
+        KWQDebug("NPP_NewStream: %d\n", npErr);
+        
+        cache = WCGetDefaultURICache();
+        if(stype == NP_NORMAL){
+            KWQDebug("Stream type: NP_NORMAL\n");
+            [cache requestWithString:url requestor:self userData:nil];
+        }else if(stype == NP_ASFILEONLY){
+            KWQDebug("Stream type: NP_ASFILEONLY\n");
+        }else if(stype == NP_ASFILE){
+            KWQDebug("Stream type: NP_ASFILE\n");
+        }else if(stype == NP_SEEK){
+            KWQDebug("Stream type: NP_SEEK\n");
+        }
+        transferred = TRUE;
+    }
+}
+
+
+-(void)cacheDataAvailable:(NSNotification *)notification
+{
+    id <WCURICacheData> data;
+    int32 bytes;
+    
+    data = [notification object];
+    bytes = NPP_WriteReady(instance, stream);
+    KWQDebug("NPP_WriteReady bytes=%d\n", (int)bytes);
+    
+    bytes = NPP_Write(instance, stream, streamOffset, [data cacheDataSize], [data cacheData]);
+    KWQDebug("NPP_Write bytes=%d\n", (int)bytes);
+    streamOffset += [data cacheDataSize];
+}
+
+-(void)cacheFinished:(NSNotification *)notification
+{
+    NPError npErr;
+    streamOffset = 0;
+    npErr = NPP_DestroyStream(instance, stream, NPRES_DONE);
+    KWQDebug("NPP_DestroyStream: %d\n", npErr);
+}
+
+-(BOOL)acceptsFirstResponder
+{
+    return true;
+}
+
+-(void)sendNullEvent
+{
+    EventRecord event;
+    
+    event.what = 0;
+    KWQDebug("NPP_HandleEvent: %d\n", NPP_HandleEvent(instance, &event));
 }
 
 @end

-- 
WebKit Debian packaging



More information about the Pkg-webkit-commits mailing list