Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(67)

Side by Side Diff: content/common/plugin_list.cc

Issue 19761007: Move NPAPI implementation out of webkit/plugins/npapi and into content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix mac Created 7 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/plugins/npapi/plugin_list.h" 5 #include "content/common/plugin_list.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/strings/string_split.h" 12 #include "base/strings/string_split.h"
13 #include "base/strings/string_util.h" 13 #include "base/strings/string_util.h"
14 #include "base/strings/sys_string_conversions.h" 14 #include "base/strings/sys_string_conversions.h"
15 #include "base/strings/utf_string_conversions.h" 15 #include "base/strings/utf_string_conversions.h"
16 #include "net/base/mime_util.h" 16 #include "net/base/mime_util.h"
17 #include "url/gurl.h" 17 #include "url/gurl.h"
18 #include "webkit/plugins/npapi/plugin_utils.h" 18 #include "webkit/plugins/npapi/plugin_utils.h"
19 #include "webkit/plugins/plugin_switches.h" 19 #include "webkit/plugins/plugin_switches.h"
20 20
21 #if defined(OS_WIN) 21 #if defined(OS_WIN)
22 #include "webkit/plugins/npapi/plugin_constants_win.h" 22 #include "content/common/plugin_constants_win.h"
23 #endif 23 #endif
24 24
25 using webkit::WebPluginInfo;
26 using webkit::WebPluginMimeType;
27
28 namespace content {
29
25 namespace { 30 namespace {
26 31
27 using webkit::npapi::PluginList;
28
29 const char kApplicationOctetStream[] = "application/octet-stream"; 32 const char kApplicationOctetStream[] = "application/octet-stream";
30 33
31 base::LazyInstance<PluginList> g_singleton = LAZY_INSTANCE_INITIALIZER; 34 base::LazyInstance<PluginList> g_singleton = LAZY_INSTANCE_INITIALIZER;
32 35
33 bool AllowMimeTypeMismatch(const std::string& orig_mime_type, 36 bool AllowMimeTypeMismatch(const std::string& orig_mime_type,
34 const std::string& actual_mime_type) { 37 const std::string& actual_mime_type) {
35 if (orig_mime_type == actual_mime_type) { 38 if (orig_mime_type == actual_mime_type) {
36 NOTREACHED(); 39 NOTREACHED();
37 return true; 40 return true;
38 } 41 }
39 42
40 // We do not permit URL-sniff based plug-in MIME type overrides aside from 43 // We do not permit URL-sniff based plug-in MIME type overrides aside from
41 // the case where the "type" was initially missing or generic 44 // the case where the "type" was initially missing or generic
42 // (application/octet-stream). 45 // (application/octet-stream).
43 // We collected stats to determine this approach isn't a major compat issue, 46 // We collected stats to determine this approach isn't a major compat issue,
44 // and we defend against content confusion attacks in various cases, such 47 // and we defend against content confusion attacks in various cases, such
45 // as when the user doesn't have the Flash plug-in enabled. 48 // as when the user doesn't have the Flash plug-in enabled.
46 bool allow = orig_mime_type.empty() || 49 bool allow = orig_mime_type.empty() ||
47 orig_mime_type == kApplicationOctetStream; 50 orig_mime_type == kApplicationOctetStream;
48 LOG_IF(INFO, !allow) << "Ignoring plugin with unexpected MIME type " 51 LOG_IF(INFO, !allow) << "Ignoring plugin with unexpected MIME type "
49 << actual_mime_type << " (expected " << orig_mime_type 52 << actual_mime_type << " (expected " << orig_mime_type
50 << ")"; 53 << ")";
51 return allow; 54 return allow;
52 } 55 }
53 56
54 } // namespace 57 } // namespace
55 58
56 namespace webkit {
57 namespace npapi {
58
59 // static 59 // static
60 PluginList* PluginList::Singleton() { 60 PluginList* PluginList::Singleton() {
61 return g_singleton.Pointer(); 61 return g_singleton.Pointer();
62 } 62 }
63 63
64 // static 64 // static
65 bool PluginList::DebugPluginLoading() { 65 bool PluginList::DebugPluginLoading() {
66 return CommandLine::ForCurrentProcess()->HasSwitch( 66 return CommandLine::ForCurrentProcess()->HasSwitch(
67 switches::kDebugPluginLoading); 67 switches::kDebugPluginLoading);
68 } 68 }
69 69
70 void PluginList::DisablePluginsDiscovery() { 70 void PluginList::DisablePluginsDiscovery() {
71 plugins_discovery_disabled_ = true; 71 plugins_discovery_disabled_ = true;
72 } 72 }
73 73
74 void PluginList::RefreshPlugins() { 74 void PluginList::RefreshPlugins() {
75 base::AutoLock lock(lock_); 75 base::AutoLock lock(lock_);
76 loading_state_ = LOADING_STATE_NEEDS_REFRESH; 76 loading_state_ = LOADING_STATE_NEEDS_REFRESH;
77 } 77 }
78 78
79 void PluginList::AddExtraPluginPath(const base::FilePath& plugin_path) { 79 void PluginList::AddExtraPluginPath(const base::FilePath& plugin_path) {
80 if (!NPAPIPluginsSupported()) { 80 if (!webkit::npapi::NPAPIPluginsSupported()) {
81 // TODO(jam): remove and just have CHECK once we're sure this doesn't get 81 // TODO(jam): remove and just have CHECK once we're sure this doesn't get
82 // triggered. 82 // triggered.
83 DLOG(INFO) << "NPAPI plugins not supported"; 83 DLOG(INFO) << "NPAPI plugins not supported";
84 return; 84 return;
85 } 85 }
86 86
87 // Chrome OS only loads plugins from /opt/google/chrome/plugins. 87 // Chrome OS only loads plugins from /opt/google/chrome/plugins.
88 #if !defined(OS_CHROMEOS) 88 #if !defined(OS_CHROMEOS)
89 base::AutoLock lock(lock_); 89 base::AutoLock lock(lock_);
90 extra_plugin_paths_.push_back(plugin_path); 90 extra_plugin_paths_.push_back(plugin_path);
(...skipping 12 matching lines...) Expand all
103 void PluginList::AddExtraPluginDir(const base::FilePath& plugin_dir) { 103 void PluginList::AddExtraPluginDir(const base::FilePath& plugin_dir) {
104 // Chrome OS only loads plugins from /opt/google/chrome/plugins. 104 // Chrome OS only loads plugins from /opt/google/chrome/plugins.
105 #if !defined(OS_CHROMEOS) 105 #if !defined(OS_CHROMEOS)
106 base::AutoLock lock(lock_); 106 base::AutoLock lock(lock_);
107 extra_plugin_dirs_.push_back(plugin_dir); 107 extra_plugin_dirs_.push_back(plugin_dir);
108 #endif 108 #endif
109 } 109 }
110 110
111 void PluginList::RegisterInternalPlugin(const webkit::WebPluginInfo& info, 111 void PluginList::RegisterInternalPlugin(const webkit::WebPluginInfo& info,
112 bool add_at_beginning) { 112 bool add_at_beginning) {
113 if (!NPAPIPluginsSupported() && 113 if (!webkit::npapi::NPAPIPluginsSupported() &&
114 info.type == WebPluginInfo::PLUGIN_TYPE_NPAPI) { 114 info.type == WebPluginInfo::PLUGIN_TYPE_NPAPI) {
115 DLOG(INFO) << "Don't register NPAPI plugins when they're not supported"; 115 DLOG(INFO) << "Don't register NPAPI plugins when they're not supported";
116 return; 116 return;
117 } 117 }
118 118
119 base::AutoLock lock(lock_); 119 base::AutoLock lock(lock_);
120 120
121 internal_plugins_.push_back(info); 121 internal_plugins_.push_back(info);
122 if (add_at_beginning) { 122 if (add_at_beginning) {
123 // Newer registrations go earlier in the list so they can override the MIME 123 // Newer registrations go earlier in the list so they can override the MIME
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 300
301 for (size_t i = 0; i < extra_plugin_paths.size(); ++i) { 301 for (size_t i = 0; i < extra_plugin_paths.size(); ++i) {
302 const base::FilePath& path = extra_plugin_paths[i]; 302 const base::FilePath& path = extra_plugin_paths[i];
303 if (std::find(plugin_paths->begin(), plugin_paths->end(), path) != 303 if (std::find(plugin_paths->begin(), plugin_paths->end(), path) !=
304 plugin_paths->end()) { 304 plugin_paths->end()) {
305 continue; 305 continue;
306 } 306 }
307 plugin_paths->push_back(path); 307 plugin_paths->push_back(path);
308 } 308 }
309 309
310 if (NPAPIPluginsSupported()) { 310 if (webkit::npapi::NPAPIPluginsSupported()) {
311 // A bit confusingly, this function is used to load Pepper plugins as well. 311 // A bit confusingly, this function is used to load Pepper plugins as well.
312 // Those are all internal plugins so we have to use extra_plugin_paths. 312 // Those are all internal plugins so we have to use extra_plugin_paths.
313 for (size_t i = 0; i < extra_plugin_dirs.size(); ++i) 313 for (size_t i = 0; i < extra_plugin_dirs.size(); ++i)
314 GetPluginsInDir(extra_plugin_dirs[i], plugin_paths); 314 GetPluginsInDir(extra_plugin_dirs[i], plugin_paths);
315 315
316 std::vector<base::FilePath> directories_to_scan; 316 std::vector<base::FilePath> directories_to_scan;
317 GetPluginDirectories(&directories_to_scan); 317 GetPluginDirectories(&directories_to_scan);
318 for (size_t i = 0; i < directories_to_scan.size(); ++i) 318 for (size_t i = 0; i < directories_to_scan.size(); ++i)
319 GetPluginsInDir(directories_to_scan[i], plugin_paths); 319 GetPluginsInDir(directories_to_scan[i], plugin_paths);
320 320
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
437 } 437 }
438 } 438 }
439 } 439 }
440 return false; 440 return false;
441 } 441 }
442 442
443 PluginList::~PluginList() { 443 PluginList::~PluginList() {
444 } 444 }
445 445
446 446
447 } // namespace npapi 447 } // namespace content
448 } // namespace webkit
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698