summaryrefslogtreecommitdiffstats
path: root/chrome/common/automation_messages.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/automation_messages.cc')
-rw-r--r--chrome/common/automation_messages.cc98
1 files changed, 98 insertions, 0 deletions
diff --git a/chrome/common/automation_messages.cc b/chrome/common/automation_messages.cc
index 87a294b..39420cd 100644
--- a/chrome/common/automation_messages.cc
+++ b/chrome/common/automation_messages.cc
@@ -4,6 +4,7 @@
#include "chrome/common/common_param_traits.h"
#include "content/common/common_param_traits.h"
+#include "ui/base/models/menu_model.h"
#define IPC_MESSAGE_IMPL
#include "chrome/common/automation_messages.h"
@@ -148,6 +149,22 @@ MiniContextMenuParams::MiniContextMenuParams(int in_screen_x,
MiniContextMenuParams::~MiniContextMenuParams() {}
+ContextMenuModel::ContextMenuModel() {
+}
+
+ContextMenuModel::~ContextMenuModel() {
+ for (size_t i = 0; i < items.size(); ++i)
+ delete items[i].submenu;
+}
+
+ContextMenuModel::Item::Item()
+ : type(static_cast<int>(ui::MenuModel::TYPE_COMMAND)),
+ item_id(0),
+ checked(false),
+ enabled(true),
+ submenu(NULL) {
+}
+
AttachExternalTabParams::AttachExternalTabParams()
: cookie(0),
disposition(0),
@@ -644,6 +661,87 @@ void ParamTraits<MiniContextMenuParams>::Log(const param_type& p,
}
// static
+void ParamTraits<ContextMenuModel>::Write(Message* m,
+ const param_type& p) {
+ WriteParam(m, p.items.size());
+ for (size_t i = 0; i < p.items.size(); ++i) {
+ WriteParam(m, static_cast<int>(p.items[i].type));
+ WriteParam(m, p.items[i].item_id);
+ WriteParam(m, p.items[i].label);
+ WriteParam(m, p.items[i].checked);
+ WriteParam(m, p.items[i].enabled);
+
+ if (p.items[i].type == static_cast<int>(ui::MenuModel::TYPE_SUBMENU)) {
+ Write(m, *p.items[i].submenu);
+ }
+ }
+}
+
+// static
+bool ParamTraits<ContextMenuModel>::Read(const Message* m,
+ void** iter,
+ param_type* p) {
+ size_t item_count = 0;
+ if (!ReadParam(m, iter, &item_count))
+ return false;
+
+ p->items.reserve(item_count);
+ for (size_t i = 0; i < item_count; ++i) {
+ ContextMenuModel::Item item;
+ if (!ReadParam(m, iter, &item.type))
+ return false;
+ if (!ReadParam(m, iter, &item.item_id))
+ return false;
+ if (!ReadParam(m, iter, &item.label))
+ return false;
+ if (!ReadParam(m, iter, &item.checked))
+ return false;
+ if (!ReadParam(m, iter, &item.enabled))
+ return false;
+
+ if (item.type == static_cast<int>(ui::MenuModel::TYPE_SUBMENU)) {
+ item.submenu = new ContextMenuModel;
+ if (!Read(m, iter, item.submenu)) {
+ delete item.submenu;
+ item.submenu = NULL;
+ return false;
+ }
+ }
+
+ p->items.push_back(item);
+ }
+
+ return true;
+}
+
+// static
+void ParamTraits<ContextMenuModel>::Log(const param_type& p,
+ std::string* l) {
+ l->append("(");
+ for (size_t i = 0; i < p.items.size(); ++i) {
+ const ContextMenuModel::Item& item = p.items[i];
+ if (i)
+ l->append(", ");
+ l->append("(");
+ LogParam(item.type, l);
+ l->append(", ");
+ LogParam(item.item_id, l);
+ l->append(", ");
+ LogParam(item.label, l);
+ l->append(", ");
+ LogParam(item.checked, l);
+ l->append(", ");
+ LogParam(item.enabled, l);
+ if (item.type == ui::MenuModel::TYPE_SUBMENU) {
+ l->append(", ");
+ Log(*item.submenu, l);
+ }
+ l->append(")");
+ }
+ l->append(")");
+}
+
+// static
void ParamTraits<AttachExternalTabParams>::Write(Message* m,
const param_type& p) {
WriteParam(m, p.cookie);