Commit 854259c1 authored by Adrienne Walker's avatar Adrienne Walker Committed by Commit Bot

IndexedDB: reconnect observers on mojo disconnect

This can't happen right now, but will be needed when the storage service
restarts.

Bug: 1015214
Change-Id: I51de219204847310f2b3238c104dea97dc72909c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2055384Reviewed-by: default avatarDaniel Murphy <dmurph@chromium.org>
Reviewed-by: default avatarKinuko Yasuda <kinuko@chromium.org>
Commit-Queue: enne <enne@chromium.org>
Cr-Commit-Position: refs/heads/master@{#741510}
parent 9d445e64
...@@ -179,13 +179,8 @@ class StorageHandler::IndexedDBObserver ...@@ -179,13 +179,8 @@ class StorageHandler::IndexedDBObserver
base::WeakPtr<StorageHandler> owner_storage_handler) base::WeakPtr<StorageHandler> owner_storage_handler)
: owner_(owner_storage_handler), receiver_(this) { : owner_(owner_storage_handler), receiver_(this) {
DCHECK_CURRENTLY_ON(BrowserThread::UI); DCHECK_CURRENTLY_ON(BrowserThread::UI);
if (!owner_storage_handler)
return; ReconnectObserver();
auto& control =
owner_storage_handler->storage_partition_->GetIndexedDBControl();
mojo::PendingRemote<storage::mojom::IndexedDBObserver> remote;
receiver_.Bind(remote.InitWithNewPipeAndPassReceiver());
control.AddObserver(std::move(remote));
} }
~IndexedDBObserver() override { DCHECK_CURRENTLY_ON(BrowserThread::UI); } ~IndexedDBObserver() override { DCHECK_CURRENTLY_ON(BrowserThread::UI); }
...@@ -227,6 +222,24 @@ class StorageHandler::IndexedDBObserver ...@@ -227,6 +222,24 @@ class StorageHandler::IndexedDBObserver
} }
private: private:
void ReconnectObserver() {
DCHECK(!receiver_.is_bound());
if (!owner_)
return;
auto& control = owner_->storage_partition_->GetIndexedDBControl();
mojo::PendingRemote<storage::mojom::IndexedDBObserver> remote;
receiver_.Bind(remote.InitWithNewPipeAndPassReceiver());
receiver_.set_disconnect_handler(base::BindOnce(
[](IndexedDBObserver* observer) {
// If this observer disconnects because IndexedDB or the storage
// service goes away, reconnect again.
observer->ReconnectObserver();
},
this));
control.AddObserver(std::move(remote));
}
base::flat_set<url::Origin> origins_; base::flat_set<url::Origin> origins_;
base::WeakPtr<StorageHandler> owner_; base::WeakPtr<StorageHandler> owner_;
mojo::Receiver<storage::mojom::IndexedDBObserver> receiver_; mojo::Receiver<storage::mojom::IndexedDBObserver> receiver_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment