OLD | NEW |
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 #ifndef WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ | 5 #ifndef WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ |
6 #define WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ | 6 #define WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ |
7 | 7 |
8 #include <map> | 8 #include <map> |
9 #include <set> | 9 #include <set> |
10 #include <string> | 10 #include <string> |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
46 namespace WebKit { | 46 namespace WebKit { |
47 struct WebCursorInfo; | 47 struct WebCursorInfo; |
48 class WebInputEvent; | 48 class WebInputEvent; |
49 class WebPluginContainer; | 49 class WebPluginContainer; |
50 } | 50 } |
51 | 51 |
52 namespace webkit { | 52 namespace webkit { |
53 namespace ppapi { | 53 namespace ppapi { |
54 | 54 |
55 class FullscreenContainer; | 55 class FullscreenContainer; |
| 56 class MessageChannel; |
56 class ObjectVar; | 57 class ObjectVar; |
57 class PluginDelegate; | 58 class PluginDelegate; |
58 class PluginModule; | 59 class PluginModule; |
59 class PluginObject; | 60 class PluginObject; |
60 class PPB_Graphics2D_Impl; | 61 class PPB_Graphics2D_Impl; |
61 class PPB_ImageData_Impl; | 62 class PPB_ImageData_Impl; |
62 class PPB_Surface3D_Impl; | 63 class PPB_Surface3D_Impl; |
63 class PPB_URLLoader_Impl; | 64 class PPB_URLLoader_Impl; |
64 class Resource; | 65 class Resource; |
65 | 66 |
66 // Represents one time a plugin appears on one web page. | 67 // Represents one time a plugin appears on one web page. |
67 // | 68 // |
68 // Note: to get from a PP_Instance to a PluginInstance*, use the | 69 // Note: to get from a PP_Instance to a PluginInstance*, use the |
69 // ResourceTracker. | 70 // ResourceTracker. |
70 class PluginInstance : public base::RefCounted<PluginInstance> { | 71 class PluginInstance : public base::RefCounted<PluginInstance> { |
71 public: | 72 public: |
| 73 enum InterfaceOwner { |
| 74 BROWSER_OWNS_INTERFACE, |
| 75 PLUGIN_OWNS_INTERFACE |
| 76 }; |
| 77 |
72 PluginInstance(PluginDelegate* delegate, | 78 PluginInstance(PluginDelegate* delegate, |
73 PluginModule* module, | 79 PluginModule* module, |
74 const PPP_Instance* instance_interface); | 80 const PPP_Instance* instance_interface, |
| 81 InterfaceOwner ppp_instance_owner); |
75 ~PluginInstance(); | 82 ~PluginInstance(); |
76 | 83 |
77 static const PPB_Instance* GetInterface(); | 84 static const void* GetInterface(const std::string& interface); |
78 | 85 |
79 // Returns a pointer to the interface implementing PPB_Find that is | 86 // Returns a pointer to the interface implementing PPB_Find that is |
80 // exposed to the plugin. | 87 // exposed to the plugin. |
81 static const PPB_Find_Dev* GetFindInterface(); | 88 static const PPB_Find_Dev* GetFindInterface(); |
82 static const PPB_Fullscreen_Dev* GetFullscreenInterface(); | 89 static const PPB_Fullscreen_Dev* GetFullscreenInterface(); |
83 static const PPB_Zoom_Dev* GetZoomInterface(); | 90 static const PPB_Zoom_Dev* GetZoomInterface(); |
84 | 91 |
85 PluginDelegate* delegate() const { return delegate_; } | 92 PluginDelegate* delegate() const { return delegate_; } |
86 PluginModule* module() const { return module_.get(); } | 93 PluginModule* module() const { return module_.get(); } |
| 94 MessageChannel& message_channel() { return *message_channel_; } |
87 | 95 |
88 WebKit::WebPluginContainer* container() const { return container_; } | 96 WebKit::WebPluginContainer* container() const { return container_; } |
89 | 97 |
90 const gfx::Rect& position() const { return position_; } | 98 const gfx::Rect& position() const { return position_; } |
91 const gfx::Rect& clip() const { return clip_; } | 99 const gfx::Rect& clip() const { return clip_; } |
92 | 100 |
93 int find_identifier() const { return find_identifier_; } | 101 int find_identifier() const { return find_identifier_; } |
94 | 102 |
95 void set_always_on_top(bool on_top) { always_on_top_ = on_top; } | 103 void set_always_on_top(bool on_top) { always_on_top_ = on_top; } |
96 | 104 |
(...skipping 28 matching lines...) Expand all Loading... |
125 // Called when the out-of-process plugin implementing this instance crashed. | 133 // Called when the out-of-process plugin implementing this instance crashed. |
126 void InstanceCrashed(); | 134 void InstanceCrashed(); |
127 | 135 |
128 // PPB_Instance implementation. | 136 // PPB_Instance implementation. |
129 PP_Var GetWindowObject(); | 137 PP_Var GetWindowObject(); |
130 PP_Var GetOwnerElementObject(); | 138 PP_Var GetOwnerElementObject(); |
131 bool BindGraphics(PP_Resource graphics_id); | 139 bool BindGraphics(PP_Resource graphics_id); |
132 bool full_frame() const { return full_frame_; } | 140 bool full_frame() const { return full_frame_; } |
133 bool SetCursor(PP_CursorType_Dev type); | 141 bool SetCursor(PP_CursorType_Dev type); |
134 PP_Var ExecuteScript(PP_Var script, PP_Var* exception); | 142 PP_Var ExecuteScript(PP_Var script, PP_Var* exception); |
| 143 void PostMessage(PP_Var message); |
135 | 144 |
136 // PPP_Instance pass-through. | 145 // PPP_Instance pass-through. |
137 void Delete(); | 146 void Delete(); |
138 bool Initialize(WebKit::WebPluginContainer* container, | 147 bool Initialize(WebKit::WebPluginContainer* container, |
139 const std::vector<std::string>& arg_names, | 148 const std::vector<std::string>& arg_names, |
140 const std::vector<std::string>& arg_values, | 149 const std::vector<std::string>& arg_values, |
141 bool full_frame); | 150 bool full_frame); |
142 bool HandleDocumentLoad(PPB_URLLoader_Impl* loader); | 151 bool HandleDocumentLoad(PPB_URLLoader_Impl* loader); |
143 bool HandleInputEvent(const WebKit::WebInputEvent& event, | 152 bool HandleInputEvent(const WebKit::WebInputEvent& event, |
144 WebKit::WebCursorInfo* cursor_info); | 153 WebKit::WebCursorInfo* cursor_info); |
| 154 void HandleMessage(PP_Var message); |
145 PP_Var GetInstanceObject(); | 155 PP_Var GetInstanceObject(); |
146 void ViewChanged(const gfx::Rect& position, const gfx::Rect& clip); | 156 void ViewChanged(const gfx::Rect& position, const gfx::Rect& clip); |
147 | 157 |
148 // Notifications about focus changes, see has_webkit_focus_ below. | 158 // Notifications about focus changes, see has_webkit_focus_ below. |
149 void SetWebKitFocus(bool has_focus); | 159 void SetWebKitFocus(bool has_focus); |
150 void SetContentAreaFocus(bool has_focus); | 160 void SetContentAreaFocus(bool has_focus); |
151 | 161 |
152 // Notifications that the view has rendered the page and that it has been | 162 // Notifications that the view has rendered the page and that it has been |
153 // flushed to the screen. These messages are used to send Flush callbacks to | 163 // flushed to the screen. These messages are used to send Flush callbacks to |
154 // the plugin for DeviceContext2D. | 164 // the plugin for DeviceContext2D. |
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
351 bool always_on_top_; | 361 bool always_on_top_; |
352 | 362 |
353 // Plugin container for fullscreen mode. NULL if not in fullscreen mode. Note: | 363 // Plugin container for fullscreen mode. NULL if not in fullscreen mode. Note: |
354 // there is a transition state where fullscreen_container_ is non-NULL but | 364 // there is a transition state where fullscreen_container_ is non-NULL but |
355 // fullscreen_ is false (see above). | 365 // fullscreen_ is false (see above). |
356 FullscreenContainer* fullscreen_container_; | 366 FullscreenContainer* fullscreen_container_; |
357 | 367 |
358 // True if we are in fullscreen mode. Note: it is false during the transition. | 368 // True if we are in fullscreen mode. Note: it is false during the transition. |
359 bool fullscreen_; | 369 bool fullscreen_; |
360 | 370 |
| 371 // The MessageChannel used to implement bidirectional postMessage for the |
| 372 // instance. |
| 373 scoped_ptr<MessageChannel> message_channel_; |
| 374 |
361 typedef std::set<PluginObject*> PluginObjectSet; | 375 typedef std::set<PluginObject*> PluginObjectSet; |
362 PluginObjectSet live_plugin_objects_; | 376 PluginObjectSet live_plugin_objects_; |
363 | 377 |
364 // Tracks all live ObjectVars used by this module so we can map NPObjects to | 378 // Tracks all live ObjectVars used by this module so we can map NPObjects to |
365 // the corresponding object. These are non-owning references. | 379 // the corresponding object. These are non-owning references. |
366 typedef std::map<NPObject*, ObjectVar*> NPObjectToObjectVarMap; | 380 typedef std::map<NPObject*, ObjectVar*> NPObjectToObjectVarMap; |
367 NPObjectToObjectVarMap np_object_to_object_var_; | 381 NPObjectToObjectVarMap np_object_to_object_var_; |
368 | 382 |
| 383 // Specifies whether the PPP_Instance interface (instance_interface_) is |
| 384 // owned by the browser or the plug-in. If the browser had to create it for |
| 385 // backwards-compatibility, the browser must delete it when the instance is |
| 386 // destroyed. Under normal circumstances, the interface is owned by the |
| 387 // plugin and the browser must not delete it. |
| 388 InterfaceOwner ppp_instance_owner_; |
| 389 |
369 DISALLOW_COPY_AND_ASSIGN(PluginInstance); | 390 DISALLOW_COPY_AND_ASSIGN(PluginInstance); |
370 }; | 391 }; |
371 | 392 |
372 } // namespace ppapi | 393 } // namespace ppapi |
373 } // namespace webkit | 394 } // namespace webkit |
374 | 395 |
375 #endif // WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ | 396 #endif // WEBKIT_PLUGINS_PPAPI_PPAPI_PLUGIN_INSTANCE_H_ |
OLD | NEW |