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

Side by Side Diff: webkit/glue/plugins/pepper_plugin_instance.cc

Issue 2884016: Chrome side of Pepper v2 scrollbar widget. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 10 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) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/glue/plugins/pepper_plugin_instance.h" 5 #include "webkit/glue/plugins/pepper_plugin_instance.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/scoped_ptr.h" 8 #include "base/scoped_ptr.h"
9 #include "gfx/rect.h" 9 #include "gfx/rect.h"
10 #include "third_party/ppapi/c/pp_instance.h" 10 #include "third_party/ppapi/c/pp_instance.h"
11 #include "third_party/ppapi/c/pp_event.h" 11 #include "third_party/ppapi/c/pp_event.h"
12 #include "third_party/ppapi/c/pp_rect.h" 12 #include "third_party/ppapi/c/pp_rect.h"
13 #include "third_party/ppapi/c/pp_resource.h" 13 #include "third_party/ppapi/c/pp_resource.h"
14 #include "third_party/ppapi/c/pp_var.h" 14 #include "third_party/ppapi/c/pp_var.h"
15 #include "third_party/ppapi/c/ppb_instance.h" 15 #include "third_party/ppapi/c/ppb_instance.h"
16 #include "third_party/ppapi/c/ppp_instance.h" 16 #include "third_party/ppapi/c/ppp_instance.h"
17 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h" 17 #include "third_party/WebKit/WebKit/chromium/public/WebDocument.h"
18 #include "third_party/WebKit/WebKit/chromium/public/WebElement.h" 18 #include "third_party/WebKit/WebKit/chromium/public/WebElement.h"
19 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h" 19 #include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
20 #include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h" 20 #include "third_party/WebKit/WebKit/chromium/public/WebInputEvent.h"
21 #include "third_party/WebKit/WebKit/chromium/public/WebPluginContainer.h" 21 #include "third_party/WebKit/WebKit/chromium/public/WebPluginContainer.h"
22 #include "third_party/WebKit/WebKit/chromium/public/WebRect.h" 22 #include "third_party/WebKit/WebKit/chromium/public/WebRect.h"
23 #include "webkit/glue/plugins/pepper_device_context_2d.h" 23 #include "webkit/glue/plugins/pepper_device_context_2d.h"
24 #include "webkit/glue/plugins/pepper_event_conversion.h"
24 #include "webkit/glue/plugins/pepper_plugin_delegate.h" 25 #include "webkit/glue/plugins/pepper_plugin_delegate.h"
25 #include "webkit/glue/plugins/pepper_plugin_module.h" 26 #include "webkit/glue/plugins/pepper_plugin_module.h"
26 #include "webkit/glue/plugins/pepper_url_loader.h" 27 #include "webkit/glue/plugins/pepper_url_loader.h"
27 #include "webkit/glue/plugins/pepper_var.h" 28 #include "webkit/glue/plugins/pepper_var.h"
28 29
30 using WebKit::WebCanvas;
31 using WebKit::WebCursorInfo;
29 using WebKit::WebFrame; 32 using WebKit::WebFrame;
30 using WebKit::WebInputEvent; 33 using WebKit::WebInputEvent;
31 using WebKit::WebPluginContainer; 34 using WebKit::WebPluginContainer;
32 35
33 namespace pepper { 36 namespace pepper {
34 37
35 namespace { 38 namespace {
36 39
37 void RectToPPRect(const gfx::Rect& input, PP_Rect* output) { 40 void RectToPPRect(const gfx::Rect& input, PP_Rect* output) {
38 *output = PP_MakeRectFromXYWH(input.x(), input.y(), 41 *output = PP_MakeRectFromXYWH(input.x(), input.y(),
39 input.width(), input.height()); 42 input.width(), input.height());
40 } 43 }
41 44
42 PP_Event_Type ConvertEventTypes(WebInputEvent::Type wetype) {
43 switch (wetype) {
44 case WebInputEvent::MouseDown:
45 return PP_Event_Type_MouseDown;
46 case WebInputEvent::MouseUp:
47 return PP_Event_Type_MouseUp;
48 case WebInputEvent::MouseMove:
49 return PP_Event_Type_MouseMove;
50 case WebInputEvent::MouseEnter:
51 return PP_Event_Type_MouseEnter;
52 case WebInputEvent::MouseLeave:
53 return PP_Event_Type_MouseLeave;
54 case WebInputEvent::MouseWheel:
55 return PP_Event_Type_MouseWheel;
56 case WebInputEvent::RawKeyDown:
57 return PP_Event_Type_RawKeyDown;
58 case WebInputEvent::KeyDown:
59 return PP_Event_Type_KeyDown;
60 case WebInputEvent::KeyUp:
61 return PP_Event_Type_KeyUp;
62 case WebInputEvent::Char:
63 return PP_Event_Type_Char;
64 case WebInputEvent::Undefined:
65 default:
66 return PP_Event_Type_Undefined;
67 }
68 }
69
70 void BuildKeyEvent(const WebInputEvent* event, PP_Event* pp_event) {
71 const WebKit::WebKeyboardEvent* key_event =
72 reinterpret_cast<const WebKit::WebKeyboardEvent*>(event);
73 pp_event->u.key.modifier = key_event->modifiers;
74 pp_event->u.key.normalizedKeyCode = key_event->windowsKeyCode;
75 }
76
77 void BuildCharEvent(const WebInputEvent* event, PP_Event* pp_event) {
78 const WebKit::WebKeyboardEvent* key_event =
79 reinterpret_cast<const WebKit::WebKeyboardEvent*>(event);
80 pp_event->u.character.modifier = key_event->modifiers;
81 // For consistency, check that the sizes of the texts agree.
82 DCHECK(sizeof(pp_event->u.character.text) == sizeof(key_event->text));
83 DCHECK(sizeof(pp_event->u.character.unmodifiedText) ==
84 sizeof(key_event->unmodifiedText));
85 for (size_t i = 0; i < WebKit::WebKeyboardEvent::textLengthCap; ++i) {
86 pp_event->u.character.text[i] = key_event->text[i];
87 pp_event->u.character.unmodifiedText[i] = key_event->unmodifiedText[i];
88 }
89 }
90
91 void BuildMouseEvent(const WebInputEvent* event, PP_Event* pp_event) {
92 const WebKit::WebMouseEvent* mouse_event =
93 reinterpret_cast<const WebKit::WebMouseEvent*>(event);
94 pp_event->u.mouse.modifier = mouse_event->modifiers;
95 pp_event->u.mouse.button = mouse_event->button;
96 pp_event->u.mouse.x = mouse_event->x;
97 pp_event->u.mouse.y = mouse_event->y;
98 pp_event->u.mouse.clickCount = mouse_event->clickCount;
99 }
100
101 void BuildMouseWheelEvent(const WebInputEvent* event, PP_Event* pp_event) {
102 const WebKit::WebMouseWheelEvent* mouse_wheel_event =
103 reinterpret_cast<const WebKit::WebMouseWheelEvent*>(event);
104 pp_event->u.wheel.modifier = mouse_wheel_event->modifiers;
105 pp_event->u.wheel.deltaX = mouse_wheel_event->deltaX;
106 pp_event->u.wheel.deltaY = mouse_wheel_event->deltaY;
107 pp_event->u.wheel.wheelTicksX = mouse_wheel_event->wheelTicksX;
108 pp_event->u.wheel.wheelTicksY = mouse_wheel_event->wheelTicksY;
109 pp_event->u.wheel.scrollByPage = mouse_wheel_event->scrollByPage;
110 }
111
112 PP_Var GetWindowObject(PP_Instance instance_id) { 45 PP_Var GetWindowObject(PP_Instance instance_id) {
113 PluginInstance* instance = PluginInstance::FromPPInstance(instance_id); 46 PluginInstance* instance = PluginInstance::FromPPInstance(instance_id);
114 if (!instance) 47 if (!instance)
115 return PP_MakeVoid(); 48 return PP_MakeVoid();
116 return instance->GetWindowObject(); 49 return instance->GetWindowObject();
117 } 50 }
118 51
119 PP_Var GetOwnerElementObject(PP_Instance instance_id) { 52 PP_Var GetOwnerElementObject(PP_Instance instance_id) {
120 PluginInstance* instance = PluginInstance::FromPPInstance(instance_id); 53 PluginInstance* instance = PluginInstance::FromPPInstance(instance_id);
121 if (!instance) 54 if (!instance)
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
171 104
172 // static 105 // static
173 PluginInstance* PluginInstance::FromPPInstance(PP_Instance instance) { 106 PluginInstance* PluginInstance::FromPPInstance(PP_Instance instance) {
174 return reinterpret_cast<PluginInstance*>(instance); 107 return reinterpret_cast<PluginInstance*>(instance);
175 } 108 }
176 109
177 PP_Instance PluginInstance::GetPPInstance() { 110 PP_Instance PluginInstance::GetPPInstance() {
178 return reinterpret_cast<intptr_t>(this); 111 return reinterpret_cast<intptr_t>(this);
179 } 112 }
180 113
181 void PluginInstance::Paint(WebKit::WebCanvas* canvas, 114 void PluginInstance::Paint(WebCanvas* canvas,
182 const gfx::Rect& plugin_rect, 115 const gfx::Rect& plugin_rect,
183 const gfx::Rect& paint_rect) { 116 const gfx::Rect& paint_rect) {
184 if (device_context_2d_) 117 if (device_context_2d_)
185 device_context_2d_->Paint(canvas, plugin_rect, paint_rect); 118 device_context_2d_->Paint(canvas, plugin_rect, paint_rect);
186 } 119 }
187 120
188 void PluginInstance::InvalidateRect(const gfx::Rect& rect) { 121 void PluginInstance::InvalidateRect(const gfx::Rect& rect) {
189 if (!container_ || position_.IsEmpty()) 122 if (!container_ || position_.IsEmpty())
190 return; // Nothing to do. 123 return; // Nothing to do.
191 if (rect.IsEmpty()) 124 if (rect.IsEmpty())
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
264 return instance_interface_->Initialize(GetPPInstance(), 197 return instance_interface_->Initialize(GetPPInstance(),
265 argc, argn.get(), argv.get()); 198 argc, argn.get(), argv.get());
266 } 199 }
267 200
268 bool PluginInstance::HandleDocumentLoad(URLLoader* loader) { 201 bool PluginInstance::HandleDocumentLoad(URLLoader* loader) {
269 return instance_interface_->HandleDocumentLoad(GetPPInstance(), 202 return instance_interface_->HandleDocumentLoad(GetPPInstance(),
270 loader->GetResource()); 203 loader->GetResource());
271 } 204 }
272 205
273 bool PluginInstance::HandleInputEvent(const WebKit::WebInputEvent& event, 206 bool PluginInstance::HandleInputEvent(const WebKit::WebInputEvent& event,
274 WebKit::WebCursorInfo* cursor_info) { 207 WebCursorInfo* cursor_info) {
275 PP_Event pp_event; 208 scoped_ptr<PP_Event> pp_event(CreatePP_Event(event));
209 if (!pp_event.get())
210 return false;
276 211
277 pp_event.type = ConvertEventTypes(event.type); 212 return instance_interface_->HandleEvent(GetPPInstance(), pp_event.get());
278 pp_event.size = sizeof(pp_event);
279 pp_event.time_stamp_seconds = event.timeStampSeconds;
280 switch (pp_event.type) {
281 case PP_Event_Type_Undefined:
282 return false;
283 case PP_Event_Type_MouseDown:
284 case PP_Event_Type_MouseUp:
285 case PP_Event_Type_MouseMove:
286 case PP_Event_Type_MouseEnter:
287 case PP_Event_Type_MouseLeave:
288 BuildMouseEvent(&event, &pp_event);
289 break;
290 case PP_Event_Type_MouseWheel:
291 BuildMouseWheelEvent(&event, &pp_event);
292 break;
293 case PP_Event_Type_RawKeyDown:
294 case PP_Event_Type_KeyDown:
295 case PP_Event_Type_KeyUp:
296 BuildKeyEvent(&event, &pp_event);
297 break;
298 case PP_Event_Type_Char:
299 BuildCharEvent(&event, &pp_event);
300 break;
301 }
302 return instance_interface_->HandleEvent(GetPPInstance(), &pp_event);
303 } 213 }
304 214
305 PP_Var PluginInstance::GetInstanceObject() { 215 PP_Var PluginInstance::GetInstanceObject() {
306 return instance_interface_->GetInstanceObject(GetPPInstance()); 216 return instance_interface_->GetInstanceObject(GetPPInstance());
307 } 217 }
308 218
309 void PluginInstance::ViewChanged(const gfx::Rect& position, 219 void PluginInstance::ViewChanged(const gfx::Rect& position,
310 const gfx::Rect& clip) { 220 const gfx::Rect& clip) {
311 position_ = position; 221 position_ = position;
312 if (clip.IsEmpty()) { 222 if (clip.IsEmpty()) {
(...skipping 16 matching lines...) Expand all
329 if (device_context_2d_) 239 if (device_context_2d_)
330 device_context_2d_->ViewInitiatedPaint(); 240 device_context_2d_->ViewInitiatedPaint();
331 } 241 }
332 242
333 void PluginInstance::ViewFlushedPaint() { 243 void PluginInstance::ViewFlushedPaint() {
334 if (device_context_2d_) 244 if (device_context_2d_)
335 device_context_2d_->ViewFlushedPaint(); 245 device_context_2d_->ViewFlushedPaint();
336 } 246 }
337 247
338 } // namespace pepper 248 } // namespace pepper
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698