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

Side by Side Diff: chrome/browser/download/download_path_reservation_tracker.cc

Issue 10704026: Reland DownloadItem::Observer::OnDownloadDestroyed() replaces DownloadItem::REMOVING (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: lint Created 8 years, 4 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/download/download_path_reservation_tracker.h" 5 #include "chrome/browser/download/download_path_reservation_tracker.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 29 matching lines...) Expand all
40 // and destroyed on the UI thread. 40 // and destroyed on the UI thread.
41 class DownloadItemObserver : public DownloadItem::Observer { 41 class DownloadItemObserver : public DownloadItem::Observer {
42 public: 42 public:
43 explicit DownloadItemObserver(DownloadItem& download_item); 43 explicit DownloadItemObserver(DownloadItem& download_item);
44 44
45 private: 45 private:
46 virtual ~DownloadItemObserver(); 46 virtual ~DownloadItemObserver();
47 47
48 // DownloadItem::Observer 48 // DownloadItem::Observer
49 virtual void OnDownloadUpdated(DownloadItem* download) OVERRIDE; 49 virtual void OnDownloadUpdated(DownloadItem* download) OVERRIDE;
50 virtual void OnDownloadOpened(DownloadItem* download) OVERRIDE; 50 virtual void OnDownloadDestroyed(DownloadItem* download) OVERRIDE;
51 51
52 DownloadItem& download_item_; 52 DownloadItem& download_item_;
53 53
54 // Last known target path for the download. 54 // Last known target path for the download.
55 FilePath last_target_path_; 55 FilePath last_target_path_;
56 56
57 DISALLOW_COPY_AND_ASSIGN(DownloadItemObserver); 57 DISALLOW_COPY_AND_ASSIGN(DownloadItemObserver);
58 }; 58 };
59 59
60 // Returns true if the given path is in use by a path reservation. 60 // Returns true if the given path is in use by a path reservation.
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
216 } 216 }
217 217
218 case DownloadItem::COMPLETE: 218 case DownloadItem::COMPLETE:
219 // If the download is complete, then it has already been renamed to the 219 // If the download is complete, then it has already been renamed to the
220 // final name. The existence of the file on disk is sufficient to prevent 220 // final name. The existence of the file on disk is sufficient to prevent
221 // conflicts from now on. 221 // conflicts from now on.
222 222
223 case DownloadItem::CANCELLED: 223 case DownloadItem::CANCELLED:
224 // We no longer need the reservation if the download is being removed. 224 // We no longer need the reservation if the download is being removed.
225 225
226 case DownloadItem::REMOVING:
227 // Ditto, but this case shouldn't happen in practice. We should have
228 // received another notification beforehand.
229
230 case DownloadItem::INTERRUPTED: 226 case DownloadItem::INTERRUPTED:
231 // The download filename will need to be re-generated when the download is 227 // The download filename will need to be re-generated when the download is
232 // restarted. Holding on to the reservation now would prevent the name 228 // restarted. Holding on to the reservation now would prevent the name
233 // from being used for a subsequent retry attempt. 229 // from being used for a subsequent retry attempt.
234 230
235 BrowserThread::PostTask( 231 BrowserThread::PostTask(
236 BrowserThread::FILE, FROM_HERE, 232 BrowserThread::FILE, FROM_HERE,
237 base::Bind(&RevokeReservation, download->GetGlobalId())); 233 base::Bind(&RevokeReservation, download->GetGlobalId()));
238 delete this; 234 delete this;
239 break; 235 break;
240 236
241 case DownloadItem::MAX_DOWNLOAD_STATE: 237 case DownloadItem::MAX_DOWNLOAD_STATE:
242 // Compiler appeasement. 238 // Compiler appeasement.
243 NOTREACHED(); 239 NOTREACHED();
244 } 240 }
245 } 241 }
246 242
247 void DownloadItemObserver::OnDownloadOpened(DownloadItem* download) { 243 void DownloadItemObserver::OnDownloadDestroyed(DownloadItem* download) {
248 // We shouldn't be tracking reservations for a download that has been 244 // This shouldn't happen. We should catch either COMPLETE, CANCELLED, or
249 // externally opened. The tracker should have detached itself when the 245 // INTERRUPTED first.
250 // download was complete. 246 BrowserThread::PostTask(BrowserThread::FILE, FROM_HERE,
247 base::Bind(&RevokeReservation, download->GetGlobalId()));
248 delete this;
251 } 249 }
252 250
253 } // namespace 251 } // namespace
254 252
255 // static 253 // static
256 void DownloadPathReservationTracker::GetReservedPath( 254 void DownloadPathReservationTracker::GetReservedPath(
257 DownloadItem& download_item, 255 DownloadItem& download_item,
258 const FilePath& target_path, 256 const FilePath& target_path,
259 const FilePath& default_path, 257 const FilePath& default_path,
260 bool uniquify_path, 258 bool uniquify_path,
261 const ReservedPathCallback& callback) { 259 const ReservedPathCallback& callback) {
262 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 260 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
263 // Attach an observer to the download item so that we know when the target 261 // Attach an observer to the download item so that we know when the target
264 // path changes and/or the download is no longer active. 262 // path changes and/or the download is no longer active.
265 new DownloadItemObserver(download_item); 263 new DownloadItemObserver(download_item);
266 // DownloadItemObserver deletes itself. 264 // DownloadItemObserver deletes itself.
267 265
268 BrowserThread::PostTask( 266 BrowserThread::PostTask(
269 BrowserThread::FILE, FROM_HERE, 267 BrowserThread::FILE, FROM_HERE,
270 base::Bind(&CreateReservation, download_item.GetGlobalId(), 268 base::Bind(&CreateReservation, download_item.GetGlobalId(),
271 target_path, default_path, uniquify_path, callback)); 269 target_path, default_path, uniquify_path, callback));
272 } 270 }
273 271
274 // static 272 // static
275 bool DownloadPathReservationTracker::IsPathInUseForTesting( 273 bool DownloadPathReservationTracker::IsPathInUseForTesting(
276 const FilePath& path) { 274 const FilePath& path) {
277 return IsPathInUse(path); 275 return IsPathInUse(path);
278 } 276 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698