1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "content/common/indexed_db/indexed_db_param_traits.h"
9 #include "content/common/indexed_db/indexed_db_key.h"
10 #include "content/common/indexed_db/indexed_db_key_path.h"
11 #include "content/common/indexed_db/indexed_db_key_range.h"
12 #include "ipc/ipc_message_utils.h"
14 using content::IndexedDBKey;
15 using content::IndexedDBKeyPath;
16 using content::IndexedDBKeyRange;
18 using WebKit::WebIDBKeyPathTypeArray;
19 using WebKit::WebIDBKeyPathTypeNull;
20 using WebKit::WebIDBKeyPathTypeString;
21 using WebKit::WebIDBKeyType;
22 using WebKit::WebIDBKeyTypeArray;
23 using WebKit::WebIDBKeyTypeDate;
24 using WebKit::WebIDBKeyTypeInvalid;
25 using WebKit::WebIDBKeyTypeMin;
26 using WebKit::WebIDBKeyTypeNull;
27 using WebKit::WebIDBKeyTypeNumber;
28 using WebKit::WebIDBKeyTypeString;
32 void ParamTraits<IndexedDBKey>::Write(Message* m, const param_type& p) {
33 WriteParam(m, static_cast<int>(p.type()));
35 case WebIDBKeyTypeArray:
36 WriteParam(m, p.array());
38 case WebIDBKeyTypeString:
39 WriteParam(m, p.string());
41 case WebIDBKeyTypeDate:
42 WriteParam(m, p.date());
44 case WebIDBKeyTypeNumber:
45 WriteParam(m, p.number());
47 case WebIDBKeyTypeInvalid:
48 case WebIDBKeyTypeNull:
50 case WebIDBKeyTypeMin:
57 bool ParamTraits<IndexedDBKey>::Read(const Message* m,
61 if (!ReadParam(m, iter, &type))
63 WebIDBKeyType web_type = static_cast<WebIDBKeyType>(type);
66 case WebIDBKeyTypeArray: {
67 std::vector<IndexedDBKey> array;
68 if (!ReadParam(m, iter, &array))
70 *r = IndexedDBKey(array);
73 case WebIDBKeyTypeString: {
75 if (!ReadParam(m, iter, &string))
77 *r = IndexedDBKey(string);
80 case WebIDBKeyTypeDate:
81 case WebIDBKeyTypeNumber: {
83 if (!ReadParam(m, iter, &number))
85 *r = IndexedDBKey(number, web_type);
88 case WebIDBKeyTypeInvalid:
89 case WebIDBKeyTypeNull:
90 *r = IndexedDBKey(web_type);
92 case WebIDBKeyTypeMin:
101 void ParamTraits<IndexedDBKey>::Log(const param_type& p, std::string* l) {
102 l->append("<IndexedDBKey>(");
103 LogParam(static_cast<int>(p.type()), l);
106 std::vector<IndexedDBKey>::const_iterator it = p.array().begin();
107 while (it != p.array().end()) {
110 if (it != p.array().end())
114 LogParam(p.string(), l);
116 LogParam(p.date(), l);
118 LogParam(p.number(), l);
122 void ParamTraits<IndexedDBKeyPath>::Write(Message* m, const param_type& p) {
123 WriteParam(m, static_cast<int>(p.type()));
125 case WebIDBKeyPathTypeArray:
126 WriteParam(m, p.array());
128 case WebIDBKeyPathTypeString:
129 WriteParam(m, p.string());
131 case WebIDBKeyPathTypeNull:
137 bool ParamTraits<IndexedDBKeyPath>::Read(const Message* m,
138 PickleIterator* iter,
141 if (!ReadParam(m, iter, &type))
145 case WebIDBKeyPathTypeArray: {
146 std::vector<string16> array;
147 if (!ReadParam(m, iter, &array))
149 *r = IndexedDBKeyPath(array);
152 case WebIDBKeyPathTypeString: {
154 if (!ReadParam(m, iter, &string))
156 *r = IndexedDBKeyPath(string);
159 case WebIDBKeyPathTypeNull:
160 *r = IndexedDBKeyPath();
167 void ParamTraits<IndexedDBKeyPath>::Log(const param_type& p, std::string* l) {
168 l->append("<IndexedDBKeyPath>(");
169 LogParam(static_cast<int>(p.type()), l);
171 LogParam(p.string(), l);
174 std::vector<string16>::const_iterator it = p.array().begin();
175 while (it != p.array().end()) {
178 if (it != p.array().end())
184 void ParamTraits<IndexedDBKeyRange>::Write(Message* m, const param_type& p) {
185 WriteParam(m, p.lower());
186 WriteParam(m, p.upper());
187 WriteParam(m, p.lowerOpen());
188 WriteParam(m, p.upperOpen());
191 bool ParamTraits<IndexedDBKeyRange>::Read(const Message* m,
192 PickleIterator* iter,
195 if (!ReadParam(m, iter, &lower))
199 if (!ReadParam(m, iter, &upper))
203 if (!ReadParam(m, iter, &lower_open))
207 if (!ReadParam(m, iter, &upper_open))
210 *r = IndexedDBKeyRange(lower, upper, lower_open, upper_open);
214 void ParamTraits<IndexedDBKeyRange>::Log(const param_type& p, std::string* l) {
215 l->append("<IndexedDBKeyRange>(lower=");
216 LogParam(p.lower(), l);
217 l->append(", upper=");
218 LogParam(p.upper(), l);
219 l->append(", lower_open=");
220 LogParam(p.lowerOpen(), l);
221 l->append(", upper_open=");
222 LogParam(p.upperOpen(), l);