18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2005, 2006, 2007 Apple Inc. All rights reserved. 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * its contributors may be used to endorse or promote products derived 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * from this software without specific prior written permission. 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if ENABLE(NETSCAPE_PLUGIN_API) 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNetscapePluginPackage.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import "WebTypesInternal.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitLogging.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebKitNSStringExtras.h" 350bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#import "WebNSFileManagerExtras.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNSObjectExtras.h" 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import "WebNetscapeDeprecatedFunctions.h" 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#import <WebCore/npruntime_impl.h> 3906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#import <wtf/RetainPtr.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 41563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#if USE(PLUGIN_HOST_PROCESS) 42563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#import "NetscapePluginHostManager.h" 43563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 44563af33bc48281d19dce701398dbb88cb54fd7ecCary Clarkusing namespace WebKit; 45563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark#endif 46563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 4706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenusing namespace WebCore; 4806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (* FunctionPointer)(void); 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projecttypedef void (* TransitionVector)(void); 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic FunctionPointer functionPointerForTVector(TransitionVector); 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic TransitionVector tVectorForFunctionPointer(FunctionPointer); 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PluginNameOrDescriptionStringNumber 126 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define MIMEDescriptionStringNumber 127 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define MIMEListStringStringNumber 128 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define RealPlayerAppIndentifier @"com.RealNetworks.RealOne Player" 6106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen#define RealPlayerPluginFilename "RealPlayer Plugin" 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@interface WebNetscapePluginPackage (Internal) 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_unloadWithShutdown:(BOOL)shutdown; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebNetscapePluginPackage 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef __LP64__ 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project+ (void)initialize 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The Shockwave plugin requires a valid file in CurApRefNum. 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // But it doesn't seem to matter what file it is. 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If we're called inside a Cocoa application which won't have a 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // CurApRefNum, we set it to point to the system resource file. 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Call CurResFile before testing the result of WebLMGetCurApRefNum. 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // If we are called before the bundle resource map has been opened 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // for a Carbon application (or a Cocoa app with Resource Manager 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // resources) we *do not* want to set CurApRefNum to point at the 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // system resource file. CurResFile triggers Resource Manager lazy 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // initialization, and will open the bundle resource map as necessary. 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CurResFile(); 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (WebLMGetCurApRefNum() == -1) { 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // To get the refNum for the system resource file, we have to do 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // UseResFile(kSystemResFile) and then look at CurResFile(). 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project short savedCurResFile = CurResFile(); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UseResFile(kSystemResFile); 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebLMSetCurApRefNum(CurResFile()); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UseResFile(savedCurResFile); 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (ResFileRefNum)openResourceFile 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isBundle) { 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FSRef fref; 10206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen OSErr err = FSPathMakeRef((const UInt8 *)[(NSString *)path fileSystemRepresentation], &fref, NULL); 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (err != noErr) 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return -1; 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return FSOpenResFile(&fref, fsRdPerm); 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 11006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return CFBundleOpenBundleResourceMap(cfBundle.get()); 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)closeResourceFile:(ResFileRefNum)resRef 1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isBundle) { 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CloseResFile(resRef); 1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 12206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen CFBundleCloseBundleResourceMap(cfBundle.get(), resRef); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NSString *)stringForStringListID:(SInt16)stringListID andIndex:(SInt16)index 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Get resource, and dereference the handle. 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project Handle stringHandle = Get1Resource('STR#', stringListID); 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (stringHandle == NULL) { 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned char *p = (unsigned char *)*stringHandle; 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!p) 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Check the index against the length of the string list, then skip the length. 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (index < 1 || index > *(SInt16 *)p) 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p += sizeof(SInt16); 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Skip any strings that come before the one we are looking for. 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (--index) 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project p += 1 + *p; 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Convert the one we found into an NSString. 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return [[[NSString alloc] initWithBytes:(p + 1) length:*p encoding:[NSString _web_encodingForResource:stringHandle]] autorelease]; 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)getPluginInfoFromResources 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project SInt16 resRef = [self openResourceFile]; 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resRef == -1) 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UseResFile(resRef); 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (ResError() != noErr) 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *MIME, *extensionsList, *description; 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSArray *extensions; 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned i; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i=1; 1; i+=2) { 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MIME = [[self stringForStringListID:MIMEListStringStringNumber 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project andIndex:i] lowercaseString]; 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!MIME) 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 16906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen MimeClassInfo mimeClassInfo; 17006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen mimeClassInfo.type = String(MIME).lower(); 17106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project extensionsList = [[self stringForStringListID:MIMEListStringStringNumber andIndex:i+1] lowercaseString]; 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (extensionsList) { 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project extensions = [extensionsList componentsSeparatedByString:@","]; 17506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen for (NSUInteger j = 0; j < [extensions count]; ++j) 17606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen mimeClassInfo.extensions.append((NSString *)[extensions objectAtIndex:j]); 17706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project description = [self stringForStringListID:MIMEDescriptionStringNumber 18006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen andIndex:pluginInfo.mimes.size() + 1]; 18106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen mimeClassInfo.desc = description; 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen pluginInfo.mimes.append(mimeClassInfo); 18406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen } 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 18606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NSString *filename = [(NSString *)path lastPathComponent]; 18706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen pluginInfo.file = filename; 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project description = [self stringForStringListID:PluginNameOrDescriptionStringNumber andIndex:1]; 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!description) 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project description = filename; 19206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen pluginInfo.desc = description; 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSString *theName = [self stringForStringListID:PluginNameOrDescriptionStringNumber andIndex:2]; 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!theName) 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project theName = filename; 19806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen pluginInfo.name = theName; 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self closeResourceFile:resRef]; 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (BOOL)_initWithPath:(NSString *)pluginPath 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project resourceRef = -1; 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OSType type = 0; 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 21106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (cfBundle) { 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Bundle 21306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen CFBundleGetPackageInfo(cfBundle.get(), &type, NULL); 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isBundle = YES; 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Single-file plug-in with resource fork 2200bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch NSString *destinationPath = [[NSFileManager defaultManager] destinationOfSymbolicLinkAtPath:path error:0]; 2210bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch type = [[[NSFileManager defaultManager] attributesOfItemAtPath:destinationPath error:0] fileHFSTypeCode]; 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isBundle = NO; 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isCFM = YES; 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (type != FOUR_CHAR_CODE('BRPL')) 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Check if the executable is Mach-O or CFM. 23306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (cfBundle) { 23406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RetainPtr<CFURLRef> executableURL(AdoptCF, CFBundleCopyExecutableURL(cfBundle.get())); 23506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!executableURL) 23606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return NO; 23706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NSFileHandle *executableFile = [NSFileHandle fileHandleForReadingAtPath:[(NSURL *)executableURL.get() path]]; 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NSData *data = [executableFile readDataOfLength:512]; 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [executableFile closeFile]; 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Check the length of the data before calling memcmp. We think this fixes 3782543. 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (data == nil || [data length] < 8) 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project BOOL hasCFMHeader = memcmp([data bytes], "Joy!peff", 8) == 0; 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isCFM = hasCFMHeader; 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (hasCFMHeader) 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 250635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 251635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if USE(PLUGIN_HOST_PROCESS) 25206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen RetainPtr<CFArrayRef> archs(AdoptCF, CFBundleCopyExecutableArchitectures(cfBundle.get())); 2538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 25406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if ([(NSArray *)archs.get() containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureX86_64]]) 255635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginHostArchitecture = CPU_TYPE_X86_64; 25606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen else if ([(NSArray *)archs.get() containsObject:[NSNumber numberWithInteger:NSBundleExecutableArchitectureI386]]) 257635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginHostArchitecture = CPU_TYPE_X86; 258635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else 259635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return NO; 260635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else 2618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self isNativeLibraryData:data]) 2628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 263635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 2648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self getPluginInfoFromPLists] && ![self getPluginInfoFromResources]) 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 2708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (id)initWithPath:(NSString *)pluginPath 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!(self = [super initWithPath:pluginPath])) 2758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Initializing a plugin package can cause it to be loaded. If there was an error initializing the plugin package, 2788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // ensure that it is unloaded before deallocating it (WebBasePluginPackage requires & asserts this). 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (![self _initWithPath:pluginPath]) { 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _unloadWithShutdown:YES]; 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self release]; 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return nil; 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return self; 2868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (WebExecutableType)executableType 2898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 2918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isCFM) 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return WebCFMExecutableType; 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return WebMachOExecutableType; 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 297635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if USE(PLUGIN_HOST_PROCESS) 298635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project- (cpu_type_t)pluginHostArchitecture 299635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project{ 300635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project return pluginHostArchitecture; 301635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project} 302563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 303563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (void)createPropertyListFile 304563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 30506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NetscapePluginHostManager::createPropertyListFile(path, pluginHostArchitecture); 306563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 307563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 308635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 309635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)launchRealPlayer 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFURLRef appURL = NULL; 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OSStatus error = LSFindApplicationForInfo(kLSUnknownCreator, (CFStringRef)RealPlayerAppIndentifier, NULL, NULL, &appURL); 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!error) { 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LSLaunchURLSpec URLSpec; 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project bzero(&URLSpec, sizeof(URLSpec)); 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project URLSpec.launchFlags = kLSLaunchDefaults | kLSLaunchDontSwitch; 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project URLSpec.appURL = appURL; 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LSOpenFromURLSpec(&URLSpec, NULL); 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFRelease(appURL); 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_applyDjVuWorkaround 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!cfBundle) 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 32906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if ([self bundleIdentifier] == "com.lizardtech.NPDjVu") { 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // The DjVu plug-in will crash copying the vtable if it's too big so we cap it to 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // what the plug-in expects here. 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // size + version + 40 function pointers. 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.size = 2 + 2 + sizeof(void *) * 40; 3348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)unload 3398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _unloadWithShutdown:YES]; 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 343563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (BOOL)_tryLoad 344563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NP_GetEntryPointsFuncPtr NP_GetEntryPoints = NULL; 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NP_InitializeFuncPtr NP_Initialize = NULL; 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPError npErr; 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MainFuncPtr pluginMainFunc = NULL; 3518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 3548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFAbsoluteTime start = CFAbsoluteTimeGetCurrent(); 3558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFAbsoluteTime currentTime; 3568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFAbsoluteTime duration; 3578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 35806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen LOG(Plugins, "%f Load timing started for: %@", start, (NSString *)[self pluginInfo].name); 3598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isLoaded) 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return YES; 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isBundle) { 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 36606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (!CFBundleLoadExecutable(cfBundle.get())) 367563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 3698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project currentTime = CFAbsoluteTimeGetCurrent(); 3708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project duration = currentTime - start; 3718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f CFBundleLoadExecutable took %f seconds", currentTime, duration); 3738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isLoaded = YES; 3748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 3768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isCFM) { 37706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen pluginMainFunc = (MainFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("main") ); 3788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!pluginMainFunc) 379563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 3808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 3818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 38206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NP_Initialize = (NP_InitializeFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_Initialize")); 38306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NP_GetEntryPoints = (NP_GetEntryPointsFuncPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_GetEntryPoints")); 38406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NP_Shutdown = (NPP_ShutdownProcPtr)CFBundleGetFunctionPointerForName(cfBundle.get(), CFSTR("NP_Shutdown")); 385635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (!NP_Initialize || !NP_GetEntryPoints || !NP_Shutdown) 386563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 3878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // single CFM file 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FSSpec spec; 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FSRef fref; 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project OSErr err; 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 39506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen err = FSPathMakeRef((UInt8 *)[(NSString *)path fileSystemRepresentation], &fref, NULL); 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (err != noErr) { 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG_ERROR("FSPathMakeRef failed. Error=%d", err); 398563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project err = FSGetCatalogInfo(&fref, kFSCatInfoNone, NULL, NULL, &spec, NULL); 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (err != noErr) { 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG_ERROR("FSGetCatalogInfo failed. Error=%d", err); 403563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project err = WebGetDiskFragment(&spec, 0, kCFragGoesToEOF, nil, kPrivateCFragCopy, &connID, (Ptr *)&pluginMainFunc, nil); 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (err != noErr) { 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG_ERROR("WebGetDiskFragment failed. Error=%d", err); 408563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project currentTime = CFAbsoluteTimeGetCurrent(); 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project duration = currentTime - start; 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f WebGetDiskFragment took %f seconds", currentTime, duration); 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isLoaded = YES; 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginMainFunc = (MainFuncPtr)functionPointerForTVector((TransitionVector)pluginMainFunc); 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!pluginMainFunc) { 419563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // NOTE: pluginMainFunc is freed after it is called. Be sure not to return before that. 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isCFM = YES; 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif /* SUPPORT_CFM */ 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Plugins (at least QT) require that you call UseResFile on the resource file before loading it. 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project resourceRef = [self openResourceFile]; 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resourceRef != -1) { 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project UseResFile(resourceRef); 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // swap function tables 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (isCFM) { 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.version = NP_VERSION_MINOR; 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.size = sizeof(NPNetscapeFuncs); 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.geturl = (NPN_GetURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetURL); 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.posturl = (NPN_PostURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PostURL); 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.requestread = (NPN_RequestReadProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_RequestRead); 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.newstream = (NPN_NewStreamProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_NewStream); 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.write = (NPN_WriteProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_Write); 4448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.destroystream = (NPN_DestroyStreamProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_DestroyStream); 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.status = (NPN_StatusProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_Status); 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.uagent = (NPN_UserAgentProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_UserAgent); 4478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.memalloc = (NPN_MemAllocProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_MemAlloc); 4488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.memfree = (NPN_MemFreeProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_MemFree); 4498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.memflush = (NPN_MemFlushProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_MemFlush); 4508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.reloadplugins = (NPN_ReloadPluginsProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ReloadPlugins); 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.geturlnotify = (NPN_GetURLNotifyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetURLNotify); 4528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.posturlnotify = (NPN_PostURLNotifyProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PostURLNotify); 4538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getvalue = (NPN_GetValueProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetValue); 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.setvalue = (NPN_SetValueProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_SetValue); 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invalidaterect = (NPN_InvalidateRectProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_InvalidateRect); 4568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invalidateregion = (NPN_InvalidateRegionProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_InvalidateRegion); 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.forceredraw = (NPN_ForceRedrawProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ForceRedraw); 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getJavaEnv = (NPN_GetJavaEnvProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetJavaEnv); 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getJavaPeer = (NPN_GetJavaPeerProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetJavaPeer); 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.pushpopupsenabledstate = (NPN_PushPopupsEnabledStateProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PushPopupsEnabledState); 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.poppopupsenabledstate = (NPN_PopPopupsEnabledStateProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PopPopupsEnabledState); 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.pluginthreadasynccall = (NPN_PluginThreadAsyncCallProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PluginThreadAsyncCall); 4630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.getvalueforurl = (NPN_GetValueForURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetValueForURL); 4640bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.setvalueforurl = (NPN_SetValueForURLProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_SetValueForURL); 4650bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.getauthenticationinfo = (NPN_GetAuthenticationInfoProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_GetAuthenticationInfo); 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.scheduletimer = (NPN_ScheduleTimerProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ScheduleTimer); 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.unscheduletimer = (NPN_UnscheduleTimerProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_UnscheduleTimer); 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.popupcontextmenu = (NPN_PopUpContextMenuProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_PopUpContextMenu); 4690bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.convertpoint = (NPN_ConvertPointProcPtr)tVectorForFunctionPointer((FunctionPointer)NPN_ConvertPoint); 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.releasevariantvalue = (NPN_ReleaseVariantValueProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_ReleaseVariantValue); 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getstringidentifier = (NPN_GetStringIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetStringIdentifier); 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getstringidentifiers = (NPN_GetStringIdentifiersProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetStringIdentifiers); 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getintidentifier = (NPN_GetIntIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetIntIdentifier); 4758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.identifierisstring = (NPN_IdentifierIsStringProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_IdentifierIsString); 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.utf8fromidentifier = (NPN_UTF8FromIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_UTF8FromIdentifier); 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.intfromidentifier = (NPN_IntFromIdentifierProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_IntFromIdentifier); 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.createobject = (NPN_CreateObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_CreateObject); 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.retainobject = (NPN_RetainObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_RetainObject); 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.releaseobject = (NPN_ReleaseObjectProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_ReleaseObject); 481635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project browserFuncs.hasmethod = (NPN_HasMethodProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_HasProperty); 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invoke = (NPN_InvokeProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Invoke); 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invokeDefault = (NPN_InvokeDefaultProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_InvokeDefault); 4848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.evaluate = (NPN_EvaluateProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Evaluate); 485635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project browserFuncs.hasproperty = (NPN_HasPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_HasProperty); 4868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getproperty = (NPN_GetPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_GetProperty); 4878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.setproperty = (NPN_SetPropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_SetProperty); 4888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.removeproperty = (NPN_RemovePropertyProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_RemoveProperty); 4898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.setexception = (NPN_SetExceptionProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_SetException); 4908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.enumerate = (NPN_EnumerateProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Enumerate); 4918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.construct = (NPN_ConstructProcPtr)tVectorForFunctionPointer((FunctionPointer)_NPN_Construct); 4928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _applyDjVuWorkaround]; 4948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 4968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFAbsoluteTime mainStart = CFAbsoluteTimeGetCurrent(); 4978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f main timing started", mainStart); 4998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project NPP_ShutdownProcPtr shutdownFunction; 5008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project npErr = pluginMainFunc(&browserFuncs, &pluginFuncs, &shutdownFunction); 501635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NP_Shutdown = (NPP_ShutdownProcPtr)functionPointerForTVector((TransitionVector)shutdownFunction); 5028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isBundle) 5038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Don't free pluginMainFunc if we got it from a bundle because it is owned by CFBundle in that case. 504563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark free(reinterpret_cast<void*>(pluginMainFunc)); 5058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Workaround for 3270576. The RealPlayer plug-in fails to load if its preference file is out of date. 5078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Launch the RealPlayer application to refresh the file. 5088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (npErr != NPERR_NO_ERROR) { 50906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (npErr == NPERR_MODULE_LOAD_FAILED_ERROR && equalIgnoringCase(pluginInfo.file, RealPlayerPluginFilename)) 5108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self launchRealPlayer]; 511563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project currentTime = CFAbsoluteTimeGetCurrent(); 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project duration = currentTime - mainStart; 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f main took %f seconds", currentTime, duration); 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginSize = pluginFuncs.size; 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginVersion = pluginFuncs.version; 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "pluginMainFunc: %d, size=%d, version=%d", npErr, pluginSize, pluginVersion); 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 523635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.newp = (NPP_NewProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newp); 524635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.destroy = (NPP_DestroyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroy); 525635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.setwindow = (NPP_SetWindowProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setwindow); 526635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.newstream = (NPP_NewStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.newstream); 527635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.destroystream = (NPP_DestroyStreamProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.destroystream); 528635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.asfile = (NPP_StreamAsFileProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.asfile); 529635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.writeready = (NPP_WriteReadyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.writeready); 530635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.write = (NPP_WriteProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.write); 531635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.print = (NPP_PrintProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.print); 532635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.event = (NPP_HandleEventProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.event); 533635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.urlnotify = (NPP_URLNotifyProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.urlnotify); 534635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.getvalue = (NPP_GetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.getvalue); 535635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project pluginFuncs.setvalue = (NPP_SetValueProcPtr)functionPointerForTVector((TransitionVector)pluginFuncs.setvalue); 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // LiveConnect support 538563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark pluginFuncs.javaClass = (JRIGlobalRef)functionPointerForTVector((TransitionVector)pluginFuncs.javaClass); 539635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (pluginFuncs.javaClass) { 54006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen LOG(LiveConnect, "%@: CFM entry point for NPP_GetJavaClass = %p", (NSString *)[self pluginInfo].name, pluginFuncs.javaClass); 5418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 54206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", (NSString *)[self pluginInfo].name); 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } else { 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // no function pointer conversion necessary for Mach-O 5508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.version = NP_VERSION_MINOR; 5518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.size = sizeof(NPNetscapeFuncs); 5528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.geturl = NPN_GetURL; 5538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.posturl = NPN_PostURL; 5548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.requestread = NPN_RequestRead; 5558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.newstream = NPN_NewStream; 5568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.write = NPN_Write; 5578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.destroystream = NPN_DestroyStream; 5588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.status = NPN_Status; 5598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.uagent = NPN_UserAgent; 5608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.memalloc = NPN_MemAlloc; 5618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.memfree = NPN_MemFree; 5628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.memflush = NPN_MemFlush; 5638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.reloadplugins = NPN_ReloadPlugins; 5648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.geturlnotify = NPN_GetURLNotify; 5658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.posturlnotify = NPN_PostURLNotify; 5668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getvalue = NPN_GetValue; 5678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.setvalue = NPN_SetValue; 5688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invalidaterect = NPN_InvalidateRect; 5698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invalidateregion = NPN_InvalidateRegion; 5708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.forceredraw = NPN_ForceRedraw; 5718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getJavaEnv = NPN_GetJavaEnv; 5728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getJavaPeer = NPN_GetJavaPeer; 5738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.pushpopupsenabledstate = NPN_PushPopupsEnabledState; 5748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.poppopupsenabledstate = NPN_PopPopupsEnabledState; 5758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.pluginthreadasynccall = NPN_PluginThreadAsyncCall; 5760bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.getvalueforurl = NPN_GetValueForURL; 5770bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.setvalueforurl = NPN_SetValueForURL; 5780bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.getauthenticationinfo = NPN_GetAuthenticationInfo; 5798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.scheduletimer = NPN_ScheduleTimer; 5808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.unscheduletimer = NPN_UnscheduleTimer; 5818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.popupcontextmenu = NPN_PopUpContextMenu; 5820bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch browserFuncs.convertpoint = NPN_ConvertPoint; 5830bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch 5848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.releasevariantvalue = _NPN_ReleaseVariantValue; 5858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getstringidentifier = _NPN_GetStringIdentifier; 5868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getstringidentifiers = _NPN_GetStringIdentifiers; 5878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getintidentifier = _NPN_GetIntIdentifier; 5888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.identifierisstring = _NPN_IdentifierIsString; 5898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.utf8fromidentifier = _NPN_UTF8FromIdentifier; 5908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.intfromidentifier = _NPN_IntFromIdentifier; 5918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.createobject = _NPN_CreateObject; 5928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.retainobject = _NPN_RetainObject; 5938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.releaseobject = _NPN_ReleaseObject; 594635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project browserFuncs.hasmethod = _NPN_HasMethod; 5958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invoke = _NPN_Invoke; 5968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.invokeDefault = _NPN_InvokeDefault; 5978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.evaluate = _NPN_Evaluate; 598635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project browserFuncs.hasproperty = _NPN_HasProperty; 5998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.getproperty = _NPN_GetProperty; 6008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.setproperty = _NPN_SetProperty; 6018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.removeproperty = _NPN_RemoveProperty; 6028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.setexception = _NPN_SetException; 6038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.enumerate = _NPN_Enumerate; 6048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project browserFuncs.construct = _NPN_Construct; 6058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _applyDjVuWorkaround]; 6078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 6098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CFAbsoluteTime initializeStart = CFAbsoluteTimeGetCurrent(); 6108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 6118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f NP_Initialize timing started", initializeStart); 6128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project npErr = NP_Initialize(&browserFuncs); 6138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (npErr != NPERR_NO_ERROR) 614563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 6158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 6168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project currentTime = CFAbsoluteTimeGetCurrent(); 6178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project duration = currentTime - initializeStart; 6188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 6198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f NP_Initialize took %f seconds", currentTime, duration); 6208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginFuncs.size = sizeof(NPPluginFuncs); 6228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project npErr = NP_GetEntryPoints(&pluginFuncs); 6248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (npErr != NPERR_NO_ERROR) 625563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return NO; 6268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginSize = pluginFuncs.size; 6288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pluginVersion = pluginFuncs.version; 6298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 630635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (pluginFuncs.javaClass) 63106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen LOG(LiveConnect, "%@: mach-o entry point for NPP_GetJavaClass = %p", (NSString *)[self pluginInfo].name, pluginFuncs.javaClass); 632635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project else 63306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen LOG(LiveConnect, "%@: no entry point for NPP_GetJavaClass", (NSString *)[self pluginInfo].name); 6348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 6368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 6388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if !LOG_DISABLED 6408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project currentTime = CFAbsoluteTimeGetCurrent(); 6418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project duration = currentTime - start; 6428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 6438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "%f Total load time: %f seconds", currentTime, duration); 6448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 645563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return YES; 646563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark} 647563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark 648563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark- (BOOL)load 649563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark{ 650563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if ([self _tryLoad]) 651563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark return [super load]; 6528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _unloadWithShutdown:NO]; 6548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return NO; 6558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (NPPluginFuncs *)pluginFuncs 6588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return &pluginFuncs; 6608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)wasRemovedFromPluginDatabase:(WebPluginDatabase *)database 6638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [super wasRemovedFromPluginDatabase:database]; 6658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Unload when removed from final plug-in database 6678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if ([pluginDatabases count] == 0) 6688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _unloadWithShutdown:YES]; 6698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)open 6728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project instanceCount++; 6748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Handle the case where all instances close a plug-in package, but another 6768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // instance opens the package before it is unloaded (which only happens when 6778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // the plug-in database is refreshed) 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project needsUnload = NO; 6798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isLoaded) { 6818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Should load when the first instance opens the plug-in package 6828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(instanceCount == 1); 6838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self load]; 6848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 6858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 6878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)close 6888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 6898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ASSERT(instanceCount > 0); 6908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project instanceCount--; 6918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (instanceCount == 0 && needsUnload) 6928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self _unloadWithShutdown:YES]; 6938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 6948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 69506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 69606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen- (BOOL)supportsSnapshotting 69706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen{ 69806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if ([self bundleIdentifier] != "com.macromedia.Flash Player.plugin") 69906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return YES; 70006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 70106ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Flash has a bogus Info.plist entry for CFBundleVersionString, so use CFBundleShortVersionString. 70206ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen NSString *versionString = (NSString *)CFDictionaryGetValue(CFBundleGetInfoDictionary(cfBundle.get()), CFSTR("CFBundleShortVersionString")); 70306ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 70406ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen if (![versionString hasPrefix:@"10.1"]) 70506ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return YES; 70606ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 70706ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen // Some prerelease versions of Flash 10.1 crash when sent a drawRect event using the CA drawing model: <rdar://problem/7739922> 70806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen return CFStringCompare((CFStringRef)versionString, CFSTR("10.1.53.60"), kCFCompareNumerically) != kCFCompareLessThan; 70906ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen} 71006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen 7118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 7128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 7148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// function pointer converters 7168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFunctionPointer functionPointerForTVector(TransitionVector tvp) 7188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 71921939df44de1705786c545cd1bf519d47250322dBen Murdoch const uint32_t temp[6] = {0x3D800000, 0x618C0000, 0x800C0000, 0x804C0004, 0x7C0903A6, 0x4E800420}; 72021939df44de1705786c545cd1bf519d47250322dBen Murdoch uint32_t *newGlue = NULL; 7218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (tvp != NULL) { 72321939df44de1705786c545cd1bf519d47250322dBen Murdoch newGlue = (uint32_t *)malloc(sizeof(temp)); 7248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newGlue != NULL) { 7258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project unsigned i; 7268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (i = 0; i < 6; i++) newGlue[i] = temp[i]; 7278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newGlue[0] |= ((uintptr_t)tvp >> 16); 7288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newGlue[1] |= ((uintptr_t)tvp & 0xFFFF); 7298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MakeDataExecutable(newGlue, sizeof(temp)); 7308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (FunctionPointer)newGlue; 7348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectTransitionVector tVectorForFunctionPointer(FunctionPointer fp) 7378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FunctionPointer *newGlue = NULL; 7398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (fp != NULL) { 7408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newGlue = (FunctionPointer *)malloc(2 * sizeof(FunctionPointer)); 7418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (newGlue != NULL) { 7428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newGlue[0] = fp; 7438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project newGlue[1] = NULL; 7448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (TransitionVector)newGlue; 7478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 7508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@implementation WebNetscapePluginPackage (Internal) 7528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project- (void)_unloadWithShutdown:(BOOL)shutdown 7548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 7558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (!isLoaded) 7568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 75806ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsen LOG(Plugins, "Unloading %@...", (NSString *)pluginInfo.name); 7598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Cannot unload a plug-in package while an instance is still using it 7618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (instanceCount > 0) { 7628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project needsUnload = YES; 7638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 7648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 7658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 766635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project if (shutdown && NP_Shutdown) 767635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project NP_Shutdown(); 7688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (resourceRef != -1) 7708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project [self closeResourceFile:resourceRef]; 7718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef SUPPORT_CFM 773563af33bc48281d19dce701398dbb88cb54fd7ecCary Clark if (!isBundle) 7748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project WebCloseConnection(&connID); 7758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 7768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project LOG(Plugins, "Plugin Unloaded"); 7788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project isLoaded = NO; 7798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 7808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 7818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project@end 7828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 783