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

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

Issue 10829277: GDataFileSystem is no longer a friend of GDataDirectory. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: change comment verb tenses Created 8 years, 4 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 (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 <set> 7 #include <set>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 const FileOperationCallback& in_callback) 495 const FileOperationCallback& in_callback)
496 : local_file_path(in_local_file_path), 496 : local_file_path(in_local_file_path),
497 remote_file_path(in_remote_file_path), 497 remote_file_path(in_remote_file_path),
498 callback(in_callback) {} 498 callback(in_callback) {}
499 499
500 const FilePath local_file_path; 500 const FilePath local_file_path;
501 const FilePath remote_file_path; 501 const FilePath remote_file_path;
502 const FileOperationCallback callback; 502 const FileOperationCallback callback;
503 }; 503 };
504 504
505 // GDataFileSystem::AddUploadedFileParams implementation.
506 struct GDataFileSystem::AddUploadedFileParams {
507 AddUploadedFileParams(UploadMode upload_mode,
508 GDataDirectory* parent_dir,
509 scoped_ptr<GDataEntry> new_entry,
510 const FilePath& file_content_path,
511 GDataCache::FileOperationType cache_operation,
512 const base::Closure& callback)
513 : upload_mode(upload_mode),
514 parent_dir(parent_dir),
515 new_entry(new_entry.Pass()),
516 file_content_path(file_content_path),
517 cache_operation(cache_operation),
518 callback(callback) {
519 }
520
521 UploadMode upload_mode;
522 GDataDirectory* parent_dir;
523 scoped_ptr<GDataEntry> new_entry;
524 FilePath file_content_path;
525 GDataCache::FileOperationType cache_operation;
526 base::Closure callback;
527 std::string resource_id;
528 std::string md5;
529 };
530
531
505 // GDataFileSystem class implementation. 532 // GDataFileSystem class implementation.
506 533
507 GDataFileSystem::GDataFileSystem( 534 GDataFileSystem::GDataFileSystem(
508 Profile* profile, 535 Profile* profile,
509 GDataCache* cache, 536 GDataCache* cache,
510 DocumentsServiceInterface* documents_service, 537 DocumentsServiceInterface* documents_service,
511 GDataUploaderInterface* uploader, 538 GDataUploaderInterface* uploader,
512 DriveWebAppsRegistryInterface* webapps_registry, 539 DriveWebAppsRegistryInterface* webapps_registry,
513 base::SequencedTaskRunner* blocking_task_runner) 540 base::SequencedTaskRunner* blocking_task_runner)
514 : profile_(profile), 541 : profile_(profile),
(...skipping 688 matching lines...) Expand 10 before | Expand all | Expand 10 after
1203 1230
1204 // Otherwise, the move operation involves three steps: 1231 // Otherwise, the move operation involves three steps:
1205 // 1. Renames the file at |src_file_path| to basename(|dest_file_path|) 1232 // 1. Renames the file at |src_file_path| to basename(|dest_file_path|)
1206 // within the same directory. The rename operation is a no-op if 1233 // within the same directory. The rename operation is a no-op if
1207 // basename(|src_file_path|) equals to basename(|dest_file_path|). 1234 // basename(|src_file_path|) equals to basename(|dest_file_path|).
1208 // 2. Removes the file from its parent directory (the file is not deleted), 1235 // 2. Removes the file from its parent directory (the file is not deleted),
1209 // which effectively moves the file to the root directory. 1236 // which effectively moves the file to the root directory.
1210 // 3. Adds the file to the parent directory of |dest_file_path|, which 1237 // 3. Adds the file to the parent directory of |dest_file_path|, which
1211 // effectively moves the file from the root directory to the parent 1238 // effectively moves the file from the root directory to the parent
1212 // directory of |dest_file_path|. 1239 // directory of |dest_file_path|.
1213 FileMoveCallback add_file_to_directory_callback = 1240 const FileMoveCallback add_file_to_directory_callback =
1214 base::Bind(&GDataFileSystem::MoveEntryFromRootDirectory, 1241 base::Bind(&GDataFileSystem::MoveEntryFromRootDirectory,
1215 ui_weak_ptr_, 1242 ui_weak_ptr_,
1216 dest_file_path.DirName(), 1243 dest_file_path.DirName(),
1217 callback); 1244 callback);
1218 1245
1219 FileMoveCallback remove_file_from_directory_callback = 1246 const FileMoveCallback remove_file_from_directory_callback =
1220 base::Bind(&GDataFileSystem::RemoveEntryFromDirectory, 1247 base::Bind(&GDataFileSystem::RemoveEntryFromDirectory,
1221 ui_weak_ptr_, 1248 ui_weak_ptr_,
1222 src_file_path.DirName(), 1249 src_file_path.DirName(),
1223 add_file_to_directory_callback); 1250 add_file_to_directory_callback);
1224 1251
1225 Rename(src_file_path, dest_file_path.BaseName().value(), 1252 Rename(src_file_path, dest_file_path.BaseName().value(),
1226 remove_file_from_directory_callback); 1253 remove_file_from_directory_callback);
1227 } 1254 }
1228 1255
1229 void GDataFileSystem::MoveEntryFromRootDirectory( 1256 void GDataFileSystem::MoveEntryFromRootDirectory(
(...skipping 750 matching lines...) Expand 10 before | Expand all | Expand 10 after
1980 *params->feed_list, 2007 *params->feed_list,
1981 &file_map, 2008 &file_map,
1982 &unused_delta_feed_changestamp, 2009 &unused_delta_feed_changestamp,
1983 &unused_uma_stats); 2010 &unused_uma_stats);
1984 if (error != GDATA_FILE_OK) { 2011 if (error != GDATA_FILE_OK) {
1985 LOG(ERROR) << "Failed to convert feed: " << directory_path.value() 2012 LOG(ERROR) << "Failed to convert feed: " << directory_path.value()
1986 << ": " << error; 2013 << ": " << error;
1987 return; 2014 return;
1988 } 2015 }
1989 2016
1990 directory_service_->GetEntryByResourceIdAsync(params->directory_resource_id, 2017 directory_service_->RefreshDirectory(
1991 base::Bind(&GDataFileSystem::RequestDirectoryRefreshByEntry, 2018 params->directory_resource_id,
1992 ui_weak_ptr_, 2019 file_map,
1993 directory_path, 2020 base::Bind(&GDataFileSystem::OnDirectoryChangeFileMoveCallback,
1994 params->directory_resource_id, 2021 ui_weak_ptr_));
1995 file_map));
1996 }
1997
1998 void GDataFileSystem::RequestDirectoryRefreshByEntry(
1999 const FilePath& directory_path,
2000 const std::string& directory_resource_id,
2001 const FileResourceIdMap& file_map,
2002 GDataEntry* directory_entry) {
2003 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2004
2005 if (!directory_entry || !directory_entry->AsGDataDirectory()) {
2006 LOG(ERROR) << "Directory entry is gone: " << directory_path.value()
2007 << ": " << directory_resource_id;
2008 return;
2009 }
2010 GDataDirectory* directory = directory_entry->AsGDataDirectory();
2011
2012 // Remove the existing files.
2013 directory->RemoveChildFiles();
2014 // Go through all entries generated by the feed and add files.
2015 for (FileResourceIdMap::const_iterator it = file_map.begin();
2016 it != file_map.end(); ++it) {
2017 scoped_ptr<GDataEntry> entry(it->second);
2018 // Skip if it's not a file (i.e. directory).
2019 if (!entry->AsGDataFile())
2020 continue;
2021 directory->AddEntry(entry.release());
2022 }
2023
2024 // Note that there may be no change in the directory, but it's expensive to
2025 // check if the new metadata matches the existing one, so we just always
2026 // notify that the directory is changed.
2027 OnDirectoryChanged(directory_path);
2028 DVLOG(1) << "Directory refreshed: " << directory_path.value();
2029 } 2022 }
2030 2023
2031 void GDataFileSystem::UpdateFileByResourceId( 2024 void GDataFileSystem::UpdateFileByResourceId(
2032 const std::string& resource_id, 2025 const std::string& resource_id,
2033 const FileOperationCallback& callback) { 2026 const FileOperationCallback& callback) {
2034 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) || 2027 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI) ||
2035 BrowserThread::CurrentlyOn(BrowserThread::IO)); 2028 BrowserThread::CurrentlyOn(BrowserThread::IO));
2036 RunTaskOnUIThread( 2029 RunTaskOnUIThread(
2037 base::Bind(&GDataFileSystem::UpdateFileByResourceIdOnUIThread, 2030 base::Bind(&GDataFileSystem::UpdateFileByResourceIdOnUIThread,
2038 ui_weak_ptr_, 2031 ui_weak_ptr_,
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
2479 2472
2480 GDataEntry* entry = directory_service_->FromDocumentEntry(doc_entry.get()); 2473 GDataEntry* entry = directory_service_->FromDocumentEntry(doc_entry.get());
2481 if (!entry) { 2474 if (!entry) {
2482 callback.Run(GDATA_FILE_ERROR_FAILED); 2475 callback.Run(GDATA_FILE_ERROR_FAILED);
2483 return; 2476 return;
2484 } 2477 }
2485 2478
2486 // |entry| was added in the root directory on the server, so we should 2479 // |entry| was added in the root directory on the server, so we should
2487 // first add it to |root_| to mirror the state and then move it to the 2480 // first add it to |root_| to mirror the state and then move it to the
2488 // destination directory by MoveEntryFromRootDirectory(). 2481 // destination directory by MoveEntryFromRootDirectory().
2489 directory_service_->root()->AddEntry(entry); 2482 directory_service_->AddEntryToDirectory(
2490 MoveEntryFromRootDirectory(dir_path, 2483 directory_service_->root(),
2491 callback, 2484 entry,
2492 GDATA_FILE_OK, 2485 base::Bind(&GDataFileSystem::MoveEntryFromRootDirectory,
2493 entry->GetFilePath()); 2486 ui_weak_ptr_,
2487 dir_path,
2488 callback));
2494 } 2489 }
2495 2490
2496 void GDataFileSystem::OnMoveEntryFromRootDirectoryCompleted( 2491 void GDataFileSystem::OnMoveEntryFromRootDirectoryCompleted(
2497 const FileOperationCallback& callback, 2492 const FileOperationCallback& callback,
2498 const FilePath& file_path, 2493 const FilePath& file_path,
2499 const FilePath& dir_path, 2494 const FilePath& dir_path,
2500 GDataErrorCode status, 2495 GDataErrorCode status,
2501 const GURL& document_url) { 2496 const GURL& document_url) {
2502 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2497 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2503 DCHECK(!callback.is_null()); 2498 DCHECK(!callback.is_null());
2504 2499
2505 GDataFileError error = util::GDataToGDataFileError(status); 2500 GDataFileError error = util::GDataToGDataFileError(status);
2506 if (error == GDATA_FILE_OK) { 2501 if (error == GDATA_FILE_OK) {
2507 GDataEntry* entry = directory_service_->FindEntryByPathSync(file_path); 2502 GDataEntry* entry = directory_service_->FindEntryByPathSync(file_path);
2508 if (entry) { 2503 if (entry) {
2509 DCHECK_EQ(directory_service_->root(), entry->parent()); 2504 DCHECK_EQ(directory_service_->root(), entry->parent());
2510 directory_service_->MoveEntryToDirectory(dir_path, entry, 2505 directory_service_->MoveEntryToDirectory(
2506 dir_path,
2507 entry,
2511 base::Bind( 2508 base::Bind(
2512 &GDataFileSystem::OnMoveEntryToDirectoryWithFileOperationCallback, 2509 &GDataFileSystem::OnMoveEntryToDirectoryWithFileOperationCallback,
2513 ui_weak_ptr_, 2510 ui_weak_ptr_,
2514 callback)); 2511 callback));
2515 return; 2512 return;
2516 } else { 2513 } else {
2517 error = GDATA_FILE_ERROR_NOT_FOUND; 2514 error = GDATA_FILE_ERROR_NOT_FOUND;
2518 } 2515 }
2519 } 2516 }
2520 2517
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
2729 GDataFileError error, 2726 GDataFileError error,
2730 const FilePath& moved_file_path) { 2727 const FilePath& moved_file_path) {
2731 DCHECK(!callback.is_null()); 2728 DCHECK(!callback.is_null());
2732 2729
2733 if (error == GDATA_FILE_OK) 2730 if (error == GDATA_FILE_OK)
2734 OnDirectoryChanged(moved_file_path.DirName()); 2731 OnDirectoryChanged(moved_file_path.DirName());
2735 2732
2736 callback.Run(error); 2733 callback.Run(error);
2737 } 2734 }
2738 2735
2736 void GDataFileSystem::OnDirectoryChangeFileMoveCallback(
2737 GDataFileError error,
2738 const FilePath& directory_path) {
2739 if (error == GDATA_FILE_OK)
2740 OnDirectoryChanged(directory_path);
2741 }
2742
2739 GDataFileError GDataFileSystem::RemoveEntryFromFileSystem( 2743 GDataFileError GDataFileSystem::RemoveEntryFromFileSystem(
2740 const FilePath& file_path) { 2744 const FilePath& file_path) {
2741 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2745 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2742 2746
2743 std::string resource_id; 2747 std::string resource_id;
2744 GDataFileError error = RemoveEntryFromGData(file_path, &resource_id); 2748 GDataFileError error = RemoveEntryFromGData(file_path, &resource_id);
2745 if (error != GDATA_FILE_OK) 2749 if (error != GDATA_FILE_OK)
2746 return error; 2750 return error;
2747 2751
2748 // If resource_id is not empty, remove its corresponding file from cache. 2752 // If resource_id is not empty, remove its corresponding file from cache.
2749 if (!resource_id.empty()) 2753 if (!resource_id.empty())
2750 cache_->RemoveOnUIThread(resource_id, CacheOperationCallback()); 2754 cache_->RemoveOnUIThread(resource_id, CacheOperationCallback());
2751 2755
2752 return GDATA_FILE_OK; 2756 return GDATA_FILE_OK;
2753 } 2757 }
2754 2758
2755 // static 2759 void GDataFileSystem::RemoveStaleEntryOnUpload(
2756 void GDataFileSystem::RemoveStaleEntryOnUpload(const std::string& resource_id, 2760 const std::string& resource_id,
2757 GDataDirectory* parent_dir, 2761 GDataDirectory* parent_dir,
2758 GDataEntry* existing_entry) { 2762 const FileMoveCallback& callback,
2763 GDataEntry* existing_entry) {
2759 if (existing_entry && 2764 if (existing_entry &&
2760 // This should always match, but just in case. 2765 // This should always match, but just in case.
2761 existing_entry->parent() == parent_dir) { 2766 existing_entry->parent() == parent_dir) {
2762 parent_dir->RemoveEntry(existing_entry); 2767 directory_service_->RemoveEntryFromParent(existing_entry, callback);
2763 } else { 2768 } else {
2769 callback.Run(GDATA_FILE_ERROR_NOT_FOUND, FilePath());
2764 LOG(ERROR) << "Entry for the existing file not found: " << resource_id; 2770 LOG(ERROR) << "Entry for the existing file not found: " << resource_id;
2765 } 2771 }
2766 } 2772 }
2767 2773
2768 void GDataFileSystem::NotifyFileSystemMounted() { 2774 void GDataFileSystem::NotifyFileSystemMounted() {
2769 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2775 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2770 2776
2771 DVLOG(1) << "File System is mounted"; 2777 DVLOG(1) << "File System is mounted";
2772 // Notify the observers that the file system is mounted. 2778 // Notify the observers that the file system is mounted.
2773 FOR_EACH_OBSERVER(GDataFileSystemInterface::Observer, observers_, 2779 FOR_EACH_OBSERVER(GDataFileSystemInterface::Observer, observers_,
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
2821 // file with the exact same name. 2827 // file with the exact same name.
2822 GDataDirectory* parent_dir = entry->AsGDataDirectory(); 2828 GDataDirectory* parent_dir = entry->AsGDataDirectory();
2823 if (!parent_dir) 2829 if (!parent_dir)
2824 return GDATA_FILE_ERROR_FAILED; 2830 return GDATA_FILE_ERROR_FAILED;
2825 2831
2826 GDataEntry* new_entry = 2832 GDataEntry* new_entry =
2827 directory_service_->FromDocumentEntry(doc_entry.get()); 2833 directory_service_->FromDocumentEntry(doc_entry.get());
2828 if (!new_entry) 2834 if (!new_entry)
2829 return GDATA_FILE_ERROR_FAILED; 2835 return GDATA_FILE_ERROR_FAILED;
2830 2836
2831 parent_dir->AddEntry(new_entry); 2837 directory_service_->AddEntryToDirectory(
2832 2838 parent_dir,
2833 OnDirectoryChanged(directory_path); 2839 new_entry,
2840 base::Bind(&GDataFileSystem::OnMoveEntryToDirectoryWithFileMoveCallback,
2841 ui_weak_ptr_,
2842 FileMoveCallback()));
2834 return GDATA_FILE_OK; 2843 return GDATA_FILE_OK;
2835 } 2844 }
2836 2845
2837 GDataFileSystem::FindMissingDirectoryResult 2846 GDataFileSystem::FindMissingDirectoryResult
2838 GDataFileSystem::FindFirstMissingParentDirectory( 2847 GDataFileSystem::FindFirstMissingParentDirectory(
2839 const FilePath& directory_path, 2848 const FilePath& directory_path,
2840 GURL* last_dir_content_url, 2849 GURL* last_dir_content_url,
2841 FilePath* first_missing_parent_path) { 2850 FilePath* first_missing_parent_path) {
2842 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 2851 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2843 2852
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
2881 2890
2882 // You can't remove root element. 2891 // You can't remove root element.
2883 if (!entry->parent()) 2892 if (!entry->parent())
2884 return GDATA_FILE_ERROR_ACCESS_DENIED; 2893 return GDATA_FILE_ERROR_ACCESS_DENIED;
2885 2894
2886 // If it's a file (only files have resource id), get its resource id so that 2895 // If it's a file (only files have resource id), get its resource id so that
2887 // we can remove it after releasing the auto lock. 2896 // we can remove it after releasing the auto lock.
2888 if (entry->AsGDataFile()) 2897 if (entry->AsGDataFile())
2889 *resource_id = entry->AsGDataFile()->resource_id(); 2898 *resource_id = entry->AsGDataFile()->resource_id();
2890 2899
2891 GDataDirectory* parent_dir = entry->parent(); 2900 directory_service_->RemoveEntryFromParent(
2892 parent_dir->RemoveEntry(entry); 2901 entry,
2893 2902 base::Bind(&GDataFileSystem::OnDirectoryChangeFileMoveCallback,
2894 OnDirectoryChanged(parent_dir->GetFilePath()); 2903 ui_weak_ptr_));
2895 return GDATA_FILE_OK; 2904 return GDATA_FILE_OK;
2896 } 2905 }
2897 2906
2898 void GDataFileSystem::AddUploadedFile( 2907 void GDataFileSystem::AddUploadedFile(
2899 UploadMode upload_mode, 2908 UploadMode upload_mode,
2900 const FilePath& virtual_dir_path, 2909 const FilePath& virtual_dir_path,
2901 scoped_ptr<DocumentEntry> entry, 2910 scoped_ptr<DocumentEntry> entry,
2902 const FilePath& file_content_path, 2911 const FilePath& file_content_path,
2903 GDataCache::FileOperationType cache_operation, 2912 GDataCache::FileOperationType cache_operation,
2904 const base::Closure& callback) { 2913 const base::Closure& callback) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
2943 2952
2944 GDataDirectory* parent_dir = dir_entry->AsGDataDirectory(); 2953 GDataDirectory* parent_dir = dir_entry->AsGDataDirectory();
2945 if (!parent_dir) 2954 if (!parent_dir)
2946 return; 2955 return;
2947 2956
2948 scoped_ptr<GDataEntry> new_entry( 2957 scoped_ptr<GDataEntry> new_entry(
2949 directory_service_->FromDocumentEntry(entry.get())); 2958 directory_service_->FromDocumentEntry(entry.get()));
2950 if (!new_entry.get()) 2959 if (!new_entry.get())
2951 return; 2960 return;
2952 2961
2962 const std::string& resource_id = new_entry->resource_id();
2963 AddUploadedFileParams* params = new AddUploadedFileParams(
2964 upload_mode, parent_dir, new_entry.Pass(), file_content_path,
2965 cache_operation, callback_runner.Release());
satorux1 2012/08/14 06:11:32 nit: could you list parameters vertically?
achuithb 2012/08/14 23:33:59 Done.
2966
2967 const FileMoveCallback file_move_callback =
2968 base::Bind(&GDataFileSystem::ContinueAddUploadedFile,
2969 ui_weak_ptr_, params);
2970
2953 if (upload_mode == UPLOAD_EXISTING_FILE) { 2971 if (upload_mode == UPLOAD_EXISTING_FILE) {
2954 // Remove an existing entry, which should be present. 2972 // Remove an existing entry, which should be present.
2955 const std::string& resource_id = new_entry->resource_id(); 2973 directory_service_->GetEntryByResourceIdAsync(
2956 directory_service_->GetEntryByResourceIdAsync(resource_id, 2974 resource_id,
2957 base::Bind(&RemoveStaleEntryOnUpload, resource_id, parent_dir)); 2975 base::Bind(&GDataFileSystem::RemoveStaleEntryOnUpload,
2958 } 2976 ui_weak_ptr_,
2959 2977 resource_id,
2960 GDataFile* file = new_entry->AsGDataFile(); 2978 parent_dir,
2961 DCHECK(file); 2979 file_move_callback));
2962 const std::string& resource_id = file->resource_id();
2963 const std::string& md5 = file->file_md5();
2964 parent_dir->AddEntry(new_entry.release());
2965
2966 OnDirectoryChanged(virtual_dir_path);
2967
2968 if (upload_mode == UPLOAD_NEW_FILE) {
2969 // Add the file to the cache if we have uploaded a new file.
2970 cache_->StoreOnUIThread(resource_id,
2971 md5,
2972 file_content_path,
2973 cache_operation,
2974 base::Bind(&OnCacheUpdatedForAddUploadedFile,
2975 callback_runner.Release()));
2976 } else if (upload_mode == UPLOAD_EXISTING_FILE) {
2977 // Clear the dirty bit if we have updated an existing file.
2978 cache_->ClearDirtyOnUIThread(resource_id,
2979 md5,
2980 base::Bind(&OnCacheUpdatedForAddUploadedFile,
2981 callback_runner.Release()));
2982 } else { 2980 } else {
2983 NOTREACHED() << "Unexpected upload mode: " << upload_mode; 2981 file_move_callback.Run(GDATA_FILE_OK, FilePath());
2984 } 2982 }
2985 } 2983 }
2986 2984
2985 void GDataFileSystem::ContinueAddUploadedFile(
2986 AddUploadedFileParams* params,
2987 GDataFileError error,
2988 const FilePath& file_path) {
2989 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2990 DCHECK_EQ(GDATA_FILE_OK, error);
2991 DCHECK(params->new_entry.get());
2992 GDataFile* file = params->new_entry->AsGDataFile();
2993 DCHECK(file);
2994
2995 params->resource_id = file->resource_id();
2996 params->md5 = file->file_md5();
2997 directory_service_->AddEntryToDirectory(
2998 params->parent_dir,
2999 params->new_entry.release(),
3000 base::Bind(&GDataFileSystem::OnMoveEntryToDirectoryWithFileMoveCallback,
3001 ui_weak_ptr_,
3002 base::Bind(&GDataFileSystem::AddUploadedFileToCache,
3003 ui_weak_ptr_,
3004 base::Owned(params))));
3005 }
3006
3007 void GDataFileSystem::AddUploadedFileToCache(
3008 AddUploadedFileParams* params,
3009 GDataFileError error,
3010 const FilePath& file_path) {
3011 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
3012
3013 if (params->upload_mode == UPLOAD_NEW_FILE) {
3014 // Add the file to the cache if we have uploaded a new file.
3015 cache_->StoreOnUIThread(params->resource_id,
3016 params->md5,
3017 params->file_content_path,
3018 params->cache_operation,
3019 base::Bind(&OnCacheUpdatedForAddUploadedFile,
3020 params->callback));
3021 } else if (params->upload_mode == UPLOAD_EXISTING_FILE) {
3022 // Clear the dirty bit if we have updated an existing file.
3023 cache_->ClearDirtyOnUIThread(params->resource_id,
3024 params->md5,
3025 base::Bind(&OnCacheUpdatedForAddUploadedFile,
3026 params->callback));
3027 } else {
3028 NOTREACHED() << "Unexpected upload mode: " << params->upload_mode;
3029 }
3030 params->callback.Run();
3031 }
3032
2987 void GDataFileSystem::Observe(int type, 3033 void GDataFileSystem::Observe(int type,
2988 const content::NotificationSource& source, 3034 const content::NotificationSource& source,
2989 const content::NotificationDetails& details) { 3035 const content::NotificationDetails& details) {
2990 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 3036 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
2991 3037
2992 if (type == chrome::NOTIFICATION_PREF_CHANGED) { 3038 if (type == chrome::NOTIFICATION_PREF_CHANGED) {
2993 PrefService* pref_service = profile_->GetPrefs(); 3039 PrefService* pref_service = profile_->GetPrefs();
2994 std::string* pref_name = content::Details<std::string>(details).ptr(); 3040 std::string* pref_name = content::Details<std::string>(details).ptr();
2995 if (*pref_name == prefs::kDisableGDataHostedFiles) { 3041 if (*pref_name == prefs::kDisableGDataHostedFiles) {
2996 SetHideHostedDocuments( 3042 SetHideHostedDocuments(
(...skipping 447 matching lines...) Expand 10 before | Expand all | Expand 10 after
3444 } 3490 }
3445 3491
3446 PlatformFileInfoProto entry_file_info; 3492 PlatformFileInfoProto entry_file_info;
3447 GDataEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info); 3493 GDataEntry::ConvertPlatformFileInfoToProto(*file_info, &entry_file_info);
3448 *entry_proto->mutable_file_info() = entry_file_info; 3494 *entry_proto->mutable_file_info() = entry_file_info;
3449 if (!callback.is_null()) 3495 if (!callback.is_null())
3450 callback.Run(GDATA_FILE_OK, entry_proto.Pass()); 3496 callback.Run(GDATA_FILE_OK, entry_proto.Pass());
3451 } 3497 }
3452 3498
3453 } // namespace gdata 3499 } // namespace gdata
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_file_system.h ('k') | chrome/browser/chromeos/gdata/gdata_files.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698