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

Side by Side Diff: content/public/test/download_test_observer.cc

Issue 10915180: Make DownloadHistory observe manager, items (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 2 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 "content/public/test/download_test_observer.h" 5 #include "content/public/test/download_test_observer.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
99 99
100 DownloadTestObserver::~DownloadTestObserver() { 100 DownloadTestObserver::~DownloadTestObserver() {
101 for (DownloadSet::iterator it = downloads_observed_.begin(); 101 for (DownloadSet::iterator it = downloads_observed_.begin();
102 it != downloads_observed_.end(); ++it) 102 it != downloads_observed_.end(); ++it)
103 (*it)->RemoveObserver(this); 103 (*it)->RemoveObserver(this);
104 104
105 download_manager_->RemoveObserver(this); 105 download_manager_->RemoveObserver(this);
106 } 106 }
107 107
108 void DownloadTestObserver::Init() { 108 void DownloadTestObserver::Init() {
109 download_manager_->AddObserver(this); // Will call initial ModelChanged(). 109 download_manager_->AddObserver(this);
110 std::vector<DownloadItem*> downloads;
111 download_manager_->GetAllDownloads(&downloads);
112 for (std::vector<DownloadItem*>::iterator it = downloads.begin();
113 it != downloads.end(); ++it) {
114 OnDownloadCreated(download_manager_, *it);
115 }
110 finished_downloads_at_construction_ = finished_downloads_.size(); 116 finished_downloads_at_construction_ = finished_downloads_.size();
111 states_observed_.clear(); 117 states_observed_.clear();
112 } 118 }
113 119
114 void DownloadTestObserver::WaitForFinished() { 120 void DownloadTestObserver::WaitForFinished() {
115 if (!IsFinished()) { 121 if (!IsFinished()) {
116 waiting_ = true; 122 waiting_ = true;
117 RunMessageLoop(); 123 RunMessageLoop();
118 waiting_ = false; 124 waiting_ = false;
119 } 125 }
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
166 172
167 default: 173 default:
168 NOTREACHED(); 174 NOTREACHED();
169 } 175 }
170 } 176 }
171 177
172 if (IsDownloadInFinalState(download)) 178 if (IsDownloadInFinalState(download))
173 DownloadInFinalState(download); 179 DownloadInFinalState(download);
174 } 180 }
175 181
176 void DownloadTestObserver::ModelChanged(DownloadManager* manager) { 182 void DownloadTestObserver::OnDownloadCreated(
183 DownloadManager* manager, DownloadItem* item) {
177 DCHECK_EQ(manager, download_manager_); 184 DCHECK_EQ(manager, download_manager_);
185 OnDownloadUpdated(item);
178 186
179 // Regenerate DownloadItem observers. If there are any download items 187 DownloadSet::const_iterator finished_it(finished_downloads_.find(item));
180 // in our final state, note them in |finished_downloads_| 188 DownloadSet::iterator observed_it(downloads_observed_.find(item));
181 // (done by |OnDownloadUpdated()|).
182 std::vector<DownloadItem*> downloads;
183 download_manager_->GetAllDownloads(&downloads);
184 189
185 for (std::vector<DownloadItem*>::iterator it = downloads.begin(); 190 // If it isn't finished and we're aren't observing it, start.
186 it != downloads.end(); ++it) { 191 if (finished_it == finished_downloads_.end() &&
187 OnDownloadUpdated(*it); // Safe to call multiple times; checks state. 192 observed_it == downloads_observed_.end()) {
193 item->AddObserver(this);
194 downloads_observed_.insert(item);
195 }
188 196
189 DownloadSet::const_iterator finished_it(finished_downloads_.find(*it)); 197 // If it is finished and we are observing it, stop.
190 DownloadSet::iterator observed_it(downloads_observed_.find(*it)); 198 if (finished_it != finished_downloads_.end() &&
191 199 observed_it != downloads_observed_.end()) {
192 // If it isn't finished and we're aren't observing it, start. 200 item->RemoveObserver(this);
193 if (finished_it == finished_downloads_.end() && 201 downloads_observed_.erase(observed_it);
194 observed_it == downloads_observed_.end()) {
195 (*it)->AddObserver(this);
196 downloads_observed_.insert(*it);
197 continue;
198 }
199
200 // If it is finished and we are observing it, stop.
201 if (finished_it != finished_downloads_.end() &&
202 observed_it != downloads_observed_.end()) {
203 (*it)->RemoveObserver(this);
204 downloads_observed_.erase(observed_it);
205 continue;
206 }
207 } 202 }
208 } 203 }
209 204
210 size_t DownloadTestObserver::NumDangerousDownloadsSeen() const { 205 size_t DownloadTestObserver::NumDangerousDownloadsSeen() const {
211 return dangerous_downloads_seen_.size(); 206 return dangerous_downloads_seen_.size();
212 } 207 }
213 208
214 size_t DownloadTestObserver::NumDownloadsSeenInState( 209 size_t DownloadTestObserver::NumDownloadsSeenInState(
215 DownloadItem::DownloadState state) const { 210 DownloadItem::DownloadState state) const {
216 StateMap::const_iterator it = states_observed_.find(state); 211 StateMap::const_iterator it = states_observed_.find(state);
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 // instead. In this case, it's because of |IsDownloadInFinalState()|. 271 // instead. In this case, it's because of |IsDownloadInFinalState()|.
277 Init(); 272 Init();
278 } 273 }
279 274
280 DownloadTestObserverInProgress::~DownloadTestObserverInProgress() { 275 DownloadTestObserverInProgress::~DownloadTestObserverInProgress() {
281 } 276 }
282 277
283 278
284 bool DownloadTestObserverInProgress::IsDownloadInFinalState( 279 bool DownloadTestObserverInProgress::IsDownloadInFinalState(
285 DownloadItem* download) { 280 DownloadItem* download) {
286 return (download->GetState() == DownloadItem::IN_PROGRESS); 281 return (download->GetState() == DownloadItem::IN_PROGRESS) &&
282 !download->GetTargetFilePath().empty();
Randy Smith (Not in Mondays) 2012/09/24 18:03:25 It's in test code, so I don't have strong feelings
benjhayden 2012/09/24 20:12:11 Could this CL (DownloadHistory-is-a-Observer) wait
Randy Smith (Not in Mondays) 2012/11/02 23:31:24 I suppose, if you're volunteering. But how would
benjhayden 2012/11/06 20:01:14 Sorry, I don't know what I was thinking. Yes, this
287 } 283 }
288 284
289 DownloadTestFlushObserver::DownloadTestFlushObserver( 285 DownloadTestFlushObserver::DownloadTestFlushObserver(
290 DownloadManager* download_manager) 286 DownloadManager* download_manager)
291 : download_manager_(download_manager), 287 : download_manager_(download_manager),
292 waiting_for_zero_inprogress_(true) {} 288 waiting_for_zero_inprogress_(true) {}
293 289
294 void DownloadTestFlushObserver::WaitForFlush() { 290 void DownloadTestFlushObserver::WaitForFlush() {
295 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 291 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
296 download_manager_->AddObserver(this); 292 download_manager_->AddObserver(this);
(...skipping 121 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 MessageLoopForUI::current()->Quit(); 414 MessageLoopForUI::current()->Quit();
419 } 415 }
420 416
421 const DownloadUrlParameters::OnStartedCallback 417 const DownloadUrlParameters::OnStartedCallback
422 DownloadTestItemCreationObserver::callback() { 418 DownloadTestItemCreationObserver::callback() {
423 return base::Bind( 419 return base::Bind(
424 &DownloadTestItemCreationObserver::DownloadItemCreationCallback, this); 420 &DownloadTestItemCreationObserver::DownloadItemCreationCallback, this);
425 } 421 }
426 422
427 } // namespace content 423 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698