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

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

Issue 9844006: GData downloads cleanup (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: 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 | 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_download_observer.h" 5 #include "chrome/browser/chromeos/gdata/gdata_download_observer.h"
6 6
7 #include "base/file_util.h" 7 #include "base/file_util.h"
8 #include "chrome/browser/chromeos/gdata/gdata_uploader.h" 8 #include "chrome/browser/chromeos/gdata/gdata_uploader.h"
9 #include "chrome/browser/chromeos/gdata/gdata_upload_file_info.h" 9 #include "chrome/browser/chromeos/gdata/gdata_upload_file_info.h"
10 #include "chrome/browser/chromeos/gdata/gdata_util.h" 10 #include "chrome/browser/chromeos/gdata/gdata_util.h"
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 GDataDownloadObserver::~GDataDownloadObserver() { 81 GDataDownloadObserver::~GDataDownloadObserver() {
82 if (download_manager_) 82 if (download_manager_)
83 download_manager_->RemoveObserver(this); 83 download_manager_->RemoveObserver(this);
84 84
85 for (DownloadMap::iterator iter = pending_downloads_.begin(); 85 for (DownloadMap::iterator iter = pending_downloads_.begin();
86 iter != pending_downloads_.end(); ++iter) { 86 iter != pending_downloads_.end(); ++iter) {
87 DetachFromDownload(iter->second); 87 DetachFromDownload(iter->second);
88 } 88 }
89 } 89 }
90 90
91 void GDataDownloadObserver::Initialize(const FilePath& temp_download_path, 91 void GDataDownloadObserver::Initialize(
92 GDataUploader* gdata_uploader, 92 GDataUploader* gdata_uploader,
93 DownloadManager* download_manager) { 93 DownloadManager* download_manager,
94 temp_download_path_ = temp_download_path; 94 const FilePath& gdata_tmp_download_path) {
95 gdata_uploader_ = gdata_uploader; 95 gdata_uploader_ = gdata_uploader;
Ben Chan 2012/03/28 05:29:36 nit: Seems like |gdata_uploader_| is not expected
achuithb 2012/03/28 09:14:04 Done.
96 download_manager_ = download_manager; 96 download_manager_ = download_manager;
97 if (download_manager_) 97 if (download_manager_)
98 download_manager_->AddObserver(this); 98 download_manager_->AddObserver(this);
99 gdata_tmp_download_path_ = gdata_tmp_download_path;
99 } 100 }
100 101
101 // static 102 // static
102 void GDataDownloadObserver::SetGDataPath(DownloadItem* download, 103 void GDataDownloadObserver::SetGDataPath(DownloadItem* download,
103 const FilePath& path) { 104 const FilePath& path) {
104 if (download) 105 if (download)
105 download->SetExternalData(&kGDataPathKey, 106 download->SetExternalData(&kGDataPathKey,
106 new GDataExternalData(path)); 107 new GDataExternalData(path));
107 } 108 }
108 109
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
172 DownloadManager* download_manager) { 173 DownloadManager* download_manager) {
173 download_manager->RemoveObserver(this); 174 download_manager->RemoveObserver(this);
174 download_manager_ = NULL; 175 download_manager_ = NULL;
175 } 176 }
176 177
177 void GDataDownloadObserver::ModelChanged(DownloadManager* download_manager) { 178 void GDataDownloadObserver::ModelChanged(DownloadManager* download_manager) {
178 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
179 180
180 DownloadManager::DownloadVector downloads; 181 DownloadManager::DownloadVector downloads;
181 // GData downloads are considered temporary downloads. 182 // GData downloads are considered temporary downloads.
182 download_manager->GetTemporaryDownloads(temp_download_path_, 183 download_manager->GetTemporaryDownloads(gdata_tmp_download_path_,
183 &downloads); 184 &downloads);
184 for (size_t i = 0; i < downloads.size(); ++i) { 185 for (size_t i = 0; i < downloads.size(); ++i) {
185 // Only accept downloads that have the GData meta data associated with 186 // Only accept downloads that have the GData meta data associated with
186 // them. Otherwise we might trip over non-GData downloads being saved to 187 // them. Otherwise we might trip over non-GData downloads being saved to
187 // temp_download_path_. 188 // gdata_tmp_download_path_.
188 if (IsGDataDownload(downloads[i])) 189 if (IsGDataDownload(downloads[i]))
189 OnDownloadUpdated(downloads[i]); 190 OnDownloadUpdated(downloads[i]);
190 } 191 }
191 } 192 }
192 193
193 void GDataDownloadObserver::OnDownloadUpdated(DownloadItem* download) { 194 void GDataDownloadObserver::OnDownloadUpdated(DownloadItem* download) {
194 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 195 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
195 196
196 const DownloadItem::DownloadState state = download->GetState(); 197 const DownloadItem::DownloadState state = download->GetState();
197 switch (state) { 198 switch (state) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
248 download->RemoveObserver(this); 249 download->RemoveObserver(this);
249 } 250 }
250 251
251 void GDataDownloadObserver::UploadDownloadItem(DownloadItem* download) { 252 void GDataDownloadObserver::UploadDownloadItem(DownloadItem* download) {
252 // Update metadata of ongoing upload. 253 // Update metadata of ongoing upload.
253 UpdateUpload(download); 254 UpdateUpload(download);
254 255
255 if (!ShouldUpload(download)) 256 if (!ShouldUpload(download))
256 return; 257 return;
257 258
258 UploadFileInfo* upload_file_info = CreateUploadFileInfo(download); 259 scoped_ptr<UploadFileInfo> upload_file_info = CreateUploadFileInfo(download);
259 gdata_uploader_->UploadFile(upload_file_info); 260 const int upload_id = gdata_uploader_->UploadFile(upload_file_info.Pass());
260 261
262 // TODO(achuith): Fix this.
261 // We won't know the upload ID until the after the GDataUploader::UploadFile() 263 // We won't know the upload ID until the after the GDataUploader::UploadFile()
262 // call. 264 // call.
263 download->SetExternalData(&kUploadingKey, 265 download->SetExternalData(&kUploadingKey,
264 new UploadingExternalData(gdata_uploader_, upload_file_info->upload_id)); 266 new UploadingExternalData(gdata_uploader_, upload_id));
265 } 267 }
266 268
267 void GDataDownloadObserver::UpdateUpload(DownloadItem* download) { 269 void GDataDownloadObserver::UpdateUpload(DownloadItem* download) {
268 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
269 271
270 UploadingExternalData* external_data = GetUploadingExternalData(download); 272 UploadingExternalData* upload_data = GetUploadingExternalData(download);
271 if (!external_data) { 273 if (!upload_data) {
272 DVLOG(1) << "No UploadingExternalData for download " << download->GetId(); 274 DVLOG(1) << "No UploadingExternalData for download " << download->GetId();
273 return; 275 return;
274 } 276 }
275 277
276 gdata_uploader_->UpdateUpload(external_data->upload_id(), download); 278 gdata_uploader_->UpdateUpload(upload_data->upload_id(), download);
277 } 279 }
278 280
279 bool GDataDownloadObserver::ShouldUpload(DownloadItem* download) { 281 bool GDataDownloadObserver::ShouldUpload(DownloadItem* download) {
280 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 282 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
281 283
282 // Upload if the item is in pending_downloads_, 284 // Upload if the item is in pending_downloads_,
283 // is complete or large enough to stream, and, 285 // is complete or large enough to stream, and,
284 // is not already being uploaded. 286 // is not already being uploaded.
285 return pending_downloads_.count(download->GetId()) != 0 && 287 return pending_downloads_.count(download->GetId()) != 0 &&
286 (download->IsComplete() || 288 (download->IsComplete() ||
287 download->GetReceivedBytes() > kStreamingFileSize) && 289 download->GetReceivedBytes() > kStreamingFileSize) &&
288 GetUploadingExternalData(download) == NULL; 290 GetUploadingExternalData(download) == NULL;
289 } 291 }
290 292
291 UploadFileInfo* GDataDownloadObserver::CreateUploadFileInfo( 293 scoped_ptr<UploadFileInfo> GDataDownloadObserver::CreateUploadFileInfo(
292 DownloadItem* download) { 294 DownloadItem* download) {
293 UploadFileInfo* upload_file_info = new UploadFileInfo(); 295 scoped_ptr<UploadFileInfo> upload_file_info(new UploadFileInfo());
294 296
295 // GetFullPath will be a temporary location if we're streaming. 297 // GetFullPath will be a temporary location if we're streaming.
296 upload_file_info->file_path = download->GetFullPath(); 298 upload_file_info->file_path = download->GetFullPath();
297 upload_file_info->file_size = download->GetReceivedBytes(); 299 upload_file_info->file_size = download->GetReceivedBytes();
298 300
299 // Extract the final path from DownloadItem. 301 // Extract the final path from DownloadItem.
300 upload_file_info->gdata_path = GetGDataPath(download); 302 upload_file_info->gdata_path = GetGDataPath(download);
301 303
302 // Use the file name as the title. 304 // Use the file name as the title.
303 upload_file_info->title = upload_file_info->gdata_path.BaseName().value(); 305 upload_file_info->title = upload_file_info->gdata_path.BaseName().value();
304 upload_file_info->content_type = download->GetMimeType(); 306 upload_file_info->content_type = download->GetMimeType();
305 // GData api handles -1 as unknown file length. 307 // GData api handles -1 as unknown file length.
306 upload_file_info->content_length = download->AllDataSaved() ? 308 upload_file_info->content_length = download->AllDataSaved() ?
307 download->GetReceivedBytes() : -1; 309 download->GetReceivedBytes() : -1;
308 310
309 upload_file_info->all_bytes_present = download->AllDataSaved(); 311 upload_file_info->all_bytes_present = download->AllDataSaved();
310 312
311 upload_file_info->completion_callback = 313 upload_file_info->completion_callback =
312 base::Bind(&GDataDownloadObserver::OnUploadComplete, 314 base::Bind(&GDataDownloadObserver::OnUploadComplete,
313 weak_ptr_factory_.GetWeakPtr(), download->GetId()); 315 weak_ptr_factory_.GetWeakPtr(),
316 download->GetId());
314 317
315 return upload_file_info; 318 return upload_file_info.Pass();
316 } 319 }
317 320
318 void GDataDownloadObserver::OnUploadComplete(int32 download_id, 321 void GDataDownloadObserver::OnUploadComplete(int32 download_id,
319 base::PlatformFileError error, 322 base::PlatformFileError error,
320 DocumentEntry* unused_entry) { 323 UploadFileInfo* upload_file_info) {
321 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 324 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
322 DownloadMap::iterator iter = pending_downloads_.find(download_id); 325 DownloadMap::iterator iter = pending_downloads_.find(download_id);
323 if (iter == pending_downloads_.end()) 326 if (iter == pending_downloads_.end())
324 return; 327 return;
325 DVLOG(1) << "Completing upload for download ID " << download_id; 328 DVLOG(1) << "Completing upload for download ID " << download_id;
326 DownloadItem* download = iter->second; 329 DownloadItem* download = iter->second;
327 UploadingExternalData* upload_data = GetUploadingExternalData(download); 330 UploadingExternalData* upload_data = GetUploadingExternalData(download);
328 DCHECK(upload_data); 331 DCHECK(upload_data);
329 upload_data->MarkAsComplete(); 332 upload_data->MarkAsComplete();
330 download->MaybeCompleteDownload(); 333 download->MaybeCompleteDownload();
331 } 334 }
332 335
333 } // namespace gdata 336 } // namespace gdata
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698