1// Copyright (c) 2011 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.
4
5#include "webkit/glue/idb_bindings.h"
6
7#include "base/basictypes.h"
8#include "base/memory/scoped_ptr.h"
9#include "base/string16.h"
10#include "base/utf_string_conversions.h"
11#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKey.h"
12#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyPath.h"
13#include "third_party/WebKit/Source/WebKit/chromium/public/WebSerializedScriptValue.h"
14#include "third_party/WebKit/Source/WebKit/chromium/public/WebString.h"
15
16namespace webkit_glue {
17
18using WebKit::WebIDBKey;
19using WebKit::WebIDBKeyPath;
20using WebKit::WebSerializedScriptValue;
21
22bool IDBKeysFromValuesAndKeyPath(
23    const std::vector<WebSerializedScriptValue>& serialized_script_values,
24    const string16& idb_key_path,
25    std::vector<WebIDBKey>* values) {
26  WebIDBKeyPath web_idb_key_path = WebIDBKeyPath::create(idb_key_path);
27  bool error = web_idb_key_path.parseError() != 0;
28  // TODO(bulach): what to do when we have a parse error? For now, setting
29  // all values back as invalid and returning a boolean.
30  for (std::vector<WebSerializedScriptValue>::const_iterator i =
31           serialized_script_values.begin();
32       i != serialized_script_values.end(); ++i) {
33    if (error) {
34      values->push_back(WebIDBKey::createInvalid());
35    } else {
36      values->push_back(
37          WebIDBKey::createFromValueAndKeyPath(*i, web_idb_key_path));
38    }
39  }
40  return error;
41}
42
43WebSerializedScriptValue InjectIDBKey(
44    const WebIDBKey& key,
45    const WebSerializedScriptValue& value,
46    const string16& idb_key_path) {
47  return WebIDBKey::injectIDBKeyIntoSerializedValue(
48      key, value, WebIDBKeyPath::create(idb_key_path));
49}
50
51}  // namespace webkit_glue
52