summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/src/WebIDBKeyPath.cpp
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@nokia.com>2012-05-07 11:21:11 +0200
committerSimon Hausmann <simon.hausmann@nokia.com>2012-05-07 11:21:11 +0200
commit2cf6c8816a73e0132bd8fa3b509d62d7c51b6e47 (patch)
tree988e8c5b116dd0466244ae2fe5af8ee9be926d76 /Source/WebKit/chromium/src/WebIDBKeyPath.cpp
parentdd91e772430dc294e3bf478c119ef8d43c0a3358 (diff)
downloadqtwebkit-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.cpp64
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();
}