OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "content/public/common/webkit_param_traits.h" | |
6 #include "ui/base/models/menu_model.h" | 5 #include "ui/base/models/menu_model.h" |
7 | 6 |
8 // Get basic type definitions. | 7 // Get basic type definitions. |
9 #define IPC_MESSAGE_IMPL | 8 #define IPC_MESSAGE_IMPL |
10 #include "chrome/common/automation_messages.h" | 9 #include "chrome/common/automation_messages.h" |
11 | 10 |
12 // Generate constructors. | 11 // Generate constructors. |
13 #include "ipc/struct_constructor_macros.h" | 12 #include "ipc/struct_constructor_macros.h" |
14 #include "chrome/common/automation_messages.h" | 13 #include "chrome/common/automation_messages.h" |
15 | 14 |
(...skipping 30 matching lines...) Expand all Loading... |
46 ContextMenuModel::Item::Item() | 45 ContextMenuModel::Item::Item() |
47 : type(static_cast<int>(ui::MenuModel::TYPE_COMMAND)), | 46 : type(static_cast<int>(ui::MenuModel::TYPE_COMMAND)), |
48 item_id(0), | 47 item_id(0), |
49 checked(false), | 48 checked(false), |
50 enabled(true), | 49 enabled(true), |
51 submenu(NULL) { | 50 submenu(NULL) { |
52 } | 51 } |
53 | 52 |
54 namespace IPC { | 53 namespace IPC { |
55 | 54 |
56 // static | 55 void ParamTraits<AutomationMouseEvent>::Write(Message* m, |
| 56 const param_type& p) { |
| 57 WriteParam(m, std::string(reinterpret_cast<const char*>(&p.mouse_event), |
| 58 sizeof(p.mouse_event))); |
| 59 WriteParam(m, p.location_script_chain); |
| 60 } |
| 61 |
| 62 bool ParamTraits<AutomationMouseEvent>::Read(const Message* m, |
| 63 PickleIterator* iter, |
| 64 param_type* p) { |
| 65 std::string mouse_event; |
| 66 if (!ReadParam(m, iter, &mouse_event)) |
| 67 return false; |
| 68 memcpy(&p->mouse_event, mouse_event.c_str(), mouse_event.length()); |
| 69 if (!ReadParam(m, iter, &p->location_script_chain)) |
| 70 return false; |
| 71 return true; |
| 72 } |
| 73 |
| 74 void ParamTraits<AutomationMouseEvent>::Log(const param_type& p, |
| 75 std::string* l) { |
| 76 l->append("("); |
| 77 LogParam(std::string(reinterpret_cast<const char*>(&p.mouse_event), |
| 78 sizeof(p.mouse_event)), |
| 79 l); |
| 80 l->append(", "); |
| 81 LogParam(p.location_script_chain, l); |
| 82 l->append(")"); |
| 83 } |
| 84 |
57 void ParamTraits<ContextMenuModel>::Write(Message* m, | 85 void ParamTraits<ContextMenuModel>::Write(Message* m, |
58 const param_type& p) { | 86 const param_type& p) { |
59 WriteParam(m, p.items.size()); | 87 WriteParam(m, p.items.size()); |
60 for (size_t i = 0; i < p.items.size(); ++i) { | 88 for (size_t i = 0; i < p.items.size(); ++i) { |
61 WriteParam(m, static_cast<int>(p.items[i].type)); | 89 WriteParam(m, static_cast<int>(p.items[i].type)); |
62 WriteParam(m, p.items[i].item_id); | 90 WriteParam(m, p.items[i].item_id); |
63 WriteParam(m, p.items[i].label); | 91 WriteParam(m, p.items[i].label); |
64 WriteParam(m, p.items[i].checked); | 92 WriteParam(m, p.items[i].checked); |
65 WriteParam(m, p.items[i].enabled); | 93 WriteParam(m, p.items[i].enabled); |
66 | 94 |
67 if (p.items[i].type == static_cast<int>(ui::MenuModel::TYPE_SUBMENU)) { | 95 if (p.items[i].type == static_cast<int>(ui::MenuModel::TYPE_SUBMENU)) { |
68 Write(m, *p.items[i].submenu); | 96 Write(m, *p.items[i].submenu); |
69 } | 97 } |
70 } | 98 } |
71 } | 99 } |
72 | 100 |
73 // static | |
74 bool ParamTraits<ContextMenuModel>::Read(const Message* m, | 101 bool ParamTraits<ContextMenuModel>::Read(const Message* m, |
75 PickleIterator* iter, | 102 PickleIterator* iter, |
76 param_type* p) { | 103 param_type* p) { |
77 size_t item_count = 0; | 104 size_t item_count = 0; |
78 if (!ReadParam(m, iter, &item_count)) | 105 if (!ReadParam(m, iter, &item_count)) |
79 return false; | 106 return false; |
80 | 107 |
81 p->items.reserve(item_count); | 108 p->items.reserve(item_count); |
82 for (size_t i = 0; i < item_count; ++i) { | 109 for (size_t i = 0; i < item_count; ++i) { |
83 ContextMenuModel::Item item; | 110 ContextMenuModel::Item item; |
(...skipping 16 matching lines...) Expand all Loading... |
100 return false; | 127 return false; |
101 } | 128 } |
102 } | 129 } |
103 | 130 |
104 p->items.push_back(item); | 131 p->items.push_back(item); |
105 } | 132 } |
106 | 133 |
107 return true; | 134 return true; |
108 } | 135 } |
109 | 136 |
110 // static | |
111 void ParamTraits<ContextMenuModel>::Log(const param_type& p, | 137 void ParamTraits<ContextMenuModel>::Log(const param_type& p, |
112 std::string* l) { | 138 std::string* l) { |
113 l->append("("); | 139 l->append("("); |
114 for (size_t i = 0; i < p.items.size(); ++i) { | 140 for (size_t i = 0; i < p.items.size(); ++i) { |
115 const ContextMenuModel::Item& item = p.items[i]; | 141 const ContextMenuModel::Item& item = p.items[i]; |
116 if (i) | 142 if (i) |
117 l->append(", "); | 143 l->append(", "); |
118 l->append("("); | 144 l->append("("); |
119 LogParam(item.type, l); | 145 LogParam(item.type, l); |
120 l->append(", "); | 146 l->append(", "); |
121 LogParam(item.item_id, l); | 147 LogParam(item.item_id, l); |
122 l->append(", "); | 148 l->append(", "); |
123 LogParam(item.label, l); | 149 LogParam(item.label, l); |
124 l->append(", "); | 150 l->append(", "); |
125 LogParam(item.checked, l); | 151 LogParam(item.checked, l); |
126 l->append(", "); | 152 l->append(", "); |
127 LogParam(item.enabled, l); | 153 LogParam(item.enabled, l); |
128 if (item.type == ui::MenuModel::TYPE_SUBMENU) { | 154 if (item.type == ui::MenuModel::TYPE_SUBMENU) { |
129 l->append(", "); | 155 l->append(", "); |
130 Log(*item.submenu, l); | 156 Log(*item.submenu, l); |
131 } | 157 } |
132 l->append(")"); | 158 l->append(")"); |
133 } | 159 } |
134 l->append(")"); | 160 l->append(")"); |
135 } | 161 } |
136 | 162 |
137 // static | 163 // Only the net::UploadData ParamTraits<> definition needs this definition, so |
138 void ParamTraits<AutomationMouseEvent>::Write(Message* m, | 164 // keep this in the implementation file so we can forward declare UploadData in |
139 const param_type& p) { | 165 // the header. |
140 WriteParam(m, std::string(reinterpret_cast<const char*>(&p.mouse_event), | 166 template <> |
141 sizeof(p.mouse_event))); | 167 struct ParamTraits<net::UploadElement> { |
142 WriteParam(m, p.location_script_chain); | 168 typedef net::UploadElement param_type; |
| 169 static void Write(Message* m, const param_type& p) { |
| 170 WriteParam(m, static_cast<int>(p.type())); |
| 171 switch (p.type()) { |
| 172 case net::UploadElement::TYPE_BYTES: { |
| 173 m->WriteData(p.bytes(), static_cast<int>(p.bytes_length())); |
| 174 break; |
| 175 } |
| 176 default: { |
| 177 DCHECK(p.type() == net::UploadElement::TYPE_FILE); |
| 178 WriteParam(m, p.file_path()); |
| 179 WriteParam(m, p.file_range_offset()); |
| 180 WriteParam(m, p.file_range_length()); |
| 181 WriteParam(m, p.expected_file_modification_time()); |
| 182 break; |
| 183 } |
| 184 } |
| 185 } |
| 186 static bool Read(const Message* m, PickleIterator* iter, param_type* r) { |
| 187 int type; |
| 188 if (!ReadParam(m, iter, &type)) |
| 189 return false; |
| 190 switch (type) { |
| 191 case net::UploadElement::TYPE_BYTES: { |
| 192 const char* data; |
| 193 int len; |
| 194 if (!m->ReadData(iter, &data, &len)) |
| 195 return false; |
| 196 r->SetToBytes(data, len); |
| 197 break; |
| 198 } |
| 199 default: { |
| 200 DCHECK(type == net::UploadElement::TYPE_FILE); |
| 201 FilePath file_path; |
| 202 uint64 offset, length; |
| 203 base::Time expected_modification_time; |
| 204 if (!ReadParam(m, iter, &file_path)) |
| 205 return false; |
| 206 if (!ReadParam(m, iter, &offset)) |
| 207 return false; |
| 208 if (!ReadParam(m, iter, &length)) |
| 209 return false; |
| 210 if (!ReadParam(m, iter, &expected_modification_time)) |
| 211 return false; |
| 212 r->SetToFilePathRange(file_path, offset, length, |
| 213 expected_modification_time); |
| 214 break; |
| 215 } |
| 216 } |
| 217 return true; |
| 218 } |
| 219 static void Log(const param_type& p, std::string* l) { |
| 220 l->append("<net::UploadElement>"); |
| 221 } |
| 222 }; |
| 223 |
| 224 void ParamTraits<scoped_refptr<net::UploadData> >::Write(Message* m, |
| 225 const param_type& p) { |
| 226 WriteParam(m, p.get() != NULL); |
| 227 if (p) { |
| 228 WriteParam(m, *p->elements()); |
| 229 WriteParam(m, p->identifier()); |
| 230 WriteParam(m, p->is_chunked()); |
| 231 WriteParam(m, p->last_chunk_appended()); |
| 232 } |
143 } | 233 } |
144 | 234 |
145 // static | 235 bool ParamTraits<scoped_refptr<net::UploadData> >::Read(const Message* m, |
146 bool ParamTraits<AutomationMouseEvent>::Read(const Message* m, | 236 PickleIterator* iter, |
147 PickleIterator* iter, | 237 param_type* r) { |
148 param_type* p) { | 238 bool has_object; |
149 std::string mouse_event; | 239 if (!ReadParam(m, iter, &has_object)) |
150 if (!ReadParam(m, iter, &mouse_event)) | |
151 return false; | 240 return false; |
152 memcpy(&p->mouse_event, mouse_event.c_str(), mouse_event.length()); | 241 if (!has_object) |
153 if (!ReadParam(m, iter, &p->location_script_chain)) | 242 return true; |
| 243 std::vector<net::UploadElement> elements; |
| 244 if (!ReadParam(m, iter, &elements)) |
154 return false; | 245 return false; |
| 246 int64 identifier; |
| 247 if (!ReadParam(m, iter, &identifier)) |
| 248 return false; |
| 249 bool is_chunked = false; |
| 250 if (!ReadParam(m, iter, &is_chunked)) |
| 251 return false; |
| 252 bool last_chunk_appended = false; |
| 253 if (!ReadParam(m, iter, &last_chunk_appended)) |
| 254 return false; |
| 255 *r = new net::UploadData; |
| 256 (*r)->swap_elements(&elements); |
| 257 (*r)->set_identifier(identifier); |
| 258 (*r)->set_is_chunked(is_chunked); |
| 259 (*r)->set_last_chunk_appended(last_chunk_appended); |
155 return true; | 260 return true; |
156 } | 261 } |
157 | 262 |
158 // static | 263 void ParamTraits<scoped_refptr<net::UploadData> >::Log(const param_type& p, |
159 void ParamTraits<AutomationMouseEvent>::Log(const param_type& p, | 264 std::string* l) { |
160 std::string* l) { | 265 l->append("<net::UploadData>"); |
161 l->append("("); | 266 } |
162 LogParam(std::string(reinterpret_cast<const char*>(&p.mouse_event), | 267 |
163 sizeof(p.mouse_event)), | 268 void ParamTraits<net::URLRequestStatus>::Write(Message* m, |
164 l); | 269 const param_type& p) { |
165 l->append(", "); | 270 WriteParam(m, static_cast<int>(p.status())); |
166 LogParam(p.location_script_chain, l); | 271 WriteParam(m, p.error()); |
167 l->append(")"); | 272 } |
| 273 |
| 274 bool ParamTraits<net::URLRequestStatus>::Read(const Message* m, |
| 275 PickleIterator* iter, |
| 276 param_type* r) { |
| 277 int status, error; |
| 278 if (!ReadParam(m, iter, &status) || !ReadParam(m, iter, &error)) |
| 279 return false; |
| 280 r->set_status(static_cast<net::URLRequestStatus::Status>(status)); |
| 281 r->set_error(error); |
| 282 return true; |
| 283 } |
| 284 |
| 285 void ParamTraits<net::URLRequestStatus>::Log(const param_type& p, |
| 286 std::string* l) { |
| 287 std::string status; |
| 288 switch (p.status()) { |
| 289 case net::URLRequestStatus::SUCCESS: |
| 290 status = "SUCCESS"; |
| 291 break; |
| 292 case net::URLRequestStatus::IO_PENDING: |
| 293 status = "IO_PENDING "; |
| 294 break; |
| 295 case net::URLRequestStatus::CANCELED: |
| 296 status = "CANCELED"; |
| 297 break; |
| 298 case net::URLRequestStatus::FAILED: |
| 299 status = "FAILED"; |
| 300 break; |
| 301 default: |
| 302 status = "UNKNOWN"; |
| 303 break; |
| 304 } |
| 305 if (p.status() == net::URLRequestStatus::FAILED) |
| 306 l->append("("); |
| 307 |
| 308 LogParam(status, l); |
| 309 |
| 310 if (p.status() == net::URLRequestStatus::FAILED) { |
| 311 l->append(", "); |
| 312 LogParam(p.error(), l); |
| 313 l->append(")"); |
| 314 } |
168 } | 315 } |
169 | 316 |
170 } // namespace IPC | 317 } // namespace IPC |
OLD | NEW |