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

Unified Diff: content/browser/dom_storage/dom_storage_context_wrapper.cc

Issue 2861473002: Clear up session only storage on localstorage shutdown (Closed)
Patch Set: test and nicer 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/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));
}

Powered by Google App Engine
This is Rietveld 408576698