common_param_traits.cc revision 21d179b334e59e9a3bfcaed4c4430bef1bc5759d
106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Copyright (c) 2010 The Chromium Authors. All rights reserved.
206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// Use of this source code is governed by a BSD-style license that can be
306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch// found in the LICENSE file.
406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "chrome/common/common_param_traits.h"
606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "base/time.h"
806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "chrome/common/chrome_constants.h"
906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "chrome/common/content_settings.h"
103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "chrome/common/geoposition.h"
1106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "chrome/common/thumbnail_score.h"
124a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch#include "chrome/common/web_apps.h"
1306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "gfx/rect.h"
1406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "googleurl/src/gurl.h"
153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/upload_data.h"
1621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen#include "printing/backend/print_backend.h"
1706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "printing/native_metafile.h"
1806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "printing/page_range.h"
1906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#ifndef EXCLUDE_SKIA_DEPENDENCIES
2106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "third_party/skia/include/core/SkBitmap.h"
2206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#endif
2306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#include "webkit/glue/password_form.h"
2406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochnamespace IPC {
2606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#ifndef EXCLUDE_SKIA_DEPENDENCIES
2806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochnamespace {
3006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochstruct SkBitmap_Data {
3206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // The configuration for the bitmap (bits per pixel, etc).
3306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  SkBitmap::Config fConfig;
3406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // The width of the bitmap in pixels.
3606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  uint32 fWidth;
3706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // The height of the bitmap in pixels.
3906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  uint32 fHeight;
4006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
4106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  void InitSkBitmapDataForTransfer(const SkBitmap& bitmap) {
4206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    fConfig = bitmap.config();
4306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    fWidth = bitmap.width();
4406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    fHeight = bitmap.height();
4506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
4606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
4706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // Returns whether |bitmap| successfully initialized.
4806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  bool InitSkBitmapFromData(SkBitmap* bitmap, const char* pixels,
4906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch                            size_t total_pixels) const {
5006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    if (total_pixels) {
5106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      bitmap->setConfig(fConfig, fWidth, fHeight, 0);
5206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      if (!bitmap->allocPixels())
5306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch        return false;
5406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      if (total_pixels != bitmap->getSize())
5506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch        return false;
5606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      memcpy(bitmap->getPixels(), pixels, total_pixels);
5706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    }
5806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return true;
5906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
6006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch};
6106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
6206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}  // namespace
6306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
6406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
6506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<SkBitmap>::Write(Message* m, const SkBitmap& p) {
6606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  size_t fixed_size = sizeof(SkBitmap_Data);
6706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  SkBitmap_Data bmp_data;
6806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  bmp_data.InitSkBitmapDataForTransfer(p);
6906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteData(reinterpret_cast<const char*>(&bmp_data),
7006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch               static_cast<int>(fixed_size));
7106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  size_t pixel_size = p.getSize();
7206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  SkAutoLockPixels p_lock(p);
7306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteData(reinterpret_cast<const char*>(p.getPixels()),
7406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch               static_cast<int>(pixel_size));
7506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
7606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
7706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<SkBitmap>::Read(const Message* m, void** iter, SkBitmap* r) {
7806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  const char* fixed_data;
7906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int fixed_data_size = 0;
8006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!m->ReadData(iter, &fixed_data, &fixed_data_size) ||
8106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch     (fixed_data_size <= 0)) {
8206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    NOTREACHED();
8306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
8406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
8506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (fixed_data_size != sizeof(SkBitmap_Data))
8606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;  // Message is malformed.
8706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
8806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  const char* variable_data;
8906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int variable_data_size = 0;
9006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!m->ReadData(iter, &variable_data, &variable_data_size) ||
9106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch     (variable_data_size < 0)) {
9206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    NOTREACHED();
9306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
9406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
9506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  const SkBitmap_Data* bmp_data =
9606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      reinterpret_cast<const SkBitmap_Data*>(fixed_data);
9706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return bmp_data->InitSkBitmapFromData(r, variable_data, variable_data_size);
9806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
9906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<SkBitmap>::Log(const SkBitmap& p, std::string* l) {
1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("<SkBitmap>");
10206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
10306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
10406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch#endif  // EXCLUDE_SKIA_DEPENDENCIES
10506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
10606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<GURL>::Write(Message* m, const GURL& p) {
10706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteString(p.possibly_invalid_spec());
10806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  // TODO(brettw) bug 684583: Add encoding for query params.
10906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
11006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
11106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<GURL>::Read(const Message* m, void** iter, GURL* p) {
11206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  std::string s;
11306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!m->ReadString(iter, &s) || s.length() > chrome::kMaxURLChars) {
11406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    *p = GURL();
11506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
11606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
11706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  *p = GURL(s);
11806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
11906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
12006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<GURL>::Log(const GURL& p, std::string* l) {
1223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(p.spec());
12306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
12406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
12506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<gfx::Point>::Write(Message* m, const gfx::Point& p) {
12606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.x());
12706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.y());
12806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
12906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
13006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<gfx::Point>::Read(const Message* m, void** iter,
13106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch                                   gfx::Point* r) {
13206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int x, y;
13306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!m->ReadInt(iter, &x) ||
13406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !m->ReadInt(iter, &y))
13506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
13606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_x(x);
13706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_y(y);
13806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
13906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
14006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<gfx::Point>::Log(const gfx::Point& p, std::string* l) {
142513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  l->append(base::StringPrintf("(%d, %d)", p.x(), p.y()));
14306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
14406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
14506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
14606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<gfx::Rect>::Write(Message* m, const gfx::Rect& p) {
14706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.x());
14806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.y());
14906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.width());
15006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.height());
15106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
15206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
15306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<gfx::Rect>::Read(const Message* m, void** iter, gfx::Rect* r) {
15406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int x, y, w, h;
15506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!m->ReadInt(iter, &x) ||
15606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !m->ReadInt(iter, &y) ||
15706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !m->ReadInt(iter, &w) ||
15806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !m->ReadInt(iter, &h))
15906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
16006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_x(x);
16106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_y(y);
16206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_width(w);
16306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_height(h);
16406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
16506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
16606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<gfx::Rect>::Log(const gfx::Rect& p, std::string* l) {
168513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  l->append(base::StringPrintf("(%d, %d, %d, %d)", p.x(), p.y(),
169513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                               p.width(), p.height()));
17006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
17106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
17206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
17306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<gfx::Size>::Write(Message* m, const gfx::Size& p) {
17406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.width());
17506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  m->WriteInt(p.height());
17606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
17706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
17806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<gfx::Size>::Read(const Message* m, void** iter, gfx::Size* r) {
17906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int w, h;
18006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!m->ReadInt(iter, &w) ||
18106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !m->ReadInt(iter, &h))
18206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
18306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_width(w);
18406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_height(h);
18506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
18606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
18706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
1883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<gfx::Size>::Log(const gfx::Size& p, std::string* l) {
189513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  l->append(base::StringPrintf("(%d, %d)", p.width(), p.height()));
19006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
19106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
19206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<ContentSetting>::Write(Message* m, const param_type& p) {
19306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, static_cast<int>(p));
19406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
19506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
19606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<ContentSetting>::Read(const Message* m, void** iter,
19706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch                                       param_type* r) {
19806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int value;
19906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!ReadParam(m, iter, &value))
20006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
20106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (value < 0 || value >= static_cast<int>(CONTENT_SETTING_NUM_SETTINGS))
20206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
20306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  *r = static_cast<param_type>(value);
20406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
20506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
20606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<ContentSetting>::Log(const param_type& p, std::string* l) {
20806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  LogParam(static_cast<int>(p), l);
20906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
21006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
21106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<ContentSettings>::Write(
21206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    Message* m, const ContentSettings& settings) {
21306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  for (size_t i = 0; i < arraysize(settings.settings); ++i)
21406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    WriteParam(m, settings.settings[i]);
21506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
21606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
21706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<ContentSettings>::Read(
21806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    const Message* m, void** iter, ContentSettings* r) {
21906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  for (size_t i = 0; i < arraysize(r->settings); ++i) {
22006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    if (!ReadParam(m, iter, &r->settings[i]))
22106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      return false;
22206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
22306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
22406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
22506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
22606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<ContentSettings>::Log(
2273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const ContentSettings& p, std::string* l) {
2283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("<ContentSettings>");
22906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
23006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2314a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid ParamTraits<WebApplicationInfo>::Write(Message* m,
2324a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                            const WebApplicationInfo& p) {
23306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.title);
23406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.description);
23506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.app_url);
23621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  WriteParam(m, p.launch_container);
23706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.icons.size());
23821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  WriteParam(m, p.permissions.size());
23921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
24006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  for (size_t i = 0; i < p.icons.size(); ++i) {
24106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    WriteParam(m, p.icons[i].url);
24206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    WriteParam(m, p.icons[i].width);
24306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    WriteParam(m, p.icons[i].height);
244201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch    WriteParam(m, p.icons[i].data);
24506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
24621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
24721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  for (size_t i = 0; i < p.permissions.size(); ++i)
24821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    WriteParam(m, p.permissions[i]);
24906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
25006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2514a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochbool ParamTraits<WebApplicationInfo>::Read(
2524a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch    const Message* m, void** iter, WebApplicationInfo* r) {
25321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  size_t icon_count = 0;
25421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  size_t permissions_count = 0;
25521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
25606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  bool result =
25706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    ReadParam(m, iter, &r->title) &&
25806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    ReadParam(m, iter, &r->description) &&
25906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    ReadParam(m, iter, &r->app_url) &&
26021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ReadParam(m, iter, &r->launch_container) &&
26121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ReadParam(m, iter, &icon_count) &&
26221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    ReadParam(m, iter, &permissions_count);
26306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!result)
26406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
26521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
26606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  for (size_t i = 0; i < icon_count; ++i) {
26706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    param_type::IconInfo icon_info;
26806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    result =
26906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch        ReadParam(m, iter, &icon_info.url) &&
27006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch        ReadParam(m, iter, &icon_info.width) &&
271201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        ReadParam(m, iter, &icon_info.height) &&
272201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch        ReadParam(m, iter, &icon_info.data);
27306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    if (!result)
27406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      return false;
27506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    r->icons.push_back(icon_info);
27606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
27721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
27821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  for (size_t i = 0; i < permissions_count; ++i) {
27921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    std::string permission;
28021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    if (!ReadParam(m, iter, &permission))
28121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      return false;
28221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    r->permissions.push_back(permission);
28321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  }
28421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
28506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
28606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
28706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
2884a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdochvoid ParamTraits<WebApplicationInfo>::Log(const WebApplicationInfo& p,
2894a5e2dc747d50c653511c68ccb2cfbfb740bd5a7Ben Murdoch                                          std::string* l) {
2903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("<WebApplicationInfo>");
29106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
29206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
29306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<URLRequestStatus>::Write(Message* m, const param_type& p) {
29406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, static_cast<int>(p.status()));
29506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.os_error());
29606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
29706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
29806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<URLRequestStatus>::Read(const Message* m, void** iter,
29906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch                                         param_type* r) {
30006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  int status, os_error;
30106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!ReadParam(m, iter, &status) ||
30206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !ReadParam(m, iter, &os_error))
30306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
30406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_status(static_cast<URLRequestStatus::Status>(status));
30506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->set_os_error(os_error);
30606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
30706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
30806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<URLRequestStatus>::Log(const param_type& p, std::string* l) {
3103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::string status;
31106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  switch (p.status()) {
31206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    case URLRequestStatus::SUCCESS:
3133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      status = "SUCCESS";
31406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      break;
31506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    case URLRequestStatus::IO_PENDING:
3163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      status = "IO_PENDING ";
31706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      break;
31806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    case URLRequestStatus::HANDLED_EXTERNALLY:
3193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      status = "HANDLED_EXTERNALLY";
32006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      break;
32106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    case URLRequestStatus::CANCELED:
3223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      status = "CANCELED";
32306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      break;
32406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    case URLRequestStatus::FAILED:
3253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      status = "FAILED";
32606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      break;
32706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    default:
3283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      status = "UNKNOWN";
32906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      break;
33006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
33106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (p.status() == URLRequestStatus::FAILED)
3323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    l->append("(");
33306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
33406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  LogParam(status, l);
33506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
33606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (p.status() == URLRequestStatus::FAILED) {
3373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    l->append(", ");
33806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    LogParam(p.os_error(), l);
3393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    l->append(")");
34006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
34106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
34206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
3433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Only the net::UploadData ParamTraits<> definition needs this definition, so
3443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// keep this in the implementation file so we can forward declare UploadData in
3453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// the header.
3463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricktemplate <>
3473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct ParamTraits<net::UploadData::Element> {
3483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  typedef net::UploadData::Element param_type;
3493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static void Write(Message* m, const param_type& p) {
3503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    WriteParam(m, static_cast<int>(p.type()));
3513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (p.type() == net::UploadData::TYPE_BYTES) {
3523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      m->WriteData(&p.bytes()[0], static_cast<int>(p.bytes().size()));
3533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    } else if (p.type() == net::UploadData::TYPE_FILE) {
3543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      WriteParam(m, p.file_path());
3553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      WriteParam(m, p.file_range_offset());
3563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      WriteParam(m, p.file_range_length());
3573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      WriteParam(m, p.expected_file_modification_time());
3583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    } else {
3593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      WriteParam(m, p.blob_url());
3603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    }
3613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
3623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static bool Read(const Message* m, void** iter, param_type* r) {
3633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    int type;
3643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (!ReadParam(m, iter, &type))
3653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      return false;
3663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    if (type == net::UploadData::TYPE_BYTES) {
3673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      const char* data;
3683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      int len;
3693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!m->ReadData(iter, &data, &len))
3703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        return false;
3713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      r->SetToBytes(data, len);
3723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    } else if (type == net::UploadData::TYPE_FILE) {
3733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      FilePath file_path;
3743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      uint64 offset, length;
3753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      base::Time expected_modification_time;
3763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!ReadParam(m, iter, &file_path))
3773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        return false;
3783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!ReadParam(m, iter, &offset))
3793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        return false;
3803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!ReadParam(m, iter, &length))
3813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        return false;
3823345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!ReadParam(m, iter, &expected_modification_time))
3833345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        return false;
3843345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      r->SetToFilePathRange(file_path, offset, length,
3853345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                            expected_modification_time);
3863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    } else {
3873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      DCHECK(type == net::UploadData::TYPE_BLOB);
3883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      GURL blob_url;
3893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      if (!ReadParam(m, iter, &blob_url))
3903345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick        return false;
3913345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      r->SetToBlobUrl(blob_url);
3923345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    }
3933345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return true;
3943345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
3953345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static void Log(const param_type& p, std::string* l) {
3963345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    l->append("<net::UploadData::Element>");
3973345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
3983345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
3993345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
4003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<scoped_refptr<net::UploadData> >::Write(Message* m,
4013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                         const param_type& p) {
4023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.get() != NULL);
4033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (p) {
4043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    WriteParam(m, *p->elements());
4053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    WriteParam(m, p->identifier());
4063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
4073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
4093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ParamTraits<scoped_refptr<net::UploadData> >::Read(const Message* m,
4103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                        void** iter,
4113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                        param_type* r) {
4123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool has_object;
4133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (!ReadParam(m, iter, &has_object))
4143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return false;
4153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (!has_object)
4163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return true;
4173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  std::vector<net::UploadData::Element> elements;
4183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (!ReadParam(m, iter, &elements))
4193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return false;
4203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  int64 identifier;
4213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (!ReadParam(m, iter, &identifier))
4223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return false;
4233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  *r = new net::UploadData;
4243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  (*r)->swap_elements(&elements);
4253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  (*r)->set_identifier(identifier);
4263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return true;
4273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
4293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<scoped_refptr<net::UploadData> >::Log(const param_type& p,
4303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                       std::string* l) {
4313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("<net::UploadData>");
4323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
4333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
43406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<ThumbnailScore>::Write(Message* m, const param_type& p) {
43506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  IPC::ParamTraits<double>::Write(m, p.boring_score);
43606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  IPC::ParamTraits<bool>::Write(m, p.good_clipping);
43706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  IPC::ParamTraits<bool>::Write(m, p.at_top);
43806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  IPC::ParamTraits<base::Time>::Write(m, p.time_at_snapshot);
43906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
44006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
44106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<ThumbnailScore>::Read(const Message* m, void** iter,
44206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch                                       param_type* r) {
44306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  double boring_score;
44406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  bool good_clipping, at_top;
44506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  base::Time time_at_snapshot;
44606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (!IPC::ParamTraits<double>::Read(m, iter, &boring_score) ||
44706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !IPC::ParamTraits<bool>::Read(m, iter, &good_clipping) ||
44806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !IPC::ParamTraits<bool>::Read(m, iter, &at_top) ||
44906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      !IPC::ParamTraits<base::Time>::Read(m, iter, &time_at_snapshot))
45006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    return false;
45106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
45206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->boring_score = boring_score;
45306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->good_clipping = good_clipping;
45406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->at_top = at_top;
45506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  r->time_at_snapshot = time_at_snapshot;
45606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return true;
45706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
45806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
4593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<ThumbnailScore>::Log(const param_type& p, std::string* l) {
460513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch  l->append(base::StringPrintf("(%f, %d, %d)",
461513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch                               p.boring_score, p.good_clipping, p.at_top));
46206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
46306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
4643345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricktemplate <>
4653345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstruct ParamTraits<Geoposition::ErrorCode> {
4663345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  typedef Geoposition::ErrorCode param_type;
4673345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static void Write(Message* m, const param_type& p) {
4683345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    int error_code = p;
4693345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    WriteParam(m, error_code);
4703345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
4713345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static bool Read(const Message* m, void** iter, param_type* p) {
4723345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    int error_code_param = 0;
4733345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    bool ret = ReadParam(m, iter, &error_code_param);
4743345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    *p = static_cast<Geoposition::ErrorCode>(error_code_param);
4753345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    return ret;
4763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
4773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  static void Log(const param_type& p, std::string* l)  {
4783345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    int error_code = p;
479513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch    l->append(base::StringPrintf("<Geoposition::ErrorCode>%d", error_code));
4803345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
4813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick};
48206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
48306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<Geoposition>::Write(Message* m, const Geoposition& p) {
48406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.latitude);
48506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.longitude);
48606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.accuracy);
48706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.altitude);
48806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.altitude_accuracy);
48906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.speed);
49006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.heading);
49106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.timestamp);
49206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.error_code);
49306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.error_message);
49406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
49506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
49606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<Geoposition>::Read(
49706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch      const Message* m, void** iter, Geoposition* p) {
49806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  bool ret = ReadParam(m, iter, &p->latitude);
49906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->longitude);
50006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->accuracy);
50106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->altitude);
50206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->altitude_accuracy);
50306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->speed);
50406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->heading);
50506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->timestamp);
50606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->error_code);
50706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  ret = ret && ReadParam(m, iter, &p->error_message);
50806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return ret;
50906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
51006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
5113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<Geoposition>::Log(const Geoposition& p, std::string* l) {
51206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  l->append(
513513209b27ff55e2841eac0e4120199c23acce758Ben Murdoch      base::StringPrintf(
5143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          "<Geoposition>"
5153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          "%.6f %.6f %.6f %.6f "
5163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick          "%.6f %.6f %.6f ",
51706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch          p.latitude, p.longitude, p.accuracy, p.altitude,
51806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch          p.altitude_accuracy, p.speed, p.heading));
51906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  LogParam(p.timestamp, l);
5203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(" ");
5213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(p.error_message);
52206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  LogParam(p.error_code, l);
52306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
52406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
5253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<webkit_glue::PasswordForm>::Write(Message* m,
5263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                   const param_type& p) {
5273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.signon_realm);
5283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.origin);
5293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.action);
5303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.submit_element);
5313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.username_element);
5323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.username_value);
5333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.password_element);
5343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.password_value);
5353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.old_password_element);
5363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.old_password_value);
5373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.ssl_valid);
5383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.preferred);
5393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.blacklisted_by_user);
5403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
5413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
5423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ParamTraits<webkit_glue::PasswordForm>::Read(const Message* m, void** iter,
5433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                  param_type* p) {
5443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return
5453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->signon_realm) &&
5463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->origin) &&
5473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->action) &&
5483345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->submit_element) &&
5493345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->username_element) &&
5503345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->username_value) &&
5513345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->password_element) &&
5523345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->password_value) &&
5533345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->old_password_element) &&
5543345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->old_password_value) &&
5553345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->ssl_valid) &&
5563345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->preferred) &&
5573345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->blacklisted_by_user);
5583345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
5593345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<webkit_glue::PasswordForm>::Log(const param_type& p,
5603345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick                                                 std::string* l) {
5613345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("<PasswordForm>");
5623345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
5633345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
56406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<printing::PageRange>::Write(Message* m, const param_type& p) {
56506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.from);
56606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, p.to);
56706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
56806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
56906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<printing::PageRange>::Read(
57006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    const Message* m, void** iter, param_type* p) {
57106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return ReadParam(m, iter, &p->from) &&
57206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch         ReadParam(m, iter, &p->to);
57306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
57406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
57506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<printing::PageRange>::Log(
5763345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const param_type& p, std::string* l) {
5773345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("(");
57806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  LogParam(p.to, l);
5793345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(", ");
58006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  LogParam(p.from, l);
5813345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(")");
58206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
58306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
58406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<printing::NativeMetafile>::Write(
58506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    Message* m, const param_type& p) {
58606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  std::vector<uint8> buffer;
58706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  uint32 size = p.GetDataSize();
58806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  if (size) {
58906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    buffer.resize(size);
59006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    p.GetData(&buffer.front(), size);
59106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  }
59206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  WriteParam(m, buffer);
59306741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
59406741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
59506741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochbool ParamTraits<printing::NativeMetafile>::Read(
59606741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch    const Message* m, void** iter, param_type* p) {
59706741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  std::vector<uint8> buffer;
59806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch  return ReadParam(m, iter, &buffer) &&
59906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch         p->Init(&buffer.front(), static_cast<uint32>(buffer.size()));
60006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
60106741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
60206741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdochvoid ParamTraits<printing::NativeMetafile>::Log(
6033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const param_type& p, std::string* l) {
6043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("<printing::NativeMetafile>");
6053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
6063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
6073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<base::PlatformFileInfo>::Write(
6083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    Message* m, const param_type& p) {
6093345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.size);
6103345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.is_directory);
6113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.last_modified.ToDoubleT());
6123345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.last_accessed.ToDoubleT());
6133345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  WriteParam(m, p.creation_time.ToDoubleT());
6143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
6153345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
6163345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickbool ParamTraits<base::PlatformFileInfo>::Read(
6173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const Message* m, void** iter, param_type* p) {
6183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  double last_modified;
6193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  double last_accessed;
6203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  double creation_time;
6213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  bool result =
6223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->size) &&
6233345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &p->is_directory) &&
6243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &last_modified) &&
6253345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &last_accessed) &&
6263345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick      ReadParam(m, iter, &creation_time);
6273345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  if (result) {
6283345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    p->last_modified = base::Time::FromDoubleT(last_modified);
6293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    p->last_accessed = base::Time::FromDoubleT(last_accessed);
6303345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    p->creation_time = base::Time::FromDoubleT(creation_time);
6313345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  }
6323345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  return result;
6333345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick}
6343345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick
6353345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickvoid ParamTraits<base::PlatformFileInfo>::Log(
6363345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    const param_type& p, std::string* l) {
6373345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append("(");
6383345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  LogParam(p.size, l);
6393345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(",");
6403345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  LogParam(p.is_directory, l);
6413345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(",");
6423345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  LogParam(p.last_modified.ToDoubleT(), l);
6433345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(",");
6443345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  LogParam(p.last_accessed.ToDoubleT(), l);
6453345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(",");
6463345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  LogParam(p.creation_time.ToDoubleT(), l);
6473345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick  l->append(")");
64806741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}
64906741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch
65021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid ParamTraits<printing::PrinterCapsAndDefaults>::Write(
65121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    Message* m, const param_type& p) {
65221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  WriteParam(m, p.printer_capabilities);
65321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  WriteParam(m, p.caps_mime_type);
65421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  WriteParam(m, p.printer_defaults);
65521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  WriteParam(m, p.defaults_mime_type);
65621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
65721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
65821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenbool ParamTraits<printing::PrinterCapsAndDefaults>::Read(
65921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    const Message* m, void** iter, param_type* p) {
66021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  return
66121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      ReadParam(m, iter, &p->printer_capabilities) &&
66221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      ReadParam(m, iter, &p->caps_mime_type) &&
66321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      ReadParam(m, iter, &p->printer_defaults) &&
66421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen      ReadParam(m, iter, &p->defaults_mime_type);
66521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
66621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
66721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsenvoid ParamTraits<printing::PrinterCapsAndDefaults>::Log(
66821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen    const param_type& p, std::string* l) {
66921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  l->append("(");
67021d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  LogParam(p.printer_capabilities, l);
67121d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  l->append(",");
67221d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  LogParam(p.caps_mime_type, l);
67321d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  l->append(",");
67421d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  LogParam(p.printer_defaults, l);
67521d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  l->append(",");
67621d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  LogParam(p.defaults_mime_type, l);
67721d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen  l->append(")");
67821d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen}
67921d179b334e59e9a3bfcaed4c4430bef1bc5759dKristian Monsen
68006741cbc25cd4227a9fba40dfd0273bfcc1a587aBen Murdoch}  // namespace IPC
681