Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(657)

Unified Diff: content/browser/indexed_db/indexed_db_dispatcher_host.h

Issue 2727733004: [IndexedDB] Closing mojo connections when renderer quits (Closed)
Patch Set: comments Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/indexed_db/indexed_db_dispatcher_host.h
diff --git a/content/browser/indexed_db/indexed_db_dispatcher_host.h b/content/browser/indexed_db/indexed_db_dispatcher_host.h
index e24caf71e26f8294c4ca2ba6b4cf471dd6d7c83d..c64c71f5a9966d9f8271f203bf261d9c278b829d 100644
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.h
+++ b/content/browser/indexed_db/indexed_db_dispatcher_host.h
@@ -18,34 +18,47 @@
#include "content/browser/blob_storage/chrome_blob_storage_context.h"
#include "content/common/indexed_db/indexed_db.mojom.h"
#include "content/public/browser/browser_thread.h"
+#include "content/public/browser/render_process_host_observer.h"
#include "mojo/public/cpp/bindings/associated_binding_set.h"
+#include "mojo/public/cpp/bindings/strong_associated_binding_set.h"
#include "net/url_request/url_request_context_getter.h"
#include "storage/browser/blob/blob_data_handle.h"
+namespace base {
+class SequencedTaskRunner;
+}
+
namespace url {
class Origin;
}
namespace content {
class IndexedDBBlobInfo;
-class IndexedDBCallbacks;
class IndexedDBContextImpl;
-class IndexedDBDatabaseCallbacks;
// Handles all IndexedDB related messages from a particular renderer process.
-class IndexedDBDispatcherHost
- : public base::RefCountedThreadSafe<IndexedDBDispatcherHost,
- BrowserThread::DeleteOnIOThread>,
- public ::indexed_db::mojom::Factory {
+// Constructed on UI thread, expects all other calls (including destruction) on
+// IO thread.
+class CONTENT_EXPORT IndexedDBDispatcherHost
+ : public ::indexed_db::mojom::Factory,
+ public RenderProcessHostObserver {
public:
// Only call the constructor from the UI thread.
- IndexedDBDispatcherHost(int ipc_process_id,
- net::URLRequestContextGetter* request_context_getter,
- IndexedDBContextImpl* indexed_db_context,
- ChromeBlobStorageContext* blob_storage_context);
+ IndexedDBDispatcherHost(
+ int ipc_process_id,
+ scoped_refptr<net::URLRequestContextGetter> request_context_getter,
+ scoped_refptr<IndexedDBContextImpl> indexed_db_context,
+ scoped_refptr<ChromeBlobStorageContext> blob_storage_context);
void AddBinding(::indexed_db::mojom::FactoryAssociatedRequest request);
+ void AddDatabaseBinding(
+ std::unique_ptr<::indexed_db::mojom::Database> database,
+ ::indexed_db::mojom::DatabaseAssociatedRequest request);
+
+ void AddCursorBinding(std::unique_ptr<::indexed_db::mojom::Cursor> cursor,
+ ::indexed_db::mojom::CursorAssociatedRequest request);
+
// A shortcut for accessing our context.
IndexedDBContextImpl* context() const { return indexed_db_context_.get(); }
storage::BlobStorageContext* blob_storage_context() const {
@@ -56,7 +69,19 @@ class IndexedDBDispatcherHost
std::string HoldBlobData(const IndexedDBBlobInfo& blob_info);
void DropBlobData(const std::string& uuid);
+ // Must be called on the IO thread.
+ base::WeakPtr<IndexedDBDispatcherHost> AsWeakPtr() {
+ return weak_factory_.GetWeakPtr();
+ }
+
+ // Called by UI thread. Used to kill outstanding bindings and weak pointers
+ // in callbacks.
+ void RenderProcessExited(RenderProcessHost* host,
+ base::TerminationStatus status,
+ int exit_code) override;
+
private:
+ class IDBThreadHelper;
// Friends to enable OnDestruct() delegation.
friend class BrowserThread;
friend class base::DeleteHelper<IndexedDBDispatcherHost>;
@@ -80,25 +105,11 @@ class IndexedDBDispatcherHost
const base::string16& name,
bool force_close) override;
- void GetDatabaseNamesOnIDBThread(scoped_refptr<IndexedDBCallbacks> callbacks,
- const url::Origin& origin);
- void OpenOnIDBThread(
- scoped_refptr<IndexedDBCallbacks> callbacks,
- scoped_refptr<IndexedDBDatabaseCallbacks> database_callbacks,
- const url::Origin& origin,
- const base::string16& name,
- int64_t version,
- int64_t transaction_id);
- void DeleteDatabaseOnIDBThread(scoped_refptr<IndexedDBCallbacks> callbacks,
- const url::Origin& origin,
- const base::string16& name,
- bool force_close);
+ void InvalidateWeakPtrsAndClearBindings();
- void ResetDispatcherHosts();
-
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
scoped_refptr<IndexedDBContextImpl> indexed_db_context_;
scoped_refptr<ChromeBlobStorageContext> blob_storage_context_;
+ scoped_refptr<base::SequencedTaskRunner> idb_runner_;
// Maps blob uuid to a pair (handle, ref count). Entry is added and/or count
// is incremented in HoldBlobData(), and count is decremented and/or entry
@@ -112,6 +123,16 @@ class IndexedDBDispatcherHost
mojo::AssociatedBindingSet<::indexed_db::mojom::Factory> bindings_;
+ mojo::StrongAssociatedBindingSet<::indexed_db::mojom::Database>
+ database_bindings_;
+
+ mojo::StrongAssociatedBindingSet<::indexed_db::mojom::Cursor>
+ cursor_bindings_;
+
+ IDBThreadHelper* idb_helper_;
+
+ base::WeakPtrFactory<IndexedDBDispatcherHost> weak_factory_;
+
DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost);
};
« no previous file with comments | « content/browser/indexed_db/indexed_db_database_unittest.cc ('k') | content/browser/indexed_db/indexed_db_dispatcher_host.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698