| Index: content/common/plugin_list_mac.mm | 
| diff --git a/content/common/plugin_list_mac.mm b/content/common/plugin_list_mac.mm | 
| deleted file mode 100644 | 
| index 58793d8cfb4defcae64b780ff436ded5dccdd1c9..0000000000000000000000000000000000000000 | 
| --- a/content/common/plugin_list_mac.mm | 
| +++ /dev/null | 
| @@ -1,310 +0,0 @@ | 
| -// Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| -// Use of this source code is governed by a BSD-style license that can be | 
| -// found in the LICENSE file. | 
| - | 
| -#include "content/common/plugin_list.h" | 
| - | 
| -#import <Carbon/Carbon.h> | 
| -#import <Foundation/Foundation.h> | 
| - | 
| -#include "base/files/file_enumerator.h" | 
| -#include "base/files/file_util.h" | 
| -#include "base/mac/foundation_util.h" | 
| -#include "base/mac/scoped_cftyperef.h" | 
| -#include "base/memory/scoped_ptr.h" | 
| -#include "base/native_library.h" | 
| -#include "base/strings/string_number_conversions.h" | 
| -#include "base/strings/string_split.h" | 
| -#include "base/strings/string_util.h" | 
| -#include "base/strings/sys_string_conversions.h" | 
| -#include "base/strings/utf_string_conversions.h" | 
| - | 
| -using base::ScopedCFTypeRef; | 
| - | 
| -namespace content { | 
| - | 
| -namespace { | 
| - | 
| -void GetPluginCommonDirectories(std::vector<base::FilePath>* plugin_dirs) { | 
| -  // This once used ::FSFindFolder() and kInternetPlugInFolderType, which is | 
| -  // deprecated since 10.8. There is no NSSearchPathDirectory replacement for | 
| -  // kInternetPlugInFolderType, so append a hard-coded value to [~]/Library. | 
| -  // Interestingly, Safari also hard-codes the location (see | 
| -  // WebKit/WebKit/mac/Plugins/WebPluginDatabase.mm's +_defaultPlugInPaths). | 
| -  const char kInternetPluginFolderName[] = "Internet Plug-Ins"; | 
| - | 
| -  NSSearchPathDomainMask mask = NSUserDomainMask | NSLocalDomainMask; | 
| -  // Note the returned urls are ordered according to the order of the domain | 
| -  // mask constants: paths under $HOME come first, which take precedence. | 
| -  NSArray* library_urls = | 
| -      [[NSFileManager defaultManager] URLsForDirectory:NSLibraryDirectory | 
| -                                             inDomains:mask]; | 
| -  for (NSURL* url in library_urls) { | 
| -    DCHECK([url isFileURL]); | 
| -    base::FilePath path = base::mac::NSStringToFilePath([url path]) | 
| -                              .AppendASCII(kInternetPluginFolderName); | 
| -    if (base::PathExists(path)) | 
| -      plugin_dirs->push_back(path); | 
| -  } | 
| -} | 
| - | 
| -// Returns true if the plugin should be prevented from loading. | 
| -bool IsBlacklistedPlugin(const WebPluginInfo& info) { | 
| -  // We blacklist Gears by included MIME type, since that is more stable than | 
| -  // its name. Be careful about adding any more plugins to this list though, | 
| -  // since it's easy to accidentally blacklist plugins that support lots of | 
| -  // MIME types. | 
| -  for (const WebPluginMimeType& mime : info.mime_types) { | 
| -    // The Gears plugin is Safari-specific, so don't load it. | 
| -    if (mime.mime_type == "application/x-googlegears") | 
| -      return true; | 
| -  } | 
| - | 
| -  // Versions of Flip4Mac 2.3 before 2.3.6 often hang the renderer, so don't | 
| -  // load them. | 
| -  if (base::StartsWith(info.name, | 
| -                       base::ASCIIToUTF16("Flip4Mac Windows Media"), | 
| -                       base::CompareCase::INSENSITIVE_ASCII) && | 
| -      base::StartsWith(info.version, base::ASCIIToUTF16("2.3"), | 
| -                       base::CompareCase::SENSITIVE)) { | 
| -    std::vector<base::StringPiece16> components = base::SplitStringPiece( | 
| -        info.version, base::ASCIIToUTF16("."), base::TRIM_WHITESPACE, | 
| -        base::SPLIT_WANT_ALL); | 
| -    int bugfix_version = 0; | 
| -    return (components.size() >= 3 && | 
| -            base::StringToInt(components[2], &bugfix_version) && | 
| -            bugfix_version < 6); | 
| -  } | 
| - | 
| -  return false; | 
| -} | 
| - | 
| -NSDictionary* GetMIMETypes(CFBundleRef bundle) { | 
| -  NSString* mime_filename = | 
| -      (NSString*)CFBundleGetValueForInfoDictionaryKey(bundle, | 
| -                     CFSTR("WebPluginMIMETypesFilename")); | 
| - | 
| -  if (mime_filename) { | 
| - | 
| -    // get the file | 
| - | 
| -    NSString* mime_path = | 
| -        [NSString stringWithFormat:@"%@/Library/Preferences/%@", | 
| -         NSHomeDirectory(), mime_filename]; | 
| -    NSDictionary* mime_file_dict = | 
| -        [NSDictionary dictionaryWithContentsOfFile:mime_path]; | 
| - | 
| -    // is it valid? | 
| - | 
| -    bool valid_file = false; | 
| -    if (mime_file_dict) { | 
| -      NSString* l10n_name = | 
| -          [mime_file_dict objectForKey:@"WebPluginLocalizationName"]; | 
| -      NSString* preferred_l10n = [[NSLocale currentLocale] localeIdentifier]; | 
| -      if ([l10n_name isEqualToString:preferred_l10n]) | 
| -        valid_file = true; | 
| -    } | 
| - | 
| -    if (valid_file) | 
| -      return [mime_file_dict objectForKey:@"WebPluginMIMETypes"]; | 
| - | 
| -    // dammit, I didn't want to have to do this | 
| - | 
| -    typedef void (*CreateMIMETypesPrefsPtr)(void); | 
| -    CreateMIMETypesPrefsPtr create_prefs_file = | 
| -        (CreateMIMETypesPrefsPtr)CFBundleGetFunctionPointerForName( | 
| -        bundle, CFSTR("BP_CreatePluginMIMETypesPreferences")); | 
| -    if (!create_prefs_file) | 
| -      return nil; | 
| -    create_prefs_file(); | 
| - | 
| -    // one more time | 
| - | 
| -    mime_file_dict = [NSDictionary dictionaryWithContentsOfFile:mime_path]; | 
| -    if (mime_file_dict) | 
| -      return [mime_file_dict objectForKey:@"WebPluginMIMETypes"]; | 
| -    else | 
| -      return nil; | 
| - | 
| -  } else { | 
| -    return (NSDictionary*)CFBundleGetValueForInfoDictionaryKey(bundle, | 
| -                              CFSTR("WebPluginMIMETypes")); | 
| -  } | 
| -} | 
| - | 
| -bool ReadPlistPluginInfo(const base::FilePath& filename, CFBundleRef bundle, | 
| -                         WebPluginInfo* info) { | 
| -  NSDictionary* mime_types = GetMIMETypes(bundle); | 
| -  if (!mime_types) | 
| -    return false;  // no type info here; try elsewhere | 
| - | 
| -  for (NSString* mime_type in [mime_types allKeys]) { | 
| -    NSDictionary* mime_dict = [mime_types objectForKey:mime_type]; | 
| -    NSNumber* type_enabled = [mime_dict objectForKey:@"WebPluginTypeEnabled"]; | 
| -    NSString* mime_desc = [mime_dict objectForKey:@"WebPluginTypeDescription"]; | 
| -    NSArray* mime_exts = [mime_dict objectForKey:@"WebPluginExtensions"]; | 
| - | 
| -    // Skip any disabled types. | 
| -    if (type_enabled && ![type_enabled boolValue]) | 
| -      continue; | 
| - | 
| -    WebPluginMimeType mime; | 
| -    mime.mime_type = base::SysNSStringToUTF8([mime_type lowercaseString]); | 
| -    // Remove PDF from the list of types handled by QuickTime, since it provides | 
| -    // a worse experience than just downloading the PDF. | 
| -    if (mime.mime_type == "application/pdf" && | 
| -        base::StartsWith(filename.BaseName().value(), "QuickTime", | 
| -                         base::CompareCase::INSENSITIVE_ASCII)) { | 
| -      continue; | 
| -    } | 
| - | 
| -    if (mime_desc) | 
| -      mime.description = base::SysNSStringToUTF16(mime_desc); | 
| -    for (NSString* ext in mime_exts) | 
| -      mime.file_extensions.push_back( | 
| -          base::SysNSStringToUTF8([ext lowercaseString])); | 
| - | 
| -    info->mime_types.push_back(mime); | 
| -  } | 
| - | 
| -  NSString* plugin_name = | 
| -      (NSString*)CFBundleGetValueForInfoDictionaryKey(bundle, | 
| -      CFSTR("WebPluginName")); | 
| -  NSString* plugin_vers = | 
| -      (NSString*)CFBundleGetValueForInfoDictionaryKey(bundle, | 
| -      CFSTR("CFBundleShortVersionString")); | 
| -  NSString* plugin_desc = | 
| -      (NSString*)CFBundleGetValueForInfoDictionaryKey(bundle, | 
| -      CFSTR("WebPluginDescription")); | 
| - | 
| -  if (plugin_name) | 
| -    info->name = base::SysNSStringToUTF16(plugin_name); | 
| -  else | 
| -    info->name = base::UTF8ToUTF16(filename.BaseName().value()); | 
| -  info->path = filename; | 
| -  if (plugin_vers) | 
| -    info->version = base::SysNSStringToUTF16(plugin_vers); | 
| -  if (plugin_desc) | 
| -    info->desc = base::SysNSStringToUTF16(plugin_desc); | 
| -  else | 
| -    info->desc = base::UTF8ToUTF16(filename.BaseName().value()); | 
| - | 
| -  return true; | 
| -} | 
| - | 
| -}  // namespace | 
| - | 
| -bool PluginList::ReadWebPluginInfo(const base::FilePath &filename, | 
| -                                   WebPluginInfo* info) { | 
| -  // There are three ways to get information about plugin capabilities: | 
| -  // 1) a set of Info.plist keys, documented at | 
| -  // http://developer.apple.com/documentation/InternetWeb/Conceptual/WebKit_PluginProgTopic/Concepts/AboutPlugins.html . | 
| -  // 2) a set of STR# resources, documented at | 
| -  // https://developer.mozilla.org/En/Gecko_Plugin_API_Reference/Plug-in_Development_Overview . | 
| -  // 3) a NP_GetMIMEDescription() entry point, documented at | 
| -  // https://developer.mozilla.org/en/NP_GetMIMEDescription | 
| -  // | 
| -  // Mozilla supported (3), but WebKit never has, so no plugins rely on it. Most | 
| -  // browsers supported (2) and then added support for (1); Chromium originally | 
| -  // supported (2) and (1), but now supports only (1) as (2) is deprecated. | 
| -  // | 
| -  // For the Info.plist version, the data is formatted as follows (in text plist | 
| -  // format): | 
| -  //  { | 
| -  //    ... the usual plist keys ... | 
| -  //    WebPluginDescription = <<plugindescription>>; | 
| -  //    WebPluginMIMETypes = { | 
| -  //      <<type0mimetype>> = { | 
| -  //        WebPluginExtensions = ( | 
| -  //                               <<type0fileextension0>>, | 
| -  //                               ... | 
| -  //                               <<type0fileextensionk>>, | 
| -  //                               ); | 
| -  //        WebPluginTypeDescription = <<type0description>>; | 
| -  //      }; | 
| -  //      <<type1mimetype>> = { ... }; | 
| -  //      ... | 
| -  //      <<typenmimetype>> = { ... }; | 
| -  //    }; | 
| -  //    WebPluginName = <<pluginname>>; | 
| -  //  } | 
| -  // | 
| -  // Alternatively (and this is undocumented), rather than a WebPluginMIMETypes | 
| -  // key, there may be a WebPluginMIMETypesFilename key. If it is present, then | 
| -  // it is the name of a file in the user's preferences folder in which to find | 
| -  // the WebPluginMIMETypes key. If the key is present but the file doesn't | 
| -  // exist, we must load the plugin and call a specific function to have the | 
| -  // plugin create the file. | 
| - | 
| -  ScopedCFTypeRef<CFURLRef> bundle_url(CFURLCreateFromFileSystemRepresentation( | 
| -      kCFAllocatorDefault, (const UInt8*)filename.value().c_str(), | 
| -      filename.value().length(), true)); | 
| -  if (!bundle_url) { | 
| -    LOG_IF(ERROR, PluginList::DebugPluginLoading()) | 
| -        << "PluginLib::ReadWebPluginInfo could not create bundle URL"; | 
| -    return false; | 
| -  } | 
| -  ScopedCFTypeRef<CFBundleRef> bundle(CFBundleCreate(kCFAllocatorDefault, | 
| -                                                     bundle_url.get())); | 
| -  if (!bundle) { | 
| -    LOG_IF(ERROR, PluginList::DebugPluginLoading()) | 
| -        << "PluginLib::ReadWebPluginInfo could not create CFBundleRef"; | 
| -    return false; | 
| -  } | 
| - | 
| -  // preflight | 
| - | 
| -  OSType type = 0; | 
| -  CFBundleGetPackageInfo(bundle.get(), &type, NULL); | 
| -  if (type != FOUR_CHAR_CODE('BRPL')) { | 
| -    LOG_IF(ERROR, PluginList::DebugPluginLoading()) | 
| -        << "PluginLib::ReadWebPluginInfo bundle is not BRPL, is " << type; | 
| -    return false; | 
| -  } | 
| - | 
| -  CFErrorRef error; | 
| -  Boolean would_load = CFBundlePreflightExecutable(bundle.get(), &error); | 
| -  if (!would_load) { | 
| -    ScopedCFTypeRef<CFStringRef> error_string(CFErrorCopyDescription(error)); | 
| -    LOG_IF(ERROR, PluginList::DebugPluginLoading()) | 
| -        << "PluginLib::ReadWebPluginInfo bundle failed preflight: " | 
| -        << base::SysCFStringRefToUTF8(error_string); | 
| -    return false; | 
| -  } | 
| - | 
| -  // get the info | 
| - | 
| -  if (ReadPlistPluginInfo(filename, bundle.get(), info)) | 
| -    return true; | 
| - | 
| -  // ... or not | 
| - | 
| -  return false; | 
| -} | 
| - | 
| -void PluginList::GetPluginDirectories( | 
| -    std::vector<base::FilePath>* plugin_dirs) { | 
| -  if (PluginList::plugins_discovery_disabled_) | 
| -    return; | 
| - | 
| -  GetPluginCommonDirectories(plugin_dirs); | 
| -} | 
| - | 
| -void PluginList::GetPluginsInDir( | 
| -    const base::FilePath& path, std::vector<base::FilePath>* plugins) { | 
| -  base::FileEnumerator enumerator(path, | 
| -                                  false, // not recursive | 
| -                                  base::FileEnumerator::DIRECTORIES); | 
| -  for (base::FilePath path = enumerator.Next(); !path.value().empty(); | 
| -       path = enumerator.Next()) { | 
| -    plugins->push_back(path); | 
| -  } | 
| -} | 
| - | 
| -bool PluginList::ShouldLoadPluginUsingPluginList( | 
| -    const WebPluginInfo& info, | 
| -    std::vector<WebPluginInfo>* plugins) { | 
| -  return !IsBlacklistedPlugin(info); | 
| -} | 
| - | 
| -}  // namespace content | 
|  |