OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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" | 15 #include "base/registry.h" |
16 #include "base/scoped_ptr.h" | 16 #include "base/scoped_ptr.h" |
| 17 #include "base/string_number_conversions.h" |
17 #include "base/string_util.h" | 18 #include "base/string_util.h" |
18 #include "webkit/glue/plugins/plugin_constants_win.h" | 19 #include "webkit/glue/plugins/plugin_constants_win.h" |
19 #include "webkit/glue/plugins/plugin_lib.h" | 20 #include "webkit/glue/plugins/plugin_lib.h" |
20 #include "webkit/glue/webkit_glue.h" | 21 #include "webkit/glue/webkit_glue.h" |
21 | 22 |
22 namespace { | 23 namespace { |
23 | 24 |
24 const TCHAR kRegistryApps[] = | 25 const TCHAR kRegistryApps[] = |
25 _T("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths"); | 26 _T("Software\\Microsoft\\Windows\\CurrentVersion\\App Paths"); |
26 const TCHAR kRegistryFirefox[] = _T("firefox.exe"); | 27 const TCHAR kRegistryFirefox[] = _T("firefox.exe"); |
(...skipping 279 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
306 SplitString(b, ',', &b_ver); | 307 SplitString(b, ',', &b_ver); |
307 if (a_ver.size() == 1 && b_ver.size() == 1) { | 308 if (a_ver.size() == 1 && b_ver.size() == 1) { |
308 a_ver.clear(); | 309 a_ver.clear(); |
309 b_ver.clear(); | 310 b_ver.clear(); |
310 SplitString(a, '.', &a_ver); | 311 SplitString(a, '.', &a_ver); |
311 SplitString(b, '.', &b_ver); | 312 SplitString(b, '.', &b_ver); |
312 } | 313 } |
313 if (a_ver.size() != b_ver.size()) | 314 if (a_ver.size() != b_ver.size()) |
314 return false; | 315 return false; |
315 for (size_t i = 0; i < a_ver.size(); i++) { | 316 for (size_t i = 0; i < a_ver.size(); i++) { |
316 int cur_a = StringToInt(a_ver[i]); | 317 int cur_a, cur_b; |
317 int cur_b = StringToInt(b_ver[i]); | 318 base::StringToInt(a_ver[i], &cur_a); |
| 319 base::StringToInt(b_ver[i], &cur_b); |
| 320 |
318 if (cur_a > cur_b) | 321 if (cur_a > cur_b) |
319 return false; | 322 return false; |
320 if (cur_a < cur_b) | 323 if (cur_a < cur_b) |
321 return true; | 324 return true; |
322 } | 325 } |
323 return false; | 326 return false; |
324 } | 327 } |
325 | 328 |
326 bool PluginList::ShouldLoadPlugin(const WebPluginInfo& info, | 329 bool PluginList::ShouldLoadPlugin(const WebPluginInfo& info, |
327 std::vector<WebPluginInfo>* plugins) { | 330 std::vector<WebPluginInfo>* plugins) { |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
363 if (filename == kWanWangProtocolHandlerPlugin) | 366 if (filename == kWanWangProtocolHandlerPlugin) |
364 return false; | 367 return false; |
365 | 368 |
366 // We only work with newer versions of the Java plugin which use NPAPI only | 369 // We only work with newer versions of the Java plugin which use NPAPI only |
367 // and don't depend on XPCOM. | 370 // and don't depend on XPCOM. |
368 if (filename == kJavaPlugin1 || filename == kJavaPlugin2) { | 371 if (filename == kJavaPlugin1 || filename == kJavaPlugin2) { |
369 std::vector<std::wstring> ver; | 372 std::vector<std::wstring> ver; |
370 SplitString(info.version, '.', &ver); | 373 SplitString(info.version, '.', &ver); |
371 int major, minor, update; | 374 int major, minor, update; |
372 if (ver.size() == 4 && | 375 if (ver.size() == 4 && |
373 StringToInt(ver[0], &major) && | 376 base::StringToInt(ver[0], &major) && |
374 StringToInt(ver[1], &minor) && | 377 base::StringToInt(ver[1], &minor) && |
375 StringToInt(ver[2], &update)) { | 378 base::StringToInt(ver[2], &update)) { |
376 if (major == 6 && minor == 0 && update < 120) | 379 if (major == 6 && minor == 0 && update < 120) |
377 return false; // Java SE6 Update 11 or older. | 380 return false; // Java SE6 Update 11 or older. |
378 } | 381 } |
379 } | 382 } |
380 | 383 |
381 // Special WMP handling | 384 // Special WMP handling |
382 | 385 |
383 // If both the new and old WMP plugins exist, only load the new one. | 386 // If both the new and old WMP plugins exist, only load the new one. |
384 if (filename == kNewWMPPlugin) { | 387 if (filename == kNewWMPPlugin) { |
385 if (dont_load_new_wmp_) | 388 if (dont_load_new_wmp_) |
386 return false; | 389 return false; |
387 | 390 |
388 for (size_t i = 0; i < plugins->size(); ++i) { | 391 for (size_t i = 0; i < plugins->size(); ++i) { |
389 if ((*plugins)[i].path.BaseName().value() == kOldWMPPlugin) { | 392 if ((*plugins)[i].path.BaseName().value() == kOldWMPPlugin) { |
390 plugins->erase(plugins->begin() + i); | 393 plugins->erase(plugins->begin() + i); |
391 break; | 394 break; |
392 } | 395 } |
393 } | 396 } |
394 } else if (filename == kOldWMPPlugin) { | 397 } else if (filename == kOldWMPPlugin) { |
395 for (size_t i = 0; i < plugins->size(); ++i) { | 398 for (size_t i = 0; i < plugins->size(); ++i) { |
396 if ((*plugins)[i].path.BaseName().value() == kNewWMPPlugin) | 399 if ((*plugins)[i].path.BaseName().value() == kNewWMPPlugin) |
397 return false; | 400 return false; |
398 } | 401 } |
399 } | 402 } |
400 | 403 |
401 return true; | 404 return true; |
402 } | 405 } |
403 | 406 |
404 } // namespace NPAPI | 407 } // namespace NPAPI |
OLD | NEW |