diff options
author | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-07 11:21:11 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@nokia.com> | 2012-05-07 11:21:11 +0200 |
commit | 2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (patch) | |
tree | 988e8c5b116dd0466244ae2fe5af8ee9be926d76 /Source/WebKit/chromium/src/WebIDBKeyPath.cpp | |
parent | dd91e772430dc294e3bf478c119ef8d43c0a3358 (diff) | |
download | qtwebkit-2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47.tar.gz |
Imported WebKit commit 7e538425aa020340619e927792f3d895061fb54b (http://svn.webkit.org/repository/webkit/trunk@116286)
Diffstat (limited to 'Source/WebKit/chromium/src/WebIDBKeyPath.cpp')
-rw-r--r-- | Source/WebKit/chromium/src/WebIDBKeyPath.cpp | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/Source/WebKit/chromium/src/WebIDBKeyPath.cpp b/Source/WebKit/chromium/src/WebIDBKeyPath.cpp index 74f357e40..bcf5dbd0d 100644 --- a/Source/WebKit/chromium/src/WebIDBKeyPath.cpp +++ b/Source/WebKit/chromium/src/WebIDBKeyPath.cpp @@ -37,20 +37,78 @@ using namespace WebCore; namespace WebKit { +WebIDBKeyPath WebIDBKeyPath::create(const WebVector<WebString>&) +{ + // FIXME: Array-type key paths not yet supported. http://webkit.org/b/84207 + WEBKIT_ASSERT_NOT_REACHED(); + return createNull(); +} + WebIDBKeyPath WebIDBKeyPath::create(const WebString& keyPath) { + if (keyPath.isNull()) + return createNull(); + WTF::Vector<WTF::String> idbElements; IDBKeyPathParseError idbError; IDBParseKeyPath(keyPath, idbElements, idbError); return WebIDBKeyPath(idbElements, static_cast<int>(idbError)); } +WebIDBKeyPath WebIDBKeyPath::createNull() +{ + return WebIDBKeyPath(WebString()); +} + +WebIDBKeyPath::WebIDBKeyPath(const WebIDBKeyPath& keyPath) +{ + assign(keyPath); +} + WebIDBKeyPath::WebIDBKeyPath(const WTF::Vector<WTF::String>& elements, int parseError) : m_private(new WTF::Vector<WTF::String>(elements)) , m_parseError(parseError) { } +bool WebIDBKeyPath::isValid() const +{ + return m_parseError == IDBKeyPathParseErrorNone; +} + +WebIDBKeyPath::Type WebIDBKeyPath::type() const +{ + return m_private.get() ? StringType : NullType; +} + +WebString WebIDBKeyPath::string() const +{ + if (!m_private.get()) + return WebString(); + + // FIXME: Store the complete string instead of rebuilding it. + // http://webkit.org/b/84207 + WTF::String string(""); + WTF::Vector<WTF::String>& array = *m_private.get(); + for (size_t i = 0; i < array.size(); ++i) { + if (i) + string.append("."); + string.append(array[i]); + } + return WebString(string); +} + +WebIDBKeyPath::WebIDBKeyPath(const WebString& keyPath) + : m_parseError(IDBKeyPathParseErrorNone) +{ + if (!keyPath.isNull()) { + m_private.reset(new WTF::Vector<WTF::String>()); + IDBKeyPathParseError idbParseError; + IDBParseKeyPath(keyPath, *m_private.get(), idbParseError); + m_parseError = idbParseError; + } +} + int WebIDBKeyPath::parseError() const { return m_parseError; @@ -59,7 +117,10 @@ int WebIDBKeyPath::parseError() const void WebIDBKeyPath::assign(const WebIDBKeyPath& keyPath) { m_parseError = keyPath.m_parseError; - m_private.reset(new WTF::Vector<WTF::String>(keyPath)); + if (keyPath.m_private.get()) + m_private.reset(new WTF::Vector<WTF::String>(keyPath)); + else + m_private.reset(0); } void WebIDBKeyPath::reset() @@ -69,6 +130,7 @@ void WebIDBKeyPath::reset() WebIDBKeyPath::operator const WTF::Vector<WTF::String, 0>&() const { + ASSERT(m_private.get()); return *m_private.get(); } |