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

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: asanka review feedback 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 DCHECK(gdata_uploader);
96 DCHECK(!gdata_tmp_download_path.empty());
95 gdata_uploader_ = gdata_uploader; 97 gdata_uploader_ = gdata_uploader;
96 download_manager_ = download_manager; 98 download_manager_ = download_manager;
97 if (download_manager_) 99 if (download_manager_)
98 download_manager_->AddObserver(this); 100 download_manager_->AddObserver(this);
101 gdata_tmp_download_path_ = gdata_tmp_download_path;
99 } 102 }
100 103
101 // static 104 // static
102 void GDataDownloadObserver::SetGDataPath(DownloadItem* download, 105 void GDataDownloadObserver::SetGDataPath(DownloadItem* download,
103 const FilePath& path) { 106 const FilePath& path) {
104 if (download) 107 if (download)
105 download->SetExternalData(&kGDataPathKey, 108 download->SetExternalData(&kGDataPathKey,
106 new GDataExternalData(path)); 109 new GDataExternalData(path));
107 } 110 }
108 111
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 DownloadManager* download_manager) { 180 DownloadManager* download_manager) {
178 download_manager->RemoveObserver(this); 181 download_manager->RemoveObserver(this);
179 download_manager_ = NULL; 182 download_manager_ = NULL;
180 } 183 }
181 184
182 void GDataDownloadObserver::ModelChanged(DownloadManager* download_manager) { 185 void GDataDownloadObserver::ModelChanged(DownloadManager* download_manager) {
183 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 186 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
184 187
185 DownloadManager::DownloadVector downloads; 188 DownloadManager::DownloadVector downloads;
186 // GData downloads are considered temporary downloads. 189 // GData downloads are considered temporary downloads.
187 download_manager->GetTemporaryDownloads(temp_download_path_, 190 download_manager->GetTemporaryDownloads(gdata_tmp_download_path_,
188 &downloads); 191 &downloads);
189 for (size_t i = 0; i < downloads.size(); ++i) { 192 for (size_t i = 0; i < downloads.size(); ++i) {
190 // Only accept downloads that have the GData meta data associated with 193 // Only accept downloads that have the GData meta data associated with
191 // them. Otherwise we might trip over non-GData downloads being saved to 194 // them. Otherwise we might trip over non-GData downloads being saved to
192 // temp_download_path_. 195 // gdata_tmp_download_path_.
193 if (IsGDataDownload(downloads[i])) 196 if (IsGDataDownload(downloads[i]))
194 OnDownloadUpdated(downloads[i]); 197 OnDownloadUpdated(downloads[i]);
195 } 198 }
196 } 199 }
197 200
198 void GDataDownloadObserver::OnDownloadUpdated(DownloadItem* download) { 201 void GDataDownloadObserver::OnDownloadUpdated(DownloadItem* download) {
199 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 202 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
200 203
201 const DownloadItem::DownloadState state = download->GetState(); 204 const DownloadItem::DownloadState state = download->GetState();
202 switch (state) { 205 switch (state) {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 download->RemoveObserver(this); 256 download->RemoveObserver(this);
254 } 257 }
255 258
256 void GDataDownloadObserver::UploadDownloadItem(DownloadItem* download) { 259 void GDataDownloadObserver::UploadDownloadItem(DownloadItem* download) {
257 // Update metadata of ongoing upload. 260 // Update metadata of ongoing upload.
258 UpdateUpload(download); 261 UpdateUpload(download);
259 262
260 if (!ShouldUpload(download)) 263 if (!ShouldUpload(download))
261 return; 264 return;
262 265
263 UploadFileInfo* upload_file_info = CreateUploadFileInfo(download); 266 scoped_ptr<UploadFileInfo> upload_file_info = CreateUploadFileInfo(download);
264 gdata_uploader_->UploadFile(upload_file_info); 267 const int upload_id = gdata_uploader_->UploadFile(upload_file_info.Pass());
265 268
269 // TODO(achuith): Fix this.
266 // We won't know the upload ID until the after the GDataUploader::UploadFile() 270 // We won't know the upload ID until the after the GDataUploader::UploadFile()
267 // call. 271 // call.
268 download->SetExternalData(&kUploadingKey, 272 download->SetExternalData(&kUploadingKey,
269 new UploadingExternalData(gdata_uploader_, upload_file_info->upload_id)); 273 new UploadingExternalData(gdata_uploader_, upload_id));
270 } 274 }
271 275
272 void GDataDownloadObserver::UpdateUpload(DownloadItem* download) { 276 void GDataDownloadObserver::UpdateUpload(DownloadItem* download) {
273 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 277 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
274 278
275 UploadingExternalData* external_data = GetUploadingExternalData(download); 279 UploadingExternalData* upload_data = GetUploadingExternalData(download);
276 if (!external_data) { 280 if (!upload_data) {
277 DVLOG(1) << "No UploadingExternalData for download " << download->GetId(); 281 DVLOG(1) << "No UploadingExternalData for download " << download->GetId();
278 return; 282 return;
279 } 283 }
280 284
281 gdata_uploader_->UpdateUpload(external_data->upload_id(), download); 285 gdata_uploader_->UpdateUpload(upload_data->upload_id(), download);
282 } 286 }
283 287
284 bool GDataDownloadObserver::ShouldUpload(DownloadItem* download) { 288 bool GDataDownloadObserver::ShouldUpload(DownloadItem* download) {
285 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 289 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
286 290
287 // Upload if the item is in pending_downloads_, 291 // Upload if the item is in pending_downloads_,
288 // is complete or large enough to stream, and, 292 // is complete or large enough to stream, and,
289 // is not already being uploaded. 293 // is not already being uploaded.
290 return pending_downloads_.count(download->GetId()) != 0 && 294 return pending_downloads_.count(download->GetId()) != 0 &&
291 (download->AllDataSaved() || 295 (download->AllDataSaved() ||
292 download->GetReceivedBytes() > kStreamingFileSize) && 296 download->GetReceivedBytes() > kStreamingFileSize) &&
293 GetUploadingExternalData(download) == NULL; 297 GetUploadingExternalData(download) == NULL;
294 } 298 }
295 299
296 UploadFileInfo* GDataDownloadObserver::CreateUploadFileInfo( 300 scoped_ptr<UploadFileInfo> GDataDownloadObserver::CreateUploadFileInfo(
297 DownloadItem* download) { 301 DownloadItem* download) {
298 UploadFileInfo* upload_file_info = new UploadFileInfo(); 302 scoped_ptr<UploadFileInfo> upload_file_info(new UploadFileInfo());
299 303
300 // GetFullPath will be a temporary location if we're streaming. 304 // GetFullPath will be a temporary location if we're streaming.
301 upload_file_info->file_path = download->GetFullPath(); 305 upload_file_info->file_path = download->GetFullPath();
302 upload_file_info->file_size = download->GetReceivedBytes(); 306 upload_file_info->file_size = download->GetReceivedBytes();
303 307
304 // Extract the final path from DownloadItem. 308 // Extract the final path from DownloadItem.
305 upload_file_info->gdata_path = GetGDataPath(download); 309 upload_file_info->gdata_path = GetGDataPath(download);
306 310
307 // Use the file name as the title. 311 // Use the file name as the title.
308 upload_file_info->title = upload_file_info->gdata_path.BaseName().value(); 312 upload_file_info->title = upload_file_info->gdata_path.BaseName().value();
309 upload_file_info->content_type = download->GetMimeType(); 313 upload_file_info->content_type = download->GetMimeType();
310 // GData api handles -1 as unknown file length. 314 // GData api handles -1 as unknown file length.
311 upload_file_info->content_length = download->AllDataSaved() ? 315 upload_file_info->content_length = download->AllDataSaved() ?
312 download->GetReceivedBytes() : -1; 316 download->GetReceivedBytes() : -1;
313 317
314 upload_file_info->all_bytes_present = download->AllDataSaved(); 318 upload_file_info->all_bytes_present = download->AllDataSaved();
315 319
316 upload_file_info->completion_callback = 320 upload_file_info->completion_callback =
317 base::Bind(&GDataDownloadObserver::OnUploadComplete, 321 base::Bind(&GDataDownloadObserver::OnUploadComplete,
318 weak_ptr_factory_.GetWeakPtr(), download->GetId()); 322 weak_ptr_factory_.GetWeakPtr(),
323 download->GetId());
319 324
320 return upload_file_info; 325 return upload_file_info.Pass();
321 } 326 }
322 327
323 void GDataDownloadObserver::OnUploadComplete(int32 download_id, 328 void GDataDownloadObserver::OnUploadComplete(int32 download_id,
324 base::PlatformFileError error, 329 base::PlatformFileError error,
325 DocumentEntry* unused_entry) { 330 UploadFileInfo* upload_file_info) {
326 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 331 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
327 DownloadMap::iterator iter = pending_downloads_.find(download_id); 332 DownloadMap::iterator iter = pending_downloads_.find(download_id);
328 if (iter == pending_downloads_.end()) { 333 if (iter == pending_downloads_.end()) {
329 DVLOG(1) << "Pending download not found" << download_id; 334 DVLOG(1) << "Pending download not found" << download_id;
330 return; 335 return;
331 } 336 }
332 DVLOG(1) << "Completing upload for download ID " << download_id; 337 DVLOG(1) << "Completing upload for download ID " << download_id;
333 DownloadItem* download = iter->second; 338 DownloadItem* download = iter->second;
334 UploadingExternalData* upload_data = GetUploadingExternalData(download); 339 UploadingExternalData* upload_data = GetUploadingExternalData(download);
335 DCHECK(upload_data); 340 DCHECK(upload_data);
336 upload_data->MarkAsComplete(); 341 upload_data->MarkAsComplete();
337 download->MaybeCompleteDownload(); 342 download->MaybeCompleteDownload();
338 } 343 }
339 344
340 } // namespace gdata 345 } // namespace gdata
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/gdata/gdata_download_observer.h ('k') | chrome/browser/chromeos/gdata/gdata_file_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698