Chromium Code Reviews| Index: content/browser/dom_storage/local_storage_context_mojo.h |
| diff --git a/content/browser/dom_storage/local_storage_context_mojo.h b/content/browser/dom_storage/local_storage_context_mojo.h |
| index 9500eb199b8d6a2b86841424bfadc4e3a7f062de..7d372c1c25f25b904151fe1beaeec1369335c82f 100644 |
| --- a/content/browser/dom_storage/local_storage_context_mojo.h |
| +++ b/content/browser/dom_storage/local_storage_context_mojo.h |
| @@ -10,6 +10,7 @@ |
| #include "base/files/file_path.h" |
| #include "content/common/content_export.h" |
| #include "content/common/leveldb_wrapper.mojom.h" |
| +#include "content/public/browser/browser_thread.h" |
| #include "services/file/public/interfaces/file_system.mojom.h" |
| #include "url/origin.h" |
| @@ -17,6 +18,10 @@ namespace service_manager { |
| class Connector; |
| } |
| +namespace storage { |
| +class SpecialStoragePolicy; |
| +} |
| + |
| namespace content { |
| class DOMStorageTaskRunner; |
| @@ -25,16 +30,18 @@ struct LocalStorageUsageInfo; |
| // Used for mojo-based LocalStorage implementation (behind --mojo-local-storage |
| // for now). |
|
michaeln
2017/05/03 21:01:29
Describe the thread access pattern in the class co
Marijn Kruisselbrink
2017/05/04 23:03:46
Done
|
| -class CONTENT_EXPORT LocalStorageContextMojo { |
| +class CONTENT_EXPORT LocalStorageContextMojo |
| + : public base::RefCountedThreadSafe<LocalStorageContextMojo> { |
|
michaeln
2017/05/03 21:01:29
I'd rather avoid refcounting if we can, but i see
Marijn Kruisselbrink
2017/05/04 23:03:46
Went that route. Seems reasonable, but somewhat un
|
| public: |
| using GetStorageUsageCallback = |
| base::OnceCallback<void(std::vector<LocalStorageUsageInfo>)>; |
| - LocalStorageContextMojo(service_manager::Connector* connector, |
| - scoped_refptr<DOMStorageTaskRunner> task_runner, |
| - const base::FilePath& old_localstorage_path, |
| - const base::FilePath& subdirectory); |
| - ~LocalStorageContextMojo(); |
| + LocalStorageContextMojo( |
| + service_manager::Connector* connector, |
| + scoped_refptr<DOMStorageTaskRunner> task_runner, |
| + const base::FilePath& old_localstorage_path, |
| + const base::FilePath& subdirectory, |
| + storage::SpecialStoragePolicy* special_storage_policy); |
| void OpenLocalStorage(const url::Origin& origin, |
| mojom::LevelDBWrapperRequest request); |
| @@ -44,6 +51,18 @@ class CONTENT_EXPORT LocalStorageContextMojo { |
| void DeleteStorageForPhysicalOrigin(const url::Origin& origin); |
| void Flush(); |
| + // Used by content settings to alter the behavior around |
| + // what data to keep and what data to discard at shutdown. |
| + // The policy is not so straight forward to describe, see |
| + // the implementation for details. |
| + void SetForceKeepSessionState() { force_keep_session_state_ = true; } |
| + |
| + // Called when the owning BrowserContext is ending. |
| + // Schedules the commit of any unsaved changes and will delete |
| + // and keep data on disk per the content settings and special storage |
| + // policies. |
| + void Shutdown(); |
| + |
| // Clears any caches, to free up as much memory as possible. Next access to |
| // storage for a particular origin will reload the data from the database. |
| void PurgeMemory(); |
| @@ -58,6 +77,9 @@ class CONTENT_EXPORT LocalStorageContextMojo { |
| class LevelDBWrapperHolder; |
| + friend class base::RefCountedThreadSafe<LocalStorageContextMojo>; |
| + ~LocalStorageContextMojo(); |
| + |
| // Runs |callback| immediately if already connected to a database, otherwise |
| // delays running |callback| untill after a connection has been established. |
| // Initiates connecting to the database if no connection is in progres yet. |
| @@ -91,16 +113,24 @@ class CONTENT_EXPORT LocalStorageContextMojo { |
| const url::Origin& origin, |
| std::vector<LocalStorageUsageInfo> usage); |
| - service_manager::Connector* const connector_; |
| + void OnGotStorageUsageForShutdown(std::vector<LocalStorageUsageInfo> usage); |
| + void OnShutdownCommitComplete(leveldb::mojom::DatabaseError error); |
| + |
| + std::unique_ptr<service_manager::Connector> connector_; |
| const base::FilePath subdirectory_; |
| enum ConnectionState { |
| NO_CONNECTION, |
| CONNECTION_IN_PROGRESS, |
| - CONNECTION_FINISHED |
| + CONNECTION_FINISHED, |
| + CONNECTION_SHUTDOWN |
| } connection_state_ = NO_CONNECTION; |
| bool database_initialized_ = false; |
| + bool is_shutdown_ = false; |
| + bool force_keep_session_state_ = false; |
| + scoped_refptr<storage::SpecialStoragePolicy> special_storage_policy_; |
| + |
| file::mojom::FileSystemPtr file_system_; |
| filesystem::mojom::DirectoryPtr directory_; |