summaryrefslogtreecommitdiffstats
path: root/chrome/common/plugin_messages.h
diff options
context:
space:
mode:
authorjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-04 03:15:58 +0000
committerjam@chromium.org <jam@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-02-04 03:15:58 +0000
commit39b7b06790a776ee2247f391b1b2e3af1a335503 (patch)
tree8813c8831c92e6f00e8e72bbeaa95693e695c683 /chrome/common/plugin_messages.h
parentd718a62d075bdd6f45a128bd5d82358d73799300 (diff)
downloadchromium_src-39b7b06790a776ee2247f391b1b2e3af1a335503.zip
chromium_src-39b7b06790a776ee2247f391b1b2e3af1a335503.tar.gz
chromium_src-39b7b06790a776ee2247f391b1b2e3af1a335503.tar.bz2
Make it easier/less work/less error-prone to create new IPC channel types (i.e. renderer/plugin).Instead of having each message file include the internal one several times with different ifdefs, move that logic to ipc_message_macros.h. Also make the message class starting IDs come from an enum to ensure we don't use a value twice. I simplified the logging code a bit so we don't need X_messages.cc files.Clean up places that we were doing manual packing/unpacking. Most of this was in the automation code. I added a few new template functions to make it convenient to read the parameters from a message, and updated the code to use them.I also removed unnecessary includes of render/plugin_messages.h from headers to speed up compiling.I moved the traits of IPC structs beside the struct definition to make it more apparent what's going on, so we avoid people modifying the struct and forgetting to update the traits.Amit: please look at chrome/test/automation/tab_proxy.ccMarc-Antoine: chrome/browser/printing/*Matt: the rest
Review URL: http://codereview.chromium.org/20015 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@9123 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/common/plugin_messages.h')
-rw-r--r--chrome/common/plugin_messages.h352
1 files changed, 169 insertions, 183 deletions
diff --git a/chrome/common/plugin_messages.h b/chrome/common/plugin_messages.h
index 025acc2..793dde3 100644
--- a/chrome/common/plugin_messages.h
+++ b/chrome/common/plugin_messages.h
@@ -15,14 +15,11 @@
#include "base/gfx/rect.h"
#include "base/basictypes.h"
-#include "chrome/common/ipc_message.h"
#include "chrome/common/ipc_message_utils.h"
#include "googleurl/src/gurl.h"
#include "third_party/npapi/bindings/npapi.h"
#include "webkit/glue/npruntime_util.h"
-void PluginMessagesInit();
-
// Name prefix of the event handle when a message box is displayed.
#define kMessageBoxEventPrefix L"message_box_active"
@@ -38,95 +35,11 @@ struct PluginMsg_Init_Params {
HANDLE modal_dialog_event;
};
-struct PluginHostMsg_URLRequest_Params {
- std::string method;
- bool is_javascript_url;
- std::string target;
- std::vector<char> buffer;
- bool is_file_data;
- bool notify;
- std::string url;
- HANDLE notify_data;
- bool popups_allowed;
-};
-
-struct PluginMsg_URLRequestReply_Params {
- int resource_id;
- std::string url;
- bool notify_needed;
- HANDLE notify_data;
- HANDLE stream;
-};
-
-struct PluginMsg_PrintResponse_Params {
- HANDLE shared_memory;
- size_t size;
-};
-
-struct PluginMsg_DidReceiveResponseParams {
- int id;
- std::string mime_type;
- std::string headers;
- uint32 expected_length;
- uint32 last_modified;
- bool request_is_seekable;
-};
-
-struct NPIdentifier_Param {
- NPIdentifier identifier;
-};
-
-enum NPVariant_ParamEnum {
- NPVARIANT_PARAM_VOID,
- NPVARIANT_PARAM_NULL,
- NPVARIANT_PARAM_BOOL,
- NPVARIANT_PARAM_INT,
- NPVARIANT_PARAM_DOUBLE,
- NPVARIANT_PARAM_STRING,
- // Used when when the NPObject is running in the caller's process, so we
- // create an NPObjectProxy in the other process.
- NPVARIANT_PARAM_OBJECT_ROUTING_ID,
- // Used when the NPObject we're sending is running in the callee's process
- // (i.e. we have an NPObjectProxy for it). In that case we want the callee
- // to just use the raw pointer.
- NPVARIANT_PARAM_OBJECT_POINTER,
-};
-
-struct NPVariant_Param {
- NPVariant_ParamEnum type;
- bool bool_value;
- int int_value;
- double double_value;
- std::string string_value;
- int npobject_routing_id;
- void* npobject_pointer;
-};
-
-
-#define IPC_MESSAGE_MACROS_ENUMS
-#include "chrome/common/plugin_messages_internal.h"
-
-#ifdef IPC_MESSAGE_MACROS_LOG_ENABLED
-# undef IPC_MESSAGE_MACROS_LOG
-# define IPC_MESSAGE_MACROS_CLASSES
-
-# include "chrome/common/plugin_messages_internal.h"
-# define IPC_MESSAGE_MACROS_LOG
-# undef IPC_MESSAGE_MACROS_CLASSES
-
-# include "chrome/common/plugin_messages_internal.h"
-#else
-# define IPC_MESSAGE_MACROS_CLASSES
-# include "chrome/common/plugin_messages_internal.h"
-#endif
-
-namespace IPC {
-
// Traits for PluginMsg_Init_Params structure to pack/unpack.
template <>
struct ParamTraits<PluginMsg_Init_Params> {
typedef PluginMsg_Init_Params param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
WriteParam(m, p.containing_window);
WriteParam(m, p.url);
DCHECK(p.arg_names.size() == p.arg_values.size());
@@ -135,7 +48,7 @@ struct ParamTraits<PluginMsg_Init_Params> {
WriteParam(m, p.load_manually);
WriteParam(m, p.modal_dialog_event);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* p) {
return ReadParam(m, iter, &p->containing_window) &&
ReadParam(m, iter, &p->url) &&
ReadParam(m, iter, &p->arg_names) &&
@@ -160,10 +73,23 @@ struct ParamTraits<PluginMsg_Init_Params> {
}
};
+
+struct PluginHostMsg_URLRequest_Params {
+ std::string method;
+ bool is_javascript_url;
+ std::string target;
+ std::vector<char> buffer;
+ bool is_file_data;
+ bool notify;
+ std::string url;
+ HANDLE notify_data;
+ bool popups_allowed;
+};
+
template <>
struct ParamTraits<PluginHostMsg_URLRequest_Params> {
typedef PluginHostMsg_URLRequest_Params param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
WriteParam(m, p.method);
WriteParam(m, p.is_javascript_url);
WriteParam(m, p.target);
@@ -174,7 +100,7 @@ struct ParamTraits<PluginHostMsg_URLRequest_Params> {
WriteParam(m, p.notify_data);
WriteParam(m, p.popups_allowed);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->method) &&
ReadParam(m, iter, &p->is_javascript_url) &&
@@ -209,17 +135,26 @@ struct ParamTraits<PluginHostMsg_URLRequest_Params> {
}
};
+
+struct PluginMsg_URLRequestReply_Params {
+ int resource_id;
+ std::string url;
+ bool notify_needed;
+ HANDLE notify_data;
+ HANDLE stream;
+};
+
template <>
struct ParamTraits<PluginMsg_URLRequestReply_Params> {
typedef PluginMsg_URLRequestReply_Params param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
WriteParam(m, p.resource_id);
WriteParam(m, p.url);
WriteParam(m, p.notify_needed);
WriteParam(m, p.notify_data);
WriteParam(m, p.stream);
}
- static bool Read(const Message* m, void** iter, param_type* p) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* p) {
return
ReadParam(m, iter, &p->resource_id) &&
ReadParam(m, iter, &p->url) &&
@@ -242,14 +177,20 @@ struct ParamTraits<PluginMsg_URLRequestReply_Params> {
}
};
+
+struct PluginMsg_PrintResponse_Params {
+ HANDLE shared_memory;
+ size_t size;
+};
+
template <>
struct ParamTraits<PluginMsg_PrintResponse_Params> {
typedef PluginMsg_PrintResponse_Params param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
WriteParam(m, p.shared_memory);
WriteParam(m, p.size);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->shared_memory) &&
ReadParam(m, iter, &r->size);
@@ -258,10 +199,20 @@ struct ParamTraits<PluginMsg_PrintResponse_Params> {
}
};
+
+struct PluginMsg_DidReceiveResponseParams {
+ int id;
+ std::string mime_type;
+ std::string headers;
+ uint32 expected_length;
+ uint32 last_modified;
+ bool request_is_seekable;
+};
+
template <>
struct ParamTraits<PluginMsg_DidReceiveResponseParams> {
typedef PluginMsg_DidReceiveResponseParams param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
WriteParam(m, p.id);
WriteParam(m, p.mime_type);
WriteParam(m, p.headers);
@@ -269,7 +220,7 @@ struct ParamTraits<PluginMsg_DidReceiveResponseParams> {
WriteParam(m, p.last_modified);
WriteParam(m, p.request_is_seekable);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* r) {
return
ReadParam(m, iter, &r->id) &&
ReadParam(m, iter, &r->mime_type) &&
@@ -295,97 +246,18 @@ struct ParamTraits<PluginMsg_DidReceiveResponseParams> {
}
};
-template <>
-struct ParamTraits<NPEvent> {
- typedef NPEvent param_type;
- static void Write(Message* m, const param_type& p) {
- m->WriteData(reinterpret_cast<const char*>(&p), sizeof(NPEvent));
- }
- 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)) {
- NOTREACHED();
- return false;
- }
- memcpy(r, data, sizeof(NPEvent));
- return true;
- }
- static void Log(const param_type& p, std::wstring* l) {
- 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);
- l->append(L", ");
- LogParam(wparam, l);
- l->append(L", ");
- LogParam(lparam, l);
- l->append(L")");
- }
+struct NPIdentifier_Param {
+ NPIdentifier identifier;
};
template <>
struct ParamTraits<NPIdentifier_Param> {
typedef NPIdentifier_Param param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
webkit_glue::SerializeNPIdentifier(p.identifier, m);
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* r) {
return webkit_glue::DeserializeNPIdentifier(*m, iter, &r->identifier);
}
static void Log(const param_type& p, std::wstring* l) {
@@ -399,10 +271,37 @@ struct ParamTraits<NPIdentifier_Param> {
}
};
+
+enum NPVariant_ParamEnum {
+ NPVARIANT_PARAM_VOID,
+ NPVARIANT_PARAM_NULL,
+ NPVARIANT_PARAM_BOOL,
+ NPVARIANT_PARAM_INT,
+ NPVARIANT_PARAM_DOUBLE,
+ NPVARIANT_PARAM_STRING,
+ // Used when when the NPObject is running in the caller's process, so we
+ // create an NPObjectProxy in the other process.
+ NPVARIANT_PARAM_OBJECT_ROUTING_ID,
+ // Used when the NPObject we're sending is running in the callee's process
+ // (i.e. we have an NPObjectProxy for it). In that case we want the callee
+ // to just use the raw pointer.
+ NPVARIANT_PARAM_OBJECT_POINTER,
+};
+
+struct NPVariant_Param {
+ NPVariant_ParamEnum type;
+ bool bool_value;
+ int int_value;
+ double double_value;
+ std::string string_value;
+ int npobject_routing_id;
+ void* npobject_pointer;
+};
+
template <>
struct ParamTraits<NPVariant_Param> {
typedef NPVariant_Param param_type;
- static void Write(Message* m, const param_type& p) {
+ static void Write(IPC::Message* m, const param_type& p) {
WriteParam(m, static_cast<int>(p.type));
if (p.type == NPVARIANT_PARAM_BOOL) {
WriteParam(m, p.bool_value);
@@ -425,7 +324,7 @@ struct ParamTraits<NPVariant_Param> {
DCHECK(p.type == NPVARIANT_PARAM_VOID || p.type == NPVARIANT_PARAM_NULL);
}
}
- static bool Read(const Message* m, void** iter, param_type* r) {
+ static bool Read(const IPC::Message* m, void** iter, param_type* r) {
int type;
if (!ReadParam(m, iter, &type))
return false;
@@ -473,7 +372,94 @@ struct ParamTraits<NPVariant_Param> {
}
};
-} // namespace IPC
+
+template <>
+struct ParamTraits<NPEvent> {
+ typedef NPEvent param_type;
+ static void Write(IPC::Message* m, const param_type& p) {
+ m->WriteData(reinterpret_cast<const char*>(&p), sizeof(NPEvent));
+ }
+ static bool Read(const IPC::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)) {
+ NOTREACHED();
+ return false;
+ }
+
+ memcpy(r, data, sizeof(NPEvent));
+ return true;
+ }
+ static void Log(const param_type& p, std::wstring* l) {
+ 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);
+ l->append(L", ");
+ LogParam(wparam, l);
+ l->append(L", ");
+ LogParam(lparam, l);
+ l->append(L")");
+ }
+};
+
+
+#define MESSAGES_INTERNAL_FILE "chrome/common/plugin_messages_internal.h"
+#include "chrome/common/ipc_message_macros.h"
#endif // CHROME_COMMON_PLUGIN_MESSAGES_H__