Index: content/browser/in_process_webkit/indexed_db_dispatcher_host.cc |
diff --git a/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc b/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc |
index 1f5112509ef6803422e23de14ff2fd322e4095d8..79ce4d980a871eae029b4f255b8d15d172279fd4 100644 |
--- a/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc |
+++ b/content/browser/in_process_webkit/indexed_db_dispatcher_host.cc |
@@ -26,6 +26,7 @@ |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBIndex.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyPath.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBKeyRange.h" |
+#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBMetadata.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBObjectStore.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebIDBTransaction.h" |
#include "third_party/WebKit/Source/WebKit/chromium/public/WebSecurityOrigin.h" |
@@ -51,6 +52,7 @@ using WebKit::WebIDBIndex; |
using WebKit::WebIDBKey; |
using WebKit::WebIDBKeyPath; |
using WebKit::WebIDBKeyRange; |
+using WebKit::WebIDBMetadata; |
using WebKit::WebIDBObjectStore; |
using WebKit::WebIDBTransaction; |
using WebKit::WebSecurityOrigin; |
@@ -324,6 +326,7 @@ bool IndexedDBDispatcherHost::DatabaseDispatcherHost::OnMessageReceived( |
bool handled = true; |
IPC_BEGIN_MESSAGE_MAP_EX(IndexedDBDispatcherHost::DatabaseDispatcherHost, |
message, *msg_is_ok) |
+ IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseMetadata, OnMetadata) |
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseName, OnName) |
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseVersion, OnVersion) |
IPC_MESSAGE_HANDLER(IndexedDBHostMsg_DatabaseObjectStoreNames, |
@@ -347,6 +350,39 @@ void IndexedDBDispatcherHost::DatabaseDispatcherHost::Send( |
parent_->Send(message); |
} |
+void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnMetadata( |
+ int32 idb_database_id, IndexedDBDatabaseMetadata* metadata) { |
+ WebIDBDatabase* idb_database = parent_->GetOrTerminateProcess( |
+ &map_, idb_database_id); |
+ if (!idb_database) |
+ return; |
+ |
+ WebIDBMetadata web_metadata = idb_database->metadata(); |
+ metadata->name = web_metadata.name; |
+ metadata->version = web_metadata.version; |
+ |
+ for (size_t i = 0; i < web_metadata.objectStores.size(); ++i) { |
+ const WebIDBMetadata::ObjectStore& web_store_metadata = |
+ web_metadata.objectStores[i]; |
+ IndexedDBObjectStoreMetadata idb_store_metadata; |
+ idb_store_metadata.name = web_store_metadata.name; |
+ idb_store_metadata.keyPath = IndexedDBKeyPath(web_store_metadata.keyPath); |
+ idb_store_metadata.autoIncrement = web_store_metadata.autoIncrement; |
+ |
+ for (size_t j = 0; j < web_store_metadata.indexes.size(); ++j) { |
+ const WebIDBMetadata::Index& web_index_metadata = |
+ web_store_metadata.indexes[j]; |
+ IndexedDBIndexMetadata idb_index_metadata; |
+ idb_index_metadata.name = web_index_metadata.name; |
+ idb_index_metadata.keyPath = IndexedDBKeyPath(web_index_metadata.keyPath); |
+ idb_index_metadata.unique = web_index_metadata.unique; |
+ idb_index_metadata.multiEntry = web_index_metadata.multiEntry; |
+ idb_store_metadata.indexes.push_back(idb_index_metadata); |
+ } |
+ metadata->object_stores.push_back(idb_store_metadata); |
+ } |
+} |
+ |
void IndexedDBDispatcherHost::DatabaseDispatcherHost::OnName( |
int32 object_id, string16* name) { |
parent_->SyncGetter<string16>(&map_, object_id, name, &WebIDBDatabase::name); |