| OLD | NEW | 
|---|
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "webkit/glue/plugins/plugin_list.h" | 5 #include "webkit/glue/plugins/plugin_list.h" | 
| 6 | 6 | 
| 7 #include <tchar.h> | 7 #include <tchar.h> | 
| 8 | 8 | 
| 9 #include <set> | 9 #include <set> | 
| 10 | 10 | 
| 11 #include "base/basictypes.h" | 11 #include "base/basictypes.h" | 
| 12 #include "base/command_line.h" | 12 #include "base/command_line.h" | 
| 13 #include "base/file_util.h" | 13 #include "base/file_util.h" | 
| 14 #include "base/path_service.h" | 14 #include "base/path_service.h" | 
| 15 #include "base/registry.h" |  | 
| 16 #include "base/scoped_ptr.h" | 15 #include "base/scoped_ptr.h" | 
| 17 #include "base/string_number_conversions.h" | 16 #include "base/string_number_conversions.h" | 
| 18 #include "base/string_split.h" | 17 #include "base/string_split.h" | 
| 19 #include "base/string_util.h" | 18 #include "base/string_util.h" | 
|  | 19 #include "base/win/registry.h" | 
| 20 #include "webkit/glue/plugins/plugin_constants_win.h" | 20 #include "webkit/glue/plugins/plugin_constants_win.h" | 
| 21 #include "webkit/glue/plugins/plugin_lib.h" | 21 #include "webkit/glue/plugins/plugin_lib.h" | 
| 22 #include "webkit/glue/webkit_glue.h" | 22 #include "webkit/glue/webkit_glue.h" | 
| 23 | 23 | 
| 24 namespace { | 24 namespace { | 
| 25 | 25 | 
| 26 const TCHAR kRegistryApps[] = | 26 const TCHAR kRegistryApps[] = | 
| 27     _T("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths"); | 27     _T("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths"); | 
| 28 const TCHAR kRegistryFirefox[] = _T("firefox.exe"); | 28 const TCHAR kRegistryFirefox[] = _T("firefox.exe"); | 
| 29 const TCHAR kRegistryAcrobat[] = _T("Acrobat.exe"); | 29 const TCHAR kRegistryAcrobat[] = _T("Acrobat.exe"); | 
| (...skipping 30 matching lines...) Expand all  Loading... | 
| 60   exe_path = exe_path.AppendASCII("plugins"); | 60   exe_path = exe_path.AppendASCII("plugins"); | 
| 61   plugin_dirs->insert(exe_path); | 61   plugin_dirs->insert(exe_path); | 
| 62 } | 62 } | 
| 63 | 63 | 
| 64 // Gets the installed path for a registered app. | 64 // Gets the installed path for a registered app. | 
| 65 bool GetInstalledPath(const TCHAR* app, FilePath* out) { | 65 bool GetInstalledPath(const TCHAR* app, FilePath* out) { | 
| 66   std::wstring reg_path(kRegistryApps); | 66   std::wstring reg_path(kRegistryApps); | 
| 67   reg_path.append(L"\\"); | 67   reg_path.append(L"\\"); | 
| 68   reg_path.append(app); | 68   reg_path.append(app); | 
| 69 | 69 | 
| 70   RegKey key(HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_READ); | 70   base::win::RegKey key(HKEY_LOCAL_MACHINE, reg_path.c_str(), KEY_READ); | 
| 71   std::wstring path; | 71   std::wstring path; | 
| 72   if (key.ReadValue(kRegistryPath, &path)) { | 72   if (key.ReadValue(kRegistryPath, &path)) { | 
| 73     *out = FilePath(path); | 73     *out = FilePath(path); | 
| 74     return true; | 74     return true; | 
| 75   } | 75   } | 
| 76 | 76 | 
| 77   return false; | 77   return false; | 
| 78 } | 78 } | 
| 79 | 79 | 
| 80 // Search the registry at the given path and detect plugin directories. | 80 // Search the registry at the given path and detect plugin directories. | 
| 81 void GetPluginsInRegistryDirectory( | 81 void GetPluginsInRegistryDirectory( | 
| 82     HKEY root_key, | 82     HKEY root_key, | 
| 83     const std::wstring& registry_folder, | 83     const std::wstring& registry_folder, | 
| 84     std::set<FilePath>* plugin_dirs) { | 84     std::set<FilePath>* plugin_dirs) { | 
| 85   for (RegistryKeyIterator iter(root_key, registry_folder.c_str()); | 85   for (base::win::RegistryKeyIterator iter(root_key, registry_folder.c_str()); | 
| 86        iter.Valid(); ++iter) { | 86        iter.Valid(); ++iter) { | 
| 87     // Use the registry to gather plugin across the file system. | 87     // Use the registry to gather plugin across the file system. | 
| 88     std::wstring reg_path = registry_folder; | 88     std::wstring reg_path = registry_folder; | 
| 89     reg_path.append(L"\\"); | 89     reg_path.append(L"\\"); | 
| 90     reg_path.append(iter.Name()); | 90     reg_path.append(iter.Name()); | 
| 91     RegKey key(root_key, reg_path.c_str(), KEY_READ); | 91     base::win::RegKey key(root_key, reg_path.c_str(), KEY_READ); | 
| 92 | 92 | 
| 93     std::wstring path; | 93     std::wstring path; | 
| 94     if (key.ReadValue(kRegistryPath, &path)) | 94     if (key.ReadValue(kRegistryPath, &path)) | 
| 95       plugin_dirs->insert(FilePath(path)); | 95       plugin_dirs->insert(FilePath(path)); | 
| 96   } | 96   } | 
| 97 } | 97 } | 
| 98 | 98 | 
| 99 // Enumerate through the registry key to find all installed FireFox paths. | 99 // Enumerate through the registry key to find all installed FireFox paths. | 
| 100 // FireFox 3 beta and version 2 can coexist. See bug: 1025003 | 100 // FireFox 3 beta and version 2 can coexist. See bug: 1025003 | 
| 101 void GetFirefoxInstalledPaths(std::vector<FilePath>* out) { | 101 void GetFirefoxInstalledPaths(std::vector<FilePath>* out) { | 
| 102   RegistryKeyIterator it(HKEY_LOCAL_MACHINE, kRegistryFirefoxInstalled); | 102   base::win::RegistryKeyIterator it(HKEY_LOCAL_MACHINE, | 
|  | 103                                     kRegistryFirefoxInstalled); | 
| 103   for (; it.Valid(); ++it) { | 104   for (; it.Valid(); ++it) { | 
| 104     std::wstring full_path = std::wstring(kRegistryFirefoxInstalled) + L"\\" + | 105     std::wstring full_path = std::wstring(kRegistryFirefoxInstalled) + L"\\" + | 
| 105                              it.Name() + L"\\Main"; | 106                              it.Name() + L"\\Main"; | 
| 106     RegKey key(HKEY_LOCAL_MACHINE, full_path.c_str(), KEY_READ); | 107     base::win::RegKey key(HKEY_LOCAL_MACHINE, full_path.c_str(), KEY_READ); | 
| 107     std::wstring install_dir; | 108     std::wstring install_dir; | 
| 108     if (!key.ReadValue(L"Install Directory", &install_dir)) | 109     if (!key.ReadValue(L"Install Directory", &install_dir)) | 
| 109       continue; | 110       continue; | 
| 110     out->push_back(FilePath(install_dir)); | 111     out->push_back(FilePath(install_dir)); | 
| 111   } | 112   } | 
| 112 } | 113 } | 
| 113 | 114 | 
| 114 // Get plugin directory locations from the Firefox install path.  This is kind | 115 // Get plugin directory locations from the Firefox install path.  This is kind | 
| 115 // of a kludge, but it helps us locate the flash player for users that | 116 // of a kludge, but it helps us locate the flash player for users that | 
| 116 // already have it for firefox.  Not having to download yet-another-plugin | 117 // already have it for firefox.  Not having to download yet-another-plugin | 
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 173         next_drive = &next_drive[wcslen(next_drive) + 1]; | 174         next_drive = &next_drive[wcslen(next_drive) + 1]; | 
| 174       } | 175       } | 
| 175     } | 176     } | 
| 176   } | 177   } | 
| 177 } | 178 } | 
| 178 | 179 | 
| 179 // Hardcoded logic to detect Java plugin location. | 180 // Hardcoded logic to detect Java plugin location. | 
| 180 void GetJavaDirectory(std::set<FilePath>* plugin_dirs) { | 181 void GetJavaDirectory(std::set<FilePath>* plugin_dirs) { | 
| 181   // Load the new NPAPI Java plugin | 182   // Load the new NPAPI Java plugin | 
| 182   // 1. Open the main JRE key under HKLM | 183   // 1. Open the main JRE key under HKLM | 
| 183   RegKey java_key(HKEY_LOCAL_MACHINE, kRegistryJava, KEY_QUERY_VALUE); | 184   base::win::RegKey java_key(HKEY_LOCAL_MACHINE, kRegistryJava, | 
|  | 185                              KEY_QUERY_VALUE); | 
| 184 | 186 | 
| 185   // 2. Read the current Java version | 187   // 2. Read the current Java version | 
| 186   std::wstring java_version; | 188   std::wstring java_version; | 
| 187   if (!java_key.ReadValue(kRegistryBrowserJavaVersion, &java_version)) | 189   if (!java_key.ReadValue(kRegistryBrowserJavaVersion, &java_version)) | 
| 188     java_key.ReadValue(kRegistryCurrentJavaVersion, &java_version); | 190     java_key.ReadValue(kRegistryCurrentJavaVersion, &java_version); | 
| 189 | 191 | 
| 190   if (!java_version.empty()) { | 192   if (!java_version.empty()) { | 
| 191     java_key.OpenKey(java_version.c_str(), KEY_QUERY_VALUE); | 193     java_key.OpenKey(java_version.c_str(), KEY_QUERY_VALUE); | 
| 192 | 194 | 
| 193     // 3. Install path of the JRE binaries is specified in "JavaHome" | 195     // 3. Install path of the JRE binaries is specified in "JavaHome" | 
| (...skipping 205 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 399     for (size_t i = 0; i < plugins->size(); ++i) { | 401     for (size_t i = 0; i < plugins->size(); ++i) { | 
| 400       if ((*plugins)[i].path.BaseName().value() == kNewWMPPlugin) | 402       if ((*plugins)[i].path.BaseName().value() == kNewWMPPlugin) | 
| 401         return false; | 403         return false; | 
| 402     } | 404     } | 
| 403   } | 405   } | 
| 404 | 406 | 
| 405   return true; | 407   return true; | 
| 406 } | 408 } | 
| 407 | 409 | 
| 408 }  // namespace NPAPI | 410 }  // namespace NPAPI | 
| OLD | NEW | 
|---|