| OLD | NEW |
| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/logging.h" | 8 #include "base/logging.h" |
| 9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
| 10 #include "base/stl_util.h" | 10 #include "base/stl_util.h" |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 76 } | 76 } |
| 77 } | 77 } |
| 78 | 78 |
| 79 bool DownloadTestObserver::IsFinished() const { | 79 bool DownloadTestObserver::IsFinished() const { |
| 80 if (finished_downloads_.size() - finished_downloads_at_construction_ >= | 80 if (finished_downloads_.size() - finished_downloads_at_construction_ >= |
| 81 wait_count_) | 81 wait_count_) |
| 82 return true; | 82 return true; |
| 83 return (finish_on_select_file_ && select_file_dialog_seen_); | 83 return (finish_on_select_file_ && select_file_dialog_seen_); |
| 84 } | 84 } |
| 85 | 85 |
| 86 void DownloadTestObserver::OnDownloadDestructed(DownloadItem* download) { |
| 87 // Stop observing. Do not do anything with it, as it is about to be gone. |
| 88 DownloadSet::iterator it = downloads_observed_.find(download); |
| 89 ASSERT_TRUE(it != downloads_observed_.end()); |
| 90 downloads_observed_.erase(it); |
| 91 download->RemoveObserver(this); |
| 92 } |
| 93 |
| 86 void DownloadTestObserver::OnDownloadUpdated(DownloadItem* download) { | 94 void DownloadTestObserver::OnDownloadUpdated(DownloadItem* download) { |
| 87 // The REMOVING state indicates that the download is being destroyed. | |
| 88 // Stop observing. Do not do anything with it, as it is about to be gone. | |
| 89 if (download->GetState() == DownloadItem::REMOVING) { | |
| 90 DownloadSet::iterator it = downloads_observed_.find(download); | |
| 91 ASSERT_TRUE(it != downloads_observed_.end()); | |
| 92 downloads_observed_.erase(it); | |
| 93 download->RemoveObserver(this); | |
| 94 return; | |
| 95 } | |
| 96 | |
| 97 // Real UI code gets the user's response after returning from the observer. | 95 // Real UI code gets the user's response after returning from the observer. |
| 98 if (download->GetSafetyState() == DownloadItem::DANGEROUS && | 96 if (download->GetSafetyState() == DownloadItem::DANGEROUS && |
| 99 !ContainsKey(dangerous_downloads_seen_, download->GetId())) { | 97 !ContainsKey(dangerous_downloads_seen_, download->GetId())) { |
| 100 dangerous_downloads_seen_.insert(download->GetId()); | 98 dangerous_downloads_seen_.insert(download->GetId()); |
| 101 | 99 |
| 102 // Calling DangerousDownloadValidated() at this point will | 100 // Calling DangerousDownloadValidated() at this point will |
| 103 // cause the download to be completed twice. Do what the real UI | 101 // cause the download to be completed twice. Do what the real UI |
| 104 // code does: make the call as a delayed task. | 102 // code does: make the call as a delayed task. |
| 105 switch (dangerous_download_action_) { | 103 switch (dangerous_download_action_) { |
| 106 case ON_DANGEROUS_DOWNLOAD_ACCEPT: | 104 case ON_DANGEROUS_DOWNLOAD_ACCEPT: |
| (...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | 268 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); |
| 271 download_manager_->AddObserver(this); | 269 download_manager_->AddObserver(this); |
| 272 ui_test_utils::RunMessageLoop(); | 270 ui_test_utils::RunMessageLoop(); |
| 273 } | 271 } |
| 274 | 272 |
| 275 void DownloadTestFlushObserver::ModelChanged(DownloadManager* manager) { | 273 void DownloadTestFlushObserver::ModelChanged(DownloadManager* manager) { |
| 276 // Model has changed, so there may be more DownloadItems to observe. | 274 // Model has changed, so there may be more DownloadItems to observe. |
| 277 CheckDownloadsInProgress(true); | 275 CheckDownloadsInProgress(true); |
| 278 } | 276 } |
| 279 | 277 |
| 278 void DownloadTestFlushObserver::OnDownloadDestructed(DownloadItem* download) { |
| 279 // Stop observing. Do not do anything with it, as it is about to be gone. |
| 280 DownloadSet::iterator it = downloads_observed_.find(download); |
| 281 ASSERT_TRUE(it != downloads_observed_.end()); |
| 282 downloads_observed_.erase(it); |
| 283 download->RemoveObserver(this); |
| 284 } |
| 285 |
| 280 void DownloadTestFlushObserver::OnDownloadUpdated(DownloadItem* download) { | 286 void DownloadTestFlushObserver::OnDownloadUpdated(DownloadItem* download) { |
| 281 // The REMOVING state indicates that the download is being destroyed. | |
| 282 // Stop observing. Do not do anything with it, as it is about to be gone. | |
| 283 if (download->GetState() == DownloadItem::REMOVING) { | |
| 284 DownloadSet::iterator it = downloads_observed_.find(download); | |
| 285 ASSERT_TRUE(it != downloads_observed_.end()); | |
| 286 downloads_observed_.erase(it); | |
| 287 download->RemoveObserver(this); | |
| 288 return; | |
| 289 } | |
| 290 | |
| 291 // No change in DownloadItem set on manager. | 287 // No change in DownloadItem set on manager. |
| 292 CheckDownloadsInProgress(false); | 288 CheckDownloadsInProgress(false); |
| 293 } | 289 } |
| 294 | 290 |
| 295 DownloadTestFlushObserver::~DownloadTestFlushObserver() { | 291 DownloadTestFlushObserver::~DownloadTestFlushObserver() { |
| 296 download_manager_->RemoveObserver(this); | 292 download_manager_->RemoveObserver(this); |
| 297 for (DownloadSet::iterator it = downloads_observed_.begin(); | 293 for (DownloadSet::iterator it = downloads_observed_.begin(); |
| 298 it != downloads_observed_.end(); ++it) { | 294 it != downloads_observed_.end(); ++it) { |
| 299 (*it)->RemoveObserver(this); | 295 (*it)->RemoveObserver(this); |
| 300 } | 296 } |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 394 if (waiting_) | 390 if (waiting_) |
| 395 MessageLoopForUI::current()->Quit(); | 391 MessageLoopForUI::current()->Quit(); |
| 396 } | 392 } |
| 397 | 393 |
| 398 const content::DownloadUrlParameters::OnStartedCallback | 394 const content::DownloadUrlParameters::OnStartedCallback |
| 399 DownloadTestItemCreationObserver::callback() { | 395 DownloadTestItemCreationObserver::callback() { |
| 400 return base::Bind( | 396 return base::Bind( |
| 401 &DownloadTestItemCreationObserver::DownloadItemCreationCallback, this); | 397 &DownloadTestItemCreationObserver::DownloadItemCreationCallback, this); |
| 402 } | 398 } |
| 403 | 399 |
| OLD | NEW |