[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