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 "chrome/browser/chromeos/gdata/gdata_file_system.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_file_system.h" |
6 | 6 |
7 #include <errno.h> | 7 #include <errno.h> |
8 #include <sys/stat.h> | |
8 | 9 |
9 #include <utility> | 10 #include <utility> |
10 | 11 |
11 #include "base/bind.h" | 12 #include "base/bind.h" |
12 #include "base/chromeos/chromeos_version.h" | 13 #include "base/chromeos/chromeos_version.h" |
13 #include "base/eintr_wrapper.h" | 14 #include "base/eintr_wrapper.h" |
14 #include "base/file_util.h" | 15 #include "base/file_util.h" |
15 #include "base/json/json_file_value_serializer.h" | 16 #include "base/json/json_file_value_serializer.h" |
16 #include "base/json/json_reader.h" | 17 #include "base/json/json_reader.h" |
17 #include "base/json/json_writer.h" | 18 #include "base/json/json_writer.h" |
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
200 << ": \"" << strerror(errno) | 201 << ": \"" << strerror(errno) |
201 << "\", " << error; | 202 << "\", " << error; |
202 } else { | 203 } else { |
203 DVLOG(1) << "Created dir " << paths_to_create[i].value(); | 204 DVLOG(1) << "Created dir " << paths_to_create[i].value(); |
204 } | 205 } |
205 } | 206 } |
206 | 207 |
207 return error; | 208 return error; |
208 } | 209 } |
209 | 210 |
211 // Changes the permissions of |file_path| to |permissions|. | |
212 // Returns the platform error code of the operation. | |
213 base::PlatformFileError ChangeFilePermissions(const FilePath& file_path, | |
214 mode_t permissions) { | |
215 base::PlatformFileError error = base::PLATFORM_FILE_OK; | |
216 | |
217 if (chmod(file_path.value().c_str(), permissions) != 0) { | |
218 error = SystemToPlatformError(errno); | |
219 PLOG(ERROR) << "Error changing permissions of " << file_path.value(); | |
kuan
2012/04/13 02:12:13
if u want more informative log, u can append strer
Ben Chan
2012/04/13 03:05:21
PLOG() actually does that but is preferred because
kuan
2012/04/13 03:30:59
i didn't know that, gd to know, thanks :)
| |
220 } else { | |
221 DVLOG(1) << "Changed permissions of " << file_path.value(); | |
222 } | |
223 | |
224 return error; | |
225 } | |
226 | |
210 // Modifies cache state of file on IO thread pool, which involves: | 227 // Modifies cache state of file on IO thread pool, which involves: |
211 // - moving or copying file (per |file_operation_type|) from |source_path| to | 228 // - moving or copying file (per |file_operation_type|) from |source_path| to |
212 // |dest_path| if they're different | 229 // |dest_path| if they're different |
213 // - deleting symlink if |symlink_path| is not empty | 230 // - deleting symlink if |symlink_path| is not empty |
214 // - creating symlink if |symlink_path| is not empty and |create_symlink| is | 231 // - creating symlink if |symlink_path| is not empty and |create_symlink| is |
215 // true. | 232 // true. |
216 base::PlatformFileError ModifyCacheState( | 233 base::PlatformFileError ModifyCacheState( |
217 const FilePath& source_path, | 234 const FilePath& source_path, |
218 const FilePath& dest_path, | 235 const FilePath& dest_path, |
219 GDataFileSystem::FileOperationType file_operation_type, | 236 GDataFileSystem::FileOperationType file_operation_type, |
(...skipping 3025 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3245 void GDataFileSystem::InitializeCacheIfNecessary() { | 3262 void GDataFileSystem::InitializeCacheIfNecessary() { |
3246 // Lock to access cache_initialization_started_; | 3263 // Lock to access cache_initialization_started_; |
3247 base::AutoLock lock(lock_); | 3264 base::AutoLock lock(lock_); |
3248 UnsafeInitializeCacheIfNecessary(); | 3265 UnsafeInitializeCacheIfNecessary(); |
3249 } | 3266 } |
3250 | 3267 |
3251 //========= GDataFileSystem: Cache tasks that ran on io thread pool ============ | 3268 //========= GDataFileSystem: Cache tasks that ran on io thread pool ============ |
3252 | 3269 |
3253 void GDataFileSystem::InitializeCacheOnIOThreadPool() { | 3270 void GDataFileSystem::InitializeCacheOnIOThreadPool() { |
3254 base::PlatformFileError error = CreateCacheDirectories(cache_paths_); | 3271 base::PlatformFileError error = CreateCacheDirectories(cache_paths_); |
3255 | |
3256 if (error != base::PLATFORM_FILE_OK) | 3272 if (error != base::PLATFORM_FILE_OK) |
3257 return; | 3273 return; |
3258 | 3274 |
3275 // Change permissions of cache persistent directory to u+rwx,og+x in order to | |
3276 // allow archive files in that directory to be mounted by cros-disks. | |
3277 error = ChangeFilePermissions( | |
3278 gdata_cache_path_.Append(kGDataCachePersistentDir), | |
kuan
2012/04/13 02:12:13
u can use cache_paths_[GDataRootDirectory::CACHE_T
Ben Chan
2012/04/13 03:05:21
Done.
| |
3279 S_IRWXU | S_IXGRP | S_IXOTH); | |
3280 if (error != base::PLATFORM_FILE_OK) | |
3281 return; | |
3282 | |
3259 // Scan cache persistent and tmp directories to enumerate all files and create | 3283 // Scan cache persistent and tmp directories to enumerate all files and create |
3260 // corresponding entries for cache map. | 3284 // corresponding entries for cache map. |
3261 GDataRootDirectory::CacheMap cache_map; | 3285 GDataRootDirectory::CacheMap cache_map; |
3262 ScanCacheDirectory(GDataRootDirectory::CACHE_TYPE_PERSISTENT, &cache_map); | 3286 ScanCacheDirectory(GDataRootDirectory::CACHE_TYPE_PERSISTENT, &cache_map); |
3263 ScanCacheDirectory(GDataRootDirectory::CACHE_TYPE_TMP, &cache_map); | 3287 ScanCacheDirectory(GDataRootDirectory::CACHE_TYPE_TMP, &cache_map); |
3264 | 3288 |
3265 // Then scan pinned and outgoing directories to update existing entries in | 3289 // Then scan pinned and outgoing directories to update existing entries in |
3266 // cache map, or create new ones for pinned symlinks to /dev/null which target | 3290 // cache map, or create new ones for pinned symlinks to /dev/null which target |
3267 // nothing. | 3291 // nothing. |
3268 // Pinned and outgoing directories should be scanned after the persistent | 3292 // Pinned and outgoing directories should be scanned after the persistent |
(...skipping 874 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
4143 pref_registrar_->Init(profile_->GetPrefs()); | 4167 pref_registrar_->Init(profile_->GetPrefs()); |
4144 pref_registrar_->Add(prefs::kDisableGDataHostedFiles, this); | 4168 pref_registrar_->Add(prefs::kDisableGDataHostedFiles, this); |
4145 } | 4169 } |
4146 | 4170 |
4147 void SetFreeDiskSpaceGetterForTesting(FreeDiskSpaceGetterInterface* getter) { | 4171 void SetFreeDiskSpaceGetterForTesting(FreeDiskSpaceGetterInterface* getter) { |
4148 delete global_free_disk_getter_for_testing; // Safe to delete NULL; | 4172 delete global_free_disk_getter_for_testing; // Safe to delete NULL; |
4149 global_free_disk_getter_for_testing = getter; | 4173 global_free_disk_getter_for_testing = getter; |
4150 } | 4174 } |
4151 | 4175 |
4152 } // namespace gdata | 4176 } // namespace gdata |
OLD | NEW |