Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(207)

Side by Side Diff: chrome/common/automation_messages.cc

Issue 10980010: Cleanup the IPC param traits structure (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: fix android Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « chrome/common/automation_messages.h ('k') | chrome/common/render_messages.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
OLDNEW
« no previous file with comments | « chrome/common/automation_messages.h ('k') | chrome/common/render_messages.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698