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

Side by Side Diff: chrome/browser/chromeos/gdata/gdata_util.cc

Issue 10116044: gdata: Support mounting archive files in GData cache. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: gdata: Support mounting archive files in GData cache. Created 8 years, 8 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 (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 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 kReadOnlyFilePermissions)); 214 kReadOnlyFilePermissions));
215 // TODO(tbarzic): When we start supporting openFile operation, we may have to 215 // TODO(tbarzic): When we start supporting openFile operation, we may have to
216 // change permission for localy modified files to match handler's permissions. 216 // change permission for localy modified files to match handler's permissions.
217 cache_paths->push_back(std::make_pair( 217 cache_paths->push_back(std::make_pair(
218 file_system->GetCacheFilePath(resource_id, file_md5, 218 file_system->GetCacheFilePath(resource_id, file_md5,
219 GDataRootDirectory::CACHE_TYPE_PERSISTENT, 219 GDataRootDirectory::CACHE_TYPE_PERSISTENT,
220 GDataFileSystem::CACHED_FILE_LOCALLY_MODIFIED), 220 GDataFileSystem::CACHED_FILE_LOCALLY_MODIFIED),
221 kReadOnlyFilePermissions)); 221 kReadOnlyFilePermissions));
222 cache_paths->push_back(std::make_pair( 222 cache_paths->push_back(std::make_pair(
223 file_system->GetCacheFilePath(resource_id, file_md5, 223 file_system->GetCacheFilePath(resource_id, file_md5,
224 GDataRootDirectory::CACHE_TYPE_PERSISTENT,
225 GDataFileSystem::CACHED_FILE_MOUNTED),
226 kReadOnlyFilePermissions));
227 cache_paths->push_back(std::make_pair(
228 file_system->GetCacheFilePath(resource_id, file_md5,
224 GDataRootDirectory::CACHE_TYPE_TMP, 229 GDataRootDirectory::CACHE_TYPE_TMP,
225 GDataFileSystem::CACHED_FILE_FROM_SERVER), 230 GDataFileSystem::CACHED_FILE_FROM_SERVER),
226 kReadOnlyFilePermissions)); 231 kReadOnlyFilePermissions));
227 232
228 } 233 }
229 234
230 void SetPermissionsForGDataCacheFiles(Profile* profile, 235 void SetPermissionsForGDataCacheFiles(Profile* profile,
231 int pid, 236 int pid,
232 const FilePath& path) { 237 const FilePath& path) {
233 std::vector<std::pair<FilePath, int> > cache_paths; 238 std::vector<std::pair<FilePath, int> > cache_paths;
(...skipping 18 matching lines...) Expand all
252 257
253 // Disable gdata if preference is set. This can happen with commandline flag 258 // Disable gdata if preference is set. This can happen with commandline flag
254 // --disable-gdata or enterprise policy, or probably with user settings too 259 // --disable-gdata or enterprise policy, or probably with user settings too
255 // in the future. 260 // in the future.
256 if (profile->GetPrefs()->GetBoolean(prefs::kDisableGData)) 261 if (profile->GetPrefs()->GetBoolean(prefs::kDisableGData))
257 return false; 262 return false;
258 263
259 return true; 264 return true;
260 } 265 }
261 266
267 // Extracts resource_id, md5, and extra_suffix from cache path.
268 // Pinned and outgoing symlinks have no md5 extension.
269 // The extra_suffix is only non-empty for mounted archives.
satorux1 2012/04/20 21:46:10 We usually don't have a function comment in .cc fi
270 void ParseCacheFilePath(const FilePath& path,
271 std::string* resource_id,
272 std::string* md5,
273 std::string* extra_suffix)
274 {
satorux1 2012/04/20 21:46:10 move { to the previous line.
275 DCHECK(resource_id);
276 DCHECK(md5);
277 DCHECK(extra_suffix);
278
279 // Extract up to two extensions from the right.
280 FilePath base_name = path.BaseName();
281 int num_extensions;
satorux1 2012/04/20 21:46:10 please initialize this with 0, to be extra defensi
282 FilePath::StringType extension[2];
satorux1 2012/04/20 21:46:10 extension -> extensions
283 for (num_extensions = 0; num_extensions < 2; ++num_extensions) {
satorux1 2012/04/20 21:46:10 rather than 2, please do arraysize(extensions)
284 extension[num_extensions] = base_name.Extension();
285 if (!extension[num_extensions].empty()) {
286 // FilePath::Extension returns ".", so strip it.
287 extension[num_extensions] =
satorux1 2012/04/20 21:46:10 instead of using a fixed array, using vector<> and
288 GDataEntry::UnescapeUtf8FileName(extension[num_extensions].substr(1));
289 base_name = base_name.RemoveExtension();
290 } else {
291 break;
292 }
293 }
294
295 *resource_id = GDataEntry::UnescapeUtf8FileName(
296 base_name.RemoveExtension().value());
297 if (num_extensions == 2) {
298 // The extra_suffix is non-empty: "<resource_id>.<md5>.<extra_suffix>".
299 *extra_suffix = extension[0];
300 *md5 = extension[1];
301 } else {
302 // The extra_suffix is not present: "<resource_id>.<md5>".
303 *extra_suffix = std::string();
304 *md5 = extension[0];
305 }
306 }
307
262 } // namespace util 308 } // namespace util
263 } // namespace gdata 309 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698