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

Side by Side Diff: webkit/browser/fileapi/sandbox_file_system_backend_delegate.cc

Issue 145303002: Convert Media Galleries to use base::File (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 6 years, 10 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 | Annotate | Revision Log
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 "webkit/browser/fileapi/sandbox_file_system_backend_delegate.h" 5 #include "webkit/browser/fileapi/sandbox_file_system_backend_delegate.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/file_util.h" 10 #include "base/file_util.h"
(...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after
105 105
106 private: 106 private:
107 scoped_ptr<ObfuscatedFileUtil::AbstractOriginEnumerator> enum_; 107 scoped_ptr<ObfuscatedFileUtil::AbstractOriginEnumerator> enum_;
108 }; 108 };
109 109
110 void OpenFileSystemOnFileTaskRunner( 110 void OpenFileSystemOnFileTaskRunner(
111 ObfuscatedFileUtil* file_util, 111 ObfuscatedFileUtil* file_util,
112 const GURL& origin_url, 112 const GURL& origin_url,
113 FileSystemType type, 113 FileSystemType type,
114 OpenFileSystemMode mode, 114 OpenFileSystemMode mode,
115 base::PlatformFileError* error_ptr) { 115 base::File::Error* error_ptr) {
116 DCHECK(error_ptr); 116 DCHECK(error_ptr);
117 const bool create = (mode == OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT); 117 const bool create = (mode == OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT);
118 file_util->GetDirectoryForOriginAndType( 118 file_util->GetDirectoryForOriginAndType(
119 origin_url, SandboxFileSystemBackendDelegate::GetTypeString(type), 119 origin_url, SandboxFileSystemBackendDelegate::GetTypeString(type),
120 create, error_ptr); 120 create, error_ptr);
121 if (*error_ptr != base::PLATFORM_FILE_OK) { 121 if (*error_ptr != base::File::FILE_OK) {
122 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, 122 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel,
123 kCreateDirectoryError, 123 kCreateDirectoryError,
124 kFileSystemErrorMax); 124 kFileSystemErrorMax);
125 } else { 125 } else {
126 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, kOK, kFileSystemErrorMax); 126 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, kOK, kFileSystemErrorMax);
127 } 127 }
128 // The reference of file_util will be derefed on the FILE thread 128 // The reference of file_util will be derefed on the FILE thread
129 // when the storage of this callback gets deleted regardless of whether 129 // when the storage of this callback gets deleted regardless of whether
130 // this method is called or not. 130 // this method is called or not.
131 } 131 }
132 132
133 void DidOpenFileSystem( 133 void DidOpenFileSystem(
134 base::WeakPtr<SandboxFileSystemBackendDelegate> delegate, 134 base::WeakPtr<SandboxFileSystemBackendDelegate> delegate,
135 const base::Callback<void(base::PlatformFileError error)>& callback, 135 const base::Callback<void(base::File::Error error)>& callback,
136 base::PlatformFileError* error) { 136 base::File::Error* error) {
137 if (delegate.get()) 137 if (delegate.get())
138 delegate.get()->CollectOpenFileSystemMetrics(*error); 138 delegate.get()->CollectOpenFileSystemMetrics(*error);
139 callback.Run(*error); 139 callback.Run(*error);
140 } 140 }
141 141
142 template <typename T> 142 template <typename T>
143 void DeleteSoon(base::SequencedTaskRunner* runner, T* ptr) { 143 void DeleteSoon(base::SequencedTaskRunner* runner, T* ptr) {
144 if (!runner->DeleteSoon(FROM_HERE, ptr)) 144 if (!runner->DeleteSoon(FROM_HERE, ptr))
145 delete ptr; 145 delete ptr;
146 } 146 }
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 SandboxFileSystemBackendDelegate::OriginEnumerator* 229 SandboxFileSystemBackendDelegate::OriginEnumerator*
230 SandboxFileSystemBackendDelegate::CreateOriginEnumerator() { 230 SandboxFileSystemBackendDelegate::CreateOriginEnumerator() {
231 return new ObfuscatedOriginEnumerator(obfuscated_file_util()); 231 return new ObfuscatedOriginEnumerator(obfuscated_file_util());
232 } 232 }
233 233
234 base::FilePath 234 base::FilePath
235 SandboxFileSystemBackendDelegate::GetBaseDirectoryForOriginAndType( 235 SandboxFileSystemBackendDelegate::GetBaseDirectoryForOriginAndType(
236 const GURL& origin_url, 236 const GURL& origin_url,
237 FileSystemType type, 237 FileSystemType type,
238 bool create) { 238 bool create) {
239 base::PlatformFileError error = base::PLATFORM_FILE_OK; 239 base::File::Error error = base::File::FILE_OK;
240 base::FilePath path = obfuscated_file_util()->GetDirectoryForOriginAndType( 240 base::FilePath path = obfuscated_file_util()->GetDirectoryForOriginAndType(
241 origin_url, GetTypeString(type), create, &error); 241 origin_url, GetTypeString(type), create, &error);
242 if (error != base::PLATFORM_FILE_OK) 242 if (error != base::File::FILE_OK)
243 return base::FilePath(); 243 return base::FilePath();
244 return path; 244 return path;
245 } 245 }
246 246
247 void SandboxFileSystemBackendDelegate::OpenFileSystem( 247 void SandboxFileSystemBackendDelegate::OpenFileSystem(
248 const GURL& origin_url, 248 const GURL& origin_url,
249 FileSystemType type, 249 FileSystemType type,
250 OpenFileSystemMode mode, 250 OpenFileSystemMode mode,
251 const OpenFileSystemCallback& callback, 251 const OpenFileSystemCallback& callback,
252 const GURL& root_url) { 252 const GURL& root_url) {
253 if (!IsAllowedScheme(origin_url)) { 253 if (!IsAllowedScheme(origin_url)) {
254 callback.Run(GURL(), std::string(), base::PLATFORM_FILE_ERROR_SECURITY); 254 callback.Run(GURL(), std::string(), base::File::FILE_ERROR_SECURITY);
255 return; 255 return;
256 } 256 }
257 257
258 std::string name = GetFileSystemName(origin_url, type); 258 std::string name = GetFileSystemName(origin_url, type);
259 259
260 base::PlatformFileError* error_ptr = new base::PlatformFileError; 260 base::File::Error* error_ptr = new base::File::Error;
261 file_task_runner_->PostTaskAndReply( 261 file_task_runner_->PostTaskAndReply(
262 FROM_HERE, 262 FROM_HERE,
263 base::Bind(&OpenFileSystemOnFileTaskRunner, 263 base::Bind(&OpenFileSystemOnFileTaskRunner,
264 obfuscated_file_util(), origin_url, type, mode, 264 obfuscated_file_util(), origin_url, type, mode,
265 base::Unretained(error_ptr)), 265 base::Unretained(error_ptr)),
266 base::Bind(&DidOpenFileSystem, 266 base::Bind(&DidOpenFileSystem,
267 weak_factory_.GetWeakPtr(), 267 weak_factory_.GetWeakPtr(),
268 base::Bind(callback, root_url, name), 268 base::Bind(callback, root_url, name),
269 base::Owned(error_ptr))); 269 base::Owned(error_ptr)));
270 270
271 io_thread_checker_.DetachFromThread(); 271 io_thread_checker_.DetachFromThread();
272 is_filesystem_opened_ = true; 272 is_filesystem_opened_ = true;
273 } 273 }
274 274
275 scoped_ptr<FileSystemOperationContext> 275 scoped_ptr<FileSystemOperationContext>
276 SandboxFileSystemBackendDelegate::CreateFileSystemOperationContext( 276 SandboxFileSystemBackendDelegate::CreateFileSystemOperationContext(
277 const FileSystemURL& url, 277 const FileSystemURL& url,
278 FileSystemContext* context, 278 FileSystemContext* context,
279 base::PlatformFileError* error_code) const { 279 base::File::Error* error_code) const {
280 if (!IsAccessValid(url)) { 280 if (!IsAccessValid(url)) {
281 *error_code = base::PLATFORM_FILE_ERROR_SECURITY; 281 *error_code = base::File::FILE_ERROR_SECURITY;
282 return scoped_ptr<FileSystemOperationContext>(); 282 return scoped_ptr<FileSystemOperationContext>();
283 } 283 }
284 284
285 const UpdateObserverList* update_observers = GetUpdateObservers(url.type()); 285 const UpdateObserverList* update_observers = GetUpdateObservers(url.type());
286 const ChangeObserverList* change_observers = GetChangeObservers(url.type()); 286 const ChangeObserverList* change_observers = GetChangeObservers(url.type());
287 DCHECK(update_observers); 287 DCHECK(update_observers);
288 288
289 scoped_ptr<FileSystemOperationContext> operation_context( 289 scoped_ptr<FileSystemOperationContext> operation_context(
290 new FileSystemOperationContext(context)); 290 new FileSystemOperationContext(context));
291 operation_context->set_update_observers(*update_observers); 291 operation_context->set_update_observers(*update_observers);
(...skipping 23 matching lines...) Expand all
315 FileSystemContext* context, 315 FileSystemContext* context,
316 FileSystemType type) const { 316 FileSystemType type) const {
317 if (!IsAccessValid(url)) 317 if (!IsAccessValid(url))
318 return scoped_ptr<FileStreamWriter>(); 318 return scoped_ptr<FileStreamWriter>();
319 const UpdateObserverList* observers = GetUpdateObservers(type); 319 const UpdateObserverList* observers = GetUpdateObservers(type);
320 DCHECK(observers); 320 DCHECK(observers);
321 return scoped_ptr<FileStreamWriter>( 321 return scoped_ptr<FileStreamWriter>(
322 new SandboxFileStreamWriter(context, url, offset, *observers)); 322 new SandboxFileStreamWriter(context, url, offset, *observers));
323 } 323 }
324 324
325 base::PlatformFileError 325 base::File::Error
326 SandboxFileSystemBackendDelegate::DeleteOriginDataOnFileTaskRunner( 326 SandboxFileSystemBackendDelegate::DeleteOriginDataOnFileTaskRunner(
327 FileSystemContext* file_system_context, 327 FileSystemContext* file_system_context,
328 quota::QuotaManagerProxy* proxy, 328 quota::QuotaManagerProxy* proxy,
329 const GURL& origin_url, 329 const GURL& origin_url,
330 FileSystemType type) { 330 FileSystemType type) {
331 DCHECK(file_task_runner_->RunsTasksOnCurrentThread()); 331 DCHECK(file_task_runner_->RunsTasksOnCurrentThread());
332 int64 usage = GetOriginUsageOnFileTaskRunner( 332 int64 usage = GetOriginUsageOnFileTaskRunner(
333 file_system_context, origin_url, type); 333 file_system_context, origin_url, type);
334 usage_cache()->CloseCacheFiles(); 334 usage_cache()->CloseCacheFiles();
335 bool result = obfuscated_file_util()->DeleteDirectoryForOriginAndType( 335 bool result = obfuscated_file_util()->DeleteDirectoryForOriginAndType(
336 origin_url, GetTypeString(type)); 336 origin_url, GetTypeString(type));
337 if (result && proxy) { 337 if (result && proxy) {
338 proxy->NotifyStorageModified( 338 proxy->NotifyStorageModified(
339 quota::QuotaClient::kFileSystem, 339 quota::QuotaClient::kFileSystem,
340 origin_url, 340 origin_url,
341 FileSystemTypeToQuotaStorageType(type), 341 FileSystemTypeToQuotaStorageType(type),
342 -usage); 342 -usage);
343 } 343 }
344 344
345 if (result) 345 if (result)
346 return base::PLATFORM_FILE_OK; 346 return base::File::FILE_OK;
347 return base::PLATFORM_FILE_ERROR_FAILED; 347 return base::File::FILE_ERROR_FAILED;
348 } 348 }
349 349
350 void SandboxFileSystemBackendDelegate::GetOriginsForTypeOnFileTaskRunner( 350 void SandboxFileSystemBackendDelegate::GetOriginsForTypeOnFileTaskRunner(
351 FileSystemType type, std::set<GURL>* origins) { 351 FileSystemType type, std::set<GURL>* origins) {
352 DCHECK(file_task_runner_->RunsTasksOnCurrentThread()); 352 DCHECK(file_task_runner_->RunsTasksOnCurrentThread());
353 DCHECK(origins); 353 DCHECK(origins);
354 scoped_ptr<OriginEnumerator> enumerator(CreateOriginEnumerator()); 354 scoped_ptr<OriginEnumerator> enumerator(CreateOriginEnumerator());
355 GURL origin; 355 GURL origin;
356 while (!(origin = enumerator->Next()).is_empty()) { 356 while (!(origin = enumerator->Next()).is_empty()) {
357 if (enumerator->HasFileSystemType(type)) 357 if (enumerator->HasFileSystemType(type))
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
487 } 487 }
488 488
489 void SandboxFileSystemBackendDelegate::RegisterQuotaUpdateObserver( 489 void SandboxFileSystemBackendDelegate::RegisterQuotaUpdateObserver(
490 FileSystemType type) { 490 FileSystemType type) {
491 AddFileUpdateObserver(type, quota_observer_.get(), file_task_runner_.get()); 491 AddFileUpdateObserver(type, quota_observer_.get(), file_task_runner_.get());
492 } 492 }
493 493
494 void SandboxFileSystemBackendDelegate::InvalidateUsageCache( 494 void SandboxFileSystemBackendDelegate::InvalidateUsageCache(
495 const GURL& origin, 495 const GURL& origin,
496 FileSystemType type) { 496 FileSystemType type) {
497 base::PlatformFileError error = base::PLATFORM_FILE_OK; 497 base::File::Error error = base::File::FILE_OK;
498 base::FilePath usage_file_path = GetUsageCachePathForOriginAndType( 498 base::FilePath usage_file_path = GetUsageCachePathForOriginAndType(
499 obfuscated_file_util(), origin, type, &error); 499 obfuscated_file_util(), origin, type, &error);
500 if (error != base::PLATFORM_FILE_OK) 500 if (error != base::File::FILE_OK)
501 return; 501 return;
502 usage_cache()->IncrementDirty(usage_file_path); 502 usage_cache()->IncrementDirty(usage_file_path);
503 } 503 }
504 504
505 void SandboxFileSystemBackendDelegate::StickyInvalidateUsageCache( 505 void SandboxFileSystemBackendDelegate::StickyInvalidateUsageCache(
506 const GURL& origin, 506 const GURL& origin,
507 FileSystemType type) { 507 FileSystemType type) {
508 sticky_dirty_origins_.insert(std::make_pair(origin, type)); 508 sticky_dirty_origins_.insert(std::make_pair(origin, type));
509 quota_observer()->SetUsageCacheEnabled(origin, type, false); 509 quota_observer()->SetUsageCacheEnabled(origin, type, false);
510 InvalidateUsageCache(origin, type); 510 InvalidateUsageCache(origin, type);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
561 file_system_options_.additional_allowed_schemes()[i].c_str())) 561 file_system_options_.additional_allowed_schemes()[i].c_str()))
562 return true; 562 return true;
563 } 563 }
564 return false; 564 return false;
565 } 565 }
566 566
567 base::FilePath 567 base::FilePath
568 SandboxFileSystemBackendDelegate::GetUsageCachePathForOriginAndType( 568 SandboxFileSystemBackendDelegate::GetUsageCachePathForOriginAndType(
569 const GURL& origin_url, 569 const GURL& origin_url,
570 FileSystemType type) { 570 FileSystemType type) {
571 base::PlatformFileError error; 571 base::File::Error error;
572 base::FilePath path = GetUsageCachePathForOriginAndType( 572 base::FilePath path = GetUsageCachePathForOriginAndType(
573 obfuscated_file_util(), origin_url, type, &error); 573 obfuscated_file_util(), origin_url, type, &error);
574 if (error != base::PLATFORM_FILE_OK) 574 if (error != base::File::FILE_OK)
575 return base::FilePath(); 575 return base::FilePath();
576 return path; 576 return path;
577 } 577 }
578 578
579 // static 579 // static
580 base::FilePath 580 base::FilePath
581 SandboxFileSystemBackendDelegate::GetUsageCachePathForOriginAndType( 581 SandboxFileSystemBackendDelegate::GetUsageCachePathForOriginAndType(
582 ObfuscatedFileUtil* sandbox_file_util, 582 ObfuscatedFileUtil* sandbox_file_util,
583 const GURL& origin_url, 583 const GURL& origin_url,
584 FileSystemType type, 584 FileSystemType type,
585 base::PlatformFileError* error_out) { 585 base::File::Error* error_out) {
586 DCHECK(error_out); 586 DCHECK(error_out);
587 *error_out = base::PLATFORM_FILE_OK; 587 *error_out = base::File::FILE_OK;
588 base::FilePath base_path = sandbox_file_util->GetDirectoryForOriginAndType( 588 base::FilePath base_path = sandbox_file_util->GetDirectoryForOriginAndType(
589 origin_url, GetTypeString(type), false /* create */, error_out); 589 origin_url, GetTypeString(type), false /* create */, error_out);
590 if (*error_out != base::PLATFORM_FILE_OK) 590 if (*error_out != base::File::FILE_OK)
591 return base::FilePath(); 591 return base::FilePath();
592 return base_path.Append(FileSystemUsageCache::kUsageFileName); 592 return base_path.Append(FileSystemUsageCache::kUsageFileName);
593 } 593 }
594 594
595 int64 SandboxFileSystemBackendDelegate::RecalculateUsage( 595 int64 SandboxFileSystemBackendDelegate::RecalculateUsage(
596 FileSystemContext* context, 596 FileSystemContext* context,
597 const GURL& origin, 597 const GURL& origin,
598 FileSystemType type) { 598 FileSystemType type) {
599 FileSystemOperationContext operation_context(context); 599 FileSystemOperationContext operation_context(context);
600 FileSystemURL url = context->CreateCrackedFileSystemURL( 600 FileSystemURL url = context->CreateCrackedFileSystemURL(
601 origin, type, base::FilePath()); 601 origin, type, base::FilePath());
602 scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> enumerator( 602 scoped_ptr<FileSystemFileUtil::AbstractFileEnumerator> enumerator(
603 obfuscated_file_util()->CreateFileEnumerator( 603 obfuscated_file_util()->CreateFileEnumerator(
604 &operation_context, url, true)); 604 &operation_context, url, true));
605 605
606 base::FilePath file_path_each; 606 base::FilePath file_path_each;
607 int64 usage = 0; 607 int64 usage = 0;
608 608
609 while (!(file_path_each = enumerator->Next()).empty()) { 609 while (!(file_path_each = enumerator->Next()).empty()) {
610 usage += enumerator->Size(); 610 usage += enumerator->Size();
611 usage += ObfuscatedFileUtil::ComputeFilePathCost(file_path_each); 611 usage += ObfuscatedFileUtil::ComputeFilePathCost(file_path_each);
612 } 612 }
613 613
614 return usage; 614 return usage;
615 } 615 }
616 616
617 void SandboxFileSystemBackendDelegate::CollectOpenFileSystemMetrics( 617 void SandboxFileSystemBackendDelegate::CollectOpenFileSystemMetrics(
618 base::PlatformFileError error_code) { 618 base::File::Error error_code) {
619 base::Time now = base::Time::Now(); 619 base::Time now = base::Time::Now();
620 bool throttled = now < next_release_time_for_open_filesystem_stat_; 620 bool throttled = now < next_release_time_for_open_filesystem_stat_;
621 if (!throttled) { 621 if (!throttled) {
622 next_release_time_for_open_filesystem_stat_ = 622 next_release_time_for_open_filesystem_stat_ =
623 now + base::TimeDelta::FromHours(kMinimumStatsCollectionIntervalHours); 623 now + base::TimeDelta::FromHours(kMinimumStatsCollectionIntervalHours);
624 } 624 }
625 625
626 #define REPORT(report_value) \ 626 #define REPORT(report_value) \
627 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemDetailLabel, \ 627 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemDetailLabel, \
628 (report_value), \ 628 (report_value), \
629 kFileSystemErrorMax); \ 629 kFileSystemErrorMax); \
630 if (!throttled) { \ 630 if (!throttled) { \
631 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemDetailNonThrottledLabel, \ 631 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemDetailNonThrottledLabel, \
632 (report_value), \ 632 (report_value), \
633 kFileSystemErrorMax); \ 633 kFileSystemErrorMax); \
634 } 634 }
635 635
636 switch (error_code) { 636 switch (error_code) {
637 case base::PLATFORM_FILE_OK: 637 case base::File::FILE_OK:
638 REPORT(kOK); 638 REPORT(kOK);
639 break; 639 break;
640 case base::PLATFORM_FILE_ERROR_INVALID_URL: 640 case base::File::FILE_ERROR_INVALID_URL:
641 REPORT(kInvalidSchemeError); 641 REPORT(kInvalidSchemeError);
642 break; 642 break;
643 case base::PLATFORM_FILE_ERROR_NOT_FOUND: 643 case base::File::FILE_ERROR_NOT_FOUND:
644 REPORT(kNotFound); 644 REPORT(kNotFound);
645 break; 645 break;
646 case base::PLATFORM_FILE_ERROR_FAILED: 646 case base::File::FILE_ERROR_FAILED:
647 default: 647 default:
648 REPORT(kUnknownError); 648 REPORT(kUnknownError);
649 break; 649 break;
650 } 650 }
651 #undef REPORT 651 #undef REPORT
652 } 652 }
653 653
654 ObfuscatedFileUtil* SandboxFileSystemBackendDelegate::obfuscated_file_util() { 654 ObfuscatedFileUtil* SandboxFileSystemBackendDelegate::obfuscated_file_util() {
655 return static_cast<ObfuscatedFileUtil*>(sync_file_util()); 655 return static_cast<ObfuscatedFileUtil*>(sync_file_util());
656 } 656 }
657 657
658 // Declared in obfuscated_file_util.h. 658 // Declared in obfuscated_file_util.h.
659 // static 659 // static
660 ObfuscatedFileUtil* ObfuscatedFileUtil::CreateForTesting( 660 ObfuscatedFileUtil* ObfuscatedFileUtil::CreateForTesting(
661 quota::SpecialStoragePolicy* special_storage_policy, 661 quota::SpecialStoragePolicy* special_storage_policy,
662 const base::FilePath& file_system_directory, 662 const base::FilePath& file_system_directory,
663 base::SequencedTaskRunner* file_task_runner) { 663 base::SequencedTaskRunner* file_task_runner) {
664 return new ObfuscatedFileUtil(special_storage_policy, 664 return new ObfuscatedFileUtil(special_storage_policy,
665 file_system_directory, 665 file_system_directory,
666 file_task_runner, 666 file_task_runner,
667 base::Bind(&GetTypeStringForURL), 667 base::Bind(&GetTypeStringForURL),
668 GetKnownTypeStrings(), 668 GetKnownTypeStrings(),
669 NULL); 669 NULL);
670 } 670 }
671 671
672 } // namespace fileapi 672 } // namespace fileapi
OLDNEW
« no previous file with comments | « webkit/browser/fileapi/sandbox_file_system_backend_delegate.h ('k') | webkit/browser/fileapi/sandbox_quota_observer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698