15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is used to define IPC::ParamTraits<> specializations for a number 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// of types so that they can be serialized over IPC. IPC::ParamTraits<> 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specializations for basic types (like int and std::string) and types in the 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// 'base' project can be found in ipc/ipc_message_utils.h. This file contains 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// specializations for types that are used by the content code, and which need 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// manual serialization code. This is usually because they're not structs with 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// public members, or because the same type is being used in multiple 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// *_messages.h headers. 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CONTENT_COMMON_CONTENT_PARAM_TRAITS_H_ 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CONTENT_COMMON_CONTENT_PARAM_TRAITS_H_ 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/content_param_traits_macros.h" 187d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "third_party/WebKit/public/web/WebInputEvent.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "webkit/common/cursors/webcursor.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace net { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class IPEndPoint; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace ui { 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class Range; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ParamTraits<net::IPEndPoint> { 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef net::IPEndPoint param_type; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Write(Message* m, const param_type& p); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool Read(const Message* m, PickleIterator* iter, param_type* p); 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Log(const param_type& p, std::string* l); 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ParamTraits<ui::Range> { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef ui::Range param_type; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Write(Message* m, const param_type& p); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool Read(const Message* m, PickleIterator* iter, param_type* r); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Log(const param_type& p, std::string* l); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ParamTraits<WebCursor> { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef WebCursor param_type; 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Write(Message* m, const param_type& p) { 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) p.Serialize(m); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool Read(const Message* m, PickleIterator* iter, param_type* r) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return r->Deserialize(iter); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static void Log(const param_type& p, std::string* l) { 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) l->append("<WebCursor>"); 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)typedef const WebKit::WebInputEvent* WebInputEventPointer; 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)template <> 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct ParamTraits<WebInputEventPointer> { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef WebInputEventPointer param_type; 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void Write(Message* m, const param_type& p); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Note: upon read, the event has the lifetime of the message. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static bool Read(const Message* m, PickleIterator* iter, param_type* r); 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static void Log(const param_type& p, std::string* l); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace IPC 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif // CONTENT_COMMON_CONTENT_PARAM_TRAITS_H_ 74