summaryrefslogtreecommitdiff
path: root/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm')
-rw-r--r--Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm561
1 files changed, 106 insertions, 455 deletions
diff --git a/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm b/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
index 533b53975..17851568f 100644
--- a/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
+++ b/Source/WebKit/mac/Plugins/WebNetscapePluginPackage.mm
@@ -34,7 +34,6 @@
#import "WebKitNSStringExtras.h"
#import "WebNSFileManagerExtras.h"
#import "WebNSObjectExtras.h"
-#import "WebNetscapeDeprecatedFunctions.h"
#import <WebCore/npruntime_impl.h>
#import <wtf/RetainPtr.h>
@@ -46,90 +45,23 @@ using namespace WebKit;
using namespace WebCore;
-#ifdef SUPPORT_CFM
-typedef void (* FunctionPointer)(void);
-typedef void (* TransitionVector)(void);
-static FunctionPointer functionPointerForTVector(TransitionVector);
-static TransitionVector tVectorForFunctionPointer(FunctionPointer);
-#endif
-
#define PluginNameOrDescriptionStringNumber 126
#define MIMEDescriptionStringNumber 127
#define MIMEListStringStringNumber 128
-#define RealPlayerAppIndentifier @"com.RealNetworks.RealOne Player"
-#define RealPlayerPluginFilename "RealPlayer Plugin"
-
@interface WebNetscapePluginPackage (Internal)
- (void)_unloadWithShutdown:(BOOL)shutdown;
@end
@implementation WebNetscapePluginPackage
-#ifndef __LP64__
-
-#if COMPILER(CLANG)
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-+ (void)initialize
-{
- // The Shockwave plugin requires a valid file in CurApRefNum.
- // But it doesn't seem to matter what file it is.
- // If we're called inside a Cocoa application which won't have a
- // CurApRefNum, we set it to point to the system resource file.
-
- // Call CurResFile before testing the result of WebLMGetCurApRefNum.
- // If we are called before the bundle resource map has been opened
- // for a Carbon application (or a Cocoa app with Resource Manager
- // resources) we *do not* want to set CurApRefNum to point at the
- // system resource file. CurResFile triggers Resource Manager lazy
- // initialization, and will open the bundle resource map as necessary.
-
- CurResFile();
-
- if (WebLMGetCurApRefNum() == -1) {
- // To get the refNum for the system resource file, we have to do
- // UseResFile(kSystemResFile) and then look at CurResFile().
- short savedCurResFile = CurResFile();
- UseResFile(kSystemResFile);
- WebLMSetCurApRefNum(CurResFile());
- UseResFile(savedCurResFile);
- }
-}
-
-#if COMPILER(CLANG)
-#pragma clang diagnostic pop
-#endif
-
-#endif
-
- (ResFileRefNum)openResourceFile
{
-#ifdef SUPPORT_CFM
- if (!isBundle) {
- FSRef fref;
- OSErr err = FSPathMakeRef((const UInt8 *)[(NSString *)path fileSystemRepresentation], &fref, NULL);
- if (err != noErr)
- return -1;
-
- return FSOpenResFile(&fref, fsRdPerm);
- }
-#endif
-
return CFBundleOpenBundleResourceMap(cfBundle.get());
}
- (void)closeResourceFile:(ResFileRefNum)resRef
{
-#ifdef SUPPORT_CFM
- if (!isBundle) {
- CloseResFile(resRef);
- return;
- }
-#endif
-
CFBundleCloseBundleResourceMap(cfBundle.get(), resRef);
}
@@ -227,60 +159,35 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
OSType type = 0;
- if (cfBundle) {
- // Bundle
- CFBundleGetPackageInfo(cfBundle.get(), &type, NULL);
-#ifdef SUPPORT_CFM
- isBundle = YES;
-#endif
- } else {
-#ifdef SUPPORT_CFM
- // Single-file plug-in with resource fork
- NSString *destinationPath = [[NSFileManager defaultManager] destinationOfSymbolicLinkAtPath:path error:0];
- type = [[[NSFileManager defaultManager] attributesOfItemAtPath:destinationPath error:0] fileHFSTypeCode];
- isBundle = NO;
- isCFM = YES;
-#else
+ if (!cfBundle)
return NO;
-#endif
- }
+
+ CFBundleGetPackageInfo(cfBundle.get(), &type, NULL);
if (type != FOUR_CHAR_CODE('BRPL'))
return NO;
- // Check if the executable is Mach-O or CFM.
- if (cfBundle) {
- RetainPtr<CFURLRef> executableURL(AdoptCF, CFBundleCopyExecutableURL(cfBundle.get()));
- if (!executableURL)
- return NO;
- NSFileHandle *executableFile = [NSFileHandle fileHandleForReadingAtPath:[(NSURL *)executableURL.get() path]];
- NSData *data = [executableFile readDataOfLength:512];
- [executableFile closeFile];
- // Check the length of the data before calling memcmp. We think this fixes 3782543.
- if (data == nil || [data length] < 8)
- return NO;
- BOOL hasCFMHeader = memcmp([data bytes], "Joy!peff", 8) == 0;
-#ifdef SUPPORT_CFM
- isCFM = hasCFMHeader;
-#else
- if (hasCFMHeader)
- return NO;
-#endif
-
#if USE(PLUGIN_HOST_PROCESS)
- RetainPtr<CFArrayRef> archs(AdoptCF, CFBundleCopyExecutableArchitectures(cfBundle.get()));
-
- if ([(NSArray *)archs.get() containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureX86_64]])
- pluginHostArchitecture = CPU_TYPE_X86_64;
- else if ([(NSArray *)archs.get() containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureI386]])
- pluginHostArchitecture = CPU_TYPE_X86;
- else
- return NO;
+ RetainPtr<CFArrayRef> archs(AdoptCF, CFBundleCopyExecutableArchitectures(cfBundle.get()));
+
+ if ([(NSArray *)archs.get() containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureX86_64]])
+ pluginHostArchitecture = CPU_TYPE_X86_64;
+ else if ([(NSArray *)archs.get() containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureI386]])
+ pluginHostArchitecture = CPU_TYPE_X86;
+ else
+ return NO;
#else
- if (![self isNativeLibraryData:data])
- return NO;
+ RetainPtr<CFURLRef> executableURL(AdoptCF, CFBundleCopyExecutableURL(cfBundle.get()));
+ if (!executableURL)
+ return NO;
+ NSFileHandle *executableFile = [NSFileHandle fileHandleForReadingAtPath:[(NSURL *)executableURL.get() path]];
+ NSData *data = [executableFile readDataOfLength:512];
+ [executableFile closeFile];
+
+ if (![self isNativeLibraryData:data])
+ return NO;
+
#endif
- }
if (![self getPluginInfoFromPLists] && ![self getPluginInfoFromResources])
return NO;
@@ -304,15 +211,6 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
return self;
}
-- (WebExecutableType)executableType
-{
-#ifdef SUPPORT_CFM
- if (isCFM)
- return WebCFMExecutableType;
-#endif
- return WebMachOExecutableType;
-}
-
#if USE(PLUGIN_HOST_PROCESS)
- (cpu_type_t)pluginHostArchitecture
{
@@ -326,34 +224,6 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
#endif
-- (void)launchRealPlayer
-{
- CFURLRef appURL = NULL;
- OSStatus error = LSFindApplicationForInfo(kLSUnknownCreator, (CFStringRef)RealPlayerAppIndentifier, NULL, NULL, &appURL);
- if (!error) {
- LSLaunchURLSpec URLSpec;
- bzero(&URLSpec, sizeof(URLSpec));
- URLSpec.launchFlags = kLSLaunchDefaults | kLSLaunchDontSwitch;
- URLSpec.appURL = appURL;
- LSOpenFromURLSpec(&URLSpec, NULL);
- CFRelease(appURL);
- }
-}
-
-- (void)_applyDjVuWorkaround
-{
- if (!cfBundle)
- return;
-
- if ([self bundleIdentifier] == "com.lizardtech.NPDjVu") {
- // The DjVu plug-in will crash copying the vtable if it's too big so we cap it to
- // what the plug-in expects here.
- // size + version + 40 function pointers.
- browserFuncs.size = 2 + 2 + sizeof(void *) * 40;
- }
-
-}
-
- (void)unload
{
[self _unloadWithShutdown:YES];
@@ -365,10 +235,6 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
NP_InitializeFuncPtr NP_Initialize = NULL;
NPError npErr;
-#ifdef SUPPORT_CFM
- MainFuncPtr pluginMainFunc = NULL;
-#endif
-
#if !LOG_DISABLED
CFAbsoluteTime start = CFAbsoluteTimeGetCurrent();
CFAbsoluteTime currentTime;
@@ -379,70 +245,20 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
if (isLoaded)
return YES;
-#ifdef SUPPORT_CFM
- if (isBundle) {
-#endif
- if (!CFBundleLoadExecutable(cfBundle.get()))
- return NO;
-#if !LOG_DISABLED
- currentTime = CFAbsoluteTimeGetCurrent();
- duration = currentTime - start;
-#endif
- LOG(Plugins, "%f CFBundleLoadExecutable took %f seconds", currentTime, duration);
- isLoaded = YES;
-
-#ifdef SUPPORT_CFM
- if (isCFM) {
- pluginMainFunc = (MainFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("main") );
- if (!pluginMainFunc)
- return NO;
- } else {
-#endif
- NP_Initialize = (NP_InitializeFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_Initialize"));
- NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_GetEntryPoints"));
- NP_Shutdown = (NPP_ShutdownProcPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_Shutdown"));
- if (!NP_Initialize || !NP_GetEntryPoints || !NP_Shutdown)
- return NO;
-#ifdef SUPPORT_CFM
- }
- } else {
- // single CFM file
- FSSpec spec;
- FSRef fref;
- OSErr err;
-
- err = FSPathMakeRef((UInt8 *)[(NSString *)path fileSystemRepresentation], &fref, NULL);
- if (err != noErr) {
- LOG_ERROR("FSPathMakeRef failed. Error=%d", err);
- return NO;
- }
- err = FSGetCatalogInfo(&fref, kFSCatInfoNone, NULL, NULL, &spec, NULL);
- if (err != noErr) {
- LOG_ERROR("FSGetCatalogInfo failed. Error=%d", err);
- return NO;
- }
- err = WebGetDiskFragment(&spec, 0, kCFragGoesToEOF, nil, kPrivateCFragCopy, &connID, (Ptr *)&pluginMainFunc, nil);
- if (err != noErr) {
- LOG_ERROR("WebGetDiskFragment failed. Error=%d", err);
- return NO;
- }
+ if (!CFBundleLoadExecutable(cfBundle.get()))
+ return NO;
#if !LOG_DISABLED
- currentTime = CFAbsoluteTimeGetCurrent();
- duration = currentTime - start;
+ currentTime = CFAbsoluteTimeGetCurrent();
+ duration = currentTime - start;
#endif
- LOG(Plugins, "%f WebGetDiskFragment took %f seconds", currentTime, duration);
- isLoaded = YES;
-
- pluginMainFunc = (MainFuncPtr)functionPointerForTVector((TransitionVector)pluginMainFunc);
- if (!pluginMainFunc) {
- return NO;
- }
+ LOG(Plugins, "%f CFBundleLoadExecutable took %f seconds", currentTime, duration);
+ isLoaded = YES;
- // NOTE: pluginMainFunc is freed after it is called. Be sure not to return before that.
-
- isCFM = YES;
- }
-#endif /* SUPPORT_CFM */
+ NP_Initialize = (NP_InitializeFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_Initialize"));
+ NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_GetEntryPoints"));
+ NP_Shutdown = (NPP_ShutdownProcPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_Shutdown"));
+ if (!NP_Initialize || !NP_GetEntryPoints || !NP_Shutdown)
+ return NO;
#if COMPILER(CLANG)
#pragma clang diagnostic push
@@ -457,210 +273,88 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
#pragma clang diagnostic pop
#endif
- // swap function tables
-#ifdef SUPPORT_CFM
- if (isCFM) {
- browserFuncs.version = NP_VERSION_MINOR;
- browserFuncs.size = sizeof(NPNetscapeFuncs);
- browserFuncs.geturl = (NPN_GetURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetURL);
- browserFuncs.posturl = (NPN_PostURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PostURL);
- browserFuncs.requestread = (NPN_RequestReadProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_RequestRead);
- browserFuncs.newstream = (NPN_NewStreamProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_NewStream);
- browserFuncs.write = (NPN_WriteProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_Write);
- browserFuncs.destroystream = (NPN_DestroyStreamProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_DestroyStream);
- browserFuncs.status = (NPN_StatusProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_Status);
- browserFuncs.uagent = (NPN_UserAgentProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_UserAgent);
- browserFuncs.memalloc = (NPN_MemAllocProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_MemAlloc);
- browserFuncs.memfree = (NPN_MemFreeProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_MemFree);
- browserFuncs.memflush = (NPN_MemFlushProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_MemFlush);
- browserFuncs.reloadplugins = (NPN_ReloadPluginsProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ReloadPlugins);
- browserFuncs.geturlnotify = (NPN_GetURLNotifyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetURLNotify);
- browserFuncs.posturlnotify = (NPN_PostURLNotifyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PostURLNotify);
- browserFuncs.getvalue = (NPN_GetValueProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetValue);
- browserFuncs.setvalue = (NPN_SetValueProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_SetValue);
- browserFuncs.invalidaterect = (NPN_InvalidateRectProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_InvalidateRect);
- browserFuncs.invalidateregion = (NPN_InvalidateRegionProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_InvalidateRegion);
- browserFuncs.forceredraw = (NPN_ForceRedrawProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ForceRedraw);
- browserFuncs.getJavaEnv = (NPN_GetJavaEnvProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetJavaEnv);
- browserFuncs.getJavaPeer = (NPN_GetJavaPeerProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetJavaPeer);
- browserFuncs.pushpopupsenabledstate = (NPN_PushPopupsEnabledStateProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PushPopupsEnabledState);
- browserFuncs.poppopupsenabledstate = (NPN_PopPopupsEnabledStateProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PopPopupsEnabledState);
- browserFuncs.pluginthreadasynccall = (NPN_PluginThreadAsyncCallProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PluginThreadAsyncCall);
- browserFuncs.getvalueforurl = (NPN_GetValueForURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetValueForURL);
- browserFuncs.setvalueforurl = (NPN_SetValueForURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_SetValueForURL);
- browserFuncs.getauthenticationinfo = (NPN_GetAuthenticationInfoProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetAuthenticationInfo);
- browserFuncs.scheduletimer = (NPN_ScheduleTimerProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ScheduleTimer);
- browserFuncs.unscheduletimer = (NPN_UnscheduleTimerProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_UnscheduleTimer);
- browserFuncs.popupcontextmenu = (NPN_PopUpContextMenuProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PopUpContextMenu);
- browserFuncs.convertpoint = (NPN_ConvertPointProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ConvertPoint);
-
- browserFuncs.releasevariantvalue = (NPN_ReleaseVariantValueProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_ReleaseVariantValue);
- browserFuncs.getstringidentifier = (NPN_GetStringIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetStringIdentifier);
- browserFuncs.getstringidentifiers = (NPN_GetStringIdentifiersProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetStringIdentifiers);
- browserFuncs.getintidentifier = (NPN_GetIntIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetIntIdentifier);
- browserFuncs.identifierisstring = (NPN_IdentifierIsStringProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_IdentifierIsString);
- browserFuncs.utf8fromidentifier = (NPN_UTF8FromIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_UTF8FromIdentifier);
- browserFuncs.intfromidentifier = (NPN_IntFromIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_IntFromIdentifier);
- browserFuncs.createobject = (NPN_CreateObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_CreateObject);
- browserFuncs.retainobject = (NPN_RetainObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_RetainObject);
- browserFuncs.releaseobject = (NPN_ReleaseObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_ReleaseObject);
- browserFuncs.hasmethod = (NPN_HasMethodProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_HasProperty);
- browserFuncs.invoke = (NPN_InvokeProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Invoke);
- browserFuncs.invokeDefault = (NPN_InvokeDefaultProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_InvokeDefault);
- browserFuncs.evaluate = (NPN_EvaluateProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Evaluate);
- browserFuncs.hasproperty = (NPN_HasPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_HasProperty);
- browserFuncs.getproperty = (NPN_GetPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetProperty);
- browserFuncs.setproperty = (NPN_SetPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_SetProperty);
- browserFuncs.removeproperty = (NPN_RemovePropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_RemoveProperty);
- browserFuncs.setexception = (NPN_SetExceptionProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_SetException);
- browserFuncs.enumerate = (NPN_EnumerateProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Enumerate);
- browserFuncs.construct = (NPN_ConstructProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Construct);
-
- [self _applyDjVuWorkaround];
-
+ browserFuncs.version = NP_VERSION_MINOR;
+ browserFuncs.size = sizeof(NPNetscapeFuncs);
+ browserFuncs.geturl = NPN_GetURL;
+ browserFuncs.posturl = NPN_PostURL;
+ browserFuncs.requestread = NPN_RequestRead;
+ browserFuncs.newstream = NPN_NewStream;
+ browserFuncs.write = NPN_Write;
+ browserFuncs.destroystream = NPN_DestroyStream;
+ browserFuncs.status = NPN_Status;
+ browserFuncs.uagent = NPN_UserAgent;
+ browserFuncs.memalloc = NPN_MemAlloc;
+ browserFuncs.memfree = NPN_MemFree;
+ browserFuncs.memflush = NPN_MemFlush;
+ browserFuncs.reloadplugins = NPN_ReloadPlugins;
+ browserFuncs.geturlnotify = NPN_GetURLNotify;
+ browserFuncs.posturlnotify = NPN_PostURLNotify;
+ browserFuncs.getvalue = NPN_GetValue;
+ browserFuncs.setvalue = NPN_SetValue;
+ browserFuncs.invalidaterect = NPN_InvalidateRect;
+ browserFuncs.invalidateregion = NPN_InvalidateRegion;
+ browserFuncs.forceredraw = NPN_ForceRedraw;
+ browserFuncs.getJavaEnv = NPN_GetJavaEnv;
+ browserFuncs.getJavaPeer = NPN_GetJavaPeer;
+ browserFuncs.pushpopupsenabledstate = NPN_PushPopupsEnabledState;
+ browserFuncs.poppopupsenabledstate = NPN_PopPopupsEnabledState;
+ browserFuncs.pluginthreadasynccall = NPN_PluginThreadAsyncCall;
+ browserFuncs.getvalueforurl = NPN_GetValueForURL;
+ browserFuncs.setvalueforurl = NPN_SetValueForURL;
+ browserFuncs.getauthenticationinfo = NPN_GetAuthenticationInfo;
+ browserFuncs.scheduletimer = NPN_ScheduleTimer;
+ browserFuncs.unscheduletimer = NPN_UnscheduleTimer;
+ browserFuncs.popupcontextmenu = NPN_PopUpContextMenu;
+ browserFuncs.convertpoint = NPN_ConvertPoint;
+
+ browserFuncs.releasevariantvalue = _NPN_ReleaseVariantValue;
+ browserFuncs.getstringidentifier = _NPN_GetStringIdentifier;
+ browserFuncs.getstringidentifiers = _NPN_GetStringIdentifiers;
+ browserFuncs.getintidentifier = _NPN_GetIntIdentifier;
+ browserFuncs.identifierisstring = _NPN_IdentifierIsString;
+ browserFuncs.utf8fromidentifier = _NPN_UTF8FromIdentifier;
+ browserFuncs.intfromidentifier = _NPN_IntFromIdentifier;
+ browserFuncs.createobject = _NPN_CreateObject;
+ browserFuncs.retainobject = _NPN_RetainObject;
+ browserFuncs.releaseobject = _NPN_ReleaseObject;
+ browserFuncs.hasmethod = _NPN_HasMethod;
+ browserFuncs.invoke = _NPN_Invoke;
+ browserFuncs.invokeDefault = _NPN_InvokeDefault;
+ browserFuncs.evaluate = _NPN_Evaluate;
+ browserFuncs.hasproperty = _NPN_HasProperty;
+ browserFuncs.getproperty = _NPN_GetProperty;
+ browserFuncs.setproperty = _NPN_SetProperty;
+ browserFuncs.removeproperty = _NPN_RemoveProperty;
+ browserFuncs.setexception = _NPN_SetException;
+ browserFuncs.enumerate = _NPN_Enumerate;
+ browserFuncs.construct = _NPN_Construct;
+
#if !LOG_DISABLED
- CFAbsoluteTime mainStart = CFAbsoluteTimeGetCurrent();
+ CFAbsoluteTime initializeStart = CFAbsoluteTimeGetCurrent();
#endif
- LOG(Plugins, "%f main timing started", mainStart);
- NPP_ShutdownProcPtr shutdownFunction;
- npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &shutdownFunction);
- NP_Shutdown = (NPP_ShutdownProcPtr)functionPointerForTVector((TransitionVector)shutdownFunction);
- if (!isBundle)
- // Don't free pluginMainFunc if we got it from a bundle because it is owned by CFBundle in that case.
- free(reinterpret_cast<void*>(pluginMainFunc));
-
- // Workaround for 3270576. The RealPlayer plug-in fails to load if its preference file is out of date.
- // Launch the RealPlayer application to refresh the file.
- if (npErr != NPERR_NO_ERROR) {
- if (npErr == NPERR_MODULE_LOAD_FAILED_ERROR && equalIgnoringCase(pluginInfo.file, RealPlayerPluginFilename))
- [self launchRealPlayer];
- return NO;
- }
+ LOG(Plugins, "%f NP_Initialize timing started", initializeStart);
+ npErr = NP_Initialize(&browserFuncs);
+ if (npErr != NPERR_NO_ERROR)
+ return NO;
#if !LOG_DISABLED
- currentTime = CFAbsoluteTimeGetCurrent();
- duration = currentTime - mainStart;
-#endif
- LOG(Plugins, "%f main took %f seconds", currentTime, duration);
-
- pluginSize = pluginFuncs.size;
- pluginVersion = pluginFuncs.version;
- LOG(Plugins, "pluginMainFunc: %d, size=%d, version=%d", npErr, pluginSize, pluginVersion);
-
- pluginFuncs.newp = (NPP_NewProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newp);
- pluginFuncs.destroy = (NPP_DestroyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroy);
- pluginFuncs.setwindow = (NPP_SetWindowProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setwindow);
- pluginFuncs.newstream = (NPP_NewStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newstream);
- pluginFuncs.destroystream = (NPP_DestroyStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroystream);
- pluginFuncs.asfile = (NPP_StreamAsFileProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.asfile);
- pluginFuncs.writeready = (NPP_WriteReadyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.writeready);
- pluginFuncs.write = (NPP_WriteProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.write);
- pluginFuncs.print = (NPP_PrintProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.print);
- pluginFuncs.event = (NPP_HandleEventProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.event);
- pluginFuncs.urlnotify = (NPP_URLNotifyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.urlnotify);
- pluginFuncs.getvalue = (NPP_GetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.getvalue);
- pluginFuncs.setvalue = (NPP_SetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setvalue);
-
- // LiveConnect support
- pluginFuncs.javaClass = (JRIGlobalRef)functionPointerForTVector((TransitionVector)pluginFuncs.javaClass);
- if (pluginFuncs.javaClass) {
- LOG(LiveConnect, "%@: CFM entry point for NPP_GetJavaClass = %p", (NSString *)[self pluginInfo].name, pluginFuncs.javaClass);
- } else {
- LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", (NSString *)[self pluginInfo].name);
- }
-
- } else {
-
+ currentTime = CFAbsoluteTimeGetCurrent();
+ duration = currentTime - initializeStart;
#endif
+ LOG(Plugins, "%f NP_Initialize took %f seconds", currentTime, duration);
- // no function pointer conversion necessary for Mach-O
- browserFuncs.version = NP_VERSION_MINOR;
- browserFuncs.size = sizeof(NPNetscapeFuncs);
- browserFuncs.geturl = NPN_GetURL;
- browserFuncs.posturl = NPN_PostURL;
- browserFuncs.requestread = NPN_RequestRead;
- browserFuncs.newstream = NPN_NewStream;
- browserFuncs.write = NPN_Write;
- browserFuncs.destroystream = NPN_DestroyStream;
- browserFuncs.status = NPN_Status;
- browserFuncs.uagent = NPN_UserAgent;
- browserFuncs.memalloc = NPN_MemAlloc;
- browserFuncs.memfree = NPN_MemFree;
- browserFuncs.memflush = NPN_MemFlush;
- browserFuncs.reloadplugins = NPN_ReloadPlugins;
- browserFuncs.geturlnotify = NPN_GetURLNotify;
- browserFuncs.posturlnotify = NPN_PostURLNotify;
- browserFuncs.getvalue = NPN_GetValue;
- browserFuncs.setvalue = NPN_SetValue;
- browserFuncs.invalidaterect = NPN_InvalidateRect;
- browserFuncs.invalidateregion = NPN_InvalidateRegion;
- browserFuncs.forceredraw = NPN_ForceRedraw;
- browserFuncs.getJavaEnv = NPN_GetJavaEnv;
- browserFuncs.getJavaPeer = NPN_GetJavaPeer;
- browserFuncs.pushpopupsenabledstate = NPN_PushPopupsEnabledState;
- browserFuncs.poppopupsenabledstate = NPN_PopPopupsEnabledState;
- browserFuncs.pluginthreadasynccall = NPN_PluginThreadAsyncCall;
- browserFuncs.getvalueforurl = NPN_GetValueForURL;
- browserFuncs.setvalueforurl = NPN_SetValueForURL;
- browserFuncs.getauthenticationinfo = NPN_GetAuthenticationInfo;
- browserFuncs.scheduletimer = NPN_ScheduleTimer;
- browserFuncs.unscheduletimer = NPN_UnscheduleTimer;
- browserFuncs.popupcontextmenu = NPN_PopUpContextMenu;
- browserFuncs.convertpoint = NPN_ConvertPoint;
-
- browserFuncs.releasevariantvalue = _NPN_ReleaseVariantValue;
- browserFuncs.getstringidentifier = _NPN_GetStringIdentifier;
- browserFuncs.getstringidentifiers = _NPN_GetStringIdentifiers;
- browserFuncs.getintidentifier = _NPN_GetIntIdentifier;
- browserFuncs.identifierisstring = _NPN_IdentifierIsString;
- browserFuncs.utf8fromidentifier = _NPN_UTF8FromIdentifier;
- browserFuncs.intfromidentifier = _NPN_IntFromIdentifier;
- browserFuncs.createobject = _NPN_CreateObject;
- browserFuncs.retainobject = _NPN_RetainObject;
- browserFuncs.releaseobject = _NPN_ReleaseObject;
- browserFuncs.hasmethod = _NPN_HasMethod;
- browserFuncs.invoke = _NPN_Invoke;
- browserFuncs.invokeDefault = _NPN_InvokeDefault;
- browserFuncs.evaluate = _NPN_Evaluate;
- browserFuncs.hasproperty = _NPN_HasProperty;
- browserFuncs.getproperty = _NPN_GetProperty;
- browserFuncs.setproperty = _NPN_SetProperty;
- browserFuncs.removeproperty = _NPN_RemoveProperty;
- browserFuncs.setexception = _NPN_SetException;
- browserFuncs.enumerate = _NPN_Enumerate;
- browserFuncs.construct = _NPN_Construct;
-
- [self _applyDjVuWorkaround];
+ pluginFuncs.size = sizeof(NPPluginFuncs);
-#if !LOG_DISABLED
- CFAbsoluteTime initializeStart = CFAbsoluteTimeGetCurrent();
-#endif
- LOG(Plugins, "%f NP_Initialize timing started", initializeStart);
- npErr = NP_Initialize(&browserFuncs);
- if (npErr != NPERR_NO_ERROR)
- return NO;
-#if !LOG_DISABLED
- currentTime = CFAbsoluteTimeGetCurrent();
- duration = currentTime - initializeStart;
-#endif
- LOG(Plugins, "%f NP_Initialize took %f seconds", currentTime, duration);
+ npErr = NP_GetEntryPoints(&pluginFuncs);
+ if (npErr != NPERR_NO_ERROR)
+ return NO;
- pluginFuncs.size = sizeof(NPPluginFuncs);
-
- npErr = NP_GetEntryPoints(&pluginFuncs);
- if (npErr != NPERR_NO_ERROR)
- return NO;
-
- pluginSize = pluginFuncs.size;
- pluginVersion = pluginFuncs.version;
-
- if (pluginFuncs.javaClass)
- LOG(LiveConnect, "%@: mach-o entry point for NPP_GetJavaClass = %p", (NSString *)[self pluginInfo].name, pluginFuncs.javaClass);
- else
- LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", (NSString *)[self pluginInfo].name);
+ pluginSize = pluginFuncs.size;
+ pluginVersion = pluginFuncs.version;
-#ifdef SUPPORT_CFM
- }
-#endif
+ if (pluginFuncs.javaClass)
+ LOG(LiveConnect, "%@: mach-o entry point for NPP_GetJavaClass = %p", (NSString *)[self pluginInfo].name, pluginFuncs.javaClass);
+ else
+ LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", (NSString *)[self pluginInfo].name);
#if !LOG_DISABLED
currentTime = CFAbsoluteTimeGetCurrent();
@@ -741,44 +435,6 @@ static TransitionVector tVectorForFunctionPointer(FunctionPointer);
@end
-#ifdef SUPPORT_CFM
-
-// function pointer converters
-
-FunctionPointer functionPointerForTVector(TransitionVector tvp)
-{
- const uint32_t temp[6] = {0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420};
- uint32_t *newGlue = NULL;
-
- if (tvp != NULL) {
- newGlue = (uint32_t *)malloc(sizeof(temp));
- if (newGlue != NULL) {
- unsigned i;
- for (i = 0; i < 6; i++) newGlue[i] = temp[i];
- newGlue[0] |= ((uintptr_t)tvp >> 16);
- newGlue[1] |= ((uintptr_t)tvp & 0xFFFF);
- MakeDataExecutable(newGlue, sizeof(temp));
- }
- }
-
- return (FunctionPointer)newGlue;
-}
-
-TransitionVector tVectorForFunctionPointer(FunctionPointer fp)
-{
- FunctionPointer *newGlue = NULL;
- if (fp != NULL) {
- newGlue = (FunctionPointer *)malloc(2 * sizeof(FunctionPointer));
- if (newGlue != NULL) {
- newGlue[0] = fp;
- newGlue[1] = NULL;
- }
- }
- return (TransitionVector)newGlue;
-}
-
-#endif
-
@implementation WebNetscapePluginPackage (Internal)
- (void)_unloadWithShutdown:(BOOL)shutdown
@@ -800,11 +456,6 @@ TransitionVector tVectorForFunctionPointer(FunctionPointer fp)
if (resourceRef != -1)
[self closeResourceFile:resourceRef];
-#ifdef SUPPORT_CFM
- if (!isBundle)
- WebCloseConnection(&connID);
-#endif
-
LOG(Plugins, "Plugin Unloaded");
isLoaded = NO;
}