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

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

Issue 2847013002: Switch to mojo localstorage backend by default. (Closed)
Patch Set: rebase Created 3 years, 7 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 1a18095a5c5e08ee83efddfdefa2667a023070a6..8c8a9decf2cf5194e438fe404ad5c80e10b314ef 100644
--- a/content/browser/dom_storage/dom_storage_context_wrapper.cc
+++ b/content/browser/dom_storage/dom_storage_context_wrapper.cc
@@ -7,6 +7,7 @@
#include <string>
#include <vector>
+#include "base/barrier_closure.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/command_line.h"
@@ -39,22 +40,36 @@ const char kLocalStorageDirectory[] = "Local Storage";
const char kSessionStorageDirectory[] = "Session Storage";
void InvokeLocalStorageUsageCallbackHelper(
- const DOMStorageContext::GetLocalStorageUsageCallback& callback,
- const std::vector<LocalStorageUsageInfo>* infos) {
+ const DOMStorageContext::GetLocalStorageUsageCallback& callback,
+ std::unique_ptr<std::vector<LocalStorageUsageInfo>> infos) {
callback.Run(*infos);
}
void GetLocalStorageUsageHelper(
- std::vector<LocalStorageUsageInfo> mojo_usage,
base::SingleThreadTaskRunner* reply_task_runner,
DOMStorageContextImpl* context,
const DOMStorageContext::GetLocalStorageUsageCallback& callback) {
- std::vector<LocalStorageUsageInfo>* infos =
- new std::vector<LocalStorageUsageInfo>(std::move(mojo_usage));
- context->GetLocalStorageUsage(infos, true);
+ auto infos = base::MakeUnique<std::vector<LocalStorageUsageInfo>>();
dcheng 2017/06/06 22:22:55 Out of curiosity: why wrap it in unique_ptr? vecto
Marijn Kruisselbrink 2017/06/06 22:52:35 Good question... The old code presumably wrapped i
dcheng 2017/06/06 23:02:44 Ah, I see. The code felt kind of like it wanted pr
+ context->GetLocalStorageUsage(infos.get(), true);
reply_task_runner->PostTask(
- FROM_HERE, base::Bind(&InvokeLocalStorageUsageCallbackHelper, callback,
- base::Owned(infos)));
+ FROM_HERE, base::BindOnce(&InvokeLocalStorageUsageCallbackHelper,
+ callback, std::move(infos)));
+}
+
+void CollectLocalStorageUsage(
+ std::vector<LocalStorageUsageInfo>* out_info,
+ base::Closure done_callback,
+ const std::vector<LocalStorageUsageInfo>& in_info) {
+ out_info->insert(out_info->end(), in_info.begin(), in_info.end());
+ done_callback.Run();
+}
+
+void GotMojoLocalStorageUsage(
+ scoped_refptr<base::SingleThreadTaskRunner> reply_task_runner,
+ const DOMStorageContext::GetLocalStorageUsageCallback& callback,
+ std::vector<LocalStorageUsageInfo> usage) {
+ reply_task_runner->PostTask(FROM_HERE,
+ base::BindOnce(callback, std::move(usage)));
}
void InvokeSessionStorageUsageCallbackHelper(
@@ -104,8 +119,8 @@ DOMStorageContextWrapper::DOMStorageContextWrapper(
new DOMStorageWorkerPoolTaskRunner(std::move(primary_sequence),
std::move(commit_sequence)));
- if (base::CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kMojoLocalStorage)) {
+ if (!base::CommandLine::ForCurrentProcess()->HasSwitch(
+ switches::kDisableMojoLocalStorage)) {
base::FilePath storage_dir;
if (!profile_path.empty())
storage_dir = local_partition_path.AppendASCII(kLocalStorageDirectory);
@@ -136,6 +151,12 @@ void DOMStorageContextWrapper::GetLocalStorageUsage(
const GetLocalStorageUsageCallback& callback) {
DCHECK(context_.get());
if (mojo_state_) {
+ auto infos = base::MakeUnique<std::vector<LocalStorageUsageInfo>>();
+ auto* infos_ptr = infos.get();
+ base::RepeatingClosure got_local_storage_usage = base::BarrierClosure(
+ 2, base::BindOnce(&InvokeLocalStorageUsageCallbackHelper, callback,
+ std::move(infos)));
+
// base::Unretained is safe here, because the mojo_state_ won't be deleted
// until a ShutdownAndDelete task has been ran on the mojo_task_runner_, and
// as soon as that task is posted, mojo_state_ is set to null, preventing
@@ -145,16 +166,22 @@ void DOMStorageContextWrapper::GetLocalStorageUsage(
base::BindOnce(
&LocalStorageContextMojo::GetStorageUsage,
base::Unretained(mojo_state_),
- base::BindOnce(
- &DOMStorageContextWrapper::GotMojoLocalStorageUsage, this,
- callback,
- base::RetainedRef(base::ThreadTaskRunnerHandle::Get()))));
+ base::BindOnce(&GotMojoLocalStorageUsage,
+ base::ThreadTaskRunnerHandle::Get(),
+ base::Bind(CollectLocalStorageUsage, infos_ptr,
+ got_local_storage_usage))));
+ context_->task_runner()->PostShutdownBlockingTask(
+ FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
+ base::Bind(&GetLocalStorageUsageHelper,
+ base::RetainedRef(base::ThreadTaskRunnerHandle::Get()),
+ base::RetainedRef(context_),
+ base::Bind(&CollectLocalStorageUsage, infos_ptr,
+ got_local_storage_usage)));
return;
}
context_->task_runner()->PostShutdownBlockingTask(
FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
base::Bind(&GetLocalStorageUsageHelper,
- std::vector<LocalStorageUsageInfo>(),
base::RetainedRef(base::ThreadTaskRunnerHandle::Get()),
base::RetainedRef(context_), callback));
}
@@ -271,7 +298,6 @@ void DOMStorageContextWrapper::Shutdown() {
if (base::FeatureList::IsEnabled(features::kMemoryCoordinator)) {
base::MemoryCoordinatorClientRegistry::GetInstance()->Unregister(this);
}
-
}
void DOMStorageContextWrapper::Flush() {
@@ -306,6 +332,20 @@ void DOMStorageContextWrapper::OpenLocalStorage(
std::move(request)));
}
+void DOMStorageContextWrapper::SetLocalStorageDatabaseForTesting(
+ leveldb::mojom::LevelDBDatabaseAssociatedPtr database) {
+ if (!mojo_state_)
+ return;
+ // base::Unretained is safe here, because the mojo_state_ won't be deleted
+ // until a ShutdownAndDelete task has been ran on the mojo_task_runner_, and
+ // as soon as that task is posted, mojo_state_ is set to null, preventing
+ // further tasks from being queued.
+ mojo_task_runner_->PostTask(
+ FROM_HERE,
+ base::BindOnce(&LocalStorageContextMojo::SetDatabaseForTesting,
+ base::Unretained(mojo_state_), std::move(database)));
+}
+
void DOMStorageContextWrapper::OnMemoryPressure(
base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
DOMStorageContextImpl::PurgeOption purge_option =
@@ -337,15 +377,4 @@ void DOMStorageContextWrapper::PurgeMemory(DOMStorageContextImpl::PurgeOption
}
}
-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(reply_task_runner),
- base::RetainedRef(context_), callback));
-}
-
} // namespace content

Powered by Google App Engine
This is Rietveld 408576698