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/sync_file_system/drive_file_sync_client.h" | 5 #include "chrome/browser/sync_file_system/drive_file_sync_client.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <functional> | 8 #include <functional> |
9 #include <sstream> | 9 #include <sstream> |
10 #include <string> | 10 #include <string> |
(...skipping 806 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
817 // TODO(tzik): Replace published_time with creation time after we move to | 817 // TODO(tzik): Replace published_time with creation time after we move to |
818 // Drive API. | 818 // Drive API. |
819 if (entries[i]->published_time() < entries.back()->published_time()) | 819 if (entries[i]->published_time() < entries.back()->published_time()) |
820 std::swap(entries[i], entries.back()); | 820 std::swap(entries[i], entries.back()); |
821 } | 821 } |
822 | 822 |
823 scoped_ptr<google_apis::ResourceEntry> earliest_entry(entries.back()); | 823 scoped_ptr<google_apis::ResourceEntry> earliest_entry(entries.back()); |
824 entries.back() = NULL; | 824 entries.back() = NULL; |
825 entries.get().pop_back(); | 825 entries.get().pop_back(); |
826 | 826 |
827 DeleteEntries(entries.Pass(), | 827 DeleteEntriesForEnsuringTitleUniqueness( |
828 base::Bind(&EntryAdapter, base::Passed(&earliest_entry), | 828 entries.Pass(), |
829 callback)); | 829 base::Bind(&EntryAdapter, base::Passed(&earliest_entry), callback)); |
830 return; | 830 return; |
831 } | 831 } |
832 | 832 |
833 DVLOG(2) << "no conflict detected"; | 833 DVLOG(2) << "no conflict detected"; |
834 DCHECK_EQ(1u, entries.size()); | 834 DCHECK_EQ(1u, entries.size()); |
835 scoped_ptr<google_apis::ResourceEntry> entry(entries.front()); | 835 scoped_ptr<google_apis::ResourceEntry> entry(entries.front()); |
836 entries.weak_clear(); | 836 entries.weak_clear(); |
837 callback.Run(google_apis::HTTP_FOUND, entry.Pass()); | 837 callback.Run(google_apis::HTTP_FOUND, entry.Pass()); |
838 } | 838 } |
839 | 839 |
840 void DriveFileSyncClient::DeleteEntries( | 840 void DriveFileSyncClient::DeleteEntriesForEnsuringTitleUniqueness( |
841 ScopedVector<google_apis::ResourceEntry> entries, | 841 ScopedVector<google_apis::ResourceEntry> entries, |
842 const GDataErrorCallback& callback) { | 842 const GDataErrorCallback& callback) { |
843 DCHECK(CalledOnValidThread()); | 843 DCHECK(CalledOnValidThread()); |
844 DVLOG(2) << "Cleaning up conflict on entry creation"; | 844 DVLOG(2) << "Cleaning up conflict on entry creation"; |
845 | 845 |
846 if (entries.empty()) { | 846 if (entries.empty()) { |
847 callback.Run(google_apis::HTTP_SUCCESS); | 847 callback.Run(google_apis::HTTP_SUCCESS); |
848 return; | 848 return; |
849 } | 849 } |
850 | 850 |
851 scoped_ptr<google_apis::ResourceEntry> entry(entries.back()); | 851 scoped_ptr<google_apis::ResourceEntry> entry(entries.back()); |
852 entries.back() = NULL; | 852 entries.back() = NULL; |
853 entries.get().pop_back(); | 853 entries.get().pop_back(); |
854 | 854 |
| 855 // We don't care conflicts here as other clients may be also deleting this |
| 856 // file, so passing an empty etag. |
855 drive_service_->DeleteResource( | 857 drive_service_->DeleteResource( |
856 entry->resource_id(), | 858 entry->resource_id(), |
857 entry->etag(), | 859 std::string(), // empty etag |
858 base::Bind(&DriveFileSyncClient::DidDeleteEntry, AsWeakPtr(), | 860 base::Bind( |
859 base::Passed(&entries), callback)); | 861 &DriveFileSyncClient::DidDeleteEntriesForEnsuringTitleUniqueness, |
| 862 AsWeakPtr(), base::Passed(&entries), callback)); |
860 } | 863 } |
861 | 864 |
862 void DriveFileSyncClient::DidDeleteEntry( | 865 void DriveFileSyncClient::DidDeleteEntriesForEnsuringTitleUniqueness( |
863 ScopedVector<google_apis::ResourceEntry> entries, | 866 ScopedVector<google_apis::ResourceEntry> entries, |
864 const GDataErrorCallback& callback, | 867 const GDataErrorCallback& callback, |
865 google_apis::GDataErrorCode error) { | 868 google_apis::GDataErrorCode error) { |
866 DCHECK(CalledOnValidThread()); | 869 DCHECK(CalledOnValidThread()); |
867 | 870 |
868 if (error != google_apis::HTTP_SUCCESS && | 871 if (error != google_apis::HTTP_SUCCESS && |
869 error != google_apis::HTTP_NOT_FOUND) { | 872 error != google_apis::HTTP_NOT_FOUND) { |
870 DVLOG(2) << "Error on deleting file: " << error; | 873 DVLOG(2) << "Error on deleting file: " << error; |
871 callback.Run(error); | 874 callback.Run(error); |
872 return; | 875 return; |
873 } | 876 } |
874 | 877 |
875 DVLOG(2) << "Deletion completed"; | 878 DVLOG(2) << "Deletion completed"; |
876 DeleteEntries(entries.Pass(), callback); | 879 DeleteEntriesForEnsuringTitleUniqueness(entries.Pass(), callback); |
877 } | 880 } |
878 | 881 |
879 } // namespace sync_file_system | 882 } // namespace sync_file_system |
OLD | NEW |