diff options
author | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-11 09:03:52 +0000 |
---|---|---|
committer | bulach@chromium.org <bulach@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-08-11 09:03:52 +0000 |
commit | 5196b0cded7f952e8faf1f06230b1fda786a707a (patch) | |
tree | 3f3e904932e2a1031a46375ed623807dbea9ff0b /chrome/renderer | |
parent | dcd5b33317e700f4dbce32122bcdc1da5a31ae8d (diff) | |
download | chromium_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.cc | 29 | ||||
-rw-r--r-- | chrome/renderer/indexed_db_dispatcher.h | 6 | ||||
-rw-r--r-- | chrome/renderer/renderer_webidbcursor_impl.cc | 59 | ||||
-rw-r--r-- | chrome/renderer/renderer_webidbcursor_impl.h | 34 | ||||
-rw-r--r-- | chrome/renderer/renderer_webidbobjectstore_impl.cc | 12 | ||||
-rw-r--r-- | chrome/renderer/renderer_webidbobjectstore_impl.h | 4 |
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_; }; |