Index: content/browser/dom_storage/dom_storage_context_wrapper.cc |
diff --git a/content/browser/dom_storage/dom_storage_context_wrapper.cc b/content/browser/dom_storage/dom_storage_context_wrapper.cc |
index be4ffb4c0b619f129745bb2b14a1d742ccb5f950..6d49cc3c1541ba0429e827cc0580647fd314aeb0 100644 |
--- a/content/browser/dom_storage/dom_storage_context_wrapper.cc |
+++ b/content/browser/dom_storage/dom_storage_context_wrapper.cc |
@@ -128,14 +128,14 @@ DOMStorageContextWrapper::DOMStorageContextWrapper( |
base::FilePath storage_dir; |
if (!profile_path.empty()) |
storage_dir = local_partition_path.AppendASCII(kLocalStorageDirectory); |
- // TODO(michaeln): Enable writing to disk when db is versioned, |
- // for now using an empty subdirectory to use an in-memory db. |
- // subdirectory_(subdirectory), |
- mojo_state_.reset(new LocalStorageContextMojo( |
+ // TODO(mek): Use a SequencedTaskRunner once mojo supports that. |
+ mojo_task_runner_ = |
+ BrowserThread::GetTaskRunnerForThread(BrowserThread::IO); |
+ mojo_state_ = new LocalStorageContextMojo( |
connector, context_->task_runner(), |
data_path.empty() ? data_path |
: data_path.AppendASCII(kLocalStorageDirectory), |
- storage_dir)); |
+ storage_dir, special_storage_policy); |
} |
if (base::FeatureList::IsEnabled(features::kMemoryCoordinator)) { |
@@ -152,8 +152,14 @@ void DOMStorageContextWrapper::GetLocalStorageUsage( |
const GetLocalStorageUsageCallback& callback) { |
DCHECK(context_.get()); |
if (mojo_state_) { |
- mojo_state_->GetStorageUsage(base::BindOnce( |
- &DOMStorageContextWrapper::GotMojoLocalStorageUsage, this, callback)); |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::BindOnce( |
+ &LocalStorageContextMojo::GetStorageUsage, mojo_state_, |
+ base::BindOnce( |
+ &DOMStorageContextWrapper::GotMojoLocalStorageUsage, this, |
+ callback, |
+ base::RetainedRef(base::ThreadTaskRunnerHandle::Get())))); |
return; |
} |
context_->task_runner()->PostShutdownBlockingTask( |
@@ -182,7 +188,10 @@ void DOMStorageContextWrapper::DeleteLocalStorageForPhysicalOrigin( |
base::Bind(&DOMStorageContextImpl::DeleteLocalStorageForPhysicalOrigin, |
context_, origin)); |
if (mojo_state_) |
- mojo_state_->DeleteStorageForPhysicalOrigin(url::Origin(origin)); |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::BindOnce(&LocalStorageContextMojo::DeleteStorageForPhysicalOrigin, |
+ mojo_state_, url::Origin(origin))); |
} |
void DOMStorageContextWrapper::DeleteLocalStorage(const GURL& origin) { |
@@ -192,7 +201,9 @@ void DOMStorageContextWrapper::DeleteLocalStorage(const GURL& origin) { |
DOMStorageTaskRunner::PRIMARY_SEQUENCE, |
base::Bind(&DOMStorageContextImpl::DeleteLocalStorage, context_, origin)); |
if (mojo_state_) |
- mojo_state_->DeleteStorage(url::Origin(origin)); |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, base::BindOnce(&LocalStorageContextMojo::DeleteStorage, |
+ mojo_state_, url::Origin(origin))); |
} |
void DOMStorageContextWrapper::DeleteSessionStorage( |
@@ -232,11 +243,20 @@ void DOMStorageContextWrapper::SetForceKeepSessionState() { |
FROM_HERE, |
DOMStorageTaskRunner::PRIMARY_SEQUENCE, |
base::Bind(&DOMStorageContextImpl::SetForceKeepSessionState, context_)); |
+ if (mojo_state_) |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::BindOnce(&LocalStorageContextMojo::SetForceKeepSessionState, |
+ mojo_state_)); |
} |
void DOMStorageContextWrapper::Shutdown() { |
DCHECK(context_.get()); |
- mojo_state_.reset(); |
+ if (mojo_state_) { |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::BindOnce(&LocalStorageContextMojo::Shutdown, mojo_state_)); |
+ } |
memory_pressure_listener_.reset(); |
context_->task_runner()->PostShutdownBlockingTask( |
FROM_HERE, |
@@ -250,11 +270,14 @@ void DOMStorageContextWrapper::Shutdown() { |
void DOMStorageContextWrapper::Flush() { |
DCHECK(context_.get()); |
+ |
context_->task_runner()->PostShutdownBlockingTask( |
FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE, |
base::Bind(&DOMStorageContextImpl::Flush, context_)); |
if (mojo_state_) |
- mojo_state_->Flush(); |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::BindOnce(&LocalStorageContextMojo::Flush, mojo_state_)); |
} |
void DOMStorageContextWrapper::OpenLocalStorage( |
@@ -262,7 +285,9 @@ void DOMStorageContextWrapper::OpenLocalStorage( |
mojom::LevelDBWrapperRequest request) { |
if (!mojo_state_) |
return; |
- mojo_state_->OpenLocalStorage(origin, std::move(request)); |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, base::BindOnce(&LocalStorageContextMojo::OpenLocalStorage, |
+ mojo_state_, origin, std::move(request))); |
} |
void DOMStorageContextWrapper::OnMemoryPressure( |
@@ -286,16 +311,19 @@ void DOMStorageContextWrapper::PurgeMemory(DOMStorageContextImpl::PurgeOption |
FROM_HERE, |
base::Bind(&DOMStorageContextImpl::PurgeMemory, context_, purge_option)); |
if (mojo_state_ && purge_option == DOMStorageContextImpl::PURGE_AGGRESSIVE) |
- mojo_state_->PurgeMemory(); |
+ mojo_task_runner_->PostTask( |
+ FROM_HERE, |
+ base::BindOnce(&LocalStorageContextMojo::PurgeMemory, mojo_state_)); |
} |
void DOMStorageContextWrapper::GotMojoLocalStorageUsage( |
GetLocalStorageUsageCallback callback, |
+ base::SingleThreadTaskRunner* reply_task_runner, |
std::vector<LocalStorageUsageInfo> usage) { |
context_->task_runner()->PostShutdownBlockingTask( |
FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE, |
base::Bind(&GetLocalStorageUsageHelper, base::Passed(&usage), |
- base::RetainedRef(base::ThreadTaskRunnerHandle::Get()), |
+ base::RetainedRef(reply_task_runner), |
base::RetainedRef(context_), callback)); |
} |