📄 webbasepluginpackage.mm
字号:
[path release]; [pluginDescription release]; [MIMEToDescription release]; [MIMEToExtensions release]; [extensionToMIME release]; [bundle release]; if (cfBundle) CFRelease(cfBundle); [super dealloc];}- (void)finalize{ ASSERT_MAIN_THREAD(); ASSERT(!pluginDatabases || [pluginDatabases count] == 0); [pluginDatabases release]; if (cfBundle) CFRelease(cfBundle); [super finalize];}- (NSString *)name{ return name;}- (NSString *)path{ return path;}- (NSString *)filename{ return [path lastPathComponent];}- (NSString *)pluginDescription{ return pluginDescription;}- (NSEnumerator *)extensionEnumerator{ return [extensionToMIME keyEnumerator];}- (NSEnumerator *)MIMETypeEnumerator{ return [MIMEToExtensions keyEnumerator];}- (NSString *)descriptionForMIMEType:(NSString *)MIMEType{ return [MIMEToDescription objectForKey:MIMEType];}- (NSString *)MIMETypeForExtension:(NSString *)extension{ return [extensionToMIME objectForKey:extension];}- (NSArray *)extensionsForMIMEType:(NSString *)MIMEType{ return [MIMEToExtensions objectForKey:MIMEType];}- (NSBundle *)bundle{ return bundle;}- (void)setName:(NSString *)theName{ [name release]; name = [theName retain];}- (void)setPath:(NSString *)thePath{ [path release]; path = [thePath retain];}- (void)setPluginDescription:(NSString *)description{ [pluginDescription release]; pluginDescription = [description retain];}- (void)setMIMEToDescriptionDictionary:(NSDictionary *)MIMEToDescriptionDictionary{ [MIMEToDescription release]; MIMEToDescription = [MIMEToDescriptionDictionary retain];}- (void)setMIMEToExtensionsDictionary:(NSDictionary *)MIMEToExtensionsDictionary{ [MIMEToExtensions release]; MIMEToExtensions = [MIMEToExtensionsDictionary retain]; // Reverse the mapping [extensionToMIME removeAllObjects]; NSEnumerator *MIMEEnumerator = [MIMEToExtensions keyEnumerator], *extensionEnumerator; NSString *MIME, *extension; NSArray *extensions; while ((MIME = [MIMEEnumerator nextObject]) != nil) { extensions = [MIMEToExtensions objectForKey:MIME]; extensionEnumerator = [extensions objectEnumerator]; while ((extension = [extensionEnumerator nextObject]) != nil) { if (![extension isEqualToString:@""]) [extensionToMIME setObject:MIME forKey:extension]; } }}- (NSString *)description{ return [NSString stringWithFormat:@"name: %@\npath: %@\nmimeTypes:\n%@\npluginDescription:%@", name, path, [MIMEToExtensions description], [MIMEToDescription description], pluginDescription];}- (BOOL)isQuickTimePlugIn{ NSString *bundleIdentifier = [[self bundle] bundleIdentifier]; return [bundleIdentifier _webkit_isCaseInsensitiveEqualToString:QuickTimeCarbonPluginIdentifier] || [bundleIdentifier _webkit_isCaseInsensitiveEqualToString:QuickTimeCocoaPluginIdentifier];}- (BOOL)isJavaPlugIn{ NSString *bundleIdentifier = [[self bundle] bundleIdentifier]; return [bundleIdentifier _webkit_isCaseInsensitiveEqualToString:JavaCocoaPluginIdentifier] || [bundleIdentifier _webkit_isCaseInsensitiveEqualToString:JavaCarbonPluginIdentifier] || [[path lastPathComponent] _webkit_isCaseInsensitiveEqualToString:JavaCFMPluginFilename];}static inline void swapIntsInHeader(uint8_t* bytes, unsigned length){ for (unsigned i = 0; i < length; i += 4) *(uint32_t*)(bytes + i) = OSSwapInt32(*(uint32_t *)(bytes + i));}- (BOOL)isNativeLibraryData:(NSData *)data{ Vector<uint8_t, 512> bytes([data length]); memcpy(bytes.data(), [data bytes], bytes.size()); unsigned numArchs = 0; struct fat_arch singleArch = { 0, 0, 0, 0, 0 }; struct fat_arch* archs = 0; if (bytes.size() >= sizeof(struct mach_header_64)) { uint32_t magic = *reinterpret_cast<uint32_t*>(bytes.data()); if (magic == MH_MAGIC || magic == MH_CIGAM) { // We have a 32-bit thin binary struct mach_header* header = (struct mach_header*)bytes.data(); // Check if we need to swap the bytes if (magic == MH_CIGAM) swapIntsInHeader(bytes.data(), bytes.size()); singleArch.cputype = header->cputype; singleArch.cpusubtype = header->cpusubtype; archs = &singleArch; numArchs = 1; } else if (magic == MH_MAGIC_64 || magic == MH_CIGAM_64) { // We have a 64-bit thin binary struct mach_header_64* header = (struct mach_header_64*)bytes.data(); // Check if we need to swap the bytes if (magic == MH_CIGAM_64) swapIntsInHeader(bytes.data(), bytes.size()); singleArch.cputype = header->cputype; singleArch.cpusubtype = header->cpusubtype; archs = &singleArch; numArchs = 1; } else if (magic == FAT_MAGIC || magic == FAT_CIGAM) { // We have a fat (universal) binary // Check if we need to swap the bytes if (magic == FAT_CIGAM) swapIntsInHeader(bytes.data(), bytes.size()); archs = (struct fat_arch*)(bytes.data() + sizeof(struct fat_header)); numArchs = ((struct fat_header *)bytes.data())->nfat_arch; unsigned maxArchs = (bytes.size() - sizeof(struct fat_header)) / sizeof(struct fat_arch); if (numArchs > maxArchs) numArchs = maxArchs; } } if (!archs || !numArchs) return NO; const NXArchInfo* localArch = NXGetLocalArchInfo(); if (!localArch) return NO; cpu_type_t cputype = localArch->cputype; cpu_subtype_t cpusubtype = localArch->cpusubtype; #ifdef __x86_64__ // NXGetLocalArchInfo returns CPU_TYPE_X86 even when running in 64-bit. // See <rdar://problem/4996965> for more information. cputype = CPU_TYPE_X86_64;#endif return NXFindBestFatArch(cputype, cpusubtype, archs, numArchs) != 0;}- (UInt32)versionNumber{ // CFBundleGetVersionNumber doesn't work with all possible versioning schemes, but we think for now it's good enough for us. return CFBundleGetVersionNumber(cfBundle);}- (void)wasAddedToPluginDatabase:(WebPluginDatabase *)database{ if (!pluginDatabases) pluginDatabases = [[NSMutableSet alloc] init]; ASSERT(![pluginDatabases containsObject:database]); [pluginDatabases addObject:database];}- (void)wasRemovedFromPluginDatabase:(WebPluginDatabase *)database{ ASSERT(pluginDatabases); ASSERT([pluginDatabases containsObject:database]); [pluginDatabases removeObject:database];}@end@implementation NSArray (WebPluginExtensions)- (NSArray *)_web_lowercaseStrings{ NSMutableArray *lowercaseStrings = [NSMutableArray arrayWithCapacity:[self count]]; NSEnumerator *strings = [self objectEnumerator]; NSString *string; while ((string = [strings nextObject]) != nil) { if ([string isKindOfClass:[NSString class]]) [lowercaseStrings addObject:[string lowercaseString]]; } return lowercaseStrings;}@end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -