OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 // Defines messages between the browser and plugin process, as well as between | 5 // Defines messages between the browser and plugin process, as well as between |
6 // the renderer and plugin process. | 6 // the renderer and plugin process. |
7 // | 7 // |
8 // See render_message* for information about the multi-pass include of headers. | 8 // See render_message* for information about the multi-pass include of headers. |
9 | 9 |
10 #ifndef CHROME_COMMON_PLUGIN_MESSAGES_H__ | 10 #ifndef CHROME_COMMON_PLUGIN_MESSAGES_H__ |
11 #define CHROME_COMMON_PLUGIN_MESSAGES_H__ | 11 #define CHROME_COMMON_PLUGIN_MESSAGES_H__ |
12 | 12 |
13 #include <string> | 13 #include <string> |
14 #include <vector> | 14 #include <vector> |
15 | 15 |
16 #include "base/gfx/native_widget_types.h" | 16 #include "base/gfx/native_widget_types.h" |
17 #include "base/gfx/rect.h" | 17 #include "base/gfx/rect.h" |
18 #include "base/basictypes.h" | 18 #include "base/basictypes.h" |
19 #include "chrome/common/ipc_message_utils.h" | 19 #include "chrome/common/ipc_message_utils.h" |
| 20 #include "chrome/common/webkit_param_traits.h" |
20 #include "googleurl/src/gurl.h" | 21 #include "googleurl/src/gurl.h" |
21 #include "third_party/npapi/bindings/npapi.h" | 22 #include "third_party/npapi/bindings/npapi.h" |
| 23 #include "webkit/api/public/WebInputEvent.h" |
22 #include "webkit/glue/npruntime_util.h" | 24 #include "webkit/glue/npruntime_util.h" |
23 | 25 |
24 // Name prefix of the event handle when a message box is displayed. | 26 // Name prefix of the event handle when a message box is displayed. |
25 #define kMessageBoxEventPrefix L"message_box_active" | 27 #define kMessageBoxEventPrefix L"message_box_active" |
26 | 28 |
27 // Structures for messages that have too many parameters to be put in a | 29 // Structures for messages that have too many parameters to be put in a |
28 // predefined IPC message. | 30 // predefined IPC message. |
29 | 31 |
30 struct PluginMsg_Init_Params { | 32 struct PluginMsg_Init_Params { |
31 gfx::NativeViewId containing_window; | 33 gfx::NativeViewId containing_window; |
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
256 l->append(L", "); | 258 l->append(L", "); |
257 LogParam(p.expected_length, l); | 259 LogParam(p.expected_length, l); |
258 l->append(L", "); | 260 l->append(L", "); |
259 LogParam(p.last_modified, l); | 261 LogParam(p.last_modified, l); |
260 l->append(L", "); | 262 l->append(L", "); |
261 LogParam(p.request_is_seekable, l); | 263 LogParam(p.request_is_seekable, l); |
262 l->append(L")"); | 264 l->append(L")"); |
263 } | 265 } |
264 }; | 266 }; |
265 | 267 |
| 268 typedef const WebKit::WebInputEvent* WebInputEventPointer; |
266 template <> | 269 template <> |
267 struct ParamTraits<NPEvent> { | 270 struct ParamTraits<WebInputEventPointer> { |
268 typedef NPEvent param_type; | 271 typedef WebInputEventPointer param_type; |
269 static void Write(Message* m, const param_type& p) { | 272 static void Write(Message* m, const param_type& p) { |
270 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(NPEvent)); | 273 m->WriteData(reinterpret_cast<const char*>(p), p->size); |
271 } | 274 } |
| 275 // Note: upon read, the event has the lifetime of the message. |
272 static bool Read(const Message* m, void** iter, param_type* r) { | 276 static bool Read(const Message* m, void** iter, param_type* r) { |
273 const char *data; | 277 const char* data; |
274 int data_size = 0; | 278 int data_length; |
275 bool result = m->ReadData(iter, &data, &data_size); | 279 if (!m->ReadData(iter, &data, &data_length)) { |
276 if (!result || data_size != sizeof(NPEvent)) { | |
277 NOTREACHED(); | 280 NOTREACHED(); |
278 return false; | 281 return false; |
279 } | 282 } |
280 | 283 if (data_length < static_cast<int>(sizeof(WebKit::WebInputEvent))) { |
281 memcpy(r, data, sizeof(NPEvent)); | 284 NOTREACHED(); |
| 285 return false; |
| 286 } |
| 287 param_type event = reinterpret_cast<param_type>(data); |
| 288 // Check that the data size matches that of the event (we check the latter |
| 289 // in the delegate). |
| 290 if (data_length != static_cast<int>(event->size)) { |
| 291 NOTREACHED(); |
| 292 return false; |
| 293 } |
| 294 *r = event; |
282 return true; | 295 return true; |
283 } | 296 } |
284 static void Log(const param_type& p, std::wstring* l) { | 297 static void Log(const param_type& p, std::wstring* l) { |
285 #if defined(OS_WIN) | |
286 std::wstring event, wparam, lparam; | |
287 lparam = StringPrintf(L"(%d, %d)", LOWORD(p.lParam), HIWORD(p.lParam)); | |
288 switch(p.event) { | |
289 case WM_KEYDOWN: | |
290 event = L"WM_KEYDOWN"; | |
291 wparam = StringPrintf(L"%d", p.wParam); | |
292 lparam = StringPrintf(L"%d", p.lParam); | |
293 break; | |
294 case WM_KEYUP: | |
295 event = L"WM_KEYDOWN"; | |
296 wparam = StringPrintf(L"%d", p.wParam); | |
297 lparam = StringPrintf(L"%x", p.lParam); | |
298 break; | |
299 case WM_MOUSEMOVE: | |
300 event = L"WM_MOUSEMOVE"; | |
301 if (p.wParam & MK_LBUTTON) { | |
302 wparam = L"MK_LBUTTON"; | |
303 } else if (p.wParam & MK_MBUTTON) { | |
304 wparam = L"MK_MBUTTON"; | |
305 } else if (p.wParam & MK_RBUTTON) { | |
306 wparam = L"MK_RBUTTON"; | |
307 } | |
308 break; | |
309 case WM_LBUTTONDOWN: | |
310 event = L"WM_LBUTTONDOWN"; | |
311 break; | |
312 case WM_MBUTTONDOWN: | |
313 event = L"WM_MBUTTONDOWN"; | |
314 break; | |
315 case WM_RBUTTONDOWN: | |
316 event = L"WM_RBUTTONDOWN"; | |
317 break; | |
318 case WM_LBUTTONUP: | |
319 event = L"WM_LBUTTONUP"; | |
320 break; | |
321 case WM_MBUTTONUP: | |
322 event = L"WM_MBUTTONUP"; | |
323 break; | |
324 case WM_RBUTTONUP: | |
325 event = L"WM_RBUTTONUP"; | |
326 break; | |
327 } | |
328 | |
329 if (p.wParam & MK_CONTROL) { | |
330 if (!wparam.empty()) | |
331 wparam += L" "; | |
332 wparam += L"MK_CONTROL"; | |
333 } | |
334 | |
335 if (p.wParam & MK_SHIFT) { | |
336 if (!wparam.empty()) | |
337 wparam += L" "; | |
338 wparam += L"MK_SHIFT"; | |
339 } | |
340 | |
341 l->append(L"("); | 298 l->append(L"("); |
342 LogParam(event, l); | 299 LogParam(p->size, l); |
343 l->append(L", "); | 300 l->append(L", "); |
344 LogParam(wparam, l); | 301 LogParam(p->type, l); |
345 l->append(L", "); | 302 l->append(L", "); |
346 LogParam(lparam, l); | 303 LogParam(p->timeStampSeconds, l); |
347 l->append(L")"); | 304 l->append(L")"); |
348 #else | |
349 l->append(L"<NPEvent>"); | |
350 #endif | |
351 } | 305 } |
352 }; | 306 }; |
353 | 307 |
354 template <> | 308 template <> |
355 struct ParamTraits<NPIdentifier_Param> { | 309 struct ParamTraits<NPIdentifier_Param> { |
356 typedef NPIdentifier_Param param_type; | 310 typedef NPIdentifier_Param param_type; |
357 static void Write(Message* m, const param_type& p) { | 311 static void Write(Message* m, const param_type& p) { |
358 webkit_glue::SerializeNPIdentifier(p.identifier, m); | 312 webkit_glue::SerializeNPIdentifier(p.identifier, m); |
359 } | 313 } |
360 static bool Read(const Message* m, void** iter, param_type* r) { | 314 static bool Read(const Message* m, void** iter, param_type* r) { |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
445 } | 399 } |
446 }; | 400 }; |
447 | 401 |
448 } // namespace IPC | 402 } // namespace IPC |
449 | 403 |
450 | 404 |
451 #define MESSAGES_INTERNAL_FILE "chrome/common/plugin_messages_internal.h" | 405 #define MESSAGES_INTERNAL_FILE "chrome/common/plugin_messages_internal.h" |
452 #include "chrome/common/ipc_message_macros.h" | 406 #include "chrome/common/ipc_message_macros.h" |
453 | 407 |
454 #endif // CHROME_COMMON_PLUGIN_MESSAGES_H__ | 408 #endif // CHROME_COMMON_PLUGIN_MESSAGES_H__ |
OLD | NEW |