18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
22daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben Murdoch * Copyright (C) 2011 Google Inc. All rights reserved.
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met:
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1.  Redistributions of source code must retain the above copyright
9f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick *     notice, this list of conditions and the following disclaimer.
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2.  Redistributions in binary form must reproduce the above copyright
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     notice, this list of conditions and the following disclaimer in the
12f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick *     documentation and/or other materials provided with the distribution.
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
26f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "config.h"
27f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "WebIDBKeyPath.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
29f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#if ENABLE(INDEXED_DATABASE)
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
31f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "IDBKeyPath.h"
32f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "WebString.h"
33f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include "WebVector.h"
34f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#include <wtf/Vector.h>
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
36f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickusing namespace WebCore;
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
38f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merricknamespace WebKit {
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
40f486d19d62f1bc33246748b14b14a9dfa617b57fIain MerrickWebIDBKeyPath WebIDBKeyPath::create(const WebString& keyPath)
41f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
42f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    WTF::Vector<IDBKeyPathElement> idbElements;
43f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    IDBKeyPathParseError idbError;
44f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    IDBParseKeyPath(keyPath, idbElements, idbError);
45f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return WebIDBKeyPath(idbElements, static_cast<int>(idbError));
46f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
47f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
48f486d19d62f1bc33246748b14b14a9dfa617b57fIain MerrickWebIDBKeyPath::WebIDBKeyPath(const WTF::Vector<IDBKeyPathElement>& elements, int parseError)
49f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    : m_private(new WTF::Vector<IDBKeyPathElement>(elements))
50f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    , m_parseError(parseError)
51f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
52f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
54f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickint WebIDBKeyPath::parseError() const
55f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
56f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return m_parseError;
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
59f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid WebIDBKeyPath::assign(const WebIDBKeyPath& keyPath)
60f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
61f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    m_parseError = keyPath.m_parseError;
62f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    m_private.reset(new WTF::Vector<IDBKeyPathElement>(keyPath));
63f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
65f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrickvoid WebIDBKeyPath::reset()
66f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
67f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    m_private.reset(0);
68f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick}
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
702daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochWebIDBKeyPath::operator const WTF::Vector<IDBKeyPathElement, 0>&() const
71f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick{
72f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick    return *m_private.get();
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
75f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick} // namespace WebKit
76f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick
77f486d19d62f1bc33246748b14b14a9dfa617b57fIain Merrick#endif // ENABLE(INDEXED_DATABASE)
78