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

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

Issue 7466033: Fix warning prompting on closing a window that will cancel downloads. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Last little things from Achuith and Miranda. Created 9 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/file_path.h" 7 #include "base/file_path.h"
8 #include "base/file_util.h" 8 #include "base/file_util.h"
9 #include "base/memory/ref_counted.h" 9 #include "base/memory/ref_counted.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
11 #include "base/scoped_temp_dir.h" 11 #include "base/scoped_temp_dir.h"
12 #include "base/stl_util.h" 12 #include "base/stl_util.h"
13 #include "base/test/test_file_util.h" 13 #include "base/test/test_file_util.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "chrome/browser/browser_process.h" 15 #include "chrome/browser/browser_process.h"
16 #include "chrome/browser/download/chrome_download_manager_delegate.h" 16 #include "chrome/browser/download/chrome_download_manager_delegate.h"
17 #include "chrome/browser/download/download_crx_util.h" 17 #include "chrome/browser/download/download_crx_util.h"
18 #include "chrome/browser/download/download_history.h" 18 #include "chrome/browser/download/download_history.h"
19 #include "chrome/browser/download/download_prefs.h" 19 #include "chrome/browser/download/download_prefs.h"
20 #include "chrome/browser/download/download_service.h" 20 #include "chrome/browser/download/download_service.h"
21 #include "chrome/browser/download/download_service_factory.h" 21 #include "chrome/browser/download/download_service_factory.h"
22 #include "chrome/browser/download/download_shelf.h" 22 #include "chrome/browser/download/download_shelf.h"
23 #include "chrome/browser/download/download_test_observer.h"
23 #include "chrome/browser/download/download_util.h" 24 #include "chrome/browser/download/download_util.h"
24 #include "chrome/browser/extensions/extension_install_ui.h" 25 #include "chrome/browser/extensions/extension_install_ui.h"
25 #include "chrome/browser/extensions/extension_service.h" 26 #include "chrome/browser/extensions/extension_service.h"
26 #include "chrome/browser/history/history.h" 27 #include "chrome/browser/history/history.h"
27 #include "chrome/browser/net/url_request_mock_util.h" 28 #include "chrome/browser/net/url_request_mock_util.h"
28 #include "chrome/browser/prefs/pref_service.h" 29 #include "chrome/browser/prefs/pref_service.h"
29 #include "chrome/browser/profiles/profile.h" 30 #include "chrome/browser/profiles/profile.h"
30 #include "chrome/browser/ui/browser.h" 31 #include "chrome/browser/ui/browser.h"
31 #include "chrome/browser/ui/browser_list.h" 32 #include "chrome/browser/ui/browser_list.h"
32 #include "chrome/browser/ui/browser_window.h" 33 #include "chrome/browser/ui/browser_window.h"
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
75 76
76 // Fake user click on "Deny". 77 // Fake user click on "Deny".
77 void DenyDangerousDownload(scoped_refptr<DownloadManager> download_manager, 78 void DenyDangerousDownload(scoped_refptr<DownloadManager> download_manager,
78 int32 download_id) { 79 int32 download_id) {
79 DownloadItem* download = download_manager->GetDownloadItem(download_id); 80 DownloadItem* download = download_manager->GetDownloadItem(download_id);
80 ASSERT_TRUE(download->IsPartialDownload()); 81 ASSERT_TRUE(download->IsPartialDownload());
81 download->Cancel(true); 82 download->Cancel(true);
82 download->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 83 download->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
83 } 84 }
84 85
85 // Construction of this class defines a system state, based on some number
86 // of downloads being seen in a particular state + other events that
87 // may occur in the download system. That state will be recorded if it
88 // occurs at any point after construction. When that state occurs, the class
89 // is considered finished. Callers may either probe for the finished state, or
90 // wait on it.
91 //
92 // TODO(rdsmith): Detect manager going down, remove pointer to
93 // DownloadManager, transition to finished. (For right now we
94 // just use a scoped_refptr<> to keep it around, but that may cause
95 // timeouts on waiting if a DownloadManager::Shutdown() occurs which
96 // cancels our in-progress downloads.)
97 class DownloadsObserver : public DownloadManager::Observer,
98 public DownloadItem::Observer {
99 public:
100 // Create an object that will be considered finished when |wait_count|
101 // download items have entered state |download_finished_state|.
102 // If |finish_on_select_file| is true, the object will also be
103 // considered finished if the DownloadManager raises a
104 // SelectFileDialogDisplayed() notification.
105
106 // TODO(rdsmith): Consider rewriting the interface to take a list of events
107 // to treat as completion events.
108 DownloadsObserver(DownloadManager* download_manager,
109 size_t wait_count,
110 DownloadItem::DownloadState download_finished_state,
111 bool finish_on_select_file,
112 DangerousDownloadAction dangerous_download_action)
113 : download_manager_(download_manager),
114 wait_count_(wait_count),
115 finished_downloads_at_construction_(0),
116 waiting_(false),
117 download_finished_state_(download_finished_state),
118 finish_on_select_file_(finish_on_select_file),
119 select_file_dialog_seen_(false),
120 dangerous_download_action_(dangerous_download_action) {
121 download_manager_->AddObserver(this); // Will call initial ModelChanged().
122 finished_downloads_at_construction_ = finished_downloads_.size();
123 EXPECT_NE(DownloadItem::REMOVING, download_finished_state)
124 << "Waiting for REMOVING is not supported. Try COMPLETE.";
125 }
126
127 ~DownloadsObserver() {
128 std::set<DownloadItem*>::iterator it = downloads_observed_.begin();
129 for (; it != downloads_observed_.end(); ++it)
130 (*it)->RemoveObserver(this);
131
132 download_manager_->RemoveObserver(this);
133 }
134
135 // State accessors.
136 bool select_file_dialog_seen() { return select_file_dialog_seen_; }
137
138 // Wait for whatever state was specified in the constructor.
139 void WaitForFinished() {
140 if (!IsFinished()) {
141 waiting_ = true;
142 ui_test_utils::RunMessageLoop();
143 waiting_ = false;
144 }
145 }
146
147 // Return true if everything's happened that we're configured for.
148 bool IsFinished() {
149 if (finished_downloads_.size() - finished_downloads_at_construction_
150 >= wait_count_)
151 return true;
152 return (finish_on_select_file_ && select_file_dialog_seen_);
153 }
154
155 // DownloadItem::Observer
156 virtual void OnDownloadUpdated(DownloadItem* download) {
157 // The REMOVING state indicates that the download is being destroyed.
158 // Stop observing. Do not do anything with it, as it is about to be gone.
159 if (download->state() == DownloadItem::REMOVING) {
160 std::set<DownloadItem*>::iterator it = downloads_observed_.find(download);
161 ASSERT_TRUE(it != downloads_observed_.end());
162 downloads_observed_.erase(it);
163 download->RemoveObserver(this);
164 return;
165 }
166
167 // Real UI code gets the user's response after returning from the observer.
168 if (download->safety_state() == DownloadItem::DANGEROUS &&
169 !ContainsKey(dangerous_downloads_seen_, download->id())) {
170 dangerous_downloads_seen_.insert(download->id());
171
172 // Calling DangerousDownloadValidated() at this point will
173 // cause the download to be completed twice. Do what the real UI
174 // code does: make the call as a delayed task.
175 switch (dangerous_download_action_) {
176 case ON_DANGEROUS_DOWNLOAD_ACCEPT:
177 // Fake user click on "Accept". Delay the actual click, as the
178 // real UI would.
179 BrowserThread::PostTask(
180 BrowserThread::UI, FROM_HERE,
181 base::Bind(&AcceptDangerousDownload, download_manager_,
182 download->id()));
183 break;
184
185 case ON_DANGEROUS_DOWNLOAD_DENY:
186 // Fake a user click on "Deny". Delay the actual click, as the
187 // real UI would.
188 BrowserThread::PostTask(
189 BrowserThread::UI, FROM_HERE,
190 base::Bind(&DenyDangerousDownload, download_manager_,
191 download->id()));
192 break;
193
194 case ON_DANGEROUS_DOWNLOAD_FAIL:
195 ADD_FAILURE() << "Unexpected dangerous download item.";
196 break;
197
198 default:
199 NOTREACHED();
200 }
201 }
202
203 if (download->state() == download_finished_state_)
204 DownloadInFinalState(download);
205 }
206
207 virtual void OnDownloadOpened(DownloadItem* download) {}
208
209 // DownloadManager::Observer
210 virtual void ModelChanged() {
211 // Regenerate DownloadItem observers. If there are any download items
212 // in our final state, note them in |finished_downloads_|
213 // (done by |OnDownloadUpdated()|).
214 std::vector<DownloadItem*> downloads;
215 download_manager_->GetAllDownloads(FilePath(), &downloads);
216
217 std::vector<DownloadItem*>::iterator it = downloads.begin();
218 for (; it != downloads.end(); ++it) {
219 OnDownloadUpdated(*it); // Safe to call multiple times; checks state.
220
221 std::set<DownloadItem*>::const_iterator
222 finished_it(finished_downloads_.find(*it));
223 std::set<DownloadItem*>::iterator
224 observed_it(downloads_observed_.find(*it));
225
226 // If it isn't finished and we're aren't observing it, start.
227 if (finished_it == finished_downloads_.end() &&
228 observed_it == downloads_observed_.end()) {
229 (*it)->AddObserver(this);
230 downloads_observed_.insert(*it);
231 continue;
232 }
233
234 // If it is finished and we are observing it, stop.
235 if (finished_it != finished_downloads_.end() &&
236 observed_it != downloads_observed_.end()) {
237 (*it)->RemoveObserver(this);
238 downloads_observed_.erase(observed_it);
239 continue;
240 }
241 }
242 }
243
244 virtual void SelectFileDialogDisplayed(int32 /* id */) {
245 select_file_dialog_seen_ = true;
246 SignalIfFinished();
247 }
248
249 virtual size_t NumDangerousDownloadsSeen() const {
250 return dangerous_downloads_seen_.size();
251 }
252
253 private:
254 // Called when we know that a download item is in a final state.
255 // Note that this is not the same as it first transitioning in to the
256 // final state; multiple notifications may occur once the item is in
257 // that state. So we keep our own track of transitions into final.
258 void DownloadInFinalState(DownloadItem* download) {
259 if (finished_downloads_.find(download) != finished_downloads_.end()) {
260 // We've already seen terminal state on this download.
261 return;
262 }
263
264 // Record the transition.
265 finished_downloads_.insert(download);
266
267 SignalIfFinished();
268 }
269
270 void SignalIfFinished() {
271 if (waiting_ && IsFinished())
272 MessageLoopForUI::current()->Quit();
273 }
274
275 // The observed download manager.
276 scoped_refptr<DownloadManager> download_manager_;
277
278 // The set of DownloadItem's that have transitioned to their finished state
279 // since construction of this object. When the size of this array
280 // reaches wait_count_, we're done.
281 std::set<DownloadItem*> finished_downloads_;
282
283 // The set of DownloadItem's we are currently observing. Generally there
284 // won't be any overlap with the above; once we see the final state
285 // on a DownloadItem, we'll stop observing it.
286 std::set<DownloadItem*> downloads_observed_;
287
288 // The number of downloads to wait on completing.
289 size_t wait_count_;
290
291 // The number of downloads entered in final state in initial
292 // ModelChanged(). We use |finished_downloads_| to track the incoming
293 // transitions to final state we should ignore, and to track the
294 // number of final state transitions that occurred between
295 // construction and return from wait. But some downloads may be in our
296 // final state (and thus be entered into |finished_downloads_|) when we
297 // construct this class. We don't want to count those in our transition
298 // to finished.
299 int finished_downloads_at_construction_;
300
301 // Whether an internal message loop has been started and must be quit upon
302 // all downloads completing.
303 bool waiting_;
304
305 // The state on which to consider the DownloadItem finished.
306 DownloadItem::DownloadState download_finished_state_;
307
308 // True if we should transition the DownloadsObserver to finished if
309 // the select file dialog comes up.
310 bool finish_on_select_file_;
311
312 // True if we've seen the select file dialog.
313 bool select_file_dialog_seen_;
314
315 // Action to take if a dangerous download is encountered.
316 DangerousDownloadAction dangerous_download_action_;
317
318 // Holds the download ids which were dangerous.
319 std::set<int32> dangerous_downloads_seen_;
320
321 DISALLOW_COPY_AND_ASSIGN(DownloadsObserver);
322 };
323
324 // WaitForFlush() returns after:
325 // * There are no IN_PROGRESS download items remaining on the
326 // DownloadManager.
327 // * There have been two round trip messages through the file and
328 // IO threads.
329 // This almost certainly means that a Download cancel has propagated through
330 // the system.
331 class DownloadsFlushObserver
332 : public DownloadManager::Observer,
333 public DownloadItem::Observer,
334 public base::RefCountedThreadSafe<DownloadsFlushObserver> {
335 public:
336 explicit DownloadsFlushObserver(DownloadManager* download_manager)
337 : download_manager_(download_manager),
338 waiting_for_zero_inprogress_(true) {}
339
340 void WaitForFlush() {
341 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
342 download_manager_->AddObserver(this);
343 ui_test_utils::RunMessageLoop();
344 }
345
346 // DownloadsManager observer methods.
347 virtual void ModelChanged() {
348 // Model has changed, so there may be more DownloadItems to observe.
349 CheckDownloadsInProgress(true);
350 }
351
352 // DownloadItem observer methods.
353 virtual void OnDownloadUpdated(DownloadItem* download) {
354 // No change in DownloadItem set on manager.
355 CheckDownloadsInProgress(false);
356 }
357 virtual void OnDownloadOpened(DownloadItem* download) {}
358
359 protected:
360 friend class base::RefCountedThreadSafe<DownloadsFlushObserver>;
361
362 virtual ~DownloadsFlushObserver() {
363 download_manager_->RemoveObserver(this);
364 for (std::set<DownloadItem*>::iterator it = downloads_observed_.begin();
365 it != downloads_observed_.end(); ++it) {
366 (*it)->RemoveObserver(this);
367 }
368 }
369
370 private:
371 // If we're waiting for that flush point, check the number
372 // of downloads in the IN_PROGRESS state and take appropriate
373 // action. If requested, also observes all downloads while iterating.
374 void CheckDownloadsInProgress(bool observe_downloads) {
375 if (waiting_for_zero_inprogress_) {
376 int count = 0;
377
378 std::vector<DownloadItem*> downloads;
379 download_manager_->SearchDownloads(string16(), &downloads);
380 std::vector<DownloadItem*>::iterator it = downloads.begin();
381 for (; it != downloads.end(); ++it) {
382 if ((*it)->state() == DownloadItem::IN_PROGRESS)
383 count++;
384 if (observe_downloads) {
385 if (downloads_observed_.find(*it) == downloads_observed_.end()) {
386 (*it)->AddObserver(this);
387 }
388 // Download items are forever, and we don't want to make
389 // assumptions about future state transitions, so once we
390 // start observing them, we don't stop until destruction.
391 }
392 }
393
394 if (count == 0) {
395 waiting_for_zero_inprogress_ = false;
396 // Stop observing DownloadItems. We maintain the observation
397 // of DownloadManager so that we don't have to independently track
398 // whether we are observing it for conditional destruction.
399 for (std::set<DownloadItem*>::iterator it = downloads_observed_.begin();
400 it != downloads_observed_.end(); ++it) {
401 (*it)->RemoveObserver(this);
402 }
403 downloads_observed_.clear();
404
405 // Trigger next step. We need to go past the IO thread twice, as
406 // there's a self-task posting in the IO thread cancel path.
407 BrowserThread::PostTask(
408 BrowserThread::FILE, FROM_HERE,
409 base::Bind(&DownloadsFlushObserver::PingFileThread, this, 2));
410 }
411 }
412 }
413
414 void PingFileThread(int cycle) {
415 BrowserThread::PostTask(
416 BrowserThread::IO, FROM_HERE,
417 base::Bind(&DownloadsFlushObserver::PingIOThread, this, cycle));
418 }
419
420 void PingIOThread(int cycle) {
421 if (--cycle) {
422 BrowserThread::PostTask(
423 BrowserThread::UI, FROM_HERE,
424 base::Bind(&DownloadsFlushObserver::PingFileThread, this, cycle));
425 } else {
426 BrowserThread::PostTask(
427 BrowserThread::UI, FROM_HERE, new MessageLoop::QuitTask());
428 }
429 }
430
431 DownloadManager* download_manager_;
432 std::set<DownloadItem*> downloads_observed_;
433 bool waiting_for_zero_inprogress_;
434
435 DISALLOW_COPY_AND_ASSIGN(DownloadsFlushObserver);
436 };
437
438 // Collect the information from FILE and IO threads needed for the Cancel 86 // Collect the information from FILE and IO threads needed for the Cancel
439 // Test, specifically the number of outstanding requests on the 87 // Test, specifically the number of outstanding requests on the
440 // ResourceDispatcherHost and the number of pending downloads on the 88 // ResourceDispatcherHost and the number of pending downloads on the
441 // DownloadFileManager. 89 // DownloadFileManager.
442 class CancelTestDataCollector 90 class CancelTestDataCollector
443 : public base::RefCountedThreadSafe<CancelTestDataCollector> { 91 : public base::RefCountedThreadSafe<CancelTestDataCollector> {
444 public: 92 public:
445 CancelTestDataCollector() 93 CancelTestDataCollector()
446 : resource_dispatcher_host_( 94 : resource_dispatcher_host_(
447 g_browser_process->resource_dispatcher_host()), 95 g_browser_process->resource_dispatcher_host()),
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after
710 358
711 DownloadPrefs* GetDownloadPrefs(Browser* browser) { 359 DownloadPrefs* GetDownloadPrefs(Browser* browser) {
712 return DownloadPrefs::FromDownloadManager( 360 return DownloadPrefs::FromDownloadManager(
713 DownloadManagerForBrowser(browser)); 361 DownloadManagerForBrowser(browser));
714 } 362 }
715 363
716 FilePath GetDownloadDirectory(Browser* browser) { 364 FilePath GetDownloadDirectory(Browser* browser) {
717 return GetDownloadPrefs(browser)->download_path(); 365 return GetDownloadPrefs(browser)->download_path();
718 } 366 }
719 367
720 // Create a DownloadsObserver that will wait for the 368 // Create a DownloadTestObserver that will wait for the
721 // specified number of downloads to finish. 369 // specified number of downloads to finish.
722 DownloadsObserver* CreateWaiter(Browser* browser, int num_downloads) { 370 DownloadTestObserver* CreateWaiter(Browser* browser, int num_downloads) {
723 DownloadManager* download_manager = DownloadManagerForBrowser(browser); 371 DownloadManager* download_manager = DownloadManagerForBrowser(browser);
724 return new DownloadsObserver( 372 return new DownloadTestObserver(
725 download_manager, num_downloads, 373 download_manager, num_downloads,
726 DownloadItem::COMPLETE, // Really done 374 DownloadItem::COMPLETE, // Really done
727 true, // Bail on select file 375 true, // Bail on select file
728 ON_DANGEROUS_DOWNLOAD_FAIL); 376 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
729 } 377 }
730 378
731 // Create a DownloadsObserver that will wait for the 379 // Create a DownloadTestObserver that will wait for the
732 // specified number of downloads to start. 380 // specified number of downloads to start.
733 DownloadsObserver* CreateInProgressWaiter(Browser* browser, 381 DownloadTestObserver* CreateInProgressWaiter(Browser* browser,
734 int num_downloads) { 382 int num_downloads) {
735 DownloadManager* download_manager = DownloadManagerForBrowser(browser); 383 DownloadManager* download_manager = DownloadManagerForBrowser(browser);
736 return new DownloadsObserver( 384 return new DownloadTestObserver(
737 download_manager, num_downloads, 385 download_manager, num_downloads,
738 DownloadItem::IN_PROGRESS, // Has started 386 DownloadItem::IN_PROGRESS, // Has started
739 true, // Bail on select file 387 true, // Bail on select file
740 ON_DANGEROUS_DOWNLOAD_FAIL); 388 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
741 } 389 }
742 390
743 // Create a DownloadsObserver that will wait for the 391 // Create a DownloadTestObserver that will wait for the
744 // specified number of downloads to finish, or for 392 // specified number of downloads to finish, or for
745 // a dangerous download warning to be shown. 393 // a dangerous download warning to be shown.
746 DownloadsObserver* DangerousInstallWaiter( 394 DownloadTestObserver* DangerousInstallWaiter(
747 Browser* browser, 395 Browser* browser,
748 int num_downloads, 396 int num_downloads,
749 DownloadItem::DownloadState final_state, 397 DownloadItem::DownloadState final_state,
750 DangerousDownloadAction dangerous_download_action) { 398 DownloadTestObserver::DangerousDownloadAction dangerous_download_action) {
751 DownloadManager* download_manager = DownloadManagerForBrowser(browser); 399 DownloadManager* download_manager = DownloadManagerForBrowser(browser);
752 return new DownloadsObserver( 400 return new DownloadTestObserver(
753 download_manager, num_downloads, 401 download_manager, num_downloads,
754 final_state, 402 final_state,
755 true, // Bail on select file 403 true, // Bail on select file
756 dangerous_download_action); 404 dangerous_download_action);
757 } 405 }
758 406
759 // Download |url|, then wait for the download to finish. 407 // Download |url|, then wait for the download to finish.
760 // |disposition| indicates where the navigation occurs (current tab, new 408 // |disposition| indicates where the navigation occurs (current tab, new
761 // foreground tab, etc). 409 // foreground tab, etc).
762 // |expectation| indicates whether or not a Select File dialog should be 410 // |expectation| indicates whether or not a Select File dialog should be
763 // open when the download is finished, or if we don't care. 411 // open when the download is finished, or if we don't care.
764 // If the dialog appears, the routine exits. The only effect |expectation| 412 // If the dialog appears, the routine exits. The only effect |expectation|
765 // has is whether or not the test succeeds. 413 // has is whether or not the test succeeds.
766 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more 414 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more
767 // values in the ui_test_utils::BrowserTestWaitFlags enum. 415 // values in the ui_test_utils::BrowserTestWaitFlags enum.
768 void DownloadAndWaitWithDisposition(Browser* browser, 416 void DownloadAndWaitWithDisposition(Browser* browser,
769 const GURL& url, 417 const GURL& url,
770 WindowOpenDisposition disposition, 418 WindowOpenDisposition disposition,
771 SelectExpectation expectation, 419 SelectExpectation expectation,
772 int browser_test_flags) { 420 int browser_test_flags) {
773 // Setup notification, navigate, and block. 421 // Setup notification, navigate, and block.
774 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 422 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
775 // This call will block until the condition specified by 423 // This call will block until the condition specified by
776 // |browser_test_flags|, but will not wait for the download to finish. 424 // |browser_test_flags|, but will not wait for the download to finish.
777 ui_test_utils::NavigateToURLWithDisposition(browser, 425 ui_test_utils::NavigateToURLWithDisposition(browser,
778 url, 426 url,
779 disposition, 427 disposition,
780 browser_test_flags); 428 browser_test_flags);
781 // Waits for the download to complete. 429 // Waits for the download to complete.
782 observer->WaitForFinished(); 430 observer->WaitForFinished();
783 431
784 // If specified, check the state of the select file dialog. 432 // If specified, check the state of the select file dialog.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
855 // |expected_title_finished| need to be checked. 503 // |expected_title_finished| need to be checked.
856 FilePath filename; 504 FilePath filename;
857 net::FileURLToFilePath(url, &filename); 505 net::FileURLToFilePath(url, &filename);
858 string16 expected_title_in_progress( 506 string16 expected_title_in_progress(
859 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName()); 507 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName());
860 string16 expected_title_finished( 508 string16 expected_title_finished(
861 ASCIIToUTF16(total_indication) + filename.LossyDisplayName()); 509 ASCIIToUTF16(total_indication) + filename.LossyDisplayName());
862 510
863 // Download a partial web page in a background tab and wait. 511 // Download a partial web page in a background tab and wait.
864 // The mock system will not complete until it gets a special URL. 512 // The mock system will not complete until it gets a special URL.
865 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 513 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
866 ui_test_utils::NavigateToURL(browser, url); 514 ui_test_utils::NavigateToURL(browser, url);
867 515
868 // TODO(ahendrickson): check download status text before downloading. 516 // TODO(ahendrickson): check download status text before downloading.
869 // Need to: 517 // Need to:
870 // - Add a member function to the |DownloadShelf| interface class, that 518 // - Add a member function to the |DownloadShelf| interface class, that
871 // indicates how many members it has. 519 // indicates how many members it has.
872 // - Add a member function to |DownloadShelf| to get the status text 520 // - Add a member function to |DownloadShelf| to get the status text
873 // of a given member (for example, via the name in |DownloadItemView|'s 521 // of a given member (for example, via the name in |DownloadItemView|'s
874 // GetAccessibleState() member function), by index. 522 // GetAccessibleState() member function), by index.
875 // - Iterate over browser->window()->GetDownloadShelf()'s members 523 // - Iterate over browser->window()->GetDownloadShelf()'s members
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
1030 // downloads preferences settings. 678 // downloads preferences settings.
1031 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) { 679 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) {
1032 ASSERT_TRUE(InitialSetup(true)); 680 ASSERT_TRUE(InitialSetup(true));
1033 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); 681 FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
1034 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 682 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1035 683
1036 NullSelectFile(browser()); 684 NullSelectFile(browser());
1037 685
1038 // Download the file and wait. We expect the Select File dialog to appear 686 // Download the file and wait. We expect the Select File dialog to appear
1039 // due to the MIME type, but we still wait until the download completes. 687 // due to the MIME type, but we still wait until the download completes.
1040 scoped_ptr<DownloadsObserver> observer( 688 scoped_ptr<DownloadTestObserver> observer(
1041 new DownloadsObserver( 689 new DownloadTestObserver(
1042 DownloadManagerForBrowser(browser()), 690 DownloadManagerForBrowser(browser()),
1043 1, 691 1,
1044 DownloadItem::COMPLETE, // Really done 692 DownloadItem::COMPLETE, // Really done
1045 false, // Continue on select file. 693 false, // Continue on select file.
1046 ON_DANGEROUS_DOWNLOAD_FAIL)); 694 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL));
1047 ui_test_utils::NavigateToURLWithDisposition( 695 ui_test_utils::NavigateToURLWithDisposition(
1048 browser(), url, CURRENT_TAB, 696 browser(), url, CURRENT_TAB,
1049 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); 697 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
1050 observer->WaitForFinished(); 698 observer->WaitForFinished();
1051 EXPECT_TRUE(observer->select_file_dialog_seen()); 699 EXPECT_TRUE(observer->select_file_dialog_seen());
1052 700
1053 // Check state. 701 // Check state.
1054 EXPECT_EQ(1, browser()->tab_count()); 702 EXPECT_EQ(1, browser()->tab_count());
1055 CheckDownload(browser(), file, file); 703 CheckDownload(browser(), file, file);
1056 CheckDownloadUI(browser(), true, true, file); 704 CheckDownloadUI(browser(), true, true, file);
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
1454 CheckDownloadUI(browser(), false, true, file); 1102 CheckDownloadUI(browser(), false, true, file);
1455 1103
1456 CheckDownload(browser(), file, file); 1104 CheckDownload(browser(), file, file);
1457 } 1105 }
1458 1106
1459 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { 1107 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) {
1460 ASSERT_TRUE(InitialSetup(false)); 1108 ASSERT_TRUE(InitialSetup(false));
1461 EXPECT_EQ(1, browser()->tab_count()); 1109 EXPECT_EQ(1, browser()->tab_count());
1462 1110
1463 // TODO(rdsmith): Fragile code warning! The code below relies on the 1111 // TODO(rdsmith): Fragile code warning! The code below relies on the
1464 // DownloadsObserver only finishing when the new download has reached 1112 // DownloadTestObserver only finishing when the new download has reached
1465 // the state of being entered into the history and being user-visible 1113 // the state of being entered into the history and being user-visible
1466 // (that's what's required for the Remove to be valid and for the 1114 // (that's what's required for the Remove to be valid and for the
1467 // download shelf to be visible). By the pure semantics of 1115 // download shelf to be visible). By the pure semantics of
1468 // DownloadsObserver, that's not guaranteed; DownloadItems are created 1116 // DownloadTestObserver, that's not guaranteed; DownloadItems are created
1469 // in the IN_PROGRESS state and made known to the DownloadManager 1117 // in the IN_PROGRESS state and made known to the DownloadManager
1470 // immediately, so any ModelChanged event on the DownloadManager after 1118 // immediately, so any ModelChanged event on the DownloadManager after
1471 // navigation would allow the observer to return. However, the only 1119 // navigation would allow the observer to return. However, the only
1472 // ModelChanged() event the code will currently fire is in 1120 // ModelChanged() event the code will currently fire is in
1473 // OnCreateDownloadEntryComplete, at which point the download item will 1121 // OnCreateDownloadEntryComplete, at which point the download item will
1474 // be in the state we need. 1122 // be in the state we need.
1475 // The right way to fix this is to create finer grained states on the 1123 // The right way to fix this is to create finer grained states on the
1476 // DownloadItem, and wait for the state that indicates the item has been 1124 // DownloadItem, and wait for the state that indicates the item has been
1477 // entered in the history and made visible in the UI. 1125 // entered in the history and made visible in the UI.
1478 1126
1479 // Create a download, wait until it's started, and confirm 1127 // Create a download, wait until it's started, and confirm
1480 // we're in the expected state. 1128 // we're in the expected state.
1481 scoped_ptr<DownloadsObserver> observer( 1129 scoped_ptr<DownloadTestObserver> observer(
1482 CreateInProgressWaiter(browser(), 1)); 1130 CreateInProgressWaiter(browser(), 1));
1483 ui_test_utils::NavigateToURL( 1131 ui_test_utils::NavigateToURL(
1484 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); 1132 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl));
1485 observer->WaitForFinished(); 1133 observer->WaitForFinished();
1486 1134
1487 std::vector<DownloadItem*> downloads; 1135 std::vector<DownloadItem*> downloads;
1488 DownloadManagerForBrowser(browser())->SearchDownloads( 1136 DownloadManagerForBrowser(browser())->SearchDownloads(
1489 string16(), &downloads); 1137 string16(), &downloads);
1490 ASSERT_EQ(1u, downloads.size()); 1138 ASSERT_EQ(1u, downloads.size());
1491 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); 1139 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state());
1492 CheckDownloadUI(browser(), true, true, FilePath()); 1140 CheckDownloadUI(browser(), true, true, FilePath());
1493 1141
1494 // Cancel the download and wait for download system quiesce. 1142 // Cancel the download and wait for download system quiesce.
1495 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 1143 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
1496 scoped_refptr<DownloadsFlushObserver> flush_observer( 1144 scoped_refptr<DownloadTestFlushObserver> flush_observer(
1497 new DownloadsFlushObserver(DownloadManagerForBrowser(browser()))); 1145 new DownloadTestFlushObserver(
1146 DownloadManagerForBrowser(browser())));
1498 flush_observer->WaitForFlush(); 1147 flush_observer->WaitForFlush();
1499 1148
1500 // Get the important info from other threads and check it. 1149 // Get the important info from other threads and check it.
1501 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); 1150 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector());
1502 info->WaitForDataCollected(); 1151 info->WaitForDataCollected();
1503 EXPECT_EQ(0, info->rdh_pending_requests()); 1152 EXPECT_EQ(0, info->rdh_pending_requests());
1504 EXPECT_EQ(0, info->dfm_pending_downloads()); 1153 EXPECT_EQ(0, info->dfm_pending_downloads());
1505 1154
1506 // Using "DownloadItem::Remove" follows the discard dangerous download path, 1155 // Using "DownloadItem::Remove" follows the discard dangerous download path,
1507 // which completely removes the browser from the shelf and closes the shelf 1156 // which completely removes the browser from the shelf and closes the shelf
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
1601 } 1250 }
1602 1251
1603 // Test to make sure the 'download' attribute in anchor tag is respected. 1252 // Test to make sure the 'download' attribute in anchor tag is respected.
1604 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) { 1253 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) {
1605 ASSERT_TRUE(InitialSetup(false)); 1254 ASSERT_TRUE(InitialSetup(false));
1606 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html")); 1255 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html"));
1607 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 1256 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1608 1257
1609 // Create a download, wait until it's complete, and confirm 1258 // Create a download, wait until it's complete, and confirm
1610 // we're in the expected state. 1259 // we're in the expected state.
1611 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser(), 1)); 1260 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser(), 1));
1612 ui_test_utils::NavigateToURL(browser(), url); 1261 ui_test_utils::NavigateToURL(browser(), url);
1613 observer->WaitForFinished(); 1262 observer->WaitForFinished();
1614 1263
1615 // Confirm the downloaded data exists. 1264 // Confirm the downloaded data exists.
1616 FilePath downloaded_file = GetDownloadDirectory(browser()); 1265 FilePath downloaded_file = GetDownloadDirectory(browser());
1617 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png")); 1266 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png"));
1618 EXPECT_TRUE(file_util::PathExists(downloaded_file)); 1267 EXPECT_TRUE(file_util::PathExists(downloaded_file));
1619 } 1268 }
1620 1269
1621 // Test to make sure auto-open works. 1270 // Test to make sure auto-open works.
(...skipping 25 matching lines...) Expand all
1647 // Download shelf should close. Download panel stays open on ChromeOS. 1296 // Download shelf should close. Download panel stays open on ChromeOS.
1648 CheckDownloadUI(browser(), false, true, FilePath()); 1297 CheckDownloadUI(browser(), false, true, FilePath());
1649 } 1298 }
1650 1299
1651 // Download an extension. Expect a dangerous download warning. 1300 // Download an extension. Expect a dangerous download warning.
1652 // Deny the download. 1301 // Deny the download.
1653 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { 1302 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) {
1654 ASSERT_TRUE(InitialSetup(false)); 1303 ASSERT_TRUE(InitialSetup(false));
1655 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1304 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1656 1305
1657 scoped_ptr<DownloadsObserver> observer( 1306 scoped_ptr<DownloadTestObserver> observer(
1658 DangerousInstallWaiter(browser(), 1307 DangerousInstallWaiter(
1659 1, 1308 browser(), 1, DownloadItem::CANCELLED,
1660 DownloadItem::CANCELLED, 1309 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
1661 ON_DANGEROUS_DOWNLOAD_DENY));
1662 ui_test_utils::NavigateToURL(browser(), extension_url); 1310 ui_test_utils::NavigateToURL(browser(), extension_url);
1663 1311
1664 observer->WaitForFinished(); 1312 observer->WaitForFinished();
1665 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1313 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1666 1314
1667 // Download shelf should close. Download panel stays open on ChromeOS. 1315 // Download shelf should close. Download panel stays open on ChromeOS.
1668 CheckDownloadUI(browser(), false, true, FilePath()); 1316 CheckDownloadUI(browser(), false, true, FilePath());
1669 1317
1670 // Check that the CRX is not installed. 1318 // Check that the CRX is not installed.
1671 ExtensionService* extension_service = 1319 ExtensionService* extension_service =
1672 browser()->profile()->GetExtensionService(); 1320 browser()->profile()->GetExtensionService();
1673 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1321 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1674 } 1322 }
1675 1323
1676 // Download an extension. Expect a dangerous download warning. 1324 // Download an extension. Expect a dangerous download warning.
1677 // Allow the download, deny the install. 1325 // Allow the download, deny the install.
1678 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { 1326 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) {
1679 ASSERT_TRUE(InitialSetup(false)); 1327 ASSERT_TRUE(InitialSetup(false));
1680 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1328 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1681 1329
1682 // Install a mock install UI that simulates a user denying permission to 1330 // Install a mock install UI that simulates a user denying permission to
1683 // finish the install. 1331 // finish the install.
1684 download_crx_util::SetMockInstallUIForTesting( 1332 download_crx_util::SetMockInstallUIForTesting(
1685 new MockAbortExtensionInstallUI()); 1333 new MockAbortExtensionInstallUI());
1686 1334
1687 scoped_ptr<DownloadsObserver> observer( 1335 scoped_ptr<DownloadTestObserver> observer(
1688 DangerousInstallWaiter(browser(), 1336 DangerousInstallWaiter(
1689 1, 1337 browser(), 1, DownloadItem::COMPLETE,
1690 DownloadItem::COMPLETE, 1338 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1691 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1692 ui_test_utils::NavigateToURL(browser(), extension_url); 1339 ui_test_utils::NavigateToURL(browser(), extension_url);
1693 1340
1694 observer->WaitForFinished(); 1341 observer->WaitForFinished();
1695 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1342 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1696 1343
1697 // Download shelf should close. Download panel stays open on ChromeOS. 1344 // Download shelf should close. Download panel stays open on ChromeOS.
1698 CheckDownloadUI(browser(), false, true, FilePath()); 1345 CheckDownloadUI(browser(), false, true, FilePath());
1699 1346
1700 // Check that the extension was not installed. 1347 // Check that the extension was not installed.
1701 ExtensionService* extension_service = 1348 ExtensionService* extension_service =
1702 browser()->profile()->GetExtensionService(); 1349 browser()->profile()->GetExtensionService();
1703 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1350 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1704 } 1351 }
1705 1352
1706 // Download an extension. Expect a dangerous download warning. 1353 // Download an extension. Expect a dangerous download warning.
1707 // Allow the download, and the install. 1354 // Allow the download, and the install.
1708 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { 1355 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) {
1709 ASSERT_TRUE(InitialSetup(false)); 1356 ASSERT_TRUE(InitialSetup(false));
1710 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1357 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1711 1358
1712 // Install a mock install UI that simulates a user allowing permission to 1359 // Install a mock install UI that simulates a user allowing permission to
1713 // finish the install. 1360 // finish the install.
1714 download_crx_util::SetMockInstallUIForTesting( 1361 download_crx_util::SetMockInstallUIForTesting(
1715 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1362 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1716 1363
1717 scoped_ptr<DownloadsObserver> observer( 1364 scoped_ptr<DownloadTestObserver> observer(
1718 DangerousInstallWaiter(browser(), 1365 DangerousInstallWaiter(
1719 1, 1366 browser(), 1, DownloadItem::COMPLETE,
1720 DownloadItem::COMPLETE, 1367 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1721 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1722 ui_test_utils::NavigateToURL(browser(), extension_url); 1368 ui_test_utils::NavigateToURL(browser(), extension_url);
1723 1369
1724 observer->WaitForFinished(); 1370 observer->WaitForFinished();
1725 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1371 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1726 1372
1727 // Download shelf should close. Download panel stays open on ChromeOS. 1373 // Download shelf should close. Download panel stays open on ChromeOS.
1728 CheckDownloadUI(browser(), false, true, FilePath()); 1374 CheckDownloadUI(browser(), false, true, FilePath());
1729 1375
1730 // Check that the extension was installed. 1376 // Check that the extension was installed.
1731 ExtensionService* extension_service = 1377 ExtensionService* extension_service =
1732 browser()->profile()->GetExtensionService(); 1378 browser()->profile()->GetExtensionService();
1733 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false)); 1379 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false));
1734 } 1380 }
1735 1381
1736 // Test installing a CRX that fails integrity checks. 1382 // Test installing a CRX that fails integrity checks.
1737 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { 1383 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) {
1738 ASSERT_TRUE(InitialSetup(false)); 1384 ASSERT_TRUE(InitialSetup(false));
1739 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx")); 1385 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx"));
1740 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file)); 1386 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file));
1741 1387
1742 // Install a mock install UI that simulates a user allowing permission to 1388 // Install a mock install UI that simulates a user allowing permission to
1743 // finish the install, and dismisses any error message. We check that the 1389 // finish the install, and dismisses any error message. We check that the
1744 // install failed below. 1390 // install failed below.
1745 download_crx_util::SetMockInstallUIForTesting( 1391 download_crx_util::SetMockInstallUIForTesting(
1746 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1392 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1747 1393
1748 scoped_ptr<DownloadsObserver> observer( 1394 scoped_ptr<DownloadTestObserver> observer(
1749 DangerousInstallWaiter(browser(), 1395 DangerousInstallWaiter(
1750 1, 1396 browser(), 1, DownloadItem::COMPLETE,
1751 DownloadItem::COMPLETE, 1397 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1752 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1753 ui_test_utils::NavigateToURL(browser(), extension_url); 1398 ui_test_utils::NavigateToURL(browser(), extension_url);
1754 1399
1755 observer->WaitForFinished(); 1400 observer->WaitForFinished();
1756 1401
1757 // Check that the extension was not installed. 1402 // Check that the extension was not installed.
1758 ExtensionService* extension_service = 1403 ExtensionService* extension_service =
1759 browser()->profile()->GetExtensionService(); 1404 browser()->profile()->GetExtensionService();
1760 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1405 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1761 } 1406 }
1762 1407
1763 // Install a large (100kb) theme. 1408 // Install a large (100kb) theme.
1764 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { 1409 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) {
1765 ASSERT_TRUE(InitialSetup(false)); 1410 ASSERT_TRUE(InitialSetup(false));
1766 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath)); 1411 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath));
1767 1412
1768 // Install a mock install UI that simulates a user allowing permission to 1413 // Install a mock install UI that simulates a user allowing permission to
1769 // finish the install. 1414 // finish the install.
1770 download_crx_util::SetMockInstallUIForTesting( 1415 download_crx_util::SetMockInstallUIForTesting(
1771 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1416 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1772 1417
1773 scoped_ptr<DownloadsObserver> observer( 1418 scoped_ptr<DownloadTestObserver> observer(
1774 DangerousInstallWaiter(browser(), 1419 DangerousInstallWaiter(
1775 1, 1420 browser(), 1, DownloadItem::COMPLETE,
1776 DownloadItem::COMPLETE, 1421 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1777 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1778 ui_test_utils::NavigateToURL(browser(), extension_url); 1422 ui_test_utils::NavigateToURL(browser(), extension_url);
1779 1423
1780 observer->WaitForFinished(); 1424 observer->WaitForFinished();
1781 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1425 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1782 1426
1783 // Download shelf should close. Download panel stays open on ChromeOS. 1427 // Download shelf should close. Download panel stays open on ChromeOS.
1784 CheckDownloadUI(browser(), false, true, FilePath()); 1428 CheckDownloadUI(browser(), false, true, FilePath());
1785 1429
1786 // Check that the extension was installed. 1430 // Check that the extension was installed.
1787 ExtensionService* extension_service = 1431 ExtensionService* extension_service =
1788 browser()->profile()->GetExtensionService(); 1432 browser()->profile()->GetExtensionService();
1789 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false)); 1433 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false));
1790 } 1434 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/download/download_service.h » ('j') | chrome/browser/download/download_service.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698