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)
18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyPathTypeArray;
19ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyPathTypeNull;
20ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyPathTypeString;
21ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyType;
22ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeArray;
23ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeDate;
24ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeInvalid;
25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeMin;
26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeNull;
27ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeNumber;
28ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochusing WebKit::WebIDBKeyTypeString;
2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace IPC {
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKey>::Write(Message* m, const param_type& p) {
33868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  WriteParam(m, static_cast<int>(p.type()));
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (p.type()) {
35ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeArray:
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.array());
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeString:
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.string());
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeDate:
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.date());
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNumber:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.number());
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
47ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeInvalid:
48ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNull:
4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return;
50ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeMin:
5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      NOTREACHED();
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKey>::Read(const Message* m,
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     PickleIterator* iter,
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                     param_type* r) {
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int type;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &type))
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
62ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch  WebIDBKeyType web_type = static_cast<WebIDBKeyType>(type);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  switch (web_type) {
65ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeArray: {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::vector<IndexedDBKey> array;
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &array))
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
6990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(array);
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeString: {
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      string16 string;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &string))
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(string);
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
79ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeDate:
80ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNumber: {
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      double number;
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &number))
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
8490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(number, web_type);
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
87ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeInvalid:
88ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeNull:
8990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKey(web_type);
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
91ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyTypeMin:
9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      NOTREACHED();
9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      return false;
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
95868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  NOTREACHED();
96868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  return false;
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
9990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKey>::Log(const param_type& p, std::string* l) {
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("<IndexedDBKey>(");
101868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  LogParam(static_cast<int>(p.type()), l);
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("[");
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<IndexedDBKey>::const_iterator it = p.array().begin();
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (it != p.array().end()) {
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Log(*it, l);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++it;
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it != p.array().end())
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l->append(", ");
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("], ");
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.string(), l);
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.date(), l);
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.number(), l);
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(")");
1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
12090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyPath>::Write(Message* m, const param_type& p) {
121868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  WriteParam(m, static_cast<int>(p.type()));
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (p.type()) {
123ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeArray:
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.array());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
126ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeString:
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WriteParam(m, p.string());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
129ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeNull:
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return;
1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKeyPath>::Read(const Message* m,
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         PickleIterator* iter,
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                         param_type* r) {
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int type;
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &type))
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (type) {
143ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeArray: {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      std::vector<string16> array;
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &array))
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
14790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKeyPath(array);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
150ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeString: {
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      string16 string;
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      if (!ReadParam(m, iter, &string))
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        return false;
15490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKeyPath(string);
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    }
157ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch    case WebIDBKeyPathTypeNull:
15890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      *r = IndexedDBKeyPath();
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      return true;
1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  NOTREACHED();
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return false;
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
16590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyPath>::Log(const param_type& p, std::string* l) {
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("<IndexedDBKeyPath>(");
167868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  LogParam(static_cast<int>(p.type()), l);
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.string(), l);
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", ");
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("[");
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  std::vector<string16>::const_iterator it = p.array().begin();
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  while (it != p.array().end()) {
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    LogParam(*it, l);
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++it;
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (it != p.array().end())
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      l->append(", ");
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("])");
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
18290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyRange>::Write(Message* m, const param_type& p) {
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.lower());
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.upper());
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.lowerOpen());
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WriteParam(m, p.upperOpen());
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ParamTraits<IndexedDBKeyRange>::Read(const Message* m,
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          PickleIterator* iter,
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                          param_type* r) {
1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IndexedDBKey lower;
1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &lower))
1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  IndexedDBKey upper;
1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &upper))
1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool lower_open;
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &lower_open))
2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool upper_open;
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!ReadParam(m, iter, &upper_open))
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return false;
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
20890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)  *r = IndexedDBKeyRange(lower, upper, lower_open, upper_open);
2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return true;
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
21290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)void ParamTraits<IndexedDBKeyRange>::Log(const param_type& p, std::string* l) {
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append("<IndexedDBKeyRange>(lower=");
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.lower(), l);
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", upper=");
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.upper(), l);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", lower_open=");
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.lowerOpen(), l);
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(", upper_open=");
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  LogParam(p.upperOpen(), l);
2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  l->append(")");
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace IPC
225