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

Side by Side Diff: chrome/browser/chromeos/drive/download_handler.cc

Issue 306023012: Enable Drive integration service in incognito windows. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed review comments. Created 6 years, 6 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/drive/download_handler.h" 5 #include "chrome/browser/chromeos/drive/download_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/supports_user_data.h" 9 #include "base/supports_user_data.h"
10 #include "base/threading/sequenced_worker_pool.h" 10 #include "base/threading/sequenced_worker_pool.h"
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
134 134
135 drive_tmp_download_path_ = drive_tmp_download_path; 135 drive_tmp_download_path_ = drive_tmp_download_path;
136 136
137 if (download_manager) { 137 if (download_manager) {
138 notifier_.reset(new AllDownloadItemNotifier(download_manager, this)); 138 notifier_.reset(new AllDownloadItemNotifier(download_manager, this));
139 // Remove any persisted Drive DownloadItem. crbug.com/171384 139 // Remove any persisted Drive DownloadItem. crbug.com/171384
140 content::DownloadManager::DownloadVector downloads; 140 content::DownloadManager::DownloadVector downloads;
141 download_manager->GetAllDownloads(&downloads); 141 download_manager->GetAllDownloads(&downloads);
142 for (size_t i = 0; i < downloads.size(); ++i) { 142 for (size_t i = 0; i < downloads.size(); ++i) {
143 if (IsPersistedDriveDownload(drive_tmp_download_path_, downloads[i])) 143 if (IsPersistedDriveDownload(drive_tmp_download_path_, downloads[i]))
144 RemoveDownload(downloads[i]->GetId()); 144 downloads[i]->Remove();
145 } 145 }
146 } 146 }
147 } 147 }
148 148
149 void DownloadHandler::ObserveIncognitoDownloadManager(
150 DownloadManager* download_manager) {
151 DCHECK(!notifier_incognito_);
152 notifier_incognito_.reset(new AllDownloadItemNotifier(download_manager,
153 this));
154 }
155
149 void DownloadHandler::SubstituteDriveDownloadPath( 156 void DownloadHandler::SubstituteDriveDownloadPath(
150 const base::FilePath& drive_path, 157 const base::FilePath& drive_path,
151 content::DownloadItem* download, 158 content::DownloadItem* download,
152 const SubstituteDriveDownloadPathCallback& callback) { 159 const SubstituteDriveDownloadPathCallback& callback) {
153 DVLOG(1) << "SubstituteDriveDownloadPath " << drive_path.value(); 160 DVLOG(1) << "SubstituteDriveDownloadPath " << drive_path.value();
154 161
155 SetDownloadParams(drive_path, download); 162 SetDownloadParams(drive_path, download);
156 163
157 if (util::IsUnderDriveMountPoint(drive_path)) { 164 if (util::IsUnderDriveMountPoint(drive_path)) {
158 // Prepare the destination directory. 165 // Prepare the destination directory.
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 223
217 void DownloadHandler::OnDownloadCreated(DownloadManager* manager, 224 void DownloadHandler::OnDownloadCreated(DownloadManager* manager,
218 DownloadItem* download) { 225 DownloadItem* download) {
219 // Remove any persisted Drive DownloadItem. crbug.com/171384 226 // Remove any persisted Drive DownloadItem. crbug.com/171384
220 if (IsPersistedDriveDownload(drive_tmp_download_path_, download)) { 227 if (IsPersistedDriveDownload(drive_tmp_download_path_, download)) {
221 // Remove download later, since doing it here results in a crash. 228 // Remove download later, since doing it here results in a crash.
222 BrowserThread::PostTask(BrowserThread::UI, 229 BrowserThread::PostTask(BrowserThread::UI,
223 FROM_HERE, 230 FROM_HERE,
224 base::Bind(&DownloadHandler::RemoveDownload, 231 base::Bind(&DownloadHandler::RemoveDownload,
225 weak_ptr_factory_.GetWeakPtr(), 232 weak_ptr_factory_.GetWeakPtr(),
233 static_cast<void*>(manager),
226 download->GetId())); 234 download->GetId()));
227 } 235 }
228 } 236 }
229 237
230 void DownloadHandler::RemoveDownload(int id) { 238 void DownloadHandler::RemoveDownload(void* manager_id, int id) {
231 DownloadManager* manager = notifier_->GetManager(); 239 DownloadManager* manager = GetDownloadManager(manager_id);
232 if (!manager) 240 if (!manager)
233 return; 241 return;
234 DownloadItem* download = manager->GetDownload(id); 242 DownloadItem* download = manager->GetDownload(id);
235 if (!download) 243 if (!download)
236 return; 244 return;
237 download->Remove(); 245 download->Remove();
238 } 246 }
239 247
240 void DownloadHandler::OnDownloadUpdated( 248 void DownloadHandler::OnDownloadUpdated(
241 DownloadManager* manager, DownloadItem* download) { 249 DownloadManager* manager, DownloadItem* download) {
242 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 250 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
243 251
244 // Only accept downloads that have the Drive meta data associated with them. 252 // Only accept downloads that have the Drive meta data associated with them.
245 DriveUserData* data = GetDriveUserData(download); 253 DriveUserData* data = GetDriveUserData(download);
246 if (!drive_tmp_download_path_.IsParent(download->GetTargetFilePath()) || 254 if (!drive_tmp_download_path_.IsParent(download->GetTargetFilePath()) ||
247 !data || 255 !data ||
248 data->is_complete()) 256 data->is_complete())
249 return; 257 return;
250 258
251 switch (download->GetState()) { 259 switch (download->GetState()) {
252 case DownloadItem::IN_PROGRESS: 260 case DownloadItem::IN_PROGRESS:
253 break; 261 break;
254 262
255 case DownloadItem::COMPLETE: 263 case DownloadItem::COMPLETE:
256 UploadDownloadItem(download); 264 UploadDownloadItem(manager, download);
257 data->set_complete(); 265 data->set_complete();
258 break; 266 break;
259 267
260 case DownloadItem::CANCELLED: 268 case DownloadItem::CANCELLED:
261 download->SetUserData(&kDrivePathKey, NULL); 269 download->SetUserData(&kDrivePathKey, NULL);
262 break; 270 break;
263 271
264 case DownloadItem::INTERRUPTED: 272 case DownloadItem::INTERRUPTED:
265 // Interrupted downloads can be resumed. Keep the Drive user data around 273 // Interrupted downloads can be resumed. Keep the Drive user data around
266 // so that it can be used when the download resumes. The download is truly 274 // so that it can be used when the download resumes. The download is truly
(...skipping 15 matching lines...) Expand all
282 FROM_HERE, 290 FROM_HERE,
283 base::Bind(&GetDriveTempDownloadPath, drive_tmp_download_path_), 291 base::Bind(&GetDriveTempDownloadPath, drive_tmp_download_path_),
284 callback); 292 callback);
285 } else { 293 } else {
286 LOG(WARNING) << "Failed to create directory, error = " 294 LOG(WARNING) << "Failed to create directory, error = "
287 << FileErrorToString(error); 295 << FileErrorToString(error);
288 callback.Run(base::FilePath()); 296 callback.Run(base::FilePath());
289 } 297 }
290 } 298 }
291 299
292 void DownloadHandler::UploadDownloadItem(DownloadItem* download) { 300 void DownloadHandler::UploadDownloadItem(DownloadManager* manager,
301 DownloadItem* download) {
293 DCHECK_EQ(DownloadItem::COMPLETE, download->GetState()); 302 DCHECK_EQ(DownloadItem::COMPLETE, download->GetState());
294 base::FilePath* cache_file_path = new base::FilePath; 303 base::FilePath* cache_file_path = new base::FilePath;
295 WriteOnCacheFileAndReply( 304 WriteOnCacheFileAndReply(
296 file_system_, 305 file_system_,
297 util::ExtractDrivePath(GetTargetPath(download)), 306 util::ExtractDrivePath(GetTargetPath(download)),
298 download->GetMimeType(), 307 download->GetMimeType(),
299 base::Bind(&MoveDownloadedFile, download->GetTargetFilePath(), 308 base::Bind(&MoveDownloadedFile, download->GetTargetFilePath(),
300 cache_file_path), 309 cache_file_path),
301 base::Bind(&DownloadHandler::SetCacheFilePath, 310 base::Bind(&DownloadHandler::SetCacheFilePath,
302 weak_ptr_factory_.GetWeakPtr(), 311 weak_ptr_factory_.GetWeakPtr(),
312 static_cast<void*>(manager),
303 download->GetId(), 313 download->GetId(),
304 base::Owned(cache_file_path))); 314 base::Owned(cache_file_path)));
305 } 315 }
306 316
307 void DownloadHandler::SetCacheFilePath(int id, 317 void DownloadHandler::SetCacheFilePath(void* manager_id,
318 int id,
308 const base::FilePath* cache_file_path, 319 const base::FilePath* cache_file_path,
309 FileError error) { 320 FileError error) {
310 if (error != FILE_ERROR_OK) 321 if (error != FILE_ERROR_OK)
311 return; 322 return;
312 DownloadManager* manager = notifier_->GetManager(); 323 DownloadManager* manager = GetDownloadManager(manager_id);
313 if (!manager) 324 if (!manager)
314 return; 325 return;
315 DownloadItem* download = manager->GetDownload(id); 326 DownloadItem* download = manager->GetDownload(id);
316 if (!download) 327 if (!download)
317 return; 328 return;
318 DriveUserData* data = GetDriveUserData(download); 329 DriveUserData* data = GetDriveUserData(download);
319 if (!data) 330 if (!data)
320 return; 331 return;
321 data->set_cache_file_path(*cache_file_path); 332 data->set_cache_file_path(*cache_file_path);
322 } 333 }
323 334
335 DownloadManager* DownloadHandler::GetDownloadManager(void* manager_id) {
336 if (manager_id == notifier_->GetManager())
337 return notifier_->GetManager();
338 if (notifier_incognito_ && manager_id == notifier_incognito_->GetManager())
339 return notifier_incognito_->GetManager();
340 return NULL;
341 }
324 342
325 } // namespace drive 343 } // namespace drive
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/drive/download_handler.h ('k') | chrome/browser/chromeos/drive/drive_integration_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698