15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_param_traits.h"
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <string>
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include <vector>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key.h"
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key_path.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/common/indexed_db/indexed_db_key_range.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ipc/ipc_message_utils.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::IndexedDBKey;
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::IndexedDBKeyPath;
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using content::IndexedDBKeyRange;
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyPathTypeArray;
19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyPathTypeNull;
20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyPathTypeString;
21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyType;
22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeArray;
23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeBinary;
24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeDate;
25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeInvalid;
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeMin;
27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeNull;
28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeNumber;
29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using blink::WebIDBKeyTypeString;
3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC {
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKey>::Write(Message* m, const param_type& p) {
34868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  WriteParam(m, static_cast<int>(p.type()));
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (p.type()) {
36ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeArray:
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.array());
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case WebIDBKeyTypeBinary:
40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      WriteParam(m, p.binary());
41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return;
42ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeString:
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.string());
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
45ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeDate:
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.date());
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNumber:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.number());
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
51ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeInvalid:
52ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNull:
5390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return;
54ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeMin:
554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    default:
5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      NOTREACHED();
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKey>::Read(const Message* m,
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PickleIterator* iter,
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     param_type* r) {
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int type;
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &type))
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
67ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebIDBKeyType web_type = static_cast<WebIDBKeyType>(type);
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  switch (web_type) {
70ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeArray: {
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::vector<IndexedDBKey> array;
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &array))
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(array);
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    case WebIDBKeyTypeBinary: {
78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      std::string binary;
79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      if (!ReadParam(m, iter, &binary))
80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)        return false;
81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      *r = IndexedDBKey(binary);
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)      return true;
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)    }
84ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeString: {
85a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::string16 string;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &string))
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
8890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(string);
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeDate:
92ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNumber: {
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      double number;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &number))
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
9690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(number, web_type);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
99ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeInvalid:
100ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNull:
10190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(web_type);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
103ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeMin:
1044e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)    default:
10590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      NOTREACHED();
10690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return false;
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
11090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKey>::Log(const param_type& p, std::string* l) {
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("<IndexedDBKey>(");
112868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  LogParam(static_cast<int>(p.type()), l);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("[");
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<IndexedDBKey>::const_iterator it = p.array().begin();
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (it != p.array().end()) {
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Log(*it, l);
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++it;
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it != p.array().end())
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l->append(", ");
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("], ");
123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  LogParam(p.binary(), l);
124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)  l->append(", ");
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.string(), l);
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.date(), l);
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.number(), l);
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(")");
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
13390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyPath>::Write(Message* m, const param_type& p) {
134868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  WriteParam(m, static_cast<int>(p.type()));
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (p.type()) {
136ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeArray:
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.array());
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
139ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeString:
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.string());
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
142ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeNull:
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
14423730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    default:
14523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      NOTREACHED();
14623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      return;
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKeyPath>::Read(const Message* m,
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         PickleIterator* iter,
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         param_type* r) {
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int type;
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &type))
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (type) {
158ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeArray: {
159a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      std::vector<base::string16> array;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &array))
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
16290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKeyPath(array);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
165ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeString: {
166a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)      base::string16 string;
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &string))
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
16990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKeyPath(string);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
172ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeNull:
17390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKeyPath();
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
17523730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    default:
17623730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      NOTREACHED();
17723730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)      return false;
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyPath>::Log(const param_type& p, std::string* l) {
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("<IndexedDBKeyPath>(");
183868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  LogParam(static_cast<int>(p.type()), l);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.string(), l);
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("[");
188a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles)  std::vector<base::string16>::const_iterator it = p.array().begin();
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (it != p.array().end()) {
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LogParam(*it, l);
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++it;
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it != p.array().end())
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l->append(", ");
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("])");
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
19890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyRange>::Write(Message* m, const param_type& p) {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.lower());
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.upper());
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.lowerOpen());
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.upperOpen());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKeyRange>::Read(const Message* m,
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          PickleIterator* iter,
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          param_type* r) {
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IndexedDBKey lower;
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &lower))
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IndexedDBKey upper;
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &upper))
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool lower_open;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &lower_open))
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool upper_open;
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &upper_open))
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  *r = IndexedDBKeyRange(lower, upper, lower_open, upper_open);
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
22890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyRange>::Log(const param_type& p, std::string* l) {
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("<IndexedDBKeyRange>(lower=");
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.lower(), l);
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", upper=");
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.upper(), l);
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", lower_open=");
2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.lowerOpen(), l);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", upper_open=");
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.upperOpen(), l);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(")");
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace IPC
241