OLD | NEW |
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 #ifndef WEBKIT_PLUGINS_NPAPI_WEBPLUGIN_DELEGATE_IMPL_H_ | 5 #ifndef WEBKIT_PLUGINS_NPAPI_WEBPLUGIN_DELEGATE_IMPL_H_ |
6 #define WEBKIT_PLUGINS_NPAPI_WEBPLUGIN_DELEGATE_IMPL_H_ | 6 #define WEBKIT_PLUGINS_NPAPI_WEBPLUGIN_DELEGATE_IMPL_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
11 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 12 #include "base/memory/scoped_ptr.h" |
| 13 #include "base/memory/weak_ptr.h" |
13 #include "base/sequenced_task_runner_helpers.h" | 14 #include "base/sequenced_task_runner_helpers.h" |
14 #include "base/time.h" | 15 #include "base/time.h" |
15 #include "base/timer.h" | 16 #include "base/timer.h" |
16 #include "build/build_config.h" | 17 #include "build/build_config.h" |
17 #include "third_party/npapi/bindings/npapi.h" | 18 #include "third_party/npapi/bindings/npapi.h" |
18 #include "ui/gfx/native_widget_types.h" | 19 #include "ui/gfx/native_widget_types.h" |
19 #include "ui/gfx/rect.h" | 20 #include "ui/gfx/rect.h" |
20 #include "webkit/glue/webcursor.h" | 21 #include "webkit/glue/webcursor.h" |
21 #include "webkit/plugins/npapi/webplugin_delegate.h" | 22 #include "webkit/plugins/npapi/webplugin_delegate.h" |
22 #include "webkit/plugins/webkit_plugins_export.h" | 23 #include "webkit/plugins/webkit_plugins_export.h" |
23 | 24 |
24 #if defined(OS_WIN) && !defined(USE_AURA) | |
25 #include "base/memory/weak_ptr.h" | |
26 #endif | |
27 | |
28 #if defined(USE_X11) | 25 #if defined(USE_X11) |
29 #include "ui/base/x/x11_util.h" | 26 #include "ui/base/x/x11_util.h" |
30 | 27 |
31 typedef struct _GdkDrawable GdkPixmap; | 28 typedef struct _GdkDrawable GdkPixmap; |
32 #endif | 29 #endif |
33 | 30 |
34 class FilePath; | 31 class FilePath; |
35 | 32 |
36 #if defined(OS_MACOSX) | 33 #if defined(OS_MACOSX) |
37 #ifdef __OBJC__ | 34 #ifdef __OBJC__ |
38 @class CALayer; | 35 @class CALayer; |
39 @class CARenderer; | 36 @class CARenderer; |
40 #else | 37 #else |
41 class CALayer; | 38 class CALayer; |
42 class CARenderer; | 39 class CARenderer; |
43 #endif | 40 #endif |
44 #endif | 41 #endif |
45 | 42 |
46 namespace webkit { | 43 namespace webkit { |
47 namespace npapi { | 44 namespace npapi { |
48 | 45 |
49 class PluginInstance; | 46 class PluginInstance; |
50 | 47 |
51 #if defined(OS_MACOSX) | 48 #if defined(OS_MACOSX) |
52 class WebPluginAcceleratedSurface; | 49 class WebPluginAcceleratedSurface; |
53 class ExternalDragTracker; | 50 class ExternalDragTracker; |
54 #endif // OS_MACOSX | 51 #endif // OS_MACOSX |
55 | 52 |
56 #if defined(OS_WIN) && !defined(USE_AURA) | 53 #if defined(OS_WIN) |
57 class WebPluginIMEWin; | 54 class WebPluginIMEWin; |
58 #endif // OS_WIN | 55 #endif // OS_WIN |
59 | 56 |
60 // An implementation of WebPluginDelegate that runs in the plugin process, | 57 // An implementation of WebPluginDelegate that runs in the plugin process, |
61 // proxied from the renderer by WebPluginDelegateProxy. | 58 // proxied from the renderer by WebPluginDelegateProxy. |
62 class WEBKIT_PLUGINS_EXPORT WebPluginDelegateImpl : public WebPluginDelegate { | 59 class WEBKIT_PLUGINS_EXPORT WebPluginDelegateImpl : public WebPluginDelegate { |
63 public: | 60 public: |
64 enum PluginQuirks { | 61 enum PluginQuirks { |
65 PLUGIN_QUIRK_SETWINDOW_TWICE = 1, // Win32 | 62 PLUGIN_QUIRK_SETWINDOW_TWICE = 1, // Win32 |
66 PLUGIN_QUIRK_THROTTLE_WM_USER_PLUS_ONE = 2, // Win32 | 63 PLUGIN_QUIRK_THROTTLE_WM_USER_PLUS_ONE = 2, // Win32 |
(...skipping 14 matching lines...) Expand all Loading... |
81 PLUGIN_QUIRK_REPARENT_IN_BROWSER = 131072, // Windows | 78 PLUGIN_QUIRK_REPARENT_IN_BROWSER = 131072, // Windows |
82 PLUGIN_QUIRK_PATCH_GETKEYSTATE = 262144, // Windows | 79 PLUGIN_QUIRK_PATCH_GETKEYSTATE = 262144, // Windows |
83 PLUGIN_QUIRK_EMULATE_IME = 524288, // Windows. | 80 PLUGIN_QUIRK_EMULATE_IME = 524288, // Windows. |
84 PLUGIN_QUIRK_PATCH_VM_API = 1048576, // Windows. | 81 PLUGIN_QUIRK_PATCH_VM_API = 1048576, // Windows. |
85 }; | 82 }; |
86 | 83 |
87 static WebPluginDelegateImpl* Create(const FilePath& filename, | 84 static WebPluginDelegateImpl* Create(const FilePath& filename, |
88 const std::string& mime_type, | 85 const std::string& mime_type, |
89 gfx::PluginWindowHandle containing_view); | 86 gfx::PluginWindowHandle containing_view); |
90 | 87 |
91 static bool IsPluginDelegateWindow(gfx::NativeWindow window); | 88 #if defined(OS_WIN) |
92 static bool GetPluginNameFromWindow(gfx::NativeWindow window, | 89 static bool IsPluginDelegateWindow(HWND window); |
| 90 static bool GetPluginNameFromWindow(HWND window, |
93 string16* plugin_name); | 91 string16* plugin_name); |
94 static bool GetPluginVersionFromWindow(gfx::NativeWindow window, | 92 static bool GetPluginVersionFromWindow(HWND window, |
95 string16* plugin_version); | 93 string16* plugin_version); |
96 | 94 |
97 // Returns true if the window handle passed in is that of the dummy | 95 // Returns true if the window handle passed in is that of the dummy |
98 // activation window for windowless plugins. | 96 // activation window for windowless plugins. |
99 static bool IsDummyActivationWindow(gfx::NativeWindow window); | 97 static bool IsDummyActivationWindow(HWND window); |
| 98 #endif |
100 | 99 |
101 // WebPluginDelegate implementation | 100 // WebPluginDelegate implementation |
102 virtual bool Initialize(const GURL& url, | 101 virtual bool Initialize(const GURL& url, |
103 const std::vector<std::string>& arg_names, | 102 const std::vector<std::string>& arg_names, |
104 const std::vector<std::string>& arg_values, | 103 const std::vector<std::string>& arg_values, |
105 WebPlugin* plugin, | 104 WebPlugin* plugin, |
106 bool load_manually) OVERRIDE; | 105 bool load_manually) OVERRIDE; |
107 virtual void PluginDestroyed() OVERRIDE; | 106 virtual void PluginDestroyed() OVERRIDE; |
108 virtual void UpdateGeometry(const gfx::Rect& window_rect, | 107 virtual void UpdateGeometry(const gfx::Rect& window_rect, |
109 const gfx::Rect& clip_rect) OVERRIDE; | 108 const gfx::Rect& clip_rect) OVERRIDE; |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 140 |
142 // Returns the path for the library implementing this plugin. | 141 // Returns the path for the library implementing this plugin. |
143 FilePath GetPluginPath(); | 142 FilePath GetPluginPath(); |
144 | 143 |
145 // Returns a combination of PluginQuirks. | 144 // Returns a combination of PluginQuirks. |
146 int GetQuirks() const { return quirks_; } | 145 int GetQuirks() const { return quirks_; } |
147 | 146 |
148 // Informs the plugin that the view it is in has gained or lost focus. | 147 // Informs the plugin that the view it is in has gained or lost focus. |
149 void SetContentAreaHasFocus(bool has_focus); | 148 void SetContentAreaHasFocus(bool has_focus); |
150 | 149 |
151 #if defined(OS_WIN) && !defined(USE_AURA) | 150 #if defined(OS_WIN) |
152 // Informs the plug-in that an IME has changed its status. | 151 // Informs the plug-in that an IME has changed its status. |
153 void ImeCompositionUpdated(const string16& text, | 152 void ImeCompositionUpdated(const string16& text, |
154 const std::vector<int>& clauses, | 153 const std::vector<int>& clauses, |
155 const std::vector<int>& target, | 154 const std::vector<int>& target, |
156 int cursor_position); | 155 int cursor_position); |
157 | 156 |
158 // Informs the plugin that IME composition has completed./ If |text| is empty, | 157 // Informs the plugin that IME composition has completed./ If |text| is empty, |
159 // IME was cancelled. | 158 // IME was cancelled. |
160 void ImeCompositionCompleted(const string16& text); | 159 void ImeCompositionCompleted(const string16& text); |
161 | 160 |
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
325 gfx::Rect windowed_last_pos_; | 324 gfx::Rect windowed_last_pos_; |
326 | 325 |
327 bool windowed_did_set_window_; | 326 bool windowed_did_set_window_; |
328 | 327 |
329 // used by windowed and windowless plugins | 328 // used by windowed and windowless plugins |
330 bool windowless_; | 329 bool windowless_; |
331 | 330 |
332 WebPlugin* plugin_; | 331 WebPlugin* plugin_; |
333 scoped_refptr<PluginInstance> instance_; | 332 scoped_refptr<PluginInstance> instance_; |
334 | 333 |
335 #if defined(OS_WIN) && !defined(USE_AURA) | 334 #if defined(OS_WIN) |
336 // Original wndproc before we subclassed. | 335 // Original wndproc before we subclassed. |
337 WNDPROC plugin_wnd_proc_; | 336 WNDPROC plugin_wnd_proc_; |
338 | 337 |
339 // Used to throttle WM_USER+1 messages in Flash. | 338 // Used to throttle WM_USER+1 messages in Flash. |
340 uint32 last_message_; | 339 uint32 last_message_; |
341 bool is_calling_wndproc; | 340 bool is_calling_wndproc; |
342 | 341 |
343 // An IME emulator used by a windowless plug-in to retrieve IME data through | 342 // An IME emulator used by a windowless plug-in to retrieve IME data through |
344 // IMM32 functions. | 343 // IMM32 functions. |
345 scoped_ptr<WebPluginIMEWin> plugin_ime_; | 344 scoped_ptr<WebPluginIMEWin> plugin_ime_; |
(...skipping 19 matching lines...) Expand all Loading... |
365 // Ensure pixmap_ exists and is at least width by height pixels. | 364 // Ensure pixmap_ exists and is at least width by height pixels. |
366 void EnsurePixmapAtLeastSize(int width, int height); | 365 void EnsurePixmapAtLeastSize(int width, int height); |
367 #endif | 366 #endif |
368 | 367 |
369 gfx::PluginWindowHandle parent_; | 368 gfx::PluginWindowHandle parent_; |
370 NPWindow window_; | 369 NPWindow window_; |
371 gfx::Rect window_rect_; | 370 gfx::Rect window_rect_; |
372 gfx::Rect clip_rect_; | 371 gfx::Rect clip_rect_; |
373 int quirks_; | 372 int quirks_; |
374 | 373 |
375 #if defined(OS_WIN) && !defined(USE_AURA) | 374 #if defined(OS_WIN) |
376 // Windowless plugins don't have keyboard focus causing issues with the | 375 // Windowless plugins don't have keyboard focus causing issues with the |
377 // plugin not receiving keyboard events if the plugin enters a modal | 376 // plugin not receiving keyboard events if the plugin enters a modal |
378 // loop like TrackPopupMenuEx or MessageBox, etc. | 377 // loop like TrackPopupMenuEx or MessageBox, etc. |
379 // This is a basic issue with windows activation and focus arising due to | 378 // This is a basic issue with windows activation and focus arising due to |
380 // the fact that these windows are created by different threads. Activation | 379 // the fact that these windows are created by different threads. Activation |
381 // and focus are thread specific states, and if the browser has focus, | 380 // and focus are thread specific states, and if the browser has focus, |
382 // the plugin may not have focus. | 381 // the plugin may not have focus. |
383 // To fix a majority of these activation issues we create a dummy visible | 382 // To fix a majority of these activation issues we create a dummy visible |
384 // child window to which we set focus whenever the windowless plugin | 383 // child window to which we set focus whenever the windowless plugin |
385 // receives a WM_LBUTTONDOWN/WM_RBUTTONDOWN message via NPP_HandleEvent. | 384 // receives a WM_LBUTTONDOWN/WM_RBUTTONDOWN message via NPP_HandleEvent. |
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
493 | 492 |
494 // Called by the message filter hook when the plugin enters a modal loop. | 493 // Called by the message filter hook when the plugin enters a modal loop. |
495 void OnModalLoopEntered(); | 494 void OnModalLoopEntered(); |
496 | 495 |
497 // Returns true if the message passed in corresponds to a user gesture. | 496 // Returns true if the message passed in corresponds to a user gesture. |
498 static bool IsUserGesture(const WebKit::WebInputEvent& event); | 497 static bool IsUserGesture(const WebKit::WebInputEvent& event); |
499 | 498 |
500 // The url with which the plugin was instantiated. | 499 // The url with which the plugin was instantiated. |
501 std::string plugin_url_; | 500 std::string plugin_url_; |
502 | 501 |
503 #if defined(OS_WIN) && !defined(USE_AURA) | 502 #if defined(OS_WIN) |
504 // Indicates the end of a user gesture period. | 503 // Indicates the end of a user gesture period. |
505 void OnUserGestureEnd(); | 504 void OnUserGestureEnd(); |
506 | 505 |
507 // Handle to the message filter hook | 506 // Handle to the message filter hook |
508 HHOOK handle_event_message_filter_hook_; | 507 HHOOK handle_event_message_filter_hook_; |
509 | 508 |
510 // Event which is set when the plugin enters a modal loop in the course | 509 // Event which is set when the plugin enters a modal loop in the course |
511 // of a NPP_HandleEvent call. | 510 // of a NPP_HandleEvent call. |
512 HANDLE handle_event_pump_messages_event_; | 511 HANDLE handle_event_pump_messages_event_; |
513 | 512 |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
547 // True if NPP_New did not return an error. | 546 // True if NPP_New did not return an error. |
548 bool creation_succeeded_; | 547 bool creation_succeeded_; |
549 | 548 |
550 DISALLOW_COPY_AND_ASSIGN(WebPluginDelegateImpl); | 549 DISALLOW_COPY_AND_ASSIGN(WebPluginDelegateImpl); |
551 }; | 550 }; |
552 | 551 |
553 } // namespace npapi | 552 } // namespace npapi |
554 } // namespace webkit | 553 } // namespace webkit |
555 | 554 |
556 #endif // WEBKIT_PLUGINS_NPAPI_WEBPLUGIN_DELEGATE_IMPL_H_ | 555 #endif // WEBKIT_PLUGINS_NPAPI_WEBPLUGIN_DELEGATE_IMPL_H_ |
OLD | NEW |