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

Side by Side Diff: chrome/browser/plugin_service.h

Issue 6259008: When we detect a PDF with an unsupported feature, ask the user if they want t... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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
« no previous file with comments | « chrome/browser/plugin_data_remover.cc ('k') | chrome/browser/plugin_service.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // This class responds to requests from renderers for the list of plugins, and 5 // This class responds to requests from renderers for the list of plugins, and
6 // also a proxy object for plugin instances. 6 // also a proxy object for plugin instances.
7 7
8 #ifndef CHROME_BROWSER_PLUGIN_SERVICE_H_ 8 #ifndef CHROME_BROWSER_PLUGIN_SERVICE_H_
9 #define CHROME_BROWSER_PLUGIN_SERVICE_H_ 9 #define CHROME_BROWSER_PLUGIN_SERVICE_H_
10 #pragma once 10 #pragma once
11 11
12 #include <string> 12 #include <string>
13 13
14 #include "base/basictypes.h" 14 #include "base/basictypes.h"
15 #include "base/file_path.h" 15 #include "base/file_path.h"
16 #include "base/hash_tables.h" 16 #include "base/hash_tables.h"
17 #include "base/scoped_vector.h" 17 #include "base/scoped_vector.h"
18 #include "base/singleton.h" 18 #include "base/singleton.h"
19 #include "base/synchronization/lock.h"
19 #include "base/synchronization/waitable_event_watcher.h" 20 #include "base/synchronization/waitable_event_watcher.h"
20 #include "build/build_config.h" 21 #include "build/build_config.h"
21 #include "chrome/browser/plugin_process_host.h" 22 #include "chrome/browser/plugin_process_host.h"
22 #include "chrome/common/notification_observer.h" 23 #include "chrome/common/notification_observer.h"
23 #include "chrome/common/notification_registrar.h" 24 #include "chrome/common/notification_registrar.h"
24 #include "googleurl/src/gurl.h" 25 #include "googleurl/src/gurl.h"
25 #include "ipc/ipc_channel_handle.h" 26 #include "ipc/ipc_channel_handle.h"
27 #include "webkit/plugins/npapi/webplugininfo.h"
26 28
27 #if defined(OS_WIN) 29 #if defined(OS_WIN)
28 #include "base/scoped_ptr.h" 30 #include "base/scoped_ptr.h"
29 #include "base/win/registry.h" 31 #include "base/win/registry.h"
30 #endif 32 #endif
31 33
32 #if defined(OS_LINUX) 34 #if defined(OS_LINUX)
33 #include "chrome/browser/file_path_watcher/file_path_watcher.h" 35 #include "chrome/browser/file_path_watcher/file_path_watcher.h"
34 #endif 36 #endif
35 37
36 #if defined(OS_CHROMEOS) 38 #if defined(OS_CHROMEOS)
37 namespace chromeos { 39 namespace chromeos {
38 class PluginSelectionPolicy; 40 class PluginSelectionPolicy;
39 } 41 }
40 #endif 42 #endif
41 43
42 namespace IPC { 44 namespace IPC {
43 class Message; 45 class Message;
44 } 46 }
45 47
46 class MessageLoop; 48 class MessageLoop;
47 class Profile; 49 class Profile;
48 class PluginDirWatcherDelegate; 50 class PluginDirWatcherDelegate;
49 class ResourceDispatcherHost; 51 class ResourceDispatcherHost;
50 52
51 namespace net { 53 namespace net {
52 class URLRequestContext; 54 class URLRequestContext;
53 } // namespace net 55 } // namespace net
54 56
55 namespace webkit {
56 namespace npapi {
57 struct WebPluginInfo;
58 }
59 }
60
61 // This must be created on the main thread but it's only called on the IO/file 57 // This must be created on the main thread but it's only called on the IO/file
62 // thread. 58 // thread.
63 class PluginService 59 class PluginService
64 : public base::WaitableEventWatcher::Delegate, 60 : public base::WaitableEventWatcher::Delegate,
65 public NotificationObserver { 61 public NotificationObserver {
66 public: 62 public:
63 struct OverriddenPlugin {
64 int render_process_id;
65 int render_view_id;
66 GURL url;
67 webkit::npapi::WebPluginInfo plugin;
68 };
69
67 // Initializes the global instance; should be called on startup from the main 70 // Initializes the global instance; should be called on startup from the main
68 // thread. 71 // thread.
69 static void InitGlobalInstance(Profile* profile); 72 static void InitGlobalInstance(Profile* profile);
70 73
71 // Returns the PluginService singleton. 74 // Returns the PluginService singleton.
72 static PluginService* GetInstance(); 75 static PluginService* GetInstance();
73 76
74 // Load all the plugins that should be loaded for the lifetime of the browser 77 // Load all the plugins that should be loaded for the lifetime of the browser
75 // (ie, with the LoadOnStartup flag set). 78 // (ie, with the LoadOnStartup flag set).
76 void LoadChromePlugins(ResourceDispatcherHost* resource_dispatcher_host); 79 void LoadChromePlugins(ResourceDispatcherHost* resource_dispatcher_host);
(...skipping 13 matching lines...) Expand all
90 93
91 // Returns the plugin process host corresponding to the plugin process that 94 // Returns the plugin process host corresponding to the plugin process that
92 // has been started by this service. This will start a process to host the 95 // has been started by this service. This will start a process to host the
93 // 'plugin_path' if needed. If the process fails to start, the return value 96 // 'plugin_path' if needed. If the process fails to start, the return value
94 // is NULL. Must be called on the IO thread. 97 // is NULL. Must be called on the IO thread.
95 PluginProcessHost* FindOrStartPluginProcess(const FilePath& plugin_path); 98 PluginProcessHost* FindOrStartPluginProcess(const FilePath& plugin_path);
96 99
97 // Opens a channel to a plugin process for the given mime type, starting 100 // Opens a channel to a plugin process for the given mime type, starting
98 // a new plugin process if necessary. This must be called on the IO thread 101 // a new plugin process if necessary. This must be called on the IO thread
99 // or else a deadlock can occur. 102 // or else a deadlock can occur.
100 void OpenChannelToPlugin(const GURL& url, 103 void OpenChannelToPlugin(int render_process_id,
104 int render_view_id,
105 const GURL& url,
101 const std::string& mime_type, 106 const std::string& mime_type,
102 PluginProcessHost::Client* client); 107 PluginProcessHost::Client* client);
103 108
104 // Gets the first allowed plugin in the list of plugins that matches 109 // Gets the first allowed plugin in the list of plugins that matches
105 // the given url and mime type. Must be called on the FILE thread. 110 // the given url and mime type. Must be called on the FILE thread.
106 bool GetFirstAllowedPluginInfo(const GURL& url, 111 bool GetFirstAllowedPluginInfo(int render_process_id,
112 int render_view_id,
113 const GURL& url,
107 const std::string& mime_type, 114 const std::string& mime_type,
108 webkit::npapi::WebPluginInfo* info, 115 webkit::npapi::WebPluginInfo* info,
109 std::string* actual_mime_type); 116 std::string* actual_mime_type);
110 117
111 // Returns true if the given plugin is allowed to be used by a page with 118 // Returns true if the given plugin is allowed to be used by a page with
112 // the given URL. 119 // the given URL.
113 bool PrivatePluginAllowedForURL(const FilePath& plugin_path, const GURL& url); 120 bool PrivatePluginAllowedForURL(const FilePath& plugin_path, const GURL& url);
114 121
122 // Safe to be called from any thread.
123 void OverridePluginForTab(OverriddenPlugin plugin);
124
115 // The UI thread's message loop 125 // The UI thread's message loop
116 MessageLoop* main_message_loop() { return main_message_loop_; } 126 MessageLoop* main_message_loop() { return main_message_loop_; }
117 127
118 ResourceDispatcherHost* resource_dispatcher_host() const { 128 ResourceDispatcherHost* resource_dispatcher_host() const {
119 return resource_dispatcher_host_; 129 return resource_dispatcher_host_;
120 } 130 }
121 131
122 static void EnableChromePlugins(bool enable); 132 static void EnableChromePlugins(bool enable);
123 133
124 private: 134 private:
125 friend struct DefaultSingletonTraits<PluginService>; 135 friend struct DefaultSingletonTraits<PluginService>;
126 136
127 // Creates the PluginService object, but doesn't actually build the plugin 137 // Creates the PluginService object, but doesn't actually build the plugin
128 // list yet. It's generated lazily. 138 // list yet. It's generated lazily.
129 PluginService(); 139 PluginService();
130 ~PluginService(); 140 ~PluginService();
131 141
132 // base::WaitableEventWatcher::Delegate implementation. 142 // base::WaitableEventWatcher::Delegate implementation.
133 virtual void OnWaitableEventSignaled(base::WaitableEvent* waitable_event); 143 virtual void OnWaitableEventSignaled(base::WaitableEvent* waitable_event);
134 144
135 // NotificationObserver implementation 145 // NotificationObserver implementation
136 virtual void Observe(NotificationType type, const NotificationSource& source, 146 virtual void Observe(NotificationType type, const NotificationSource& source,
137 const NotificationDetails& details); 147 const NotificationDetails& details);
138 148
139 void RegisterPepperPlugins(); 149 void RegisterPepperPlugins();
140 150
141 // Helper so we can do the plugin lookup on the FILE thread. 151 // Helper so we can do the plugin lookup on the FILE thread.
142 void GetAllowedPluginForOpenChannelToPlugin( 152 void GetAllowedPluginForOpenChannelToPlugin(
153 int render_process_id,
154 int render_view_id,
143 const GURL& url, 155 const GURL& url,
144 const std::string& mime_type, 156 const std::string& mime_type,
145 PluginProcessHost::Client* client); 157 PluginProcessHost::Client* client);
146 158
147 // Helper so we can finish opening the channel after looking up the 159 // Helper so we can finish opening the channel after looking up the
148 // plugin. 160 // plugin.
149 void FinishOpenChannelToPlugin( 161 void FinishOpenChannelToPlugin(
150 const FilePath& plugin_path, 162 const FilePath& plugin_path,
151 PluginProcessHost::Client* client); 163 PluginProcessHost::Client* client);
152 164
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 #endif 208 #endif
197 209
198 #if defined(OS_LINUX) 210 #if defined(OS_LINUX)
199 ScopedVector<FilePathWatcher> file_watchers_; 211 ScopedVector<FilePathWatcher> file_watchers_;
200 scoped_refptr<PluginDirWatcherDelegate> file_watcher_delegate_; 212 scoped_refptr<PluginDirWatcherDelegate> file_watcher_delegate_;
201 #endif 213 #endif
202 214
203 // Set to true if chrome plugins are enabled. Defaults to true. 215 // Set to true if chrome plugins are enabled. Defaults to true.
204 static bool enable_chrome_plugins_; 216 static bool enable_chrome_plugins_;
205 217
218 std::vector<OverriddenPlugin> overridden_plugins_;
219 base::Lock overridden_plugins_lock_;
220
206 DISALLOW_COPY_AND_ASSIGN(PluginService); 221 DISALLOW_COPY_AND_ASSIGN(PluginService);
207 }; 222 };
208 223
209 DISABLE_RUNNABLE_METHOD_REFCOUNT(PluginService); 224 DISABLE_RUNNABLE_METHOD_REFCOUNT(PluginService);
210 225
211 #endif // CHROME_BROWSER_PLUGIN_SERVICE_H_ 226 #endif // CHROME_BROWSER_PLUGIN_SERVICE_H_
OLDNEW
« no previous file with comments | « chrome/browser/plugin_data_remover.cc ('k') | chrome/browser/plugin_service.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698