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"
7 #include "content/common/indexed_db/indexed_db_key.h"
8 #include "content/common/indexed_db/indexed_db_key_path.h"
9 #include "content/common/indexed_db/indexed_db_key_range.h"
10 #include "content/public/common/serialized_script_value.h"
11 #include "ipc/ipc_message_utils.h"
13 using content::IndexedDBKey
;
14 using content::IndexedDBKeyPath
;
15 using content::IndexedDBKeyRange
;
16 using content::SerializedScriptValue
;
20 void ParamTraits
<SerializedScriptValue
>::Write(Message
* m
,
21 const param_type
& p
) {
22 WriteParam(m
, p
.is_null());
23 WriteParam(m
, p
.is_invalid());
24 WriteParam(m
, p
.data());
27 bool ParamTraits
<SerializedScriptValue
>::Read(const Message
* m
,
34 ReadParam(m
, iter
, &is_null
) &&
35 ReadParam(m
, iter
, &is_invalid
) &&
36 ReadParam(m
, iter
, &data
);
39 r
->set_is_null(is_null
);
40 r
->set_is_invalid(is_invalid
);
45 void ParamTraits
<SerializedScriptValue
>::Log(const param_type
& p
,
47 l
->append("<SerializedScriptValue>(");
48 LogParam(p
.is_null(), l
);
50 LogParam(p
.is_invalid(), l
);
52 LogParam(p
.data(), l
);
56 void ParamTraits
<IndexedDBKey
>::Write(Message
* m
,
57 const param_type
& p
) {
58 WriteParam(m
, int(p
.type()));
60 case WebKit::WebIDBKey::ArrayType
:
61 WriteParam(m
, p
.array());
63 case WebKit::WebIDBKey::StringType
:
64 WriteParam(m
, p
.string());
66 case WebKit::WebIDBKey::DateType
:
67 WriteParam(m
, p
.date());
69 case WebKit::WebIDBKey::NumberType
:
70 WriteParam(m
, p
.number());
72 case WebKit::WebIDBKey::InvalidType
:
73 case WebKit::WebIDBKey::NullType
:
79 bool ParamTraits
<IndexedDBKey
>::Read(const Message
* m
,
83 if (!ReadParam(m
, iter
, &type
))
87 case WebKit::WebIDBKey::ArrayType
: {
88 std::vector
<IndexedDBKey
> array
;
89 if (!ReadParam(m
, iter
, &array
))
94 case WebKit::WebIDBKey::StringType
: {
96 if (!ReadParam(m
, iter
, &string
))
101 case WebKit::WebIDBKey::DateType
: {
103 if (!ReadParam(m
, iter
, &date
))
108 case WebKit::WebIDBKey::NumberType
: {
110 if (!ReadParam(m
, iter
, &number
))
112 r
->SetNumber(number
);
115 case WebKit::WebIDBKey::InvalidType
:
118 case WebKit::WebIDBKey::NullType
:
126 void ParamTraits
<IndexedDBKey
>::Log(const param_type
& p
,
128 l
->append("<IndexedDBKey>(");
129 LogParam(int(p
.type()), l
);
132 std::vector
<IndexedDBKey
>::const_iterator it
= p
.array().begin();
133 while (it
!= p
.array().end()) {
136 if (it
!= p
.array().end())
140 LogParam(p
.string(), l
);
142 LogParam(p
.date(), l
);
144 LogParam(p
.number(), l
);
148 void ParamTraits
<IndexedDBKeyPath
>::Write(Message
* m
,
149 const param_type
& p
) {
150 WriteParam(m
, int(p
.type()));
152 case WebKit::WebIDBKeyPath::ArrayType
:
153 WriteParam(m
, p
.array());
155 case WebKit::WebIDBKeyPath::StringType
:
156 WriteParam(m
, p
.string());
158 case WebKit::WebIDBKeyPath::NullType
:
164 bool ParamTraits
<IndexedDBKeyPath
>::Read(const Message
* m
,
165 PickleIterator
* iter
,
168 if (!ReadParam(m
, iter
, &type
))
172 case WebKit::WebIDBKeyPath::ArrayType
: {
173 std::vector
<string16
> array
;
174 if (!ReadParam(m
, iter
, &array
))
179 case WebKit::WebIDBKeyPath::StringType
: {
181 if (!ReadParam(m
, iter
, &string
))
183 r
->SetString(string
);
186 case WebKit::WebIDBKeyPath::NullType
:
194 void ParamTraits
<IndexedDBKeyPath
>::Log(const param_type
& p
,
196 l
->append("<IndexedDBKeyPath>(");
197 LogParam(int(p
.type()), l
);
199 LogParam(p
.string(), l
);
202 std::vector
<string16
>::const_iterator it
= p
.array().begin();
203 while (it
!= p
.array().end()) {
206 if (it
!= p
.array().end())
212 void ParamTraits
<IndexedDBKeyRange
>::Write(Message
* m
,
213 const param_type
& p
) {
214 WriteParam(m
, p
.lower());
215 WriteParam(m
, p
.upper());
216 WriteParam(m
, p
.lowerOpen());
217 WriteParam(m
, p
.upperOpen());
220 bool ParamTraits
<IndexedDBKeyRange
>::Read(const Message
* m
,
221 PickleIterator
* iter
,
224 if (!ReadParam(m
, iter
, &lower
))
228 if (!ReadParam(m
, iter
, &upper
))
232 if (!ReadParam(m
, iter
, &lower_open
))
236 if (!ReadParam(m
, iter
, &upper_open
))
239 r
->Set(lower
, upper
, lower_open
, upper_open
);
243 void ParamTraits
<IndexedDBKeyRange
>::Log(const param_type
& p
,
245 l
->append("<IndexedDBKeyRange>(lower=");
246 LogParam(p
.lower(), l
);
247 l
->append(", upper=");
248 LogParam(p
.upper(), l
);
249 l
->append(", lower_open=");
250 LogParam(p
.lowerOpen(), l
);
251 l
->append(", upper_open=");
252 LogParam(p
.upperOpen(), l
);