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

Side by Side Diff: content/common/common_param_traits.h

Issue 6840044: Size reduction: halve npchrome_frame.dll via code motion. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 8 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_frame/chrome_frame.gyp ('k') | content/common/common_param_traits.cc » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 // This file is used to define IPC::ParamTraits<> specializations for a number 5 // This file is used to define IPC::ParamTraits<> specializations for a number
6 // of types so that they can be serialized over IPC. IPC::ParamTraits<> 6 // of types so that they can be serialized over IPC. IPC::ParamTraits<>
7 // specializations for basic types (like int and std::string) and types in the 7 // specializations for basic types (like int and std::string) and types in the
8 // 'base' project can be found in ipc/ipc_message_utils.h. This file contains 8 // 'base' project can be found in ipc/ipc_message_utils.h. This file contains
9 // specializations for types that are used by the content code, and which need 9 // specializations for types that are used by the content code, and which need
10 // manual serialization code. This is usually because they're not structs with 10 // manual serialization code. This is usually because they're not structs with
11 // public members.. 11 // public members..
12 12
13 #ifndef CONTENT_COMMON_COMMON_PARAM_TRAITS_H_ 13 #ifndef CONTENT_COMMON_COMMON_PARAM_TRAITS_H_
14 #define CONTENT_COMMON_COMMON_PARAM_TRAITS_H_ 14 #define CONTENT_COMMON_COMMON_PARAM_TRAITS_H_
15 #pragma once 15 #pragma once
16 16
17 #include "base/memory/ref_counted.h" 17 #include "base/memory/ref_counted.h"
18 #include "base/platform_file.h" 18 #include "base/platform_file.h"
19 #include "base/string_number_conversions.h"
20 #include "googleurl/src/gurl.h" 19 #include "googleurl/src/gurl.h"
21 #include "ipc/ipc_message_utils.h" 20 #include "ipc/ipc_message_utils.h"
22 #include "net/base/ip_endpoint.h" 21 #include "net/base/ip_endpoint.h"
23 #include "net/url_request/url_request_status.h" 22 #include "net/url_request/url_request_status.h"
24 #include "third_party/WebKit/Source/WebKit/chromium/public/WebInputEvent.h"
25 #include "third_party/WebKit/Source/WebKit/chromium/public/WebTextDirection.h"
26 #include "ui/gfx/native_widget_types.h" 23 #include "ui/gfx/native_widget_types.h"
27 #include "ui/gfx/surface/transport_dib.h" 24 #include "ui/gfx/surface/transport_dib.h"
28 #include "webkit/blob/blob_data.h"
29 #include "webkit/glue/npruntime_util.h"
30 #include "webkit/glue/resource_type.h" 25 #include "webkit/glue/resource_type.h"
31 #include "webkit/glue/webcursor.h"
32 #include "webkit/glue/window_open_disposition.h"
33 26
34 class SkBitmap; 27 class SkBitmap;
35 28
36 namespace gfx { 29 namespace gfx {
37 class Point; 30 class Point;
38 class Rect; 31 class Rect;
39 class Size; 32 class Size;
40 } // namespace gfx 33 } // namespace gfx
41 34
42 namespace net { 35 namespace net {
43 class HttpResponseHeaders; 36 class HttpResponseHeaders;
44 class HostPortPair; 37 class HostPortPair;
45 class UploadData; 38 class UploadData;
46 } 39 }
47 40
48 namespace webkit_glue {
49 struct PasswordForm;
50 struct ResourceDevToolsInfo;
51 struct ResourceLoadTimingInfo;
52 }
53
54 // Define the NPVariant_Param struct and its enum here since it needs manual
55 // serialization code.
56 enum NPVariant_ParamEnum {
57 NPVARIANT_PARAM_VOID,
58 NPVARIANT_PARAM_NULL,
59 NPVARIANT_PARAM_BOOL,
60 NPVARIANT_PARAM_INT,
61 NPVARIANT_PARAM_DOUBLE,
62 NPVARIANT_PARAM_STRING,
63 // Used when when the NPObject is running in the caller's process, so we
64 // create an NPObjectProxy in the other process.
65 NPVARIANT_PARAM_SENDER_OBJECT_ROUTING_ID,
66 // Used when the NPObject we're sending is running in the callee's process
67 // (i.e. we have an NPObjectProxy for it). In that case we want the callee
68 // to just use the raw pointer.
69 NPVARIANT_PARAM_RECEIVER_OBJECT_ROUTING_ID,
70 };
71
72 struct NPVariant_Param {
73 NPVariant_Param();
74 ~NPVariant_Param();
75
76 NPVariant_ParamEnum type;
77 bool bool_value;
78 int int_value;
79 double double_value;
80 std::string string_value;
81 int npobject_routing_id;
82 };
83
84 struct NPIdentifier_Param {
85 NPIdentifier_Param();
86 ~NPIdentifier_Param();
87
88 NPIdentifier identifier;
89 };
90
91 namespace IPC { 41 namespace IPC {
92 42
93 template <> 43 template <>
94 struct ParamTraits<GURL> { 44 struct ParamTraits<GURL> {
95 typedef GURL param_type; 45 typedef GURL param_type;
96 static void Write(Message* m, const param_type& p); 46 static void Write(Message* m, const param_type& p);
97 static bool Read(const Message* m, void** iter, param_type* p); 47 static bool Read(const Message* m, void** iter, param_type* p);
98 static void Log(const param_type& p, std::string* l); 48 static void Log(const param_type& p, std::string* l);
99 }; 49 };
100 50
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 90
141 template <> 91 template <>
142 struct ParamTraits<net::IPEndPoint> { 92 struct ParamTraits<net::IPEndPoint> {
143 typedef net::IPEndPoint param_type; 93 typedef net::IPEndPoint param_type;
144 static void Write(Message* m, const param_type& p); 94 static void Write(Message* m, const param_type& p);
145 static bool Read(const Message* m, void** iter, param_type* p); 95 static bool Read(const Message* m, void** iter, param_type* p);
146 static void Log(const param_type& p, std::string* l); 96 static void Log(const param_type& p, std::string* l);
147 }; 97 };
148 98
149 template <> 99 template <>
150 struct ParamTraits<webkit_glue::ResourceLoadTimingInfo> {
151 typedef webkit_glue::ResourceLoadTimingInfo param_type;
152 static void Write(Message* m, const param_type& p);
153 static bool Read(const Message* m, void** iter, param_type* r);
154 static void Log(const param_type& p, std::string* l);
155 };
156
157 template <>
158 struct ParamTraits<scoped_refptr<webkit_glue::ResourceDevToolsInfo> > {
159 typedef scoped_refptr<webkit_glue::ResourceDevToolsInfo> param_type;
160 static void Write(Message* m, const param_type& p);
161 static bool Read(const Message* m, void** iter, param_type* r);
162 static void Log(const param_type& p, std::string* l);
163 };
164
165 template <>
166 struct ParamTraits<base::PlatformFileInfo> { 100 struct ParamTraits<base::PlatformFileInfo> {
167 typedef base::PlatformFileInfo param_type; 101 typedef base::PlatformFileInfo param_type;
168 static void Write(Message* m, const param_type& p); 102 static void Write(Message* m, const param_type& p);
169 static bool Read(const Message* m, void** iter, param_type* r); 103 static bool Read(const Message* m, void** iter, param_type* r);
170 static void Log(const param_type& p, std::string* l); 104 static void Log(const param_type& p, std::string* l);
171 }; 105 };
172 106
173 template <> 107 template <>
174 struct SimilarTypeTraits<base::PlatformFileError> { 108 struct SimilarTypeTraits<base::PlatformFileError> {
175 typedef int Type; 109 typedef int Type;
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 NOTREACHED(); 158 NOTREACHED();
225 } 159 }
226 return result; 160 return result;
227 #endif 161 #endif
228 } 162 }
229 static void Log(const param_type& p, std::string* l) { 163 static void Log(const param_type& p, std::string* l) {
230 l->append("<gfx::NativeWindow>"); 164 l->append("<gfx::NativeWindow>");
231 } 165 }
232 }; 166 };
233 167
234 template <>
235 struct ParamTraits<scoped_refptr<webkit_blob::BlobData > > {
236 typedef scoped_refptr<webkit_blob::BlobData> param_type;
237 static void Write(Message* m, const param_type& p);
238 static bool Read(const Message* m, void** iter, param_type* r);
239 static void Log(const param_type& p, std::string* l);
240 };
241
242 template <>
243 struct ParamTraits<NPVariant_Param> {
244 typedef NPVariant_Param param_type;
245 static void Write(Message* m, const param_type& p);
246 static bool Read(const Message* m, void** iter, param_type* r);
247 static void Log(const param_type& p, std::string* l);
248 };
249
250 template <>
251 struct ParamTraits<NPIdentifier_Param> {
252 typedef NPIdentifier_Param param_type;
253 static void Write(Message* m, const param_type& p);
254 static bool Read(const Message* m, void** iter, param_type* r);
255 static void Log(const param_type& p, std::string* l);
256 };
257
258 template <>
259 struct ParamTraits<WebCursor> {
260 typedef WebCursor param_type;
261 static void Write(Message* m, const param_type& p) {
262 p.Serialize(m);
263 }
264 static bool Read(const Message* m, void** iter, param_type* r) {
265 return r->Deserialize(m, iter);
266 }
267 static void Log(const param_type& p, std::string* l) {
268 l->append("<WebCursor>");
269 }
270 };
271
272
273 template <>
274 struct ParamTraits<WebKit::WebInputEvent::Type> {
275 typedef WebKit::WebInputEvent::Type param_type;
276 static void Write(Message* m, const param_type& p) {
277 m->WriteInt(p);
278 }
279 static bool Read(const Message* m, void** iter, param_type* p) {
280 int type;
281 if (!m->ReadInt(iter, &type))
282 return false;
283 *p = static_cast<WebKit::WebInputEvent::Type>(type);
284 return true;
285 }
286 static void Log(const param_type& p, std::string* l) {
287 const char* type;
288 switch (p) {
289 case WebKit::WebInputEvent::MouseDown:
290 type = "MouseDown";
291 break;
292 case WebKit::WebInputEvent::MouseUp:
293 type = "MouseUp";
294 break;
295 case WebKit::WebInputEvent::MouseMove:
296 type = "MouseMove";
297 break;
298 case WebKit::WebInputEvent::MouseLeave:
299 type = "MouseLeave";
300 break;
301 case WebKit::WebInputEvent::MouseEnter:
302 type = "MouseEnter";
303 break;
304 case WebKit::WebInputEvent::MouseWheel:
305 type = "MouseWheel";
306 break;
307 case WebKit::WebInputEvent::RawKeyDown:
308 type = "RawKeyDown";
309 break;
310 case WebKit::WebInputEvent::KeyDown:
311 type = "KeyDown";
312 break;
313 case WebKit::WebInputEvent::KeyUp:
314 type = "KeyUp";
315 break;
316 default:
317 type = "None";
318 break;
319 }
320 LogParam(std::string(type), l);
321 }
322 };
323
324 typedef const WebKit::WebInputEvent* WebInputEventPointer;
325 template <>
326 struct ParamTraits<WebInputEventPointer> {
327 typedef WebInputEventPointer param_type;
328 static void Write(Message* m, const param_type& p) {
329 m->WriteData(reinterpret_cast<const char*>(p), p->size);
330 }
331 // Note: upon read, the event has the lifetime of the message.
332 static bool Read(const Message* m, void** iter, param_type* r) {
333 const char* data;
334 int data_length;
335 if (!m->ReadData(iter, &data, &data_length)) {
336 NOTREACHED();
337 return false;
338 }
339 if (data_length < static_cast<int>(sizeof(WebKit::WebInputEvent))) {
340 NOTREACHED();
341 return false;
342 }
343 param_type event = reinterpret_cast<param_type>(data);
344 // Check that the data size matches that of the event (we check the latter
345 // in the delegate).
346 if (data_length != static_cast<int>(event->size)) {
347 NOTREACHED();
348 return false;
349 }
350 *r = event;
351 return true;
352 }
353 static void Log(const param_type& p, std::string* l) {
354 l->append("(");
355 LogParam(p->size, l);
356 l->append(", ");
357 LogParam(p->type, l);
358 l->append(", ");
359 LogParam(p->timeStampSeconds, l);
360 l->append(")");
361 }
362 };
363
364 #if defined(OS_WIN) 168 #if defined(OS_WIN)
365 template<> 169 template<>
366 struct ParamTraits<TransportDIB::Id> { 170 struct ParamTraits<TransportDIB::Id> {
367 typedef TransportDIB::Id param_type; 171 typedef TransportDIB::Id param_type;
368 static void Write(Message* m, const param_type& p) { 172 static void Write(Message* m, const param_type& p) {
369 WriteParam(m, p.handle); 173 WriteParam(m, p.handle);
370 WriteParam(m, p.sequence_num); 174 WriteParam(m, p.sequence_num);
371 } 175 }
372 static bool Read(const Message* m, void** iter, param_type* r) { 176 static bool Read(const Message* m, void** iter, param_type* r) {
373 return (ReadParam(m, iter, &r->handle) && 177 return (ReadParam(m, iter, &r->handle) &&
(...skipping 21 matching lines...) Expand all
395 } 199 }
396 static void Log(const param_type& p, std::string* l) { 200 static void Log(const param_type& p, std::string* l) {
397 l->append("TransportDIB("); 201 l->append("TransportDIB(");
398 LogParam(p.shmkey, l); 202 LogParam(p.shmkey, l);
399 l->append(")"); 203 l->append(")");
400 } 204 }
401 }; 205 };
402 #endif 206 #endif
403 207
404 template <> 208 template <>
405 struct SimilarTypeTraits<WebKit::WebTextDirection> {
406 typedef int Type;
407 };
408
409 template <>
410 struct ParamTraits<SkBitmap> { 209 struct ParamTraits<SkBitmap> {
411 typedef SkBitmap param_type; 210 typedef SkBitmap param_type;
412 static void Write(Message* m, const param_type& p); 211 static void Write(Message* m, const param_type& p);
413 212
414 // Note: This function expects parameter |r| to be of type &SkBitmap since 213 // Note: This function expects parameter |r| to be of type &SkBitmap since
415 // r->SetConfig() and r->SetPixels() are called. 214 // r->SetConfig() and r->SetPixels() are called.
416 static bool Read(const Message* m, void** iter, param_type* r); 215 static bool Read(const Message* m, void** iter, param_type* r);
417 216
418 static void Log(const param_type& p, std::string* l); 217 static void Log(const param_type& p, std::string* l);
419 }; 218 };
420 219
421 template <>
422 struct SimilarTypeTraits<WindowOpenDisposition> {
423 typedef int Type;
424 };
425
426 template <>
427 struct ParamTraits<webkit_glue::PasswordForm> {
428 typedef webkit_glue::PasswordForm param_type;
429 static void Write(Message* m, const param_type& p);
430 static bool Read(const Message* m, void** iter, param_type* p);
431 static void Log(const param_type& p, std::string* l);
432 };
433
434 } // namespace IPC 220 } // namespace IPC
435 221
436 #endif // CONTENT_COMMON_COMMON_PARAM_TRAITS_H_ 222 #endif // CONTENT_COMMON_COMMON_PARAM_TRAITS_H_
OLDNEW
« no previous file with comments | « chrome_frame/chrome_frame.gyp ('k') | content/common/common_param_traits.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698