| Index: content/child/indexed_db/webidbdatabase_impl.cc
|
| diff --git a/content/child/indexed_db/webidbdatabase_impl.cc b/content/child/indexed_db/webidbdatabase_impl.cc
|
| index fedb0e7333974ecdce6127249739b0b4ea4ccdae..74363cfc2718f80bb91e246207aa8c9455af8f17 100644
|
| --- a/content/child/indexed_db/webidbdatabase_impl.cc
|
| +++ b/content/child/indexed_db/webidbdatabase_impl.cc
|
| @@ -19,6 +19,7 @@
|
| #include "third_party/WebKit/public/platform/WebVector.h"
|
| #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBKeyPath.h"
|
| #include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBMetadata.h"
|
| +#include "third_party/WebKit/public/platform/modules/indexeddb/WebIDBObserver.h"
|
|
|
| using blink::WebBlobInfo;
|
| using blink::WebIDBCallbacks;
|
| @@ -29,6 +30,7 @@ using blink::WebIDBMetadata;
|
| using blink::WebIDBKey;
|
| using blink::WebIDBKeyPath;
|
| using blink::WebIDBKeyRange;
|
| +using blink::WebIDBObserver;
|
| using blink::WebString;
|
| using blink::WebVector;
|
|
|
| @@ -90,6 +92,12 @@ void WebIDBDatabaseImpl::createTransaction(
|
| void WebIDBDatabaseImpl::close() {
|
| IndexedDBDispatcher* dispatcher =
|
| IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
|
| + // TODO(palakj): Is it better to pass observers_id along with
|
| + // RequestIDBDatabaseClose.
|
| + if (!observer_ids_.empty()) {
|
| + dispatcher->RemoveIDBObservers(observer_ids_);
|
| + observer_ids_.clear();
|
| + }
|
| dispatcher->RequestIDBDatabaseClose(ipc_database_id_,
|
| ipc_database_callbacks_id_);
|
| }
|
| @@ -100,6 +108,30 @@ void WebIDBDatabaseImpl::versionChangeIgnored() {
|
| dispatcher->NotifyIDBDatabaseVersionChangeIgnored(ipc_database_id_);
|
| }
|
|
|
| +void WebIDBDatabaseImpl::observe(std::unique_ptr<WebIDBObserver> observer,
|
| + long long transaction_id) {
|
| + IndexedDBDispatcher* dispatcher =
|
| + IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
|
| + int32_t observer_id = dispatcher->AddIDBObserver(
|
| + ipc_database_id_, transaction_id, std::move(observer));
|
| + observer_ids_.push_back(observer_id);
|
| +}
|
| +
|
| +void WebIDBDatabaseImpl::unobserve(std::unique_ptr<WebIDBObserver> observer) {
|
| + IndexedDBDispatcher* dispatcher =
|
| + IndexedDBDispatcher::ThreadSpecificInstance(thread_safe_sender_.get());
|
| + std::vector<int32_t> observer_ids_to_remove =
|
| + dispatcher->RemoveIDBObserversFromDatabase(
|
| + ipc_database_id_, std::move(observer), observer_ids_);
|
| +
|
| + // TODO(palakj): observer_ids_ should be vector or set?
|
| + for (uint32_t i = 0; i < observer_ids_to_remove.size(); i++) {
|
| + std::vector<int>::iterator position = std::find(
|
| + observer_ids_.begin(), observer_ids_.end(), observer_ids_to_remove[i]);
|
| + observer_ids_.erase(position);
|
| + }
|
| +}
|
| +
|
| void WebIDBDatabaseImpl::get(long long transaction_id,
|
| long long object_store_id,
|
| long long index_id,
|
|
|