| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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_mount_point_provider.h" | 5 #include "webkit/browser/fileapi/sandbox_mount_point_provider.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 } | 87 } |
| 88 | 88 |
| 89 virtual bool HasFileSystemType(fileapi::FileSystemType type) const OVERRIDE { | 89 virtual bool HasFileSystemType(fileapi::FileSystemType type) const OVERRIDE { |
| 90 return enum_->HasFileSystemType(type); | 90 return enum_->HasFileSystemType(type); |
| 91 } | 91 } |
| 92 | 92 |
| 93 private: | 93 private: |
| 94 scoped_ptr<ObfuscatedFileUtil::AbstractOriginEnumerator> enum_; | 94 scoped_ptr<ObfuscatedFileUtil::AbstractOriginEnumerator> enum_; |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 void DidValidateFileSystemRoot( | 97 void DidOpenFileSystem( |
| 98 base::WeakPtr<SandboxMountPointProvider> mount_point_provider, | 98 base::WeakPtr<SandboxMountPointProvider> mount_point_provider, |
| 99 const FileSystemMountPointProvider::ValidateFileSystemCallback& callback, | 99 const FileSystemMountPointProvider::OpenFileSystemCallback& callback, |
| 100 base::PlatformFileError* error) { | 100 base::PlatformFileError* error) { |
| 101 if (mount_point_provider) | 101 if (mount_point_provider) |
| 102 mount_point_provider.get()->CollectOpenFileSystemMetrics(*error); | 102 mount_point_provider.get()->CollectOpenFileSystemMetrics(*error); |
| 103 callback.Run(*error); | 103 callback.Run(*error); |
| 104 } | 104 } |
| 105 | 105 |
| 106 void ValidateRootOnFileThread( | 106 void OpenFileSystemOnFileThread( |
| 107 ObfuscatedFileUtil* file_util, | 107 ObfuscatedFileUtil* file_util, |
| 108 const GURL& origin_url, | 108 const GURL& origin_url, |
| 109 FileSystemType type, | 109 FileSystemType type, |
| 110 bool create, | 110 OpenFileSystemMode mode, |
| 111 base::PlatformFileError* error_ptr) { | 111 base::PlatformFileError* error_ptr) { |
| 112 DCHECK(error_ptr); | 112 DCHECK(error_ptr); |
| 113 | 113 |
| 114 const bool create = (mode == OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT); |
| 114 base::FilePath root_path = | 115 base::FilePath root_path = |
| 115 file_util->GetDirectoryForOriginAndType( | 116 file_util->GetDirectoryForOriginAndType( |
| 116 origin_url, type, create, error_ptr); | 117 origin_url, type, create, error_ptr); |
| 117 if (*error_ptr != base::PLATFORM_FILE_OK) { | 118 if (*error_ptr != base::PLATFORM_FILE_OK) { |
| 118 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, | 119 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, |
| 119 kCreateDirectoryError, | 120 kCreateDirectoryError, |
| 120 kFileSystemErrorMax); | 121 kFileSystemErrorMax); |
| 121 } else { | 122 } else { |
| 122 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, kOK, kFileSystemErrorMax); | 123 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, kOK, kFileSystemErrorMax); |
| 123 } | 124 } |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 delete quota_observer; | 191 delete quota_observer; |
| 191 if (!file_task_runner_->DeleteSoon(FROM_HERE, file_system_usage_cache)) | 192 if (!file_task_runner_->DeleteSoon(FROM_HERE, file_system_usage_cache)) |
| 192 delete file_system_usage_cache; | 193 delete file_system_usage_cache; |
| 193 } | 194 } |
| 194 } | 195 } |
| 195 | 196 |
| 196 bool SandboxMountPointProvider::CanHandleType(FileSystemType type) const { | 197 bool SandboxMountPointProvider::CanHandleType(FileSystemType type) const { |
| 197 return IsSandboxType(type); | 198 return IsSandboxType(type); |
| 198 } | 199 } |
| 199 | 200 |
| 200 void SandboxMountPointProvider::ValidateFileSystemRoot( | 201 void SandboxMountPointProvider::OpenFileSystem( |
| 201 const GURL& origin_url, fileapi::FileSystemType type, bool create, | 202 const GURL& origin_url, fileapi::FileSystemType type, |
| 202 const ValidateFileSystemCallback& callback) { | 203 OpenFileSystemMode mode, |
| 204 const OpenFileSystemCallback& callback) { |
| 203 if (file_system_options_.is_incognito() && | 205 if (file_system_options_.is_incognito() && |
| 204 !(type == kFileSystemTypeTemporary && | 206 !(type == kFileSystemTypeTemporary && |
| 205 enable_temporary_file_system_in_incognito_)) { | 207 enable_temporary_file_system_in_incognito_)) { |
| 206 // TODO(kinuko): return an isolated temporary directory. | 208 // TODO(kinuko): return an isolated temporary directory. |
| 207 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); | 209 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); |
| 208 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, | 210 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, |
| 209 kIncognito, | 211 kIncognito, |
| 210 kFileSystemErrorMax); | 212 kFileSystemErrorMax); |
| 211 return; | 213 return; |
| 212 } | 214 } |
| 213 | 215 |
| 214 if (!IsAllowedScheme(origin_url)) { | 216 if (!IsAllowedScheme(origin_url)) { |
| 215 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); | 217 callback.Run(base::PLATFORM_FILE_ERROR_SECURITY); |
| 216 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, | 218 UMA_HISTOGRAM_ENUMERATION(kOpenFileSystemLabel, |
| 217 kInvalidSchemeError, | 219 kInvalidSchemeError, |
| 218 kFileSystemErrorMax); | 220 kFileSystemErrorMax); |
| 219 return; | 221 return; |
| 220 } | 222 } |
| 221 | 223 |
| 222 base::PlatformFileError* error_ptr = new base::PlatformFileError; | 224 base::PlatformFileError* error_ptr = new base::PlatformFileError; |
| 223 file_task_runner_->PostTaskAndReply( | 225 file_task_runner_->PostTaskAndReply( |
| 224 FROM_HERE, | 226 FROM_HERE, |
| 225 base::Bind(&ValidateRootOnFileThread, | 227 base::Bind(&OpenFileSystemOnFileThread, |
| 226 sandbox_sync_file_util(), | 228 sandbox_sync_file_util(), |
| 227 origin_url, type, create, | 229 origin_url, type, mode, |
| 228 base::Unretained(error_ptr)), | 230 base::Unretained(error_ptr)), |
| 229 base::Bind(&DidValidateFileSystemRoot, | 231 base::Bind(&DidOpenFileSystem, |
| 230 weak_factory_.GetWeakPtr(), | 232 weak_factory_.GetWeakPtr(), |
| 231 callback, base::Owned(error_ptr))); | 233 callback, base::Owned(error_ptr))); |
| 232 | 234 |
| 233 if (enable_usage_tracking_) | 235 if (enable_usage_tracking_) |
| 234 return; | 236 return; |
| 235 | 237 |
| 236 // Schedule full usage recalculation on the next launch without | 238 // Schedule full usage recalculation on the next launch without |
| 237 // --disable-file-system-usage-tracking. | 239 // --disable-file-system-usage-tracking. |
| 238 file_task_runner_->PostTask( | 240 file_task_runner_->PostTask( |
| 239 FROM_HERE, | 241 FROM_HERE, |
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 | 676 |
| 675 while (!(file_path_each = enumerator->Next()).empty()) { | 677 while (!(file_path_each = enumerator->Next()).empty()) { |
| 676 usage += enumerator->Size(); | 678 usage += enumerator->Size(); |
| 677 usage += ObfuscatedFileUtil::ComputeFilePathCost(file_path_each); | 679 usage += ObfuscatedFileUtil::ComputeFilePathCost(file_path_each); |
| 678 } | 680 } |
| 679 | 681 |
| 680 return usage; | 682 return usage; |
| 681 } | 683 } |
| 682 | 684 |
| 683 } // namespace fileapi | 685 } // namespace fileapi |
| OLD | NEW |