| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
| 2 // Use of this source code is governed by a BSD-style license that can be | |
| 3 // found in the LICENSE file. | |
| 4 | |
| 5 #include "content/renderer/indexed_db/renderer_webidbobjectstore_impl.h" | |
| 6 | |
| 7 #include "content/common/indexed_db/indexed_db_messages.h" | |
| 8 #include "content/public/common/serialized_script_value.h" | |
| 9 #include "content/renderer/indexed_db/indexed_db_dispatcher.h" | |
| 10 #include "content/renderer/indexed_db/renderer_webidbindex_impl.h" | |
| 11 #include "content/renderer/indexed_db/renderer_webidbtransaction_impl.h" | |
| 12 #include "content/renderer/render_thread_impl.h" | |
| 13 #include "third_party/WebKit/Source/WebKit/chromium/public/WebDOMStringList.h" | |
| 14 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKey.h" | |
| 15 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyRange.h" | |
| 16 #include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBTransaction.h" | |
| 17 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebSerialize
dScriptValue.h" | |
| 18 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebString.h" | |
| 19 | |
| 20 using WebKit::WebDOMStringList; | |
| 21 using WebKit::WebExceptionCode; | |
| 22 using WebKit::WebFrame; | |
| 23 using WebKit::WebIDBCallbacks; | |
| 24 using WebKit::WebIDBKeyRange; | |
| 25 using WebKit::WebIDBIndex; | |
| 26 using WebKit::WebIDBKey; | |
| 27 using WebKit::WebIDBTransaction; | |
| 28 using WebKit::WebSerializedScriptValue; | |
| 29 using WebKit::WebString; | |
| 30 | |
| 31 RendererWebIDBObjectStoreImpl::RendererWebIDBObjectStoreImpl( | |
| 32 int32 idb_object_store_id) | |
| 33 : idb_object_store_id_(idb_object_store_id) { | |
| 34 } | |
| 35 | |
| 36 RendererWebIDBObjectStoreImpl::~RendererWebIDBObjectStoreImpl() { | |
| 37 // It's not possible for there to be pending callbacks that address this | |
| 38 // object since inside WebKit, they hold a reference to the object wich owns | |
| 39 // this object. But, if that ever changed, then we'd need to invalidate | |
| 40 // any such pointers. | |
| 41 ChildThread::current()->Send( | |
| 42 new IndexedDBHostMsg_ObjectStoreDestroyed(idb_object_store_id_)); | |
| 43 } | |
| 44 | |
| 45 WebString RendererWebIDBObjectStoreImpl::name() const { | |
| 46 string16 result; | |
| 47 ChildThread::current()->Send( | |
| 48 new IndexedDBHostMsg_ObjectStoreName(idb_object_store_id_, &result)); | |
| 49 return result; | |
| 50 } | |
| 51 | |
| 52 WebString RendererWebIDBObjectStoreImpl::keyPath() const { | |
| 53 NullableString16 result; | |
| 54 ChildThread::current()->Send( | |
| 55 new IndexedDBHostMsg_ObjectStoreKeyPath(idb_object_store_id_, &result)); | |
| 56 return result; | |
| 57 } | |
| 58 | |
| 59 WebDOMStringList RendererWebIDBObjectStoreImpl::indexNames() const { | |
| 60 std::vector<string16> result; | |
| 61 ChildThread::current()->Send( | |
| 62 new IndexedDBHostMsg_ObjectStoreIndexNames( | |
| 63 idb_object_store_id_, &result)); | |
| 64 WebDOMStringList web_result; | |
| 65 for (std::vector<string16>::const_iterator it = result.begin(); | |
| 66 it != result.end(); ++it) { | |
| 67 web_result.append(*it); | |
| 68 } | |
| 69 return web_result; | |
| 70 } | |
| 71 | |
| 72 void RendererWebIDBObjectStoreImpl::get( | |
| 73 const WebIDBKey& key, | |
| 74 WebIDBCallbacks* callbacks, | |
| 75 const WebIDBTransaction& transaction, | |
| 76 WebExceptionCode& ec) { | |
| 77 IndexedDBDispatcher* dispatcher = | |
| 78 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 79 dispatcher->RequestIDBObjectStoreGet( | |
| 80 IndexedDBKey(key), callbacks, idb_object_store_id_, transaction, &ec); | |
| 81 } | |
| 82 | |
| 83 void RendererWebIDBObjectStoreImpl::put( | |
| 84 const WebSerializedScriptValue& value, | |
| 85 const WebIDBKey& key, | |
| 86 PutMode put_mode, | |
| 87 WebIDBCallbacks* callbacks, | |
| 88 const WebIDBTransaction& transaction, | |
| 89 WebExceptionCode& ec) { | |
| 90 IndexedDBDispatcher* dispatcher = | |
| 91 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 92 dispatcher->RequestIDBObjectStorePut( | |
| 93 content::SerializedScriptValue(value), IndexedDBKey(key), put_mode, | |
| 94 callbacks, idb_object_store_id_, transaction, &ec); | |
| 95 } | |
| 96 | |
| 97 void RendererWebIDBObjectStoreImpl::deleteFunction( | |
| 98 const WebIDBKey& key, | |
| 99 WebIDBCallbacks* callbacks, | |
| 100 const WebIDBTransaction& transaction, | |
| 101 WebExceptionCode& ec) { | |
| 102 IndexedDBDispatcher* dispatcher = | |
| 103 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 104 dispatcher->RequestIDBObjectStoreDelete( | |
| 105 IndexedDBKey(key), callbacks, idb_object_store_id_, transaction, &ec); | |
| 106 } | |
| 107 | |
| 108 void RendererWebIDBObjectStoreImpl::clear( | |
| 109 WebIDBCallbacks* callbacks, | |
| 110 const WebIDBTransaction& transaction, | |
| 111 WebExceptionCode& ec) { | |
| 112 IndexedDBDispatcher* dispatcher = | |
| 113 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 114 dispatcher->RequestIDBObjectStoreClear( | |
| 115 callbacks, idb_object_store_id_, transaction, &ec); | |
| 116 } | |
| 117 | |
| 118 WebIDBIndex* RendererWebIDBObjectStoreImpl::createIndex( | |
| 119 const WebString& name, | |
| 120 const WebString& key_path, | |
| 121 bool unique, | |
| 122 bool multi_entry, | |
| 123 const WebIDBTransaction& transaction, | |
| 124 WebExceptionCode& ec) { | |
| 125 IndexedDBHostMsg_ObjectStoreCreateIndex_Params params; | |
| 126 params.name = name; | |
| 127 params.key_path = key_path; | |
| 128 params.unique = unique; | |
| 129 params.multi_entry = multi_entry; | |
| 130 params.transaction_id = IndexedDBDispatcher::TransactionId(transaction); | |
| 131 params.idb_object_store_id = idb_object_store_id_; | |
| 132 | |
| 133 int32 index_id; | |
| 134 ChildThread::current()->Send( | |
| 135 new IndexedDBHostMsg_ObjectStoreCreateIndex(params, &index_id, &ec)); | |
| 136 if (!index_id) | |
| 137 return NULL; | |
| 138 return new RendererWebIDBIndexImpl(index_id); | |
| 139 } | |
| 140 | |
| 141 WebIDBIndex* RendererWebIDBObjectStoreImpl::index( | |
| 142 const WebString& name, | |
| 143 WebExceptionCode& ec) { | |
| 144 int32 idb_index_id; | |
| 145 ChildThread::current()->Send( | |
| 146 new IndexedDBHostMsg_ObjectStoreIndex(idb_object_store_id_, name, | |
| 147 &idb_index_id, &ec)); | |
| 148 if (!idb_index_id) | |
| 149 return NULL; | |
| 150 return new RendererWebIDBIndexImpl(idb_index_id); | |
| 151 } | |
| 152 | |
| 153 void RendererWebIDBObjectStoreImpl::deleteIndex( | |
| 154 const WebString& name, | |
| 155 const WebIDBTransaction& transaction, | |
| 156 WebExceptionCode& ec) { | |
| 157 ChildThread::current()->Send( | |
| 158 new IndexedDBHostMsg_ObjectStoreDeleteIndex( | |
| 159 idb_object_store_id_, name, | |
| 160 IndexedDBDispatcher::TransactionId(transaction), &ec)); | |
| 161 } | |
| 162 | |
| 163 void RendererWebIDBObjectStoreImpl::openCursor( | |
| 164 const WebIDBKeyRange& idb_key_range, | |
| 165 unsigned short direction, WebIDBCallbacks* callbacks, | |
| 166 const WebIDBTransaction& transaction, | |
| 167 WebExceptionCode& ec) { | |
| 168 IndexedDBDispatcher* dispatcher = | |
| 169 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 170 dispatcher->RequestIDBObjectStoreOpenCursor( | |
| 171 idb_key_range, direction, callbacks, idb_object_store_id_, | |
| 172 transaction, &ec); | |
| 173 } | |
| 174 | |
| 175 void RendererWebIDBObjectStoreImpl::count( | |
| 176 const WebIDBKeyRange& idb_key_range, | |
| 177 WebIDBCallbacks* callbacks, | |
| 178 const WebIDBTransaction& transaction, | |
| 179 WebExceptionCode& ec) { | |
| 180 IndexedDBDispatcher* dispatcher = | |
| 181 IndexedDBDispatcher::ThreadSpecificInstance(); | |
| 182 dispatcher->RequestIDBObjectStoreCount( | |
| 183 idb_key_range, callbacks, idb_object_store_id_, | |
| 184 transaction, &ec); | |
| 185 } | |
| OLD | NEW |