⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 webbasepluginpackage.mm

📁 linux下开源浏览器WebKit的源码,市面上的很多商用浏览器都是移植自WebKit
💻 MM
📖 第 1 页 / 共 2 页
字号:
    [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 + -