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

Side by Side Diff: content/browser/dom_storage/dom_storage_context_wrapper.cc

Issue 2611743002: Integrate mojo localstorage implementation with DOMStorageContext API. (Closed)
Patch Set: add flush Created 3 years, 11 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/dom_storage/dom_storage_context_wrapper.h" 5 #include "content/browser/dom_storage/dom_storage_context_wrapper.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/command_line.h"
12 #include "base/files/file_path.h" 13 #include "base/files/file_path.h"
13 #include "base/location.h" 14 #include "base/location.h"
14 #include "base/memory/memory_coordinator_client_registry.h" 15 #include "base/memory/memory_coordinator_client_registry.h"
15 #include "base/memory/ptr_util.h" 16 #include "base/memory/ptr_util.h"
16 #include "base/memory/weak_ptr.h" 17 #include "base/memory/weak_ptr.h"
17 #include "base/sequenced_task_runner.h" 18 #include "base/sequenced_task_runner.h"
18 #include "base/single_thread_task_runner.h" 19 #include "base/single_thread_task_runner.h"
19 #include "base/strings/utf_string_conversions.h" 20 #include "base/strings/utf_string_conversions.h"
20 #include "base/task_scheduler/post_task.h" 21 #include "base/task_scheduler/post_task.h"
21 #include "base/threading/thread_task_runner_handle.h" 22 #include "base/threading/thread_task_runner_handle.h"
22 #include "content/browser/dom_storage/dom_storage_area.h" 23 #include "content/browser/dom_storage/dom_storage_area.h"
23 #include "content/browser/dom_storage/dom_storage_context_impl.h" 24 #include "content/browser/dom_storage/dom_storage_context_impl.h"
24 #include "content/browser/dom_storage/dom_storage_task_runner.h" 25 #include "content/browser/dom_storage/dom_storage_task_runner.h"
25 #include "content/browser/dom_storage/local_storage_context_mojo.h" 26 #include "content/browser/dom_storage/local_storage_context_mojo.h"
26 #include "content/browser/dom_storage/session_storage_namespace_impl.h" 27 #include "content/browser/dom_storage/session_storage_namespace_impl.h"
27 #include "content/public/browser/browser_thread.h" 28 #include "content/public/browser/browser_thread.h"
28 #include "content/public/browser/content_browser_client.h" 29 #include "content/public/browser/content_browser_client.h"
29 #include "content/public/browser/local_storage_usage_info.h" 30 #include "content/public/browser/local_storage_usage_info.h"
30 #include "content/public/browser/session_storage_usage_info.h" 31 #include "content/public/browser/session_storage_usage_info.h"
31 #include "content/public/common/content_client.h" 32 #include "content/public/common/content_client.h"
32 #include "content/public/common/content_features.h" 33 #include "content/public/common/content_features.h"
34 #include "content/public/common/content_switches.h"
33 35
34 namespace content { 36 namespace content {
35 namespace { 37 namespace {
36 38
37 const char kLocalStorageDirectory[] = "Local Storage"; 39 const char kLocalStorageDirectory[] = "Local Storage";
38 const char kSessionStorageDirectory[] = "Session Storage"; 40 const char kSessionStorageDirectory[] = "Session Storage";
39 41
40 void InvokeLocalStorageUsageCallbackHelper( 42 void InvokeLocalStorageUsageCallbackHelper(
41 const DOMStorageContext::GetLocalStorageUsageCallback& callback, 43 const DOMStorageContext::GetLocalStorageUsageCallback& callback,
42 const std::vector<LocalStorageUsageInfo>* infos) { 44 const std::vector<LocalStorageUsageInfo>* infos) {
43 callback.Run(*infos); 45 callback.Run(*infos);
44 } 46 }
45 47
46 void GetLocalStorageUsageHelper( 48 void GetLocalStorageUsageHelper(
49 std::vector<LocalStorageUsageInfo> mojo_usage,
47 base::SingleThreadTaskRunner* reply_task_runner, 50 base::SingleThreadTaskRunner* reply_task_runner,
48 DOMStorageContextImpl* context, 51 DOMStorageContextImpl* context,
49 const DOMStorageContext::GetLocalStorageUsageCallback& callback) { 52 const DOMStorageContext::GetLocalStorageUsageCallback& callback) {
50 std::vector<LocalStorageUsageInfo>* infos = 53 std::vector<LocalStorageUsageInfo>* infos =
51 new std::vector<LocalStorageUsageInfo>; 54 new std::vector<LocalStorageUsageInfo>(std::move(mojo_usage));
52 context->GetLocalStorageUsage(infos, true); 55 context->GetLocalStorageUsage(infos, true);
53 reply_task_runner->PostTask( 56 reply_task_runner->PostTask(
54 FROM_HERE, base::Bind(&InvokeLocalStorageUsageCallbackHelper, callback, 57 FROM_HERE, base::Bind(&InvokeLocalStorageUsageCallbackHelper, callback,
55 base::Owned(infos))); 58 base::Owned(infos)));
56 } 59 }
57 60
58 void InvokeSessionStorageUsageCallbackHelper( 61 void InvokeSessionStorageUsageCallbackHelper(
59 const DOMStorageContext::GetSessionStorageUsageCallback& callback, 62 const DOMStorageContext::GetSessionStorageUsageCallback& callback,
60 const std::vector<SessionStorageUsageInfo>* infos) { 63 const std::vector<SessionStorageUsageInfo>* infos) {
61 callback.Run(*infos); 64 callback.Run(*infos);
(...skipping 11 matching lines...) Expand all
73 base::Owned(infos))); 76 base::Owned(infos)));
74 } 77 }
75 78
76 } // namespace 79 } // namespace
77 80
78 DOMStorageContextWrapper::DOMStorageContextWrapper( 81 DOMStorageContextWrapper::DOMStorageContextWrapper(
79 service_manager::Connector* connector, 82 service_manager::Connector* connector,
80 const base::FilePath& profile_path, 83 const base::FilePath& profile_path,
81 const base::FilePath& local_partition_path, 84 const base::FilePath& local_partition_path,
82 storage::SpecialStoragePolicy* special_storage_policy) { 85 storage::SpecialStoragePolicy* special_storage_policy) {
83 base::FilePath storage_dir; 86 if (base::CommandLine::ForCurrentProcess()->HasSwitch(
84 if (!profile_path.empty()) 87 switches::kMojoLocalStorage)) {
85 storage_dir = local_partition_path.AppendASCII(kLocalStorageDirectory); 88 base::FilePath storage_dir;
86 // TODO(michaeln): Enable writing to disk when db is versioned, 89 if (!profile_path.empty())
87 // for now using an empty subdirectory to use an in-memory db. 90 storage_dir = local_partition_path.AppendASCII(kLocalStorageDirectory);
88 // subdirectory_(subdirectory), 91 // TODO(michaeln): Enable writing to disk when db is versioned,
89 mojo_state_.reset(new LocalStorageContextMojo( 92 // for now using an empty subdirectory to use an in-memory db.
90 connector, base::FilePath() /* storage_dir */)); 93 // subdirectory_(subdirectory),
94 mojo_state_.reset(new LocalStorageContextMojo(
95 connector, base::FilePath() /* storage_dir */));
96 }
91 97
92 base::FilePath data_path; 98 base::FilePath data_path;
93 if (!profile_path.empty()) 99 if (!profile_path.empty())
94 data_path = profile_path.Append(local_partition_path); 100 data_path = profile_path.Append(local_partition_path);
95 101
96 scoped_refptr<base::SequencedTaskRunner> primary_sequence; 102 scoped_refptr<base::SequencedTaskRunner> primary_sequence;
97 scoped_refptr<base::SequencedTaskRunner> commit_sequence; 103 scoped_refptr<base::SequencedTaskRunner> commit_sequence;
98 if (GetContentClient()->browser()->ShouldRedirectDOMStorageTaskRunner()) { 104 if (GetContentClient()->browser()->ShouldRedirectDOMStorageTaskRunner()) {
99 // TaskPriority::USER_BLOCKING as an experiment because this is currently 105 // TaskPriority::USER_BLOCKING as an experiment because this is currently
100 // believed to be blocking synchronous IPCs from the renderers: 106 // believed to be blocking synchronous IPCs from the renderers:
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 memory_pressure_listener_.reset(new base::MemoryPressureListener( 140 memory_pressure_listener_.reset(new base::MemoryPressureListener(
135 base::Bind(&DOMStorageContextWrapper::OnMemoryPressure, this))); 141 base::Bind(&DOMStorageContextWrapper::OnMemoryPressure, this)));
136 } 142 }
137 } 143 }
138 144
139 DOMStorageContextWrapper::~DOMStorageContextWrapper() {} 145 DOMStorageContextWrapper::~DOMStorageContextWrapper() {}
140 146
141 void DOMStorageContextWrapper::GetLocalStorageUsage( 147 void DOMStorageContextWrapper::GetLocalStorageUsage(
142 const GetLocalStorageUsageCallback& callback) { 148 const GetLocalStorageUsageCallback& callback) {
143 DCHECK(context_.get()); 149 DCHECK(context_.get());
150 if (mojo_state_) {
151 mojo_state_->GetStorageUsage(base::BindOnce(
152 &DOMStorageContextWrapper::GotMojoLocalStorageUsage, this, callback));
153 return;
154 }
144 context_->task_runner()->PostShutdownBlockingTask( 155 context_->task_runner()->PostShutdownBlockingTask(
145 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE, 156 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
146 base::Bind(&GetLocalStorageUsageHelper, 157 base::Bind(&GetLocalStorageUsageHelper,
158 std::vector<LocalStorageUsageInfo>(),
147 base::RetainedRef(base::ThreadTaskRunnerHandle::Get()), 159 base::RetainedRef(base::ThreadTaskRunnerHandle::Get()),
148 base::RetainedRef(context_), callback)); 160 base::RetainedRef(context_), callback));
149 } 161 }
150 162
151 void DOMStorageContextWrapper::GetSessionStorageUsage( 163 void DOMStorageContextWrapper::GetSessionStorageUsage(
152 const GetSessionStorageUsageCallback& callback) { 164 const GetSessionStorageUsageCallback& callback) {
153 DCHECK(context_.get()); 165 DCHECK(context_.get());
154 context_->task_runner()->PostShutdownBlockingTask( 166 context_->task_runner()->PostShutdownBlockingTask(
155 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE, 167 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
156 base::Bind(&GetSessionStorageUsageHelper, 168 base::Bind(&GetSessionStorageUsageHelper,
157 base::RetainedRef(base::ThreadTaskRunnerHandle::Get()), 169 base::RetainedRef(base::ThreadTaskRunnerHandle::Get()),
158 base::RetainedRef(context_), callback)); 170 base::RetainedRef(context_), callback));
159 } 171 }
160 172
161 void DOMStorageContextWrapper::DeleteLocalStorageForPhysicalOrigin( 173 void DOMStorageContextWrapper::DeleteLocalStorageForPhysicalOrigin(
162 const GURL& origin) { 174 const GURL& origin) {
163 DCHECK(context_.get()); 175 DCHECK(context_.get());
164 context_->task_runner()->PostShutdownBlockingTask( 176 context_->task_runner()->PostShutdownBlockingTask(
165 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE, 177 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
166 base::Bind(&DOMStorageContextImpl::DeleteLocalStorageForPhysicalOrigin, 178 base::Bind(&DOMStorageContextImpl::DeleteLocalStorageForPhysicalOrigin,
167 context_, origin)); 179 context_, origin));
180 if (mojo_state_)
181 mojo_state_->DeleteStorageForPhysicalOrigin(url::Origin(origin));
168 } 182 }
169 183
170 void DOMStorageContextWrapper::DeleteLocalStorage(const GURL& origin) { 184 void DOMStorageContextWrapper::DeleteLocalStorage(const GURL& origin) {
171 DCHECK(context_.get()); 185 DCHECK(context_.get());
172 context_->task_runner()->PostShutdownBlockingTask( 186 context_->task_runner()->PostShutdownBlockingTask(
173 FROM_HERE, 187 FROM_HERE,
174 DOMStorageTaskRunner::PRIMARY_SEQUENCE, 188 DOMStorageTaskRunner::PRIMARY_SEQUENCE,
175 base::Bind(&DOMStorageContextImpl::DeleteLocalStorage, context_, origin)); 189 base::Bind(&DOMStorageContextImpl::DeleteLocalStorage, context_, origin));
190 if (mojo_state_)
191 mojo_state_->DeleteStorage(url::Origin(origin));
176 } 192 }
177 193
178 void DOMStorageContextWrapper::DeleteSessionStorage( 194 void DOMStorageContextWrapper::DeleteSessionStorage(
179 const SessionStorageUsageInfo& usage_info) { 195 const SessionStorageUsageInfo& usage_info) {
180 DCHECK(context_.get()); 196 DCHECK(context_.get());
181 context_->task_runner()->PostShutdownBlockingTask( 197 context_->task_runner()->PostShutdownBlockingTask(
182 FROM_HERE, 198 FROM_HERE,
183 DOMStorageTaskRunner::PRIMARY_SEQUENCE, 199 DOMStorageTaskRunner::PRIMARY_SEQUENCE,
184 base::Bind(&DOMStorageContextImpl::DeleteSessionStorage, 200 base::Bind(&DOMStorageContextImpl::DeleteSessionStorage,
185 context_, usage_info)); 201 context_, usage_info));
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 base::MemoryCoordinatorClientRegistry::GetInstance()->Unregister(this); 242 base::MemoryCoordinatorClientRegistry::GetInstance()->Unregister(this);
227 } 243 }
228 244
229 } 245 }
230 246
231 void DOMStorageContextWrapper::Flush() { 247 void DOMStorageContextWrapper::Flush() {
232 DCHECK(context_.get()); 248 DCHECK(context_.get());
233 context_->task_runner()->PostShutdownBlockingTask( 249 context_->task_runner()->PostShutdownBlockingTask(
234 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE, 250 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
235 base::Bind(&DOMStorageContextImpl::Flush, context_)); 251 base::Bind(&DOMStorageContextImpl::Flush, context_));
252 if (mojo_state_)
253 mojo_state_->Flush();
236 } 254 }
237 255
238 void DOMStorageContextWrapper::OpenLocalStorage( 256 void DOMStorageContextWrapper::OpenLocalStorage(
239 const url::Origin& origin, 257 const url::Origin& origin,
240 mojom::LevelDBWrapperRequest request) { 258 mojom::LevelDBWrapperRequest request) {
259 if (!mojo_state_)
260 return;
241 mojo_state_->OpenLocalStorage(origin, std::move(request)); 261 mojo_state_->OpenLocalStorage(origin, std::move(request));
242 } 262 }
243 263
244 void DOMStorageContextWrapper::OnMemoryPressure( 264 void DOMStorageContextWrapper::OnMemoryPressure(
245 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) { 265 base::MemoryPressureListener::MemoryPressureLevel memory_pressure_level) {
246 DOMStorageContextImpl::PurgeOption purge_option = 266 DOMStorageContextImpl::PurgeOption purge_option =
247 DOMStorageContextImpl::PURGE_UNOPENED; 267 DOMStorageContextImpl::PURGE_UNOPENED;
248 if (memory_pressure_level == 268 if (memory_pressure_level ==
249 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL) { 269 base::MemoryPressureListener::MEMORY_PRESSURE_LEVEL_CRITICAL) {
250 purge_option = DOMStorageContextImpl::PURGE_AGGRESSIVE; 270 purge_option = DOMStorageContextImpl::PURGE_AGGRESSIVE;
(...skipping 23 matching lines...) Expand all
274 } 294 }
275 } 295 }
276 296
277 void DOMStorageContextWrapper::PurgeMemory(DOMStorageContextImpl::PurgeOption 297 void DOMStorageContextWrapper::PurgeMemory(DOMStorageContextImpl::PurgeOption
278 purge_option) { 298 purge_option) {
279 context_->task_runner()->PostTask( 299 context_->task_runner()->PostTask(
280 FROM_HERE, 300 FROM_HERE,
281 base::Bind(&DOMStorageContextImpl::PurgeMemory, context_, purge_option)); 301 base::Bind(&DOMStorageContextImpl::PurgeMemory, context_, purge_option));
282 } 302 }
283 303
304 void DOMStorageContextWrapper::GotMojoLocalStorageUsage(
305 GetLocalStorageUsageCallback callback,
306 std::vector<LocalStorageUsageInfo> usage) {
307 context_->task_runner()->PostShutdownBlockingTask(
michaeln 2017/01/04 21:14:44 Not sure you want to handle this in the current CL
Marijn Kruisselbrink 2017/01/04 21:17:36 Yeah, that's true. And that results in two "locals
308 FROM_HERE, DOMStorageTaskRunner::PRIMARY_SEQUENCE,
309 base::Bind(&GetLocalStorageUsageHelper, base::Passed(&usage),
310 base::RetainedRef(base::ThreadTaskRunnerHandle::Get()),
311 base::RetainedRef(context_), callback));
312 }
313
284 } // namespace content 314 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/dom_storage/dom_storage_context_wrapper.h ('k') | content/browser/dom_storage/local_storage_context_mojo.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698