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

Side by Side Diff: content/child/npapi/plugin_instance.h

Issue 1426923007: Remove PluginLoadObserver and related logic, it was only used for NPAPI. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years 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
« no previous file with comments | « content/child/npapi/plugin_host.cc ('k') | content/child/npapi/plugin_instance.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) 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 // TODO: Need to deal with NPAPI's NPSavedData. 5 // TODO: Need to deal with NPAPI's NPSavedData.
6 // I haven't seen plugins use it yet. 6 // I haven't seen plugins use it yet.
7 7
8 #ifndef CONTENT_CHILD_NPAPI_PLUGIN_INSTANCE_H_ 8 #ifndef CONTENT_CHILD_NPAPI_PLUGIN_INSTANCE_H_
9 #define CONTENT_CHILD_NPAPI_PLUGIN_INSTANCE_H_ 9 #define CONTENT_CHILD_NPAPI_PLUGIN_INSTANCE_H_
10 10
(...skipping 13 matching lines...) Expand all
24 #include "url/gurl.h" 24 #include "url/gurl.h"
25 25
26 namespace base { 26 namespace base {
27 class SingleThreadTaskRunner; 27 class SingleThreadTaskRunner;
28 } 28 }
29 29
30 namespace content { 30 namespace content {
31 31
32 class PluginLib; 32 class PluginLib;
33 class PluginHost; 33 class PluginHost;
34 class PluginStream;
35 class PluginStreamUrl;
36 class WebPlugin; 34 class WebPlugin;
37 class WebPluginResourceClient; 35 class WebPluginResourceClient;
38 36
39 #if defined(OS_MACOSX) 37 #if defined(OS_MACOSX)
40 class ScopedCurrentPluginEvent; 38 class ScopedCurrentPluginEvent;
41 #endif 39 #endif
42 40
43 // A PluginInstance is an active, running instance of a Plugin. 41 // A PluginInstance is an active, running instance of a Plugin.
44 // A single plugin may have many PluginInstances. 42 // A single plugin may have many PluginInstances.
45 class PluginInstance : public base::RefCountedThreadSafe<PluginInstance> { 43 class PluginInstance : public base::RefCountedThreadSafe<PluginInstance> {
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 // Updates the instance's tracking of the location of the plugin location 112 // Updates the instance's tracking of the location of the plugin location
115 // relative to the upper left of the screen. 113 // relative to the upper left of the screen.
116 void set_plugin_origin(const gfx::Point& origin) { plugin_origin_ = origin; } 114 void set_plugin_origin(const gfx::Point& origin) { plugin_origin_ = origin; }
117 // Updates the instance's tracking of the frame of the containing window 115 // Updates the instance's tracking of the frame of the containing window
118 // relative to the upper left of the screen. 116 // relative to the upper left of the screen.
119 void set_window_frame(const gfx::Rect& frame) { 117 void set_window_frame(const gfx::Rect& frame) {
120 containing_window_frame_ = frame; 118 containing_window_frame_ = frame;
121 } 119 }
122 #endif 120 #endif
123 121
124 // Creates a stream for sending an URL. If notify_id is non-zero, it will
125 // send a notification to the plugin when the stream is complete; otherwise it
126 // will not. Set object_url to true if the load is for the object tag's url,
127 // or false if it's for a url that the plugin fetched through
128 // NPN_GetUrl[Notify].
129 PluginStreamUrl* CreateStream(unsigned long resource_id,
130 const GURL& url,
131 const std::string& mime_type,
132 int notify_id);
133
134 // For each instance, we track all streams. When the
135 // instance closes, all remaining streams are also
136 // closed. All streams associated with this instance
137 // should call AddStream so that they can be cleaned
138 // up when the instance shuts down.
139 void AddStream(PluginStream* stream);
140
141 // This is called when a stream is closed. We remove the stream from the
142 // list, which releases the reference maintained to the stream.
143 void RemoveStream(PluginStream* stream);
144
145 // Closes all open streams on this instance.
146 void CloseStreams();
147
148 // Returns the WebPluginResourceClient object for a stream that has become 122 // Returns the WebPluginResourceClient object for a stream that has become
149 // seekable. 123 // seekable.
150 WebPluginResourceClient* GetRangeRequest(int id); 124 WebPluginResourceClient* GetRangeRequest(int id);
151 125
152 // Have the plugin create its script object. 126 // Have the plugin create its script object.
153 NPObject* GetPluginScriptableObject(); 127 NPObject* GetPluginScriptableObject();
154 128
155 // Returns the form value of this instance. 129 // Returns the form value of this instance.
156 bool GetFormValue(base::string16* value); 130 bool GetFormValue(base::string16* value);
157 131
158 // WebViewDelegate methods that we implement. This is for handling
159 // callbacks during getURLNotify.
160 void DidFinishLoadWithReason(const GURL& url, NPReason reason, int notify_id);
161
162 // If true, send the Mozilla user agent instead of Chrome's to the plugin. 132 // If true, send the Mozilla user agent instead of Chrome's to the plugin.
163 bool use_mozilla_user_agent() { return use_mozilla_user_agent_; } 133 bool use_mozilla_user_agent() { return use_mozilla_user_agent_; }
164 void set_use_mozilla_user_agent() { use_mozilla_user_agent_ = true; } 134 void set_use_mozilla_user_agent() { use_mozilla_user_agent_ = true; }
165 135
166 // If the plugin instance is backed by a texture, return its ID in the 136 // If the plugin instance is backed by a texture, return its ID in the
167 // compositor's namespace. Otherwise return 0. Returns 0 by default. 137 // compositor's namespace. Otherwise return 0. Returns 0 by default.
168 unsigned GetBackingTextureId(); 138 unsigned GetBackingTextureId();
169 139
170 // Helper that implements NPN_PluginThreadAsyncCall semantics 140 // Helper that implements NPN_PluginThreadAsyncCall semantics
171 void PluginThreadAsyncCall(void (*func)(void *), 141 void PluginThreadAsyncCall(void (*func)(void *),
(...skipping 26 matching lines...) Expand all
198 NPError NPP_GetValue(NPPVariable, void*); 168 NPError NPP_GetValue(NPPVariable, void*);
199 NPError NPP_SetValue(NPNVariable, void*); 169 NPError NPP_SetValue(NPNVariable, void*);
200 short NPP_HandleEvent(void*); 170 short NPP_HandleEvent(void*);
201 void NPP_Destroy(); 171 void NPP_Destroy();
202 bool NPP_Print(NPPrint* platform_print); 172 bool NPP_Print(NPPrint* platform_print);
203 void NPP_URLRedirectNotify(const char* url, int32_t status, 173 void NPP_URLRedirectNotify(const char* url, int32_t status,
204 void* notify_data); 174 void* notify_data);
205 175
206 void SendJavaScriptStream(const GURL& url, 176 void SendJavaScriptStream(const GURL& url,
207 const std::string& result, 177 const std::string& result,
208 bool success, 178 bool success);
209 int notify_id);
210
211 void DidReceiveManualResponse(const GURL& url,
212 const std::string& mime_type,
213 const std::string& headers,
214 uint32 expected_length,
215 uint32 last_modified);
216 void DidReceiveManualData(const char* buffer, int length);
217 void DidFinishManualLoading();
218 void DidManualLoadFail();
219 179
220 void PushPopupsEnabledState(bool enabled); 180 void PushPopupsEnabledState(bool enabled);
221 void PopPopupsEnabledState(); 181 void PopPopupsEnabledState();
222 182
223 bool popups_allowed() const { 183 bool popups_allowed() const {
224 return popups_enabled_stack_.empty() ? false : popups_enabled_stack_.top(); 184 return popups_enabled_stack_.empty() ? false : popups_enabled_stack_.top();
225 } 185 }
226 186
227 // Initiates byte range reads for plugins.
228 void RequestRead(NPStream* stream, NPByteRange* range_list);
229
230 // Handles GetURL/GetURLNotify/PostURL/PostURLNotify requests initiated
231 // by plugins.
232 void RequestURL(const char* url,
233 const char* method,
234 const char* target,
235 const char* buf,
236 unsigned int len,
237 bool notify,
238 void* notify_data);
239
240 // Handles NPN_URLRedirectResponse calls issued by plugins in response to
241 // HTTP URL redirect notifications.
242 void URLRedirectResponse(bool allow, void* notify_data);
243
244 bool handles_url_redirects() const { return handles_url_redirects_; }
245
246 private: 187 private:
247 friend class base::RefCountedThreadSafe<PluginInstance>; 188 friend class base::RefCountedThreadSafe<PluginInstance>;
248 189
249 #if defined(OS_MACOSX) 190 #if defined(OS_MACOSX)
250 friend class ScopedCurrentPluginEvent; 191 friend class ScopedCurrentPluginEvent;
251 // Sets the event that the plugin is currently handling. The object is not 192 // Sets the event that the plugin is currently handling. The object is not
252 // owned or copied, so the caller must call this again with NULL before the 193 // owned or copied, so the caller must call this again with NULL before the
253 // event pointer becomes invalid. Clients use ScopedCurrentPluginEvent rather 194 // event pointer becomes invalid. Clients use ScopedCurrentPluginEvent rather
254 // than calling this directly. 195 // than calling this directly.
255 void set_currently_handled_event(NPCocoaEvent* event) { 196 void set_currently_handled_event(NPCocoaEvent* event) {
256 currently_handled_event_ = event; 197 currently_handled_event_ = event;
257 } 198 }
258 #endif 199 #endif
259 200
260 ~PluginInstance(); 201 ~PluginInstance();
261 void OnPluginThreadAsyncCall(void (*func)(void *), void* userData); 202 void OnPluginThreadAsyncCall(void (*func)(void *), void* userData);
262 void OnTimerCall(void (*func)(NPP id, uint32 timer_id), 203 void OnTimerCall(void (*func)(NPP id, uint32 timer_id),
263 NPP id, uint32 timer_id); 204 NPP id, uint32 timer_id);
264 bool IsValidStream(const NPStream* stream);
265 void GetNotifyData(int notify_id, bool* notify, void** notify_data);
266 205
267 // This is a hack to get the real player plugin to work with chrome 206 // This is a hack to get the real player plugin to work with chrome
268 // The real player plugin dll(nppl3260) when loaded by firefox is loaded via 207 // The real player plugin dll(nppl3260) when loaded by firefox is loaded via
269 // the NS COM API which is analogous to win32 COM. So the NPAPI functions in 208 // the NS COM API which is analogous to win32 COM. So the NPAPI functions in
270 // the plugin are invoked via an interface by firefox. The plugin instance 209 // the plugin are invoked via an interface by firefox. The plugin instance
271 // handle which is passed to every NPAPI method is owned by the real player 210 // handle which is passed to every NPAPI method is owned by the real player
272 // plugin, i.e. it expects the ndata member to point to a structure which 211 // plugin, i.e. it expects the ndata member to point to a structure which
273 // it knows about. Eventually it dereferences this structure and compares 212 // it knows about. Eventually it dereferences this structure and compares
274 // a member variable at offset 0x24(Version 6.0.11.2888) /2D (Version 213 // a member variable at offset 0x24(Version 6.0.11.2888) /2D (Version
275 // 6.0.11.3088) with 0 and on failing this check, takes a different code 214 // 6.0.11.3088) with 0 and on failing this check, takes a different code
276 // path which causes a crash. Safari and Opera work with version 6.0.11.2888 215 // path which causes a crash. Safari and Opera work with version 6.0.11.2888
277 // by chance as their ndata structure contains a 0 at the location which real 216 // by chance as their ndata structure contains a 0 at the location which real
278 // player checks:(. They crash with version 6.0.11.3088 as well. The 217 // player checks:(. They crash with version 6.0.11.3088 as well. The
279 // following member just adds a 96 byte padding to our PluginInstance class 218 // following member just adds a 96 byte padding to our PluginInstance class
280 // which is passed in the ndata member. This magic number works correctly on 219 // which is passed in the ndata member. This magic number works correctly on
281 // Vista with UAC on or off :(. 220 // Vista with UAC on or off :(.
282 // NOTE: Please dont change the ordering of the member variables 221 // NOTE: Please dont change the ordering of the member variables
283 // New members should be added after this padding array. 222 // New members should be added after this padding array.
284 // TODO(iyengar) : Disassemble the Realplayer ndata structure and look into 223 // TODO(iyengar) : Disassemble the Realplayer ndata structure and look into
285 // the possiblity of conforming to it (http://b/issue?id=936667). We 224 // the possiblity of conforming to it (http://b/issue?id=936667). We
286 // could also log a bug with Real, which would save the effort. 225 // could also log a bug with Real, which would save the effort.
287 uint8 zero_padding_[96]; 226 uint8 zero_padding_[96];
288 scoped_refptr<PluginLib> plugin_; 227 scoped_refptr<PluginLib> plugin_;
289 NPP npp_; 228 NPP npp_;
290 scoped_refptr<PluginHost> host_; 229 scoped_refptr<PluginHost> host_;
291 NPPluginFuncs* npp_functions_; 230 NPPluginFuncs* npp_functions_;
292 std::vector<scoped_refptr<PluginStream> > open_streams_;
293 gfx::PluginWindowHandle window_handle_; 231 gfx::PluginWindowHandle window_handle_;
294 bool windowless_; 232 bool windowless_;
295 bool transparent_; 233 bool transparent_;
296 WebPlugin* webplugin_; 234 WebPlugin* webplugin_;
297 std::string mime_type_; 235 std::string mime_type_;
298 GURL get_url_;
299 intptr_t get_notify_data_;
300 bool use_mozilla_user_agent_; 236 bool use_mozilla_user_agent_;
301 #if defined(OS_MACOSX) 237 #if defined(OS_MACOSX)
302 NPDrawingModel drawing_model_; 238 NPDrawingModel drawing_model_;
303 NPEventModel event_model_; 239 NPEventModel event_model_;
304 gfx::Point plugin_origin_; 240 gfx::Point plugin_origin_;
305 gfx::Rect containing_window_frame_; 241 gfx::Rect containing_window_frame_;
306 NPCocoaEvent* currently_handled_event_; // weak 242 NPCocoaEvent* currently_handled_event_; // weak
307 #endif 243 #endif
308 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 244 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
309 scoped_refptr<PluginStreamUrl> plugin_data_stream_;
310 245
311 // This flag if true indicates that the plugin data would be passed from 246 // This flag if true indicates that the plugin data would be passed from
312 // webkit. if false indicates that the plugin should download the data. 247 // webkit. if false indicates that the plugin should download the data.
313 bool load_manually_; 248 bool load_manually_;
314 249
315 // Stack indicating if popups are to be enabled for the outgoing 250 // Stack indicating if popups are to be enabled for the outgoing
316 // NPN_GetURL/NPN_GetURLNotify calls. 251 // NPN_GetURL/NPN_GetURLNotify calls.
317 std::stack<bool> popups_enabled_stack_; 252 std::stack<bool> popups_enabled_stack_;
318 253
319 // True if in CloseStreams().
320 bool in_close_streams_;
321
322 // List of files created for the current plugin instance. File names are 254 // List of files created for the current plugin instance. File names are
323 // added to the list every time the NPP_StreamAsFile function is called. 255 // added to the list every time the NPP_StreamAsFile function is called.
324 std::vector<base::FilePath> files_created_; 256 std::vector<base::FilePath> files_created_;
325 257
326 // Next unusued timer id. 258 // Next unusued timer id.
327 uint32 next_timer_id_; 259 uint32 next_timer_id_;
328 260
329 // Map of timer id to settings for timer. 261 // Map of timer id to settings for timer.
330 struct TimerInfo { 262 struct TimerInfo {
331 uint32 interval; 263 uint32 interval;
332 bool repeat; 264 bool repeat;
333 }; 265 };
334 typedef std::map<uint32, TimerInfo> TimerMap; 266 typedef std::map<uint32, TimerInfo> TimerMap;
335 TimerMap timers_; 267 TimerMap timers_;
336 268
337 // Tracks pending GET/POST requests so that the plugin-given data doesn't
338 // cross process boundaries to an untrusted process.
339 typedef std::map<int, void*> PendingRequestMap;
340 PendingRequestMap pending_requests_;
341 int next_notify_id_;
342
343 // Used to track pending range requests so that when WebPlugin replies to us
344 // we can match the reply to the stream.
345 typedef std::map<int, scoped_refptr<PluginStream> > PendingRangeRequestMap;
346 PendingRangeRequestMap pending_range_requests_;
347 int next_range_request_id_;
348 // The plugin handles the NPAPI URL redirect notification API.
349 // See here https://wiki.mozilla.org/NPAPI:HTTPRedirectHandling
350 bool handles_url_redirects_;
351
352 DISALLOW_COPY_AND_ASSIGN(PluginInstance); 269 DISALLOW_COPY_AND_ASSIGN(PluginInstance);
353 }; 270 };
354 271
355 #if defined(OS_MACOSX) 272 #if defined(OS_MACOSX)
356 // Helper to simplify correct usage of set_currently_handled_event. 273 // Helper to simplify correct usage of set_currently_handled_event.
357 // Instantiating will set |instance|'s currently handled to |event| for the 274 // Instantiating will set |instance|'s currently handled to |event| for the
358 // lifetime of the object, then NULL when it goes out of scope. 275 // lifetime of the object, then NULL when it goes out of scope.
359 class ScopedCurrentPluginEvent { 276 class ScopedCurrentPluginEvent {
360 public: 277 public:
361 ScopedCurrentPluginEvent(PluginInstance* instance, NPCocoaEvent* event); 278 ScopedCurrentPluginEvent(PluginInstance* instance, NPCocoaEvent* event);
362 ~ScopedCurrentPluginEvent(); 279 ~ScopedCurrentPluginEvent();
363 280
364 private: 281 private:
365 scoped_refptr<PluginInstance> instance_; 282 scoped_refptr<PluginInstance> instance_;
366 DISALLOW_COPY_AND_ASSIGN(ScopedCurrentPluginEvent); 283 DISALLOW_COPY_AND_ASSIGN(ScopedCurrentPluginEvent);
367 }; 284 };
368 #endif 285 #endif
369 286
370 } // namespace content 287 } // namespace content
371 288
372 #endif // CONTENT_CHILD_NPAPI_PLUGIN_INSTANCE_H_ 289 #endif // CONTENT_CHILD_NPAPI_PLUGIN_INSTANCE_H_
OLDNEW
« no previous file with comments | « content/child/npapi/plugin_host.cc ('k') | content/child/npapi/plugin_instance.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698