Index: chrome/common/plugin_messages.h |
=================================================================== |
--- chrome/common/plugin_messages.h (revision 16673) |
+++ chrome/common/plugin_messages.h (working copy) |
@@ -17,8 +17,10 @@ |
#include "base/gfx/rect.h" |
#include "base/basictypes.h" |
#include "chrome/common/ipc_message_utils.h" |
+#include "chrome/common/webkit_param_traits.h" |
#include "googleurl/src/gurl.h" |
#include "third_party/npapi/bindings/npapi.h" |
+#include "webkit/api/public/WebInputEvent.h" |
#include "webkit/glue/npruntime_util.h" |
// Name prefix of the event handle when a message box is displayed. |
@@ -263,91 +265,43 @@ |
} |
}; |
+typedef const WebKit::WebInputEvent* WebInputEventPointer; |
template <> |
-struct ParamTraits<NPEvent> { |
- typedef NPEvent param_type; |
+struct ParamTraits<WebInputEventPointer> { |
+ typedef WebInputEventPointer param_type; |
static void Write(Message* m, const param_type& p) { |
- m->WriteData(reinterpret_cast<const char*>(&p), sizeof(NPEvent)); |
+ m->WriteData(reinterpret_cast<const char*>(p), p->size); |
} |
+ // Note: upon read, the event has the lifetime of the message. |
static bool Read(const Message* m, void** iter, param_type* r) { |
- const char *data; |
- int data_size = 0; |
- bool result = m->ReadData(iter, &data, &data_size); |
- if (!result || data_size != sizeof(NPEvent)) { |
+ const char* data; |
+ int data_length; |
+ if (!m->ReadData(iter, &data, &data_length)) { |
NOTREACHED(); |
return false; |
} |
- |
- memcpy(r, data, sizeof(NPEvent)); |
+ if (data_length < static_cast<int>(sizeof(WebKit::WebInputEvent))) { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ param_type event = reinterpret_cast<param_type>(data); |
+ // Check that the data size matches that of the event (we check the latter |
+ // in the delegate). |
+ if (data_length != static_cast<int>(event->size)) { |
+ NOTREACHED(); |
+ return false; |
+ } |
+ *r = event; |
return true; |
} |
static void Log(const param_type& p, std::wstring* l) { |
-#if defined(OS_WIN) |
- std::wstring event, wparam, lparam; |
- lparam = StringPrintf(L"(%d, %d)", LOWORD(p.lParam), HIWORD(p.lParam)); |
- switch(p.event) { |
- case WM_KEYDOWN: |
- event = L"WM_KEYDOWN"; |
- wparam = StringPrintf(L"%d", p.wParam); |
- lparam = StringPrintf(L"%d", p.lParam); |
- break; |
- case WM_KEYUP: |
- event = L"WM_KEYDOWN"; |
- wparam = StringPrintf(L"%d", p.wParam); |
- lparam = StringPrintf(L"%x", p.lParam); |
- break; |
- case WM_MOUSEMOVE: |
- event = L"WM_MOUSEMOVE"; |
- if (p.wParam & MK_LBUTTON) { |
- wparam = L"MK_LBUTTON"; |
- } else if (p.wParam & MK_MBUTTON) { |
- wparam = L"MK_MBUTTON"; |
- } else if (p.wParam & MK_RBUTTON) { |
- wparam = L"MK_RBUTTON"; |
- } |
- break; |
- case WM_LBUTTONDOWN: |
- event = L"WM_LBUTTONDOWN"; |
- break; |
- case WM_MBUTTONDOWN: |
- event = L"WM_MBUTTONDOWN"; |
- break; |
- case WM_RBUTTONDOWN: |
- event = L"WM_RBUTTONDOWN"; |
- break; |
- case WM_LBUTTONUP: |
- event = L"WM_LBUTTONUP"; |
- break; |
- case WM_MBUTTONUP: |
- event = L"WM_MBUTTONUP"; |
- break; |
- case WM_RBUTTONUP: |
- event = L"WM_RBUTTONUP"; |
- break; |
- } |
- |
- if (p.wParam & MK_CONTROL) { |
- if (!wparam.empty()) |
- wparam += L" "; |
- wparam += L"MK_CONTROL"; |
- } |
- |
- if (p.wParam & MK_SHIFT) { |
- if (!wparam.empty()) |
- wparam += L" "; |
- wparam += L"MK_SHIFT"; |
- } |
- |
l->append(L"("); |
- LogParam(event, l); |
+ LogParam(p->size, l); |
l->append(L", "); |
- LogParam(wparam, l); |
+ LogParam(p->type, l); |
l->append(L", "); |
- LogParam(lparam, l); |
+ LogParam(p->timeStampSeconds, l); |
l->append(L")"); |
-#else |
- l->append(L"<NPEvent>"); |
-#endif |
} |
}; |