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 |
deleted file mode 100644 |
index 4ff5bd486d53bd7b5523c23805c634740456b588..0000000000000000000000000000000000000000 |
--- a/content/browser/indexed_db/indexed_db_dispatcher_host.h |
+++ /dev/null |
@@ -1,320 +0,0 @@ |
-// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#ifndef CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ |
-#define CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ |
- |
-#include <stdint.h> |
- |
-#include <map> |
-#include <memory> |
-#include <string> |
-#include <utility> |
-#include <vector> |
- |
-#include "base/id_map.h" |
-#include "base/macros.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/weak_ptr.h" |
-#include "content/browser/blob_storage/chrome_blob_storage_context.h" |
-#include "content/public/browser/browser_message_filter.h" |
-#include "net/url_request/url_request_context_getter.h" |
-#include "storage/browser/blob/blob_data_handle.h" |
-#include "storage/browser/quota/quota_manager.h" |
-#include "storage/common/quota/quota_status_code.h" |
-#include "url/gurl.h" |
- |
-struct IndexedDBDatabaseMetadata; |
-struct IndexedDBHostMsg_DatabaseCount_Params; |
-struct IndexedDBHostMsg_DatabaseCreateIndex_Params; |
-struct IndexedDBHostMsg_DatabaseCreateObjectStore_Params; |
-struct IndexedDBHostMsg_DatabaseCreateTransaction_Params; |
-struct IndexedDBHostMsg_DatabaseDeleteRange_Params; |
-struct IndexedDBHostMsg_DatabaseGet_Params; |
-struct IndexedDBHostMsg_DatabaseGetAll_Params; |
-struct IndexedDBHostMsg_DatabaseObserve_Params; |
-struct IndexedDBHostMsg_DatabaseOpenCursor_Params; |
-struct IndexedDBHostMsg_DatabasePut_Params; |
-struct IndexedDBHostMsg_DatabaseSetIndexKeys_Params; |
-struct IndexedDBHostMsg_FactoryDeleteDatabase_Params; |
-struct IndexedDBHostMsg_FactoryGetDatabaseNames_Params; |
-struct IndexedDBHostMsg_FactoryOpen_Params; |
-struct IndexedDBMsg_Observation; |
-struct IndexedDBMsg_ObserverChanges; |
- |
-namespace url { |
-class Origin; |
-} |
- |
-namespace content { |
-class IndexedDBBlobInfo; |
-class IndexedDBConnection; |
-class IndexedDBContextImpl; |
-class IndexedDBCursor; |
-class IndexedDBKey; |
-class IndexedDBKeyPath; |
-class IndexedDBKeyRange; |
-class IndexedDBObservation; |
-class IndexedDBObserverChanges; |
-struct IndexedDBDatabaseMetadata; |
- |
-// Handles all IndexedDB related messages from a particular renderer process. |
-class IndexedDBDispatcherHost : public BrowserMessageFilter { |
- 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); |
- |
- static ::IndexedDBDatabaseMetadata ConvertMetadata( |
- const content::IndexedDBDatabaseMetadata& metadata); |
- static IndexedDBMsg_ObserverChanges ConvertObserverChanges( |
- std::unique_ptr<IndexedDBObserverChanges> changes); |
- static IndexedDBMsg_Observation ConvertObservation( |
- const IndexedDBObservation* observation); |
- |
- // BrowserMessageFilter implementation. |
- void OnChannelClosing() override; |
- void OnDestruct() const override; |
- base::TaskRunner* OverrideTaskRunnerForMessage( |
- const IPC::Message& message) override; |
- bool OnMessageReceived(const IPC::Message& message) override; |
- |
- void FinishTransaction(int64_t host_transaction_id, bool committed); |
- |
- // A shortcut for accessing our context. |
- IndexedDBContextImpl* context() const { return indexed_db_context_.get(); } |
- storage::BlobStorageContext* blob_storage_context() const { |
- return blob_storage_context_->context(); |
- } |
- |
- // IndexedDBCallbacks call these methods to add the results into the |
- // applicable map. See below for more details. |
- int32_t Add(IndexedDBCursor* cursor); |
- int32_t Add(IndexedDBConnection* connection, |
- int32_t ipc_thread_id, |
- const url::Origin& origin); |
- |
- void RegisterTransactionId(int64_t host_transaction_id, |
- const url::Origin& origin); |
- |
- IndexedDBCursor* GetCursorFromId(int32_t ipc_cursor_id); |
- |
- // These are called to map a 32-bit front-end (renderer-specific) transaction |
- // id to and from a back-end ("host") transaction id that encodes the process |
- // id in the high 32 bits. The mapping is host-specific and ids are validated. |
- int64_t HostTransactionId(int64_t transaction_id); |
- int64_t RendererTransactionId(int64_t host_transaction_id); |
- |
- // These are called to decode a host transaction ID, for diagnostic purposes. |
- static uint32_t TransactionIdToRendererTransactionId( |
- int64_t host_transaction_id); |
- static uint32_t TransactionIdToProcessId(int64_t host_transaction_id); |
- |
- std::string HoldBlobData(const IndexedDBBlobInfo& blob_info); |
- |
- private: |
- // Friends to enable OnDestruct() delegation. |
- friend class BrowserThread; |
- friend class base::DeleteHelper<IndexedDBDispatcherHost>; |
- |
- // Used in nested classes. |
- typedef std::map<int64_t, int64_t> TransactionIDToDatabaseIDMap; |
- typedef std::map<int64_t, uint64_t> TransactionIDToSizeMap; |
- typedef std::map<int64_t, url::Origin> TransactionIDToOriginMap; |
- typedef std::map<int32_t, url::Origin> WebIDBObjectIDToOriginMap; |
- |
- // IDMap for RefCounted types |
- template <typename RefCountedType> |
- class RefIDMap { |
- public: |
- typedef int32_t KeyType; |
- |
- RefIDMap() {} |
- ~RefIDMap() {} |
- |
- KeyType Add(RefCountedType* data) { |
- return map_.Add(new scoped_refptr<RefCountedType>(data)); |
- } |
- |
- RefCountedType* Lookup(KeyType id) { |
- scoped_refptr<RefCountedType>* ptr = map_.Lookup(id); |
- if (ptr == NULL) |
- return NULL; |
- return ptr->get(); |
- } |
- |
- void Remove(KeyType id) { map_.Remove(id); } |
- |
- void set_check_on_null_data(bool value) { |
- map_.set_check_on_null_data(value); |
- } |
- |
- private: |
- IDMap<scoped_refptr<RefCountedType>, IDMapOwnPointer> map_; |
- |
- DISALLOW_COPY_AND_ASSIGN(RefIDMap); |
- }; |
- |
- class DatabaseDispatcherHost { |
- public: |
- explicit DatabaseDispatcherHost(IndexedDBDispatcherHost* parent); |
- ~DatabaseDispatcherHost(); |
- |
- void CloseAll(); |
- bool OnMessageReceived(const IPC::Message& message); |
- |
- void OnCreateObjectStore( |
- const IndexedDBHostMsg_DatabaseCreateObjectStore_Params& params); |
- void OnDeleteObjectStore(int32_t ipc_database_id, |
- int64_t transaction_id, |
- int64_t object_store_id); |
- void OnCreateTransaction( |
- const IndexedDBHostMsg_DatabaseCreateTransaction_Params&); |
- void OnClose(int32_t ipc_database_id); |
- void OnVersionChangeIgnored(int32_t ipc_database_id); |
- void OnDestroyed(int32_t ipc_database_id); |
- |
- void OnObserve(const IndexedDBHostMsg_DatabaseObserve_Params&); |
- void OnUnobserve(int32_t ipc_database_id, |
- const std::vector<int32_t>& observer_ids_to_remove); |
- |
- void OnGet(const IndexedDBHostMsg_DatabaseGet_Params& params); |
- void OnGetAll(const IndexedDBHostMsg_DatabaseGetAll_Params& params); |
- // OnPutWrapper starts on the IO thread so that it can grab BlobDataHandles |
- // before posting to the IDB TaskRunner for the rest of the job. |
- void OnPutWrapper(const IndexedDBHostMsg_DatabasePut_Params& params); |
- void OnPut(const IndexedDBHostMsg_DatabasePut_Params& params, |
- std::vector<storage::BlobDataHandle*> handles); |
- void OnSetIndexKeys( |
- const IndexedDBHostMsg_DatabaseSetIndexKeys_Params& params); |
- void OnSetIndexesReady(int32_t ipc_database_id, |
- int64_t transaction_id, |
- int64_t object_store_id, |
- const std::vector<int64_t>& ids); |
- void OnOpenCursor(const IndexedDBHostMsg_DatabaseOpenCursor_Params& params); |
- void OnCount(const IndexedDBHostMsg_DatabaseCount_Params& params); |
- void OnDeleteRange( |
- const IndexedDBHostMsg_DatabaseDeleteRange_Params& params); |
- void OnClear(int32_t ipc_thread_id, |
- int32_t ipc_callbacks_id, |
- int32_t ipc_database_id, |
- int64_t transaction_id, |
- int64_t object_store_id); |
- void OnCreateIndex( |
- const IndexedDBHostMsg_DatabaseCreateIndex_Params& params); |
- void OnDeleteIndex(int32_t ipc_database_id, |
- int64_t transaction_id, |
- int64_t object_store_id, |
- int64_t index_id); |
- |
- void OnAbort(int32_t ipc_database_id, int64_t transaction_id); |
- void OnCommit(int32_t ipc_database_id, int64_t transaction_id); |
- void OnGotUsageAndQuotaForCommit(int32_t ipc_database_id, |
- int64_t transaction_id, |
- storage::QuotaStatusCode status, |
- int64_t usage, |
- int64_t quota); |
- |
- IndexedDBDispatcherHost* parent_; |
- IDMap<IndexedDBConnection, IDMapOwnPointer> map_; |
- WebIDBObjectIDToOriginMap database_origin_map_; |
- TransactionIDToSizeMap transaction_size_map_; |
- TransactionIDToOriginMap transaction_origin_map_; |
- TransactionIDToDatabaseIDMap transaction_database_map_; |
- |
- // Weak pointers are used when an asynchronous quota request is made, in |
- // case the dispatcher is torn down before the response returns. |
- base::WeakPtrFactory<DatabaseDispatcherHost> weak_factory_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(DatabaseDispatcherHost); |
- }; |
- |
- class CursorDispatcherHost { |
- public: |
- explicit CursorDispatcherHost(IndexedDBDispatcherHost* parent); |
- ~CursorDispatcherHost(); |
- |
- bool OnMessageReceived(const IPC::Message& message); |
- |
- void OnAdvance(int32_t ipc_object_store_id, |
- int32_t ipc_thread_id, |
- int32_t ipc_callbacks_id, |
- uint32_t count); |
- void OnContinue(int32_t ipc_object_store_id, |
- int32_t ipc_thread_id, |
- int32_t ipc_callbacks_id, |
- const IndexedDBKey& key, |
- const IndexedDBKey& primary_key); |
- void OnPrefetch(int32_t ipc_cursor_id, |
- int32_t ipc_thread_id, |
- int32_t ipc_callbacks_id, |
- int n); |
- void OnPrefetchReset(int32_t ipc_cursor_id, |
- int used_prefetches, |
- int unused_prefetches); |
- void OnDestroyed(int32_t ipc_cursor_id); |
- |
- IndexedDBDispatcherHost* parent_; |
- RefIDMap<IndexedDBCursor> map_; |
- |
- private: |
- DISALLOW_COPY_AND_ASSIGN(CursorDispatcherHost); |
- }; |
- |
- ~IndexedDBDispatcherHost() override; |
- |
- // Helper templates. |
- template <class ReturnType> |
- ReturnType* GetOrTerminateProcess(IDMap<ReturnType, IDMapOwnPointer>* map, |
- int32_t ipc_return_object_id); |
- template <class ReturnType> |
- ReturnType* GetOrTerminateProcess(RefIDMap<ReturnType>* map, |
- int32_t ipc_return_object_id); |
- |
- template <typename MapType> |
- void DestroyObject(MapType* map, int32_t ipc_object_id); |
- |
- // Message processing. Most of the work is delegated to the dispatcher hosts |
- // below. |
- void OnIDBFactoryGetDatabaseNames( |
- const IndexedDBHostMsg_FactoryGetDatabaseNames_Params& p); |
- void OnIDBFactoryOpen(const IndexedDBHostMsg_FactoryOpen_Params& p); |
- |
- void OnIDBFactoryDeleteDatabase( |
- const IndexedDBHostMsg_FactoryDeleteDatabase_Params& p); |
- |
- void OnAckReceivedBlobs(const std::vector<std::string>& uuids); |
- void OnPutHelper(const IndexedDBHostMsg_DatabasePut_Params& params, |
- std::vector<storage::BlobDataHandle*> handles); |
- |
- void ResetDispatcherHosts(); |
- void DropBlobData(const std::string& uuid); |
- |
- scoped_refptr<net::URLRequestContextGetter> request_context_getter_; |
- scoped_refptr<IndexedDBContextImpl> indexed_db_context_; |
- scoped_refptr<ChromeBlobStorageContext> blob_storage_context_; |
- |
- // 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 |
- // removed in DropBlobData(). |
- std::map<std::string, |
- std::pair<std::unique_ptr<storage::BlobDataHandle>, int>> |
- blob_data_handle_map_; |
- |
- // Only access on IndexedDB thread. |
- std::unique_ptr<DatabaseDispatcherHost> database_dispatcher_host_; |
- std::unique_ptr<CursorDispatcherHost> cursor_dispatcher_host_; |
- |
- // Used to set file permissions for blob storage. |
- int ipc_process_id_; |
- |
- DISALLOW_IMPLICIT_CONSTRUCTORS(IndexedDBDispatcherHost); |
-}; |
- |
-} // namespace content |
- |
-#endif // CONTENT_BROWSER_INDEXED_DB_INDEXED_DB_DISPATCHER_HOST_H_ |