OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/drive/file_system/truncate_operation.h" | 5 #include "chrome/browser/chromeos/drive/file_system/truncate_operation.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/callback_helpers.h" | 8 #include "base/callback_helpers.h" |
9 #include "base/files/file.h" | 9 #include "base/files/file.h" |
10 #include "base/files/file_path.h" | 10 #include "base/files/file_path.h" |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 temporary_file_directory)), | 73 temporary_file_directory)), |
74 weak_ptr_factory_(this) { | 74 weak_ptr_factory_(this) { |
75 } | 75 } |
76 | 76 |
77 TruncateOperation::~TruncateOperation() { | 77 TruncateOperation::~TruncateOperation() { |
78 } | 78 } |
79 | 79 |
80 void TruncateOperation::Truncate(const base::FilePath& file_path, | 80 void TruncateOperation::Truncate(const base::FilePath& file_path, |
81 int64 length, | 81 int64 length, |
82 const FileOperationCallback& callback) { | 82 const FileOperationCallback& callback) { |
83 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 83 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
84 DCHECK(!callback.is_null()); | 84 DCHECK(!callback.is_null()); |
85 | 85 |
86 if (length < 0) { | 86 if (length < 0) { |
87 base::MessageLoopProxy::current()->PostTask( | 87 base::MessageLoopProxy::current()->PostTask( |
88 FROM_HERE, | 88 FROM_HERE, |
89 base::Bind(callback, FILE_ERROR_INVALID_OPERATION)); | 89 base::Bind(callback, FILE_ERROR_INVALID_OPERATION)); |
90 return; | 90 return; |
91 } | 91 } |
92 | 92 |
93 // TODO(kinaba): http://crbug.com/132780. | 93 // TODO(kinaba): http://crbug.com/132780. |
94 // Optimize the cases for small |length|, at least for |length| == 0. | 94 // Optimize the cases for small |length|, at least for |length| == 0. |
95 download_operation_->EnsureFileDownloadedByPath( | 95 download_operation_->EnsureFileDownloadedByPath( |
96 file_path, | 96 file_path, |
97 ClientContext(USER_INITIATED), | 97 ClientContext(USER_INITIATED), |
98 GetFileContentInitializedCallback(), | 98 GetFileContentInitializedCallback(), |
99 google_apis::GetContentCallback(), | 99 google_apis::GetContentCallback(), |
100 base::Bind(&TruncateOperation::TruncateAfterEnsureFileDownloadedByPath, | 100 base::Bind(&TruncateOperation::TruncateAfterEnsureFileDownloadedByPath, |
101 weak_ptr_factory_.GetWeakPtr(), length, callback)); | 101 weak_ptr_factory_.GetWeakPtr(), length, callback)); |
102 } | 102 } |
103 | 103 |
104 void TruncateOperation::TruncateAfterEnsureFileDownloadedByPath( | 104 void TruncateOperation::TruncateAfterEnsureFileDownloadedByPath( |
105 int64 length, | 105 int64 length, |
106 const FileOperationCallback& callback, | 106 const FileOperationCallback& callback, |
107 FileError error, | 107 FileError error, |
108 const base::FilePath& local_file_path, | 108 const base::FilePath& local_file_path, |
109 scoped_ptr<ResourceEntry> entry) { | 109 scoped_ptr<ResourceEntry> entry) { |
110 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 110 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
111 DCHECK(!callback.is_null()); | 111 DCHECK(!callback.is_null()); |
112 | 112 |
113 if (error != FILE_ERROR_OK) { | 113 if (error != FILE_ERROR_OK) { |
114 callback.Run(error); | 114 callback.Run(error); |
115 return; | 115 return; |
116 } | 116 } |
117 DCHECK(entry); | 117 DCHECK(entry); |
118 DCHECK(entry->has_file_specific_info()); | 118 DCHECK(entry->has_file_specific_info()); |
119 | 119 |
120 if (entry->file_specific_info().is_hosted_document()) { | 120 if (entry->file_specific_info().is_hosted_document()) { |
121 callback.Run(FILE_ERROR_INVALID_OPERATION); | 121 callback.Run(FILE_ERROR_INVALID_OPERATION); |
122 return; | 122 return; |
123 } | 123 } |
124 | 124 |
125 base::PostTaskAndReplyWithResult( | 125 base::PostTaskAndReplyWithResult( |
126 blocking_task_runner_.get(), | 126 blocking_task_runner_.get(), |
127 FROM_HERE, | 127 FROM_HERE, |
128 base::Bind(&TruncateOnBlockingPool, | 128 base::Bind(&TruncateOnBlockingPool, |
129 metadata_, cache_, entry->local_id(), local_file_path, length), | 129 metadata_, cache_, entry->local_id(), local_file_path, length), |
130 base::Bind( | 130 base::Bind( |
131 &TruncateOperation::TruncateAfterTruncateOnBlockingPool, | 131 &TruncateOperation::TruncateAfterTruncateOnBlockingPool, |
132 weak_ptr_factory_.GetWeakPtr(), entry->local_id(), callback)); | 132 weak_ptr_factory_.GetWeakPtr(), entry->local_id(), callback)); |
133 } | 133 } |
134 | 134 |
135 void TruncateOperation::TruncateAfterTruncateOnBlockingPool( | 135 void TruncateOperation::TruncateAfterTruncateOnBlockingPool( |
136 const std::string& local_id, | 136 const std::string& local_id, |
137 const FileOperationCallback& callback, | 137 const FileOperationCallback& callback, |
138 FileError error) { | 138 FileError error) { |
139 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 139 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
140 DCHECK(!callback.is_null()); | 140 DCHECK(!callback.is_null()); |
141 | 141 |
142 delegate_->OnEntryUpdatedByOperation(ClientContext(USER_INITIATED), local_id); | 142 delegate_->OnEntryUpdatedByOperation(ClientContext(USER_INITIATED), local_id); |
143 | 143 |
144 callback.Run(error); | 144 callback.Run(error); |
145 } | 145 } |
146 | 146 |
147 } // namespace file_system | 147 } // namespace file_system |
148 } // namespace drive | 148 } // namespace drive |
OLD | NEW |