summaryrefslogtreecommitdiffstats
path: root/chrome/renderer
diff options
context:
space:
mode:
authorbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-11 09:03:52 +0000
committerbulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-08-11 09:03:52 +0000
commit5196b0cded7f952e8faf1f06230b1fda786a707a (patch)
tree3f3e904932e2a1031a46375ed623807dbea9ff0b /chrome/renderer
parentdcd5b33317e700f4dbce32122bcdc1da5a31ae8d (diff)
downloadchromium_src-5196b0cded7f952e8faf1f06230b1fda786a707a.zip
chromium_src-5196b0cded7f952e8faf1f06230b1fda786a707a.tar.gz
chromium_src-5196b0cded7f952e8faf1f06230b1fda786a707a.tar.bz2
Implements initial plumbing for IDBCursor.
This is the Chromium side of https://bugs.webkit.org/show_bug.cgi?id=41888 It's almost purely plumbing: actual logic and cursor implementation will follow soon. Review URL: http://codereview.chromium.org/2918002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@55693 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/renderer')
-rw-r--r--chrome/renderer/indexed_db_dispatcher.cc29
-rw-r--r--chrome/renderer/indexed_db_dispatcher.h6
-rw-r--r--chrome/renderer/renderer_webidbcursor_impl.cc59
-rw-r--r--chrome/renderer/renderer_webidbcursor_impl.h34
-rw-r--r--chrome/renderer/renderer_webidbobjectstore_impl.cc12
-rw-r--r--chrome/renderer/renderer_webidbobjectstore_impl.h4
6 files changed, 143 insertions, 1 deletions
diff --git a/chrome/renderer/indexed_db_dispatcher.cc b/chrome/renderer/indexed_db_dispatcher.cc
index a059512..83f7f49 100644
--- a/chrome/renderer/indexed_db_dispatcher.cc
+++ b/chrome/renderer/indexed_db_dispatcher.cc
@@ -8,16 +8,20 @@
#include "chrome/common/serialized_script_value.h"
#include "chrome/renderer/render_thread.h"
#include "chrome/renderer/render_view.h"
+#include "chrome/renderer/renderer_webidbcursor_impl.h"
#include "chrome/renderer/renderer_webidbdatabase_impl.h"
#include "chrome/renderer/renderer_webidbindex_impl.h"
#include "chrome/renderer/renderer_webidbobjectstore_impl.h"
#include "third_party/WebKit/WebKit/chromium/public/WebFrame.h"
#include "third_party/WebKit/WebKit/chromium/public/WebIDBDatabaseError.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebIDBKeyRange.h"
#include "third_party/WebKit/WebKit/chromium/public/WebSecurityOrigin.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebSerializedScriptValue.h"
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
using WebKit::WebFrame;
using WebKit::WebIDBCallbacks;
+using WebKit::WebIDBKeyRange;
using WebKit::WebIDBDatabase;
using WebKit::WebIDBDatabaseError;
@@ -40,6 +44,8 @@ bool IndexedDBDispatcher::OnMessageReceived(const IPC::Message& msg) {
OnSuccessIDBObjectStore)
IPC_MESSAGE_HANDLER(ViewMsg_IDBCallbacksSuccessIDBIndex,
OnSuccessIDBIndex)
+ IPC_MESSAGE_HANDLER(ViewMsg_IDBCallbackSuccessOpenCursor,
+ OnSuccessOpenCursor)
IPC_MESSAGE_HANDLER(ViewMsg_IDBCallbacksSuccessSerializedScriptValue,
OnSuccessSerializedScriptValue)
IPC_MESSAGE_HANDLER(ViewMsg_IDBCallbacksError,
@@ -155,6 +161,21 @@ void IndexedDBDispatcher::RequestIDBObjectStoreRemoveIndex(
name));
}
+void IndexedDBDispatcher::RequestIDBObjectStoreOpenCursor(
+ const WebIDBKeyRange& idb_key_range, unsigned short direction,
+ WebIDBCallbacks* callbacks_ptr, int32 idb_object_store_id) {
+ scoped_ptr<WebIDBCallbacks> callbacks(callbacks_ptr);
+ ViewHostMsg_IDBObjectStoreOpenCursor_Params params;
+ params.response_id_ = pending_callbacks_.Add(callbacks.release());
+ params.left_key_.Set(idb_key_range.left());
+ params.right_key_.Set(idb_key_range.right());
+ params.flags_ = idb_key_range.flags();
+ params.direction_ = direction;
+ params.idb_object_store_id_ = idb_object_store_id;
+ RenderThread::current()->Send(
+ new ViewHostMsg_IDBObjectStoreOpenCursor(params));
+}
+
void IndexedDBDispatcher::OnSuccessNull(int32 response_id) {
WebKit::WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(response_id);
callbacks->onSuccess();
@@ -196,6 +217,14 @@ void IndexedDBDispatcher::OnSuccessSerializedScriptValue(
pending_callbacks_.Remove(response_id);
}
+void IndexedDBDispatcher::OnSuccessOpenCursor(int32 repsonse_id,
+ int32 object_id) {
+ WebKit::WebIDBCallbacks* callbacks =
+ pending_callbacks_.Lookup(repsonse_id);
+ callbacks->onSuccess(new RendererWebIDBCursorImpl(object_id));
+ pending_callbacks_.Remove(repsonse_id);
+}
+
void IndexedDBDispatcher::OnError(int32 response_id, int code,
const string16& message) {
WebKit::WebIDBCallbacks* callbacks = pending_callbacks_.Lookup(response_id);
diff --git a/chrome/renderer/indexed_db_dispatcher.h b/chrome/renderer/indexed_db_dispatcher.h
index ed551ec..5c04180 100644
--- a/chrome/renderer/indexed_db_dispatcher.h
+++ b/chrome/renderer/indexed_db_dispatcher.h
@@ -17,6 +17,7 @@ class SerializedScriptValue;
namespace WebKit {
class WebFrame;
+class WebIDBKeyRange;
}
// Handle the indexed db related communication for this entire renderer.
@@ -64,6 +65,10 @@ class IndexedDBDispatcher {
const string16& name, WebKit::WebIDBCallbacks* callbacks,
int32 idb_object_store_id);
+ void RequestIDBObjectStoreOpenCursor(
+ const WebKit::WebIDBKeyRange& idb_key_range, unsigned short direction,
+ WebKit::WebIDBCallbacks* callbacks, int32 idb_object_store_id);
+
private:
// IDBCallback message handlers.
void OnSuccessNull(int32 response_id);
@@ -71,6 +76,7 @@ class IndexedDBDispatcher {
void OnSuccessIndexedDBKey(int32 response_id, const IndexedDBKey& key);
void OnSuccessIDBObjectStore(int32 response_id, int32 object_id);
void OnSuccessIDBIndex(int32 response_id, int32 object_id);
+ void OnSuccessOpenCursor(int32 response_id, int32 object_id);
void OnSuccessSerializedScriptValue(int32 response_id,
const SerializedScriptValue& value);
void OnError(int32 response_id, int code, const string16& message);
diff --git a/chrome/renderer/renderer_webidbcursor_impl.cc b/chrome/renderer/renderer_webidbcursor_impl.cc
new file mode 100644
index 0000000..b647173
--- /dev/null
+++ b/chrome/renderer/renderer_webidbcursor_impl.cc
@@ -0,0 +1,59 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "chrome/renderer/renderer_webidbcursor_impl.h"
+
+#include "chrome/common/render_messages.h"
+#include "chrome/renderer/render_thread.h"
+
+using WebKit::WebIDBCallbacks;
+using WebKit::WebIDBKey;
+using WebKit::WebSerializedScriptValue;
+
+RendererWebIDBCursorImpl::RendererWebIDBCursorImpl(int32 idb_cursor_id)
+ : idb_cursor_id_(idb_cursor_id) {
+}
+
+RendererWebIDBCursorImpl::~RendererWebIDBCursorImpl() {
+ RenderThread::current()->Send(new ViewHostMsg_IDBCursorDestroyed(
+ idb_cursor_id_));
+}
+
+unsigned short RendererWebIDBCursorImpl::direction() const {
+ int direction;
+ RenderThread::current()->Send(
+ new ViewHostMsg_IDBCursorDirection(idb_cursor_id_, &direction));
+ return direction;
+}
+
+WebIDBKey RendererWebIDBCursorImpl::key() const {
+ IndexedDBKey key;
+ RenderThread::current()->Send(
+ new ViewHostMsg_IDBCursorKey(idb_cursor_id_, &key));
+ return key;
+}
+
+WebSerializedScriptValue RendererWebIDBCursorImpl::value() const {
+ SerializedScriptValue value;
+ RenderThread::current()->Send(
+ new ViewHostMsg_IDBCursorValue(idb_cursor_id_, &value));
+ return value;
+}
+
+void RendererWebIDBCursorImpl::update(const WebSerializedScriptValue& value,
+ WebIDBCallbacks* callback) {
+ // TODO(bulach): implement this.
+ NOTREACHED();
+}
+
+void RendererWebIDBCursorImpl::continueFunction(const WebIDBKey& key,
+ WebIDBCallbacks* callback) {
+ // TODO(bulach): implement this.
+ NOTREACHED();
+}
+
+void RendererWebIDBCursorImpl::remove(WebIDBCallbacks* callback) {
+ // TODO(bulach): implement this.
+ NOTREACHED();
+}
diff --git a/chrome/renderer/renderer_webidbcursor_impl.h b/chrome/renderer/renderer_webidbcursor_impl.h
new file mode 100644
index 0000000..9f197f8
--- /dev/null
+++ b/chrome/renderer/renderer_webidbcursor_impl.h
@@ -0,0 +1,34 @@
+// Copyright (c) 2010 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#ifndef CHROME_RENDERER_RENDERER_WEBIDBCURSOR_IMPL_H_
+#define CHROME_RENDERER_RENDERER_WEBIDBCURSOR_IMPL_H_
+
+#include "base/basictypes.h"
+#include "chrome/common/indexed_db_key.h"
+#include "chrome/common/serialized_script_value.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebIDBCallbacks.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebIDBCursor.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebIDBKey.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebSerializedScriptValue.h"
+
+class RendererWebIDBCursorImpl : public WebKit::WebIDBCursor {
+ public:
+ RendererWebIDBCursorImpl(int32 idb_cursor_id);
+ virtual ~RendererWebIDBCursorImpl();
+
+ virtual unsigned short direction() const;
+ virtual WebKit::WebIDBKey key() const;
+ virtual WebKit::WebSerializedScriptValue value() const;
+ virtual void update(const WebKit::WebSerializedScriptValue& value,
+ WebKit::WebIDBCallbacks* callback);
+ virtual void continueFunction(const WebKit::WebIDBKey& key,
+ WebKit::WebIDBCallbacks* callback);
+ virtual void remove(WebKit::WebIDBCallbacks* callback);
+
+ private:
+ int32 idb_cursor_id_;
+};
+
+#endif // CHROME_RENDERER_RENDERER_WEBIDBCURSOR_IMPL_H_
diff --git a/chrome/renderer/renderer_webidbobjectstore_impl.cc b/chrome/renderer/renderer_webidbobjectstore_impl.cc
index 5441dab..d29a326 100644
--- a/chrome/renderer/renderer_webidbobjectstore_impl.cc
+++ b/chrome/renderer/renderer_webidbobjectstore_impl.cc
@@ -12,11 +12,14 @@
#include "chrome/renderer/renderer_webidbindex_impl.h"
#include "third_party/WebKit/WebKit/chromium/public/WebDOMStringList.h"
#include "third_party/WebKit/WebKit/chromium/public/WebIDBKey.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebIDBKeyRange.h"
+#include "third_party/WebKit/WebKit/chromium/public/WebSerializedScriptValue.h"
#include "third_party/WebKit/WebKit/chromium/public/WebString.h"
using WebKit::WebDOMStringList;
using WebKit::WebFrame;
using WebKit::WebIDBCallbacks;
+using WebKit::WebIDBKeyRange;
using WebKit::WebIDBIndex;
using WebKit::WebIDBKey;
using WebKit::WebSerializedScriptValue;
@@ -112,3 +115,12 @@ void RendererWebIDBObjectStoreImpl::removeIndex(const WebString& name,
dispatcher->RequestIDBObjectStoreRemoveIndex(name, callbacks,
idb_object_store_id_);
}
+
+void RendererWebIDBObjectStoreImpl::openCursor(
+ const WebIDBKeyRange& idb_key_range,
+ unsigned short direction, WebIDBCallbacks* callbacks) {
+ IndexedDBDispatcher* dispatcher =
+ RenderThread::current()->indexed_db_dispatcher();
+ dispatcher->RequestIDBObjectStoreOpenCursor(idb_key_range, direction,
+ callbacks, idb_object_store_id_);
+}
diff --git a/chrome/renderer/renderer_webidbobjectstore_impl.h b/chrome/renderer/renderer_webidbobjectstore_impl.h
index 7e14826..88e5ad4 100644
--- a/chrome/renderer/renderer_webidbobjectstore_impl.h
+++ b/chrome/renderer/renderer_webidbobjectstore_impl.h
@@ -15,6 +15,7 @@ class WebFrame;
class WebIDBCallbacks;
class WebIDBIndex;
class WebIDBKey;
+class WebIDBKeyRange;
class WebString;
}
@@ -41,7 +42,8 @@ class RendererWebIDBObjectStoreImpl : public WebKit::WebIDBObjectStore {
WebKit::WebIDBIndex* index(const WebKit::WebString& name);
void removeIndex(const WebKit::WebString& name,
WebKit::WebIDBCallbacks* callbacks);
-
+ void openCursor(const WebKit::WebIDBKeyRange& idb_key_range,
+ unsigned short direction, WebKit::WebIDBCallbacks* callbacks);
private:
int32 idb_object_store_id_;
};