| 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/rect.h" | 16 #include "base/gfx/rect.h" |
| 17 #include "base/basictypes.h" | 17 #include "base/basictypes.h" |
| 18 #include "chrome/common/ipc_message.h" |
| 18 #include "chrome/common/ipc_message_utils.h" | 19 #include "chrome/common/ipc_message_utils.h" |
| 19 #include "googleurl/src/gurl.h" | 20 #include "googleurl/src/gurl.h" |
| 20 #include "third_party/npapi/bindings/npapi.h" | 21 #include "third_party/npapi/bindings/npapi.h" |
| 21 #include "webkit/glue/npruntime_util.h" | 22 #include "webkit/glue/npruntime_util.h" |
| 22 | 23 |
| 24 void PluginMessagesInit(); |
| 25 |
| 23 // 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. |
| 24 #define kMessageBoxEventPrefix L"message_box_active" | 27 #define kMessageBoxEventPrefix L"message_box_active" |
| 25 | 28 |
| 26 // 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 |
| 27 // predefined IPC message. | 30 // predefined IPC message. |
| 28 | 31 |
| 29 struct PluginMsg_Init_Params { | 32 struct PluginMsg_Init_Params { |
| 30 HWND containing_window; | 33 HWND containing_window; |
| 31 GURL url; | 34 GURL url; |
| 32 std::vector<std::string> arg_names; | 35 std::vector<std::string> arg_names; |
| 33 std::vector<std::string> arg_values; | 36 std::vector<std::string> arg_values; |
| 34 bool load_manually; | 37 bool load_manually; |
| 35 HANDLE modal_dialog_event; | 38 HANDLE modal_dialog_event; |
| 36 }; | 39 }; |
| 37 | 40 |
| 41 struct PluginHostMsg_URLRequest_Params { |
| 42 std::string method; |
| 43 bool is_javascript_url; |
| 44 std::string target; |
| 45 std::vector<char> buffer; |
| 46 bool is_file_data; |
| 47 bool notify; |
| 48 std::string url; |
| 49 HANDLE notify_data; |
| 50 bool popups_allowed; |
| 51 }; |
| 52 |
| 53 struct PluginMsg_URLRequestReply_Params { |
| 54 int resource_id; |
| 55 std::string url; |
| 56 bool notify_needed; |
| 57 HANDLE notify_data; |
| 58 HANDLE stream; |
| 59 }; |
| 60 |
| 61 struct PluginMsg_PrintResponse_Params { |
| 62 HANDLE shared_memory; |
| 63 size_t size; |
| 64 }; |
| 65 |
| 66 struct PluginMsg_DidReceiveResponseParams { |
| 67 int id; |
| 68 std::string mime_type; |
| 69 std::string headers; |
| 70 uint32 expected_length; |
| 71 uint32 last_modified; |
| 72 bool request_is_seekable; |
| 73 }; |
| 74 |
| 75 struct NPIdentifier_Param { |
| 76 NPIdentifier identifier; |
| 77 }; |
| 78 |
| 79 enum NPVariant_ParamEnum { |
| 80 NPVARIANT_PARAM_VOID, |
| 81 NPVARIANT_PARAM_NULL, |
| 82 NPVARIANT_PARAM_BOOL, |
| 83 NPVARIANT_PARAM_INT, |
| 84 NPVARIANT_PARAM_DOUBLE, |
| 85 NPVARIANT_PARAM_STRING, |
| 86 // Used when when the NPObject is running in the caller's process, so we |
| 87 // create an NPObjectProxy in the other process. |
| 88 NPVARIANT_PARAM_OBJECT_ROUTING_ID, |
| 89 // Used when the NPObject we're sending is running in the callee's process |
| 90 // (i.e. we have an NPObjectProxy for it). In that case we want the callee |
| 91 // to just use the raw pointer. |
| 92 NPVARIANT_PARAM_OBJECT_POINTER, |
| 93 }; |
| 94 |
| 95 struct NPVariant_Param { |
| 96 NPVariant_ParamEnum type; |
| 97 bool bool_value; |
| 98 int int_value; |
| 99 double double_value; |
| 100 std::string string_value; |
| 101 int npobject_routing_id; |
| 102 void* npobject_pointer; |
| 103 }; |
| 104 |
| 105 |
| 106 #define IPC_MESSAGE_MACROS_ENUMS |
| 107 #include "chrome/common/plugin_messages_internal.h" |
| 108 |
| 109 #ifdef IPC_MESSAGE_MACROS_LOG_ENABLED |
| 110 # undef IPC_MESSAGE_MACROS_LOG |
| 111 # define IPC_MESSAGE_MACROS_CLASSES |
| 112 |
| 113 # include "chrome/common/plugin_messages_internal.h" |
| 114 # define IPC_MESSAGE_MACROS_LOG |
| 115 # undef IPC_MESSAGE_MACROS_CLASSES |
| 116 |
| 117 # include "chrome/common/plugin_messages_internal.h" |
| 118 #else |
| 119 # define IPC_MESSAGE_MACROS_CLASSES |
| 120 # include "chrome/common/plugin_messages_internal.h" |
| 121 #endif |
| 122 |
| 123 namespace IPC { |
| 124 |
| 38 // Traits for PluginMsg_Init_Params structure to pack/unpack. | 125 // Traits for PluginMsg_Init_Params structure to pack/unpack. |
| 39 template <> | 126 template <> |
| 40 struct ParamTraits<PluginMsg_Init_Params> { | 127 struct ParamTraits<PluginMsg_Init_Params> { |
| 41 typedef PluginMsg_Init_Params param_type; | 128 typedef PluginMsg_Init_Params param_type; |
| 42 static void Write(IPC::Message* m, const param_type& p) { | 129 static void Write(Message* m, const param_type& p) { |
| 43 WriteParam(m, p.containing_window); | 130 WriteParam(m, p.containing_window); |
| 44 WriteParam(m, p.url); | 131 WriteParam(m, p.url); |
| 45 DCHECK(p.arg_names.size() == p.arg_values.size()); | 132 DCHECK(p.arg_names.size() == p.arg_values.size()); |
| 46 WriteParam(m, p.arg_names); | 133 WriteParam(m, p.arg_names); |
| 47 WriteParam(m, p.arg_values); | 134 WriteParam(m, p.arg_values); |
| 48 WriteParam(m, p.load_manually); | 135 WriteParam(m, p.load_manually); |
| 49 WriteParam(m, p.modal_dialog_event); | 136 WriteParam(m, p.modal_dialog_event); |
| 50 } | 137 } |
| 51 static bool Read(const IPC::Message* m, void** iter, param_type* p) { | 138 static bool Read(const Message* m, void** iter, param_type* p) { |
| 52 return ReadParam(m, iter, &p->containing_window) && | 139 return ReadParam(m, iter, &p->containing_window) && |
| 53 ReadParam(m, iter, &p->url) && | 140 ReadParam(m, iter, &p->url) && |
| 54 ReadParam(m, iter, &p->arg_names) && | 141 ReadParam(m, iter, &p->arg_names) && |
| 55 ReadParam(m, iter, &p->arg_values) && | 142 ReadParam(m, iter, &p->arg_values) && |
| 56 ReadParam(m, iter, &p->load_manually) && | 143 ReadParam(m, iter, &p->load_manually) && |
| 57 ReadParam(m, iter, &p->modal_dialog_event); | 144 ReadParam(m, iter, &p->modal_dialog_event); |
| 58 } | 145 } |
| 59 static void Log(const param_type& p, std::wstring* l) { | 146 static void Log(const param_type& p, std::wstring* l) { |
| 60 l->append(L"("); | 147 l->append(L"("); |
| 61 LogParam(p.containing_window, l); | 148 LogParam(p.containing_window, l); |
| 62 l->append(L", "); | 149 l->append(L", "); |
| 63 LogParam(p.url, l); | 150 LogParam(p.url, l); |
| 64 l->append(L", "); | 151 l->append(L", "); |
| 65 LogParam(p.arg_names, l); | 152 LogParam(p.arg_names, l); |
| 66 l->append(L", "); | 153 l->append(L", "); |
| 67 LogParam(p.arg_values, l); | 154 LogParam(p.arg_values, l); |
| 68 l->append(L", "); | 155 l->append(L", "); |
| 69 LogParam(p.load_manually, l); | 156 LogParam(p.load_manually, l); |
| 70 l->append(L", "); | 157 l->append(L", "); |
| 71 LogParam(p.modal_dialog_event, l); | 158 LogParam(p.modal_dialog_event, l); |
| 72 l->append(L")"); | 159 l->append(L")"); |
| 73 } | 160 } |
| 74 }; | 161 }; |
| 75 | 162 |
| 76 | |
| 77 struct PluginHostMsg_URLRequest_Params { | |
| 78 std::string method; | |
| 79 bool is_javascript_url; | |
| 80 std::string target; | |
| 81 std::vector<char> buffer; | |
| 82 bool is_file_data; | |
| 83 bool notify; | |
| 84 std::string url; | |
| 85 HANDLE notify_data; | |
| 86 bool popups_allowed; | |
| 87 }; | |
| 88 | |
| 89 template <> | 163 template <> |
| 90 struct ParamTraits<PluginHostMsg_URLRequest_Params> { | 164 struct ParamTraits<PluginHostMsg_URLRequest_Params> { |
| 91 typedef PluginHostMsg_URLRequest_Params param_type; | 165 typedef PluginHostMsg_URLRequest_Params param_type; |
| 92 static void Write(IPC::Message* m, const param_type& p) { | 166 static void Write(Message* m, const param_type& p) { |
| 93 WriteParam(m, p.method); | 167 WriteParam(m, p.method); |
| 94 WriteParam(m, p.is_javascript_url); | 168 WriteParam(m, p.is_javascript_url); |
| 95 WriteParam(m, p.target); | 169 WriteParam(m, p.target); |
| 96 WriteParam(m, p.buffer); | 170 WriteParam(m, p.buffer); |
| 97 WriteParam(m, p.is_file_data); | 171 WriteParam(m, p.is_file_data); |
| 98 WriteParam(m, p.notify); | 172 WriteParam(m, p.notify); |
| 99 WriteParam(m, p.url); | 173 WriteParam(m, p.url); |
| 100 WriteParam(m, p.notify_data); | 174 WriteParam(m, p.notify_data); |
| 101 WriteParam(m, p.popups_allowed); | 175 WriteParam(m, p.popups_allowed); |
| 102 } | 176 } |
| 103 static bool Read(const IPC::Message* m, void** iter, param_type* p) { | 177 static bool Read(const Message* m, void** iter, param_type* p) { |
| 104 return | 178 return |
| 105 ReadParam(m, iter, &p->method) && | 179 ReadParam(m, iter, &p->method) && |
| 106 ReadParam(m, iter, &p->is_javascript_url) && | 180 ReadParam(m, iter, &p->is_javascript_url) && |
| 107 ReadParam(m, iter, &p->target) && | 181 ReadParam(m, iter, &p->target) && |
| 108 ReadParam(m, iter, &p->buffer) && | 182 ReadParam(m, iter, &p->buffer) && |
| 109 ReadParam(m, iter, &p->is_file_data) && | 183 ReadParam(m, iter, &p->is_file_data) && |
| 110 ReadParam(m, iter, &p->notify) && | 184 ReadParam(m, iter, &p->notify) && |
| 111 ReadParam(m, iter, &p->url) && | 185 ReadParam(m, iter, &p->url) && |
| 112 ReadParam(m, iter, &p->notify_data) && | 186 ReadParam(m, iter, &p->notify_data) && |
| 113 ReadParam(m, iter, &p->popups_allowed); | 187 ReadParam(m, iter, &p->popups_allowed); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 128 l->append(L", "); | 202 l->append(L", "); |
| 129 LogParam(p.url, l); | 203 LogParam(p.url, l); |
| 130 l->append(L", "); | 204 l->append(L", "); |
| 131 LogParam(p.notify_data, l); | 205 LogParam(p.notify_data, l); |
| 132 l->append(L", "); | 206 l->append(L", "); |
| 133 LogParam(p.popups_allowed, l); | 207 LogParam(p.popups_allowed, l); |
| 134 l->append(L")"); | 208 l->append(L")"); |
| 135 } | 209 } |
| 136 }; | 210 }; |
| 137 | 211 |
| 138 | |
| 139 struct PluginMsg_URLRequestReply_Params { | |
| 140 int resource_id; | |
| 141 std::string url; | |
| 142 bool notify_needed; | |
| 143 HANDLE notify_data; | |
| 144 HANDLE stream; | |
| 145 }; | |
| 146 | |
| 147 template <> | 212 template <> |
| 148 struct ParamTraits<PluginMsg_URLRequestReply_Params> { | 213 struct ParamTraits<PluginMsg_URLRequestReply_Params> { |
| 149 typedef PluginMsg_URLRequestReply_Params param_type; | 214 typedef PluginMsg_URLRequestReply_Params param_type; |
| 150 static void Write(IPC::Message* m, const param_type& p) { | 215 static void Write(Message* m, const param_type& p) { |
| 151 WriteParam(m, p.resource_id); | 216 WriteParam(m, p.resource_id); |
| 152 WriteParam(m, p.url); | 217 WriteParam(m, p.url); |
| 153 WriteParam(m, p.notify_needed); | 218 WriteParam(m, p.notify_needed); |
| 154 WriteParam(m, p.notify_data); | 219 WriteParam(m, p.notify_data); |
| 155 WriteParam(m, p.stream); | 220 WriteParam(m, p.stream); |
| 156 } | 221 } |
| 157 static bool Read(const IPC::Message* m, void** iter, param_type* p) { | 222 static bool Read(const Message* m, void** iter, param_type* p) { |
| 158 return | 223 return |
| 159 ReadParam(m, iter, &p->resource_id) && | 224 ReadParam(m, iter, &p->resource_id) && |
| 160 ReadParam(m, iter, &p->url) && | 225 ReadParam(m, iter, &p->url) && |
| 161 ReadParam(m, iter, &p->notify_needed) && | 226 ReadParam(m, iter, &p->notify_needed) && |
| 162 ReadParam(m, iter, &p->notify_data) && | 227 ReadParam(m, iter, &p->notify_data) && |
| 163 ReadParam(m, iter, &p->stream); | 228 ReadParam(m, iter, &p->stream); |
| 164 } | 229 } |
| 165 static void Log(const param_type& p, std::wstring* l) { | 230 static void Log(const param_type& p, std::wstring* l) { |
| 166 l->append(L"("); | 231 l->append(L"("); |
| 167 LogParam(p.resource_id, l); | 232 LogParam(p.resource_id, l); |
| 168 l->append(L", "); | 233 l->append(L", "); |
| 169 LogParam(p.url, l); | 234 LogParam(p.url, l); |
| 170 l->append(L", "); | 235 l->append(L", "); |
| 171 LogParam(p.notify_needed, l); | 236 LogParam(p.notify_needed, l); |
| 172 l->append(L", "); | 237 l->append(L", "); |
| 173 LogParam(p.notify_data, l); | 238 LogParam(p.notify_data, l); |
| 174 l->append(L", "); | 239 l->append(L", "); |
| 175 LogParam(p.stream, l); | 240 LogParam(p.stream, l); |
| 176 l->append(L")"); | 241 l->append(L")"); |
| 177 } | 242 } |
| 178 }; | 243 }; |
| 179 | 244 |
| 180 | |
| 181 struct PluginMsg_PrintResponse_Params { | |
| 182 HANDLE shared_memory; | |
| 183 size_t size; | |
| 184 }; | |
| 185 | |
| 186 template <> | 245 template <> |
| 187 struct ParamTraits<PluginMsg_PrintResponse_Params> { | 246 struct ParamTraits<PluginMsg_PrintResponse_Params> { |
| 188 typedef PluginMsg_PrintResponse_Params param_type; | 247 typedef PluginMsg_PrintResponse_Params param_type; |
| 189 static void Write(IPC::Message* m, const param_type& p) { | 248 static void Write(Message* m, const param_type& p) { |
| 190 WriteParam(m, p.shared_memory); | 249 WriteParam(m, p.shared_memory); |
| 191 WriteParam(m, p.size); | 250 WriteParam(m, p.size); |
| 192 } | 251 } |
| 193 static bool Read(const IPC::Message* m, void** iter, param_type* r) { | 252 static bool Read(const Message* m, void** iter, param_type* r) { |
| 194 return | 253 return |
| 195 ReadParam(m, iter, &r->shared_memory) && | 254 ReadParam(m, iter, &r->shared_memory) && |
| 196 ReadParam(m, iter, &r->size); | 255 ReadParam(m, iter, &r->size); |
| 197 } | 256 } |
| 198 static void Log(const param_type& p, std::wstring* l) { | 257 static void Log(const param_type& p, std::wstring* l) { |
| 199 } | 258 } |
| 200 }; | 259 }; |
| 201 | 260 |
| 202 | |
| 203 struct PluginMsg_DidReceiveResponseParams { | |
| 204 int id; | |
| 205 std::string mime_type; | |
| 206 std::string headers; | |
| 207 uint32 expected_length; | |
| 208 uint32 last_modified; | |
| 209 bool request_is_seekable; | |
| 210 }; | |
| 211 | |
| 212 template <> | 261 template <> |
| 213 struct ParamTraits<PluginMsg_DidReceiveResponseParams> { | 262 struct ParamTraits<PluginMsg_DidReceiveResponseParams> { |
| 214 typedef PluginMsg_DidReceiveResponseParams param_type; | 263 typedef PluginMsg_DidReceiveResponseParams param_type; |
| 215 static void Write(IPC::Message* m, const param_type& p) { | 264 static void Write(Message* m, const param_type& p) { |
| 216 WriteParam(m, p.id); | 265 WriteParam(m, p.id); |
| 217 WriteParam(m, p.mime_type); | 266 WriteParam(m, p.mime_type); |
| 218 WriteParam(m, p.headers); | 267 WriteParam(m, p.headers); |
| 219 WriteParam(m, p.expected_length); | 268 WriteParam(m, p.expected_length); |
| 220 WriteParam(m, p.last_modified); | 269 WriteParam(m, p.last_modified); |
| 221 WriteParam(m, p.request_is_seekable); | 270 WriteParam(m, p.request_is_seekable); |
| 222 } | 271 } |
| 223 static bool Read(const IPC::Message* m, void** iter, param_type* r) { | 272 static bool Read(const Message* m, void** iter, param_type* r) { |
| 224 return | 273 return |
| 225 ReadParam(m, iter, &r->id) && | 274 ReadParam(m, iter, &r->id) && |
| 226 ReadParam(m, iter, &r->mime_type) && | 275 ReadParam(m, iter, &r->mime_type) && |
| 227 ReadParam(m, iter, &r->headers) && | 276 ReadParam(m, iter, &r->headers) && |
| 228 ReadParam(m, iter, &r->expected_length) && | 277 ReadParam(m, iter, &r->expected_length) && |
| 229 ReadParam(m, iter, &r->last_modified) && | 278 ReadParam(m, iter, &r->last_modified) && |
| 230 ReadParam(m, iter, &r->request_is_seekable); | 279 ReadParam(m, iter, &r->request_is_seekable); |
| 231 } | 280 } |
| 232 static void Log(const param_type& p, std::wstring* l) { | 281 static void Log(const param_type& p, std::wstring* l) { |
| 233 l->append(L"("); | 282 l->append(L"("); |
| 234 LogParam(p.id, l); | 283 LogParam(p.id, l); |
| 235 l->append(L", "); | 284 l->append(L", "); |
| 236 LogParam(p.mime_type, l); | 285 LogParam(p.mime_type, l); |
| 237 l->append(L", "); | 286 l->append(L", "); |
| 238 LogParam(p.headers, l); | 287 LogParam(p.headers, l); |
| 239 l->append(L", "); | 288 l->append(L", "); |
| 240 LogParam(p.expected_length, l); | 289 LogParam(p.expected_length, l); |
| 241 l->append(L", "); | 290 l->append(L", "); |
| 242 LogParam(p.last_modified, l); | 291 LogParam(p.last_modified, l); |
| 243 l->append(L", "); | 292 l->append(L", "); |
| 244 LogParam(p.request_is_seekable, l); | 293 LogParam(p.request_is_seekable, l); |
| 245 l->append(L")"); | 294 l->append(L")"); |
| 246 } | 295 } |
| 247 }; | 296 }; |
| 248 | 297 |
| 298 template <> |
| 299 struct ParamTraits<NPEvent> { |
| 300 typedef NPEvent param_type; |
| 301 static void Write(Message* m, const param_type& p) { |
| 302 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(NPEvent)); |
| 303 } |
| 304 static bool Read(const Message* m, void** iter, param_type* r) { |
| 305 const char *data; |
| 306 int data_size = 0; |
| 307 bool result = m->ReadData(iter, &data, &data_size); |
| 308 if (!result || data_size != sizeof(NPEvent)) { |
| 309 NOTREACHED(); |
| 310 return false; |
| 311 } |
| 249 | 312 |
| 250 struct NPIdentifier_Param { | 313 memcpy(r, data, sizeof(NPEvent)); |
| 251 NPIdentifier identifier; | 314 return true; |
| 315 } |
| 316 static void Log(const param_type& p, std::wstring* l) { |
| 317 std::wstring event, wparam, lparam; |
| 318 lparam = StringPrintf(L"(%d, %d)", LOWORD(p.lParam), HIWORD(p.lParam)); |
| 319 switch(p.event) { |
| 320 case WM_KEYDOWN: |
| 321 event = L"WM_KEYDOWN"; |
| 322 wparam = StringPrintf(L"%d", p.wParam); |
| 323 lparam = StringPrintf(L"%d", p.lParam); |
| 324 break; |
| 325 case WM_KEYUP: |
| 326 event = L"WM_KEYDOWN"; |
| 327 wparam = StringPrintf(L"%d", p.wParam); |
| 328 lparam = StringPrintf(L"%x", p.lParam); |
| 329 break; |
| 330 case WM_MOUSEMOVE: |
| 331 event = L"WM_MOUSEMOVE"; |
| 332 if (p.wParam & MK_LBUTTON) { |
| 333 wparam = L"MK_LBUTTON"; |
| 334 } else if (p.wParam & MK_MBUTTON) { |
| 335 wparam = L"MK_MBUTTON"; |
| 336 } else if (p.wParam & MK_RBUTTON) { |
| 337 wparam = L"MK_RBUTTON"; |
| 338 } |
| 339 break; |
| 340 case WM_LBUTTONDOWN: |
| 341 event = L"WM_LBUTTONDOWN"; |
| 342 break; |
| 343 case WM_MBUTTONDOWN: |
| 344 event = L"WM_MBUTTONDOWN"; |
| 345 break; |
| 346 case WM_RBUTTONDOWN: |
| 347 event = L"WM_RBUTTONDOWN"; |
| 348 break; |
| 349 case WM_LBUTTONUP: |
| 350 event = L"WM_LBUTTONUP"; |
| 351 break; |
| 352 case WM_MBUTTONUP: |
| 353 event = L"WM_MBUTTONUP"; |
| 354 break; |
| 355 case WM_RBUTTONUP: |
| 356 event = L"WM_RBUTTONUP"; |
| 357 break; |
| 358 } |
| 359 |
| 360 if (p.wParam & MK_CONTROL) { |
| 361 if (!wparam.empty()) |
| 362 wparam += L" "; |
| 363 wparam += L"MK_CONTROL"; |
| 364 } |
| 365 |
| 366 if (p.wParam & MK_SHIFT) { |
| 367 if (!wparam.empty()) |
| 368 wparam += L" "; |
| 369 wparam += L"MK_SHIFT"; |
| 370 } |
| 371 |
| 372 l->append(L"("); |
| 373 LogParam(event, l); |
| 374 l->append(L", "); |
| 375 LogParam(wparam, l); |
| 376 l->append(L", "); |
| 377 LogParam(lparam, l); |
| 378 l->append(L")"); |
| 379 } |
| 252 }; | 380 }; |
| 253 | 381 |
| 254 template <> | 382 template <> |
| 255 struct ParamTraits<NPIdentifier_Param> { | 383 struct ParamTraits<NPIdentifier_Param> { |
| 256 typedef NPIdentifier_Param param_type; | 384 typedef NPIdentifier_Param param_type; |
| 257 static void Write(IPC::Message* m, const param_type& p) { | 385 static void Write(Message* m, const param_type& p) { |
| 258 webkit_glue::SerializeNPIdentifier(p.identifier, m); | 386 webkit_glue::SerializeNPIdentifier(p.identifier, m); |
| 259 } | 387 } |
| 260 static bool Read(const IPC::Message* m, void** iter, param_type* r) { | 388 static bool Read(const Message* m, void** iter, param_type* r) { |
| 261 return webkit_glue::DeserializeNPIdentifier(*m, iter, &r->identifier); | 389 return webkit_glue::DeserializeNPIdentifier(*m, iter, &r->identifier); |
| 262 } | 390 } |
| 263 static void Log(const param_type& p, std::wstring* l) { | 391 static void Log(const param_type& p, std::wstring* l) { |
| 264 if (NPN_IdentifierIsString(p.identifier)) { | 392 if (NPN_IdentifierIsString(p.identifier)) { |
| 265 NPUTF8* str = NPN_UTF8FromIdentifier(p.identifier); | 393 NPUTF8* str = NPN_UTF8FromIdentifier(p.identifier); |
| 266 l->append(UTF8ToWide(str)); | 394 l->append(UTF8ToWide(str)); |
| 267 NPN_MemFree(str); | 395 NPN_MemFree(str); |
| 268 } else { | 396 } else { |
| 269 l->append(IntToWString(NPN_IntFromIdentifier(p.identifier))); | 397 l->append(IntToWString(NPN_IntFromIdentifier(p.identifier))); |
| 270 } | 398 } |
| 271 } | 399 } |
| 272 }; | 400 }; |
| 273 | 401 |
| 274 | |
| 275 enum NPVariant_ParamEnum { | |
| 276 NPVARIANT_PARAM_VOID, | |
| 277 NPVARIANT_PARAM_NULL, | |
| 278 NPVARIANT_PARAM_BOOL, | |
| 279 NPVARIANT_PARAM_INT, | |
| 280 NPVARIANT_PARAM_DOUBLE, | |
| 281 NPVARIANT_PARAM_STRING, | |
| 282 // Used when when the NPObject is running in the caller's process, so we | |
| 283 // create an NPObjectProxy in the other process. | |
| 284 NPVARIANT_PARAM_OBJECT_ROUTING_ID, | |
| 285 // Used when the NPObject we're sending is running in the callee's process | |
| 286 // (i.e. we have an NPObjectProxy for it). In that case we want the callee | |
| 287 // to just use the raw pointer. | |
| 288 NPVARIANT_PARAM_OBJECT_POINTER, | |
| 289 }; | |
| 290 | |
| 291 struct NPVariant_Param { | |
| 292 NPVariant_ParamEnum type; | |
| 293 bool bool_value; | |
| 294 int int_value; | |
| 295 double double_value; | |
| 296 std::string string_value; | |
| 297 int npobject_routing_id; | |
| 298 void* npobject_pointer; | |
| 299 }; | |
| 300 | |
| 301 template <> | 402 template <> |
| 302 struct ParamTraits<NPVariant_Param> { | 403 struct ParamTraits<NPVariant_Param> { |
| 303 typedef NPVariant_Param param_type; | 404 typedef NPVariant_Param param_type; |
| 304 static void Write(IPC::Message* m, const param_type& p) { | 405 static void Write(Message* m, const param_type& p) { |
| 305 WriteParam(m, static_cast<int>(p.type)); | 406 WriteParam(m, static_cast<int>(p.type)); |
| 306 if (p.type == NPVARIANT_PARAM_BOOL) { | 407 if (p.type == NPVARIANT_PARAM_BOOL) { |
| 307 WriteParam(m, p.bool_value); | 408 WriteParam(m, p.bool_value); |
| 308 } else if (p.type == NPVARIANT_PARAM_INT) { | 409 } else if (p.type == NPVARIANT_PARAM_INT) { |
| 309 WriteParam(m, p.int_value); | 410 WriteParam(m, p.int_value); |
| 310 } else if (p.type == NPVARIANT_PARAM_DOUBLE) { | 411 } else if (p.type == NPVARIANT_PARAM_DOUBLE) { |
| 311 WriteParam(m, p.double_value); | 412 WriteParam(m, p.double_value); |
| 312 } else if (p.type == NPVARIANT_PARAM_STRING) { | 413 } else if (p.type == NPVARIANT_PARAM_STRING) { |
| 313 WriteParam(m, p.string_value); | 414 WriteParam(m, p.string_value); |
| 314 } else if (p.type == NPVARIANT_PARAM_OBJECT_ROUTING_ID) { | 415 } else if (p.type == NPVARIANT_PARAM_OBJECT_ROUTING_ID) { |
| 315 // This is the routing id used to connect NPObjectProxy in the other | 416 // This is the routing id used to connect NPObjectProxy in the other |
| 316 // process with NPObjectStub in this process. | 417 // process with NPObjectStub in this process. |
| 317 WriteParam(m, p.npobject_routing_id); | 418 WriteParam(m, p.npobject_routing_id); |
| 318 // The actual NPObject pointer, in case it's passed back to this process. | 419 // The actual NPObject pointer, in case it's passed back to this process. |
| 319 WriteParam(m, p.npobject_pointer); | 420 WriteParam(m, p.npobject_pointer); |
| 320 } else if (p.type == NPVARIANT_PARAM_OBJECT_POINTER) { | 421 } else if (p.type == NPVARIANT_PARAM_OBJECT_POINTER) { |
| 321 // The NPObject resides in the other process, so just send its pointer. | 422 // The NPObject resides in the other process, so just send its pointer. |
| 322 WriteParam(m, p.npobject_pointer); | 423 WriteParam(m, p.npobject_pointer); |
| 323 } else { | 424 } else { |
| 324 DCHECK(p.type == NPVARIANT_PARAM_VOID || p.type == NPVARIANT_PARAM_NULL); | 425 DCHECK(p.type == NPVARIANT_PARAM_VOID || p.type == NPVARIANT_PARAM_NULL); |
| 325 } | 426 } |
| 326 } | 427 } |
| 327 static bool Read(const IPC::Message* m, void** iter, param_type* r) { | 428 static bool Read(const Message* m, void** iter, param_type* r) { |
| 328 int type; | 429 int type; |
| 329 if (!ReadParam(m, iter, &type)) | 430 if (!ReadParam(m, iter, &type)) |
| 330 return false; | 431 return false; |
| 331 | 432 |
| 332 bool result = false; | 433 bool result = false; |
| 333 r->type = static_cast<NPVariant_ParamEnum>(type); | 434 r->type = static_cast<NPVariant_ParamEnum>(type); |
| 334 if (r->type == NPVARIANT_PARAM_BOOL) { | 435 if (r->type == NPVARIANT_PARAM_BOOL) { |
| 335 result = ReadParam(m, iter, &r->bool_value); | 436 result = ReadParam(m, iter, &r->bool_value); |
| 336 } else if (r->type == NPVARIANT_PARAM_INT) { | 437 } else if (r->type == NPVARIANT_PARAM_INT) { |
| 337 result = ReadParam(m, iter, &r->int_value); | 438 result = ReadParam(m, iter, &r->int_value); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 365 LogParam(p.string_value, l); | 466 LogParam(p.string_value, l); |
| 366 } else if (p.type == NPVARIANT_PARAM_OBJECT_ROUTING_ID) { | 467 } else if (p.type == NPVARIANT_PARAM_OBJECT_ROUTING_ID) { |
| 367 LogParam(p.npobject_routing_id, l); | 468 LogParam(p.npobject_routing_id, l); |
| 368 LogParam(p.npobject_pointer, l); | 469 LogParam(p.npobject_pointer, l); |
| 369 } else if (p.type == NPVARIANT_PARAM_OBJECT_POINTER) { | 470 } else if (p.type == NPVARIANT_PARAM_OBJECT_POINTER) { |
| 370 LogParam(p.npobject_pointer, l); | 471 LogParam(p.npobject_pointer, l); |
| 371 } | 472 } |
| 372 } | 473 } |
| 373 }; | 474 }; |
| 374 | 475 |
| 375 | 476 } // namespace IPC |
| 376 template <> | |
| 377 struct ParamTraits<NPEvent> { | |
| 378 typedef NPEvent param_type; | |
| 379 static void Write(IPC::Message* m, const param_type& p) { | |
| 380 m->WriteData(reinterpret_cast<const char*>(&p), sizeof(NPEvent)); | |
| 381 } | |
| 382 static bool Read(const IPC::Message* m, void** iter, param_type* r) { | |
| 383 const char *data; | |
| 384 int data_size = 0; | |
| 385 bool result = m->ReadData(iter, &data, &data_size); | |
| 386 if (!result || data_size != sizeof(NPEvent)) { | |
| 387 NOTREACHED(); | |
| 388 return false; | |
| 389 } | |
| 390 | |
| 391 memcpy(r, data, sizeof(NPEvent)); | |
| 392 return true; | |
| 393 } | |
| 394 static void Log(const param_type& p, std::wstring* l) { | |
| 395 std::wstring event, wparam, lparam; | |
| 396 lparam = StringPrintf(L"(%d, %d)", LOWORD(p.lParam), HIWORD(p.lParam)); | |
| 397 switch(p.event) { | |
| 398 case WM_KEYDOWN: | |
| 399 event = L"WM_KEYDOWN"; | |
| 400 wparam = StringPrintf(L"%d", p.wParam); | |
| 401 lparam = StringPrintf(L"%d", p.lParam); | |
| 402 break; | |
| 403 case WM_KEYUP: | |
| 404 event = L"WM_KEYDOWN"; | |
| 405 wparam = StringPrintf(L"%d", p.wParam); | |
| 406 lparam = StringPrintf(L"%x", p.lParam); | |
| 407 break; | |
| 408 case WM_MOUSEMOVE: | |
| 409 event = L"WM_MOUSEMOVE"; | |
| 410 if (p.wParam & MK_LBUTTON) { | |
| 411 wparam = L"MK_LBUTTON"; | |
| 412 } else if (p.wParam & MK_MBUTTON) { | |
| 413 wparam = L"MK_MBUTTON"; | |
| 414 } else if (p.wParam & MK_RBUTTON) { | |
| 415 wparam = L"MK_RBUTTON"; | |
| 416 } | |
| 417 break; | |
| 418 case WM_LBUTTONDOWN: | |
| 419 event = L"WM_LBUTTONDOWN"; | |
| 420 break; | |
| 421 case WM_MBUTTONDOWN: | |
| 422 event = L"WM_MBUTTONDOWN"; | |
| 423 break; | |
| 424 case WM_RBUTTONDOWN: | |
| 425 event = L"WM_RBUTTONDOWN"; | |
| 426 break; | |
| 427 case WM_LBUTTONUP: | |
| 428 event = L"WM_LBUTTONUP"; | |
| 429 break; | |
| 430 case WM_MBUTTONUP: | |
| 431 event = L"WM_MBUTTONUP"; | |
| 432 break; | |
| 433 case WM_RBUTTONUP: | |
| 434 event = L"WM_RBUTTONUP"; | |
| 435 break; | |
| 436 } | |
| 437 | |
| 438 if (p.wParam & MK_CONTROL) { | |
| 439 if (!wparam.empty()) | |
| 440 wparam += L" "; | |
| 441 wparam += L"MK_CONTROL"; | |
| 442 } | |
| 443 | |
| 444 if (p.wParam & MK_SHIFT) { | |
| 445 if (!wparam.empty()) | |
| 446 wparam += L" "; | |
| 447 wparam += L"MK_SHIFT"; | |
| 448 } | |
| 449 | |
| 450 l->append(L"("); | |
| 451 LogParam(event, l); | |
| 452 l->append(L", "); | |
| 453 LogParam(wparam, l); | |
| 454 l->append(L", "); | |
| 455 LogParam(lparam, l); | |
| 456 l->append(L")"); | |
| 457 } | |
| 458 }; | |
| 459 | |
| 460 | |
| 461 #define MESSAGES_INTERNAL_FILE "chrome/common/plugin_messages_internal.h" | |
| 462 #include "chrome/common/ipc_message_macros.h" | |
| 463 | 477 |
| 464 #endif // CHROME_COMMON_PLUGIN_MESSAGES_H__ | 478 #endif // CHROME_COMMON_PLUGIN_MESSAGES_H__ |
| 465 | 479 |
| OLD | NEW |