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