| 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_util.h" | 5 #include "chrome/browser/chromeos/gdata/gdata_util.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 56 base::PLATFORM_FILE_READ | | 56 base::PLATFORM_FILE_READ | |
| 57 base::PLATFORM_FILE_EXCLUSIVE_READ | | 57 base::PLATFORM_FILE_EXCLUSIVE_READ | |
| 58 base::PLATFORM_FILE_ASYNC; | 58 base::PLATFORM_FILE_ASYNC; |
| 59 | 59 |
| 60 GDataFileSystem* GetGDataFileSystem(Profile* profile) { | 60 GDataFileSystem* GetGDataFileSystem(Profile* profile) { |
| 61 GDataSystemService* system_service = | 61 GDataSystemService* system_service = |
| 62 GDataSystemServiceFactory::GetForProfile(profile); | 62 GDataSystemServiceFactory::GetForProfile(profile); |
| 63 return system_service ? system_service->file_system() : NULL; | 63 return system_service ? system_service->file_system() : NULL; |
| 64 } | 64 } |
| 65 | 65 |
| 66 GDataCache* GetGDataCache(Profile* profile) { |
| 67 GDataSystemService* system_service = |
| 68 GDataSystemServiceFactory::GetForProfile(profile); |
| 69 return system_service ? system_service->cache() : NULL; |
| 70 } |
| 71 |
| 66 void GetHostedDocumentURLBlockingThread(const FilePath& gdata_cache_path, | 72 void GetHostedDocumentURLBlockingThread(const FilePath& gdata_cache_path, |
| 67 GURL* url) { | 73 GURL* url) { |
| 68 std::string json; | 74 std::string json; |
| 69 if (!file_util::ReadFileToString(gdata_cache_path, &json)) { | 75 if (!file_util::ReadFileToString(gdata_cache_path, &json)) { |
| 70 NOTREACHED() << "Unable to read file " << gdata_cache_path.value(); | 76 NOTREACHED() << "Unable to read file " << gdata_cache_path.value(); |
| 71 return; | 77 return; |
| 72 } | 78 } |
| 73 DVLOG(1) << "Hosted doc content " << json; | 79 DVLOG(1) << "Hosted doc content " << json; |
| 74 scoped_ptr<base::Value> val(base::JSONReader::Read(json)); | 80 scoped_ptr<base::Value> val(base::JSONReader::Read(json)); |
| 75 base::DictionaryValue* dict_val; | 81 base::DictionaryValue* dict_val; |
| (...skipping 23 matching lines...) Expand all Loading... |
| 99 void OnGetFileInfoForInsertGDataCachePathsPermissions( | 105 void OnGetFileInfoForInsertGDataCachePathsPermissions( |
| 100 Profile* profile, | 106 Profile* profile, |
| 101 std::vector<std::pair<FilePath, int> >* cache_paths, | 107 std::vector<std::pair<FilePath, int> >* cache_paths, |
| 102 const base::Closure& callback, | 108 const base::Closure& callback, |
| 103 base::PlatformFileError error, | 109 base::PlatformFileError error, |
| 104 scoped_ptr<GDataFileProto> file_info) { | 110 scoped_ptr<GDataFileProto> file_info) { |
| 105 DCHECK(profile); | 111 DCHECK(profile); |
| 106 DCHECK(cache_paths); | 112 DCHECK(cache_paths); |
| 107 DCHECK(!callback.is_null()); | 113 DCHECK(!callback.is_null()); |
| 108 | 114 |
| 109 GDataFileSystem* file_system = GetGDataFileSystem(profile); | 115 GDataCache* cache = GetGDataCache(profile); |
| 110 if (!file_system || error != base::PLATFORM_FILE_OK) { | 116 if (!cache || error != base::PLATFORM_FILE_OK) { |
| 111 callback.Run(); | 117 callback.Run(); |
| 112 return; | 118 return; |
| 113 } | 119 } |
| 114 | 120 |
| 115 DCHECK(file_info.get()); | 121 DCHECK(file_info.get()); |
| 116 std::string resource_id = file_info->gdata_entry().resource_id(); | 122 std::string resource_id = file_info->gdata_entry().resource_id(); |
| 117 std::string file_md5 = file_info->file_md5(); | 123 std::string file_md5 = file_info->file_md5(); |
| 118 | 124 |
| 119 // We check permissions for raw cache file paths only for read-only | 125 // We check permissions for raw cache file paths only for read-only |
| 120 // operations (when fileEntry.file() is called), so read only permissions | 126 // operations (when fileEntry.file() is called), so read only permissions |
| 121 // should be sufficient for all cache paths. For the rest of supported | 127 // should be sufficient for all cache paths. For the rest of supported |
| 122 // operations the file access check is done for drive/ paths. | 128 // operations the file access check is done for drive/ paths. |
| 123 cache_paths->push_back(std::make_pair( | 129 cache_paths->push_back(std::make_pair( |
| 124 file_system->GetCacheFilePath(resource_id, file_md5, | 130 cache->GetCacheFilePath(resource_id, file_md5, |
| 125 GDataCache::CACHE_TYPE_PERSISTENT, | 131 GDataCache::CACHE_TYPE_PERSISTENT, |
| 126 GDataCache::CACHED_FILE_FROM_SERVER), | 132 GDataCache::CACHED_FILE_FROM_SERVER), |
| 127 kReadOnlyFilePermissions)); | 133 kReadOnlyFilePermissions)); |
| 128 // TODO(tbarzic): When we start supporting openFile operation, we may have to | 134 // TODO(tbarzic): When we start supporting openFile operation, we may have to |
| 129 // change permission for localy modified files to match handler's permissions. | 135 // change permission for localy modified files to match handler's permissions. |
| 130 cache_paths->push_back(std::make_pair( | 136 cache_paths->push_back(std::make_pair( |
| 131 file_system->GetCacheFilePath(resource_id, file_md5, | 137 cache->GetCacheFilePath(resource_id, file_md5, |
| 132 GDataCache::CACHE_TYPE_PERSISTENT, | 138 GDataCache::CACHE_TYPE_PERSISTENT, |
| 133 GDataCache::CACHED_FILE_LOCALLY_MODIFIED), | 139 GDataCache::CACHED_FILE_LOCALLY_MODIFIED), |
| 134 kReadOnlyFilePermissions)); | 140 kReadOnlyFilePermissions)); |
| 135 cache_paths->push_back(std::make_pair( | 141 cache_paths->push_back(std::make_pair( |
| 136 file_system->GetCacheFilePath(resource_id, file_md5, | 142 cache->GetCacheFilePath(resource_id, file_md5, |
| 137 GDataCache::CACHE_TYPE_PERSISTENT, | 143 GDataCache::CACHE_TYPE_PERSISTENT, |
| 138 GDataCache::CACHED_FILE_MOUNTED), | 144 GDataCache::CACHED_FILE_MOUNTED), |
| 139 kReadOnlyFilePermissions)); | 145 kReadOnlyFilePermissions)); |
| 140 cache_paths->push_back(std::make_pair( | 146 cache_paths->push_back(std::make_pair( |
| 141 file_system->GetCacheFilePath(resource_id, file_md5, | 147 cache->GetCacheFilePath(resource_id, file_md5, |
| 142 GDataCache::CACHE_TYPE_TMP, | 148 GDataCache::CACHE_TYPE_TMP, |
| 143 GDataCache::CACHED_FILE_FROM_SERVER), | 149 GDataCache::CACHED_FILE_FROM_SERVER), |
| 144 kReadOnlyFilePermissions)); | 150 kReadOnlyFilePermissions)); |
| 145 | 151 |
| 146 callback.Run(); | 152 callback.Run(); |
| 147 } | 153 } |
| 148 | 154 |
| 149 } // namespace | 155 } // namespace |
| 150 | 156 |
| 151 const FilePath& GetGDataMountPointPath() { | 157 const FilePath& GetGDataMountPointPath() { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 174 net::EscapePath(resource_id).c_str())); | 180 net::EscapePath(resource_id).c_str())); |
| 175 return GURL(url); | 181 return GURL(url); |
| 176 } | 182 } |
| 177 | 183 |
| 178 void ModifyGDataFileResourceUrl(Profile* profile, | 184 void ModifyGDataFileResourceUrl(Profile* profile, |
| 179 const FilePath& gdata_cache_path, | 185 const FilePath& gdata_cache_path, |
| 180 GURL* url) { | 186 GURL* url) { |
| 181 GDataFileSystem* file_system = GetGDataFileSystem(profile); | 187 GDataFileSystem* file_system = GetGDataFileSystem(profile); |
| 182 if (!file_system) | 188 if (!file_system) |
| 183 return; | 189 return; |
| 190 GDataCache* cache = GetGDataCache(profile); |
| 191 if (!cache) |
| 192 return; |
| 184 | 193 |
| 185 // Handle hosted documents. The edit url is in the temporary file, so we | 194 // Handle hosted documents. The edit url is in the temporary file, so we |
| 186 // read it on a blocking thread. | 195 // read it on a blocking thread. |
| 187 if (file_system->GetCacheDirectoryPath( | 196 if (cache->GetCacheDirectoryPath( |
| 188 GDataCache::CACHE_TYPE_TMP_DOCUMENTS).IsParent( | 197 GDataCache::CACHE_TYPE_TMP_DOCUMENTS).IsParent( |
| 189 gdata_cache_path)) { | 198 gdata_cache_path)) { |
| 190 GURL* edit_url = new GURL(); | 199 GURL* edit_url = new GURL(); |
| 191 content::BrowserThread::GetBlockingPool()->PostTaskAndReply(FROM_HERE, | 200 content::BrowserThread::GetBlockingPool()->PostTaskAndReply(FROM_HERE, |
| 192 base::Bind(&GetHostedDocumentURLBlockingThread, | 201 base::Bind(&GetHostedDocumentURLBlockingThread, |
| 193 gdata_cache_path, edit_url), | 202 gdata_cache_path, edit_url), |
| 194 base::Bind(&OpenEditURLUIThread, profile, base::Owned(edit_url))); | 203 base::Bind(&OpenEditURLUIThread, profile, base::Owned(edit_url))); |
| 195 *url = GURL(); | 204 *url = GURL(); |
| 196 return; | 205 return; |
| 197 } | 206 } |
| 198 | 207 |
| 199 // Handle all other gdata files. | 208 // Handle all other gdata files. |
| 200 if (file_system->GetCacheDirectoryPath( | 209 if (cache->GetCacheDirectoryPath( |
| 201 GDataCache::CACHE_TYPE_TMP).IsParent(gdata_cache_path)) { | 210 GDataCache::CACHE_TYPE_TMP).IsParent(gdata_cache_path)) { |
| 202 const std::string resource_id = | 211 const std::string resource_id = |
| 203 gdata_cache_path.BaseName().RemoveExtension().AsUTF8Unsafe(); | 212 gdata_cache_path.BaseName().RemoveExtension().AsUTF8Unsafe(); |
| 204 GDataEntry* entry = NULL; | 213 GDataEntry* entry = NULL; |
| 205 file_system->FindEntryByResourceIdSync( | 214 file_system->FindEntryByResourceIdSync( |
| 206 resource_id, base::Bind(&ReadOnlyFindEntryCallback, &entry)); | 215 resource_id, base::Bind(&ReadOnlyFindEntryCallback, &entry)); |
| 207 | 216 |
| 208 std::string file_name; | 217 std::string file_name; |
| 209 if (entry && entry->AsGDataFile()) | 218 if (entry && entry->AsGDataFile()) |
| 210 file_name = entry->AsGDataFile()->file_name(); | 219 file_name = entry->AsGDataFile()->file_name(); |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 397 // Assign the extracted extensions to md5 and extra_extension. | 406 // Assign the extracted extensions to md5 and extra_extension. |
| 398 int extension_count = extensions.size(); | 407 int extension_count = extensions.size(); |
| 399 *md5 = (extension_count > 0) ? extensions[extension_count - 1] : | 408 *md5 = (extension_count > 0) ? extensions[extension_count - 1] : |
| 400 std::string(); | 409 std::string(); |
| 401 *extra_extension = (extension_count > 1) ? extensions[extension_count - 2] : | 410 *extra_extension = (extension_count > 1) ? extensions[extension_count - 2] : |
| 402 std::string(); | 411 std::string(); |
| 403 } | 412 } |
| 404 | 413 |
| 405 } // namespace util | 414 } // namespace util |
| 406 } // namespace gdata | 415 } // namespace gdata |
| OLD | NEW |