PRBool nsPluginsDir::IsPluginFile(nsIFile* file) { CFURLRef pluginURL = NULL; if (NS_FAILED(toCFURLRef(file, pluginURL))) return PR_FALSE; PRBool isPluginFile = PR_FALSE; CFBundleRef pluginBundle = CFBundleCreate(kCFAllocatorDefault, pluginURL); if (pluginBundle) { UInt32 packageType, packageCreator; CFBundleGetPackageInfo(pluginBundle, &packageType, &packageCreator); if (packageType == 'BRPL' || packageType == 'IEPL' || packageType == 'NSPL') { CFURLRef executableURL = CFBundleCopyExecutableURL(pluginBundle); if (executableURL) { isPluginFile = IsLoadablePlugin(executableURL); CFRelease(executableURL); } } // some safari plugins that we can't use don't have resource forks short refNum; if (isPluginFile) { refNum = OpenPluginResourceFork(file); if (refNum < 0) { isPluginFile = PR_FALSE; } else { ::CloseResFile(refNum); } } CFRelease(pluginBundle); } else { LSItemInfoRecord info; if (LSCopyItemInfoForURL(pluginURL, kLSRequestTypeCreator, &info) == noErr) { if ((info.filetype == 'shlb' && info.creator == 'MOSS') || info.filetype == 'NSPL' || info.filetype == 'BRPL' || info.filetype == 'IEPL') { isPluginFile = IsLoadablePlugin(pluginURL); } } } CFRelease(pluginURL); return isPluginFile; }
nsAutoCloseResourceObject(nsIFile *pluginFile) { mRefNum = OpenPluginResourceFork(pluginFile); }
short nsPluginFile::OpenPluginResource() { return OpenPluginResourceFork(mPlugin); }