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

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: Fixing trybot failures (chromeos specifically). Created 9 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) 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/file_path.h" 5 #include "base/file_path.h"
6 #include "base/file_util.h" 6 #include "base/file_util.h"
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/path_service.h" 8 #include "base/path_service.h"
9 #include "base/scoped_temp_dir.h" 9 #include "base/scoped_temp_dir.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
11 #include "base/test/test_file_util.h" 11 #include "base/test/test_file_util.h"
12 #include "base/utf_string_conversions.h" 12 #include "base/utf_string_conversions.h"
13 #include "chrome/browser/browser_process.h" 13 #include "chrome/browser/browser_process.h"
14 #include "chrome/browser/download/download_crx_util.h" 14 #include "chrome/browser/download/download_crx_util.h"
15 #include "chrome/browser/download/download_history.h" 15 #include "chrome/browser/download/download_history.h"
16 #include "chrome/browser/download/download_prefs.h" 16 #include "chrome/browser/download/download_prefs.h"
17 #include "chrome/browser/download/download_shelf.h" 17 #include "chrome/browser/download/download_shelf.h"
18 #include "chrome/browser/download/download_test_observer.h"
18 #include "chrome/browser/download/download_util.h" 19 #include "chrome/browser/download/download_util.h"
19 #include "chrome/browser/extensions/extension_install_ui.h" 20 #include "chrome/browser/extensions/extension_install_ui.h"
20 #include "chrome/browser/extensions/extension_service.h" 21 #include "chrome/browser/extensions/extension_service.h"
21 #include "chrome/browser/history/history.h" 22 #include "chrome/browser/history/history.h"
22 #include "chrome/browser/prefs/pref_service.h" 23 #include "chrome/browser/prefs/pref_service.h"
23 #include "chrome/browser/profiles/profile.h" 24 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/ui/browser.h" 25 #include "chrome/browser/ui/browser.h"
25 #include "chrome/browser/ui/browser_list.h" 26 #include "chrome/browser/ui/browser_list.h"
26 #include "chrome/browser/ui/browser_window.h" 27 #include "chrome/browser/ui/browser_window.h"
27 #include "chrome/browser/ui/webui/active_downloads_ui.h" 28 #include "chrome/browser/ui/webui/active_downloads_ui.h"
(...skipping 18 matching lines...) Expand all
46 47
47 namespace { 48 namespace {
48 49
49 // IDs and paths of CRX files used in tests. 50 // IDs and paths of CRX files used in tests.
50 const char kGoodCrxId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf"; 51 const char kGoodCrxId[] = "ldnnhddmnhbkjipkidpdiheffobcpfmf";
51 const FilePath kGoodCrxPath(FILE_PATH_LITERAL("extensions/good.crx")); 52 const FilePath kGoodCrxPath(FILE_PATH_LITERAL("extensions/good.crx"));
52 53
53 const char kLargeThemeCrxId[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf"; 54 const char kLargeThemeCrxId[] = "pjpgmfcmabopnnfonnhmdjglfpjjfkbf";
54 const FilePath kLargeThemePath(FILE_PATH_LITERAL("extensions/theme2.crx")); 55 const FilePath kLargeThemePath(FILE_PATH_LITERAL("extensions/theme2.crx"));
55 56
56 // Action a test should take if a dangerous download is encountered.
57 enum DangerousDownloadAction {
58 ON_DANGEROUS_DOWNLOAD_ACCEPT, // Accept the download
59 ON_DANGEROUS_DOWNLOAD_DENY, // Deny the download
60 ON_DANGEROUS_DOWNLOAD_FAIL // Fail if a dangerous download is seen
61 };
62
63 // Fake user click on "Accept".
64 void AcceptDangerousDownload(scoped_refptr<DownloadManager> download_manager,
65 int32 download_id) {
66 DownloadItem* download = download_manager->GetDownloadItem(download_id);
67 download->DangerousDownloadValidated();
68 }
69
70 // Fake user click on "Deny".
71 void DenyDangerousDownload(scoped_refptr<DownloadManager> download_manager,
72 int32 download_id) {
73 DownloadItem* download = download_manager->GetDownloadItem(download_id);
74 ASSERT_TRUE(download->IsPartialDownload());
75 download->Cancel(true);
76 download->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
77 }
78
79 // Construction of this class defines a system state, based on some number
80 // of downloads being seen in a particular state + other events that
81 // may occur in the download system. That state will be recorded if it
82 // occurs at any point after construction. When that state occurs, the class
83 // is considered finished. Callers may either probe for the finished state, or
84 // wait on it.
85 //
86 // TODO(rdsmith): Detect manager going down, remove pointer to
87 // DownloadManager, transition to finished. (For right now we
88 // just use a scoped_refptr<> to keep it around, but that may cause
89 // timeouts on waiting if a DownloadManager::Shutdown() occurs which
90 // cancels our in-progress downloads.)
91 class DownloadsObserver : public DownloadManager::Observer,
92 public DownloadItem::Observer {
93 public:
94 // Create an object that will be considered finished when |wait_count|
95 // download items have entered state |download_finished_state|.
96 // If |finish_on_select_file| is true, the object will also be
97 // considered finished if the DownloadManager raises a
98 // SelectFileDialogDisplayed() notification.
99
100 // TODO(rdsmith): Consider rewriting the interface to take a list of events
101 // to treat as completion events.
102 DownloadsObserver(DownloadManager* download_manager,
103 size_t wait_count,
104 DownloadItem::DownloadState download_finished_state,
105 bool finish_on_select_file,
106 DangerousDownloadAction dangerous_download_action)
107 : download_manager_(download_manager),
108 wait_count_(wait_count),
109 finished_downloads_at_construction_(0),
110 waiting_(false),
111 download_finished_state_(download_finished_state),
112 finish_on_select_file_(finish_on_select_file),
113 select_file_dialog_seen_(false),
114 dangerous_download_action_(dangerous_download_action) {
115 download_manager_->AddObserver(this); // Will call initial ModelChanged().
116 finished_downloads_at_construction_ = finished_downloads_.size();
117 EXPECT_NE(DownloadItem::REMOVING, download_finished_state)
118 << "Waiting for REMOVING is not supported. Try COMPLETE.";
119 }
120
121 ~DownloadsObserver() {
122 std::set<DownloadItem*>::iterator it = downloads_observed_.begin();
123 for (; it != downloads_observed_.end(); ++it)
124 (*it)->RemoveObserver(this);
125
126 download_manager_->RemoveObserver(this);
127 }
128
129 // State accessors.
130 bool select_file_dialog_seen() { return select_file_dialog_seen_; }
131
132 // Wait for whatever state was specified in the constructor.
133 void WaitForFinished() {
134 if (!IsFinished()) {
135 waiting_ = true;
136 ui_test_utils::RunMessageLoop();
137 waiting_ = false;
138 }
139 }
140
141 // Return true if everything's happened that we're configured for.
142 bool IsFinished() {
143 if (finished_downloads_.size() - finished_downloads_at_construction_
144 >= wait_count_)
145 return true;
146 return (finish_on_select_file_ && select_file_dialog_seen_);
147 }
148
149 // DownloadItem::Observer
150 virtual void OnDownloadUpdated(DownloadItem* download) {
151 // The REMOVING state indicates that the download is being destroyed.
152 // Stop observing. Do not do anything with it, as it is about to be gone.
153 if (download->state() == DownloadItem::REMOVING) {
154 std::set<DownloadItem*>::iterator it = downloads_observed_.find(download);
155 ASSERT_TRUE(it != downloads_observed_.end());
156 downloads_observed_.erase(it);
157 download->RemoveObserver(this);
158 return;
159 }
160
161 // Real UI code gets the user's response after returning from the observer.
162 if (download->safety_state() == DownloadItem::DANGEROUS &&
163 !ContainsKey(dangerous_downloads_seen_, download->id())) {
164 dangerous_downloads_seen_.insert(download->id());
165
166 // Calling DangerousDownloadValidated() at this point will
167 // cause the download to be completed twice. Do what the real UI
168 // code does: make the call as a delayed task.
169 switch (dangerous_download_action_) {
170 case ON_DANGEROUS_DOWNLOAD_ACCEPT:
171 // Fake user click on "Accept". Delay the actual click, as the
172 // real UI would.
173 BrowserThread::PostTask(
174 BrowserThread::UI, FROM_HERE,
175 NewRunnableFunction(
176 &AcceptDangerousDownload,
177 download_manager_,
178 download->id()));
179 break;
180
181 case ON_DANGEROUS_DOWNLOAD_DENY:
182 // Fake a user click on "Deny". Delay the actual click, as the
183 // real UI would.
184 BrowserThread::PostTask(
185 BrowserThread::UI, FROM_HERE,
186 NewRunnableFunction(
187 &DenyDangerousDownload,
188 download_manager_,
189 download->id()));
190 break;
191
192 case ON_DANGEROUS_DOWNLOAD_FAIL:
193 ADD_FAILURE() << "Unexpected dangerous download item.";
194 break;
195
196 default:
197 NOTREACHED();
198 }
199 }
200
201 if (download->state() == download_finished_state_) {
202 DownloadInFinalState(download);
203 }
204 }
205
206 virtual void OnDownloadOpened(DownloadItem* download) {}
207
208 // DownloadManager::Observer
209 virtual void ModelChanged() {
210 // Regenerate DownloadItem observers. If there are any download items
211 // in our final state, note them in |finished_downloads_|
212 // (done by |OnDownloadUpdated()|).
213 std::vector<DownloadItem*> downloads;
214 download_manager_->GetAllDownloads(FilePath(), &downloads);
215
216 std::vector<DownloadItem*>::iterator it = downloads.begin();
217 for (; it != downloads.end(); ++it) {
218 OnDownloadUpdated(*it); // Safe to call multiple times; checks state.
219
220 std::set<DownloadItem*>::const_iterator
221 finished_it(finished_downloads_.find(*it));
222 std::set<DownloadItem*>::iterator
223 observed_it(downloads_observed_.find(*it));
224
225 // If it isn't finished and we're aren't observing it, start.
226 if (finished_it == finished_downloads_.end() &&
227 observed_it == downloads_observed_.end()) {
228 (*it)->AddObserver(this);
229 downloads_observed_.insert(*it);
230 continue;
231 }
232
233 // If it is finished and we are observing it, stop.
234 if (finished_it != finished_downloads_.end() &&
235 observed_it != downloads_observed_.end()) {
236 (*it)->RemoveObserver(this);
237 downloads_observed_.erase(observed_it);
238 continue;
239 }
240 }
241 }
242
243 virtual void SelectFileDialogDisplayed(int32 /* id */) {
244 select_file_dialog_seen_ = true;
245 SignalIfFinished();
246 }
247
248 virtual size_t NumDangerousDownloadsSeen() const {
249 return dangerous_downloads_seen_.size();
250 }
251
252 private:
253 // Called when we know that a download item is in a final state.
254 // Note that this is not the same as it first transitioning in to the
255 // final state; multiple notifications may occur once the item is in
256 // that state. So we keep our own track of transitions into final.
257 void DownloadInFinalState(DownloadItem* download) {
258 if (finished_downloads_.find(download) != finished_downloads_.end()) {
259 // We've already seen terminal state on this download.
260 return;
261 }
262
263 // Record the transition.
264 finished_downloads_.insert(download);
265
266 SignalIfFinished();
267 }
268
269 void SignalIfFinished() {
270 if (waiting_ && IsFinished())
271 MessageLoopForUI::current()->Quit();
272 }
273
274 // The observed download manager.
275 scoped_refptr<DownloadManager> download_manager_;
276
277 // The set of DownloadItem's that have transitioned to their finished state
278 // since construction of this object. When the size of this array
279 // reaches wait_count_, we're done.
280 std::set<DownloadItem*> finished_downloads_;
281
282 // The set of DownloadItem's we are currently observing. Generally there
283 // won't be any overlap with the above; once we see the final state
284 // on a DownloadItem, we'll stop observing it.
285 std::set<DownloadItem*> downloads_observed_;
286
287 // The number of downloads to wait on completing.
288 size_t wait_count_;
289
290 // The number of downloads entered in final state in initial
291 // ModelChanged(). We use |finished_downloads_| to track the incoming
292 // transitions to final state we should ignore, and to track the
293 // number of final state transitions that occurred between
294 // construction and return from wait. But some downloads may be in our
295 // final state (and thus be entered into |finished_downloads_|) when we
296 // construct this class. We don't want to count those in our transition
297 // to finished.
298 int finished_downloads_at_construction_;
299
300 // Whether an internal message loop has been started and must be quit upon
301 // all downloads completing.
302 bool waiting_;
303
304 // The state on which to consider the DownloadItem finished.
305 DownloadItem::DownloadState download_finished_state_;
306
307 // True if we should transition the DownloadsObserver to finished if
308 // the select file dialog comes up.
309 bool finish_on_select_file_;
310
311 // True if we've seen the select file dialog.
312 bool select_file_dialog_seen_;
313
314 // Action to take if a dangerous download is encountered.
315 DangerousDownloadAction dangerous_download_action_;
316
317 // Holds the download ids which were dangerous.
318 std::set<int32> dangerous_downloads_seen_;
319
320 DISALLOW_COPY_AND_ASSIGN(DownloadsObserver);
321 };
322
323 // WaitForFlush() returns after:
324 // * There are no IN_PROGRESS download items remaining on the
325 // DownloadManager.
326 // * There have been two round trip messages through the file and
327 // IO threads.
328 // This almost certainly means that a Download cancel has propagated through
329 // the system.
330 class DownloadsFlushObserver
331 : public DownloadManager::Observer,
332 public DownloadItem::Observer,
333 public base::RefCountedThreadSafe<DownloadsFlushObserver> {
334 public:
335 explicit DownloadsFlushObserver(DownloadManager* download_manager)
336 : download_manager_(download_manager),
337 waiting_for_zero_inprogress_(true) {}
338
339 void WaitForFlush() {
340 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
341 download_manager_->AddObserver(this);
342 ui_test_utils::RunMessageLoop();
343 }
344
345 // DownloadsManager observer methods.
346 virtual void ModelChanged() {
347 // Model has changed, so there may be more DownloadItems to observe.
348 CheckDownloadsInProgress(true);
349 }
350
351 // DownloadItem observer methods.
352 virtual void OnDownloadUpdated(DownloadItem* download) {
353 // No change in DownloadItem set on manager.
354 CheckDownloadsInProgress(false);
355 }
356 virtual void OnDownloadOpened(DownloadItem* download) {}
357
358 protected:
359 friend class base::RefCountedThreadSafe<DownloadsFlushObserver>;
360
361 virtual ~DownloadsFlushObserver() {
362 download_manager_->RemoveObserver(this);
363 for (std::set<DownloadItem*>::iterator it = downloads_observed_.begin();
364 it != downloads_observed_.end(); ++it) {
365 (*it)->RemoveObserver(this);
366 }
367 }
368
369 private:
370 // If we're waiting for that flush point, check the number
371 // of downloads in the IN_PROGRESS state and take appropriate
372 // action. If requested, also observes all downloads while iterating.
373 void CheckDownloadsInProgress(bool observe_downloads) {
374 if (waiting_for_zero_inprogress_) {
375 int count = 0;
376
377 std::vector<DownloadItem*> downloads;
378 download_manager_->SearchDownloads(string16(), &downloads);
379 std::vector<DownloadItem*>::iterator it = downloads.begin();
380 for (; it != downloads.end(); ++it) {
381 if ((*it)->state() == DownloadItem::IN_PROGRESS)
382 count++;
383 if (observe_downloads) {
384 if (downloads_observed_.find(*it) == downloads_observed_.end()) {
385 (*it)->AddObserver(this);
386 }
387 // Download items are forever, and we don't want to make
388 // assumptions about future state transitions, so once we
389 // start observing them, we don't stop until destruction.
390 }
391 }
392
393 if (count == 0) {
394 waiting_for_zero_inprogress_ = false;
395 // Stop observing DownloadItems. We maintain the observation
396 // of DownloadManager so that we don't have to independently track
397 // whether we are observing it for conditional destruction.
398 for (std::set<DownloadItem*>::iterator it = downloads_observed_.begin();
399 it != downloads_observed_.end(); ++it) {
400 (*it)->RemoveObserver(this);
401 }
402 downloads_observed_.clear();
403
404 // Trigger next step. We need to go past the IO thread twice, as
405 // there's a self-task posting in the IO thread cancel path.
406 BrowserThread::PostTask(
407 BrowserThread::FILE, FROM_HERE,
408 NewRunnableMethod(this,
409 &DownloadsFlushObserver::PingFileThread, 2));
410 }
411 }
412 }
413
414 void PingFileThread(int cycle) {
415 BrowserThread::PostTask(
416 BrowserThread::IO, FROM_HERE,
417 NewRunnableMethod(this, &DownloadsFlushObserver::PingIOThread,
418 cycle));
419 }
420
421 void PingIOThread(int cycle) {
422 if (--cycle) {
423 BrowserThread::PostTask(
424 BrowserThread::UI, FROM_HERE,
425 NewRunnableMethod(this, &DownloadsFlushObserver::PingFileThread,
426 cycle));
427 } else {
428 BrowserThread::PostTask(
429 BrowserThread::UI, FROM_HERE, new MessageLoop::QuitTask());
430 }
431 }
432
433 DownloadManager* download_manager_;
434 std::set<DownloadItem*> downloads_observed_;
435 bool waiting_for_zero_inprogress_;
436
437 DISALLOW_COPY_AND_ASSIGN(DownloadsFlushObserver);
438 };
439
440 // Collect the information from FILE and IO threads needed for the Cancel 57 // Collect the information from FILE and IO threads needed for the Cancel
441 // Test, specifically the number of outstanding requests on the 58 // Test, specifically the number of outstanding requests on the
442 // ResourceDispatcherHost and the number of pending downloads on the 59 // ResourceDispatcherHost and the number of pending downloads on the
443 // DownloadFileManager. 60 // DownloadFileManager.
444 class CancelTestDataCollector 61 class CancelTestDataCollector
445 : public base::RefCountedThreadSafe<CancelTestDataCollector> { 62 : public base::RefCountedThreadSafe<CancelTestDataCollector> {
446 public: 63 public:
447 CancelTestDataCollector() 64 CancelTestDataCollector()
448 : resource_dispatcher_host_( 65 : resource_dispatcher_host_(
449 g_browser_process->resource_dispatcher_host()), 66 g_browser_process->resource_dispatcher_host()),
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 185
569 DownloadPrefs* GetDownloadPrefs(Browser* browser) { 186 DownloadPrefs* GetDownloadPrefs(Browser* browser) {
570 return DownloadPrefs::FromDownloadManager( 187 return DownloadPrefs::FromDownloadManager(
571 browser->profile()->GetDownloadManager()); 188 browser->profile()->GetDownloadManager());
572 } 189 }
573 190
574 FilePath GetDownloadDirectory(Browser* browser) { 191 FilePath GetDownloadDirectory(Browser* browser) {
575 return GetDownloadPrefs(browser)->download_path(); 192 return GetDownloadPrefs(browser)->download_path();
576 } 193 }
577 194
578 // Create a DownloadsObserver that will wait for the 195 // Create a DownloadTestObserver that will wait for the
579 // specified number of downloads to finish. 196 // specified number of downloads to finish.
580 DownloadsObserver* CreateWaiter(Browser* browser, int num_downloads) { 197 DownloadTestObserver* CreateWaiter(Browser* browser, int num_downloads) {
581 DownloadManager* download_manager = 198 DownloadManager* download_manager =
582 browser->profile()->GetDownloadManager(); 199 browser->profile()->GetDownloadManager();
583 return new DownloadsObserver( 200 return new DownloadTestObserver(
584 download_manager, num_downloads, 201 download_manager, num_downloads,
585 DownloadItem::COMPLETE, // Really done 202 DownloadItem::COMPLETE, // Really done
586 false, // Bail on select file 203 true, // Bail on select file
587 ON_DANGEROUS_DOWNLOAD_FAIL); 204 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
588 } 205 }
589 206
590 // Create a DownloadsObserver that will wait for the 207 // Create a DownloadTestObserver that will wait for the
591 // specified number of downloads to start. 208 // specified number of downloads to start.
592 DownloadsObserver* CreateInProgressWaiter(Browser* browser, 209 DownloadTestObserver* CreateInProgressWaiter(Browser* browser,
593 int num_downloads) { 210 int num_downloads) {
594 DownloadManager* download_manager = 211 DownloadManager* download_manager =
595 browser->profile()->GetDownloadManager(); 212 browser->profile()->GetDownloadManager();
596 return new DownloadsObserver( 213 return new DownloadTestObserver(
597 download_manager, num_downloads, 214 download_manager, num_downloads,
598 DownloadItem::IN_PROGRESS, // Has started 215 DownloadItem::IN_PROGRESS, // Has started
599 true, // Bail on select file 216 true, // Bail on select file
600 ON_DANGEROUS_DOWNLOAD_FAIL); 217 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
601 } 218 }
602 219
603 // Create a DownloadsObserver that will wait for the 220 // Create a DownloadTestObserver that will wait for the
604 // specified number of downloads to finish, or for 221 // specified number of downloads to finish, or for
605 // a dangerous download warning to be shown. 222 // a dangerous download warning to be shown.
606 DownloadsObserver* DangerousInstallWaiter( 223 DownloadTestObserver* DangerousInstallWaiter(
607 Browser* browser, 224 Browser* browser,
608 int num_downloads, 225 int num_downloads,
609 DownloadItem::DownloadState final_state, 226 DownloadItem::DownloadState final_state,
610 DangerousDownloadAction dangerous_download_action) { 227 DownloadTestObserver::DangerousDownloadAction dangerous_download_action) {
611 DownloadManager* download_manager = 228 DownloadManager* download_manager =
612 browser->profile()->GetDownloadManager(); 229 browser->profile()->GetDownloadManager();
613 return new DownloadsObserver( 230 return new DownloadTestObserver(
614 download_manager, num_downloads, 231 download_manager, num_downloads,
615 final_state, 232 final_state,
616 true, // Bail on select file 233 true, // Bail on select file
617 dangerous_download_action); 234 dangerous_download_action);
618 } 235 }
619 236
620 // Download |url|, then wait for the download to finish. 237 // Download |url|, then wait for the download to finish.
621 // |disposition| indicates where the navigation occurs (current tab, new 238 // |disposition| indicates where the navigation occurs (current tab, new
622 // foreground tab, etc). 239 // foreground tab, etc).
623 // |expectation| indicates whether or not a Select File dialog should be 240 // |expectation| indicates whether or not a Select File dialog should be
624 // open when the download is finished, or if we don't care. 241 // open when the download is finished, or if we don't care.
625 // If the dialog appears, the routine exits. The only effect |expectation| 242 // If the dialog appears, the routine exits. The only effect |expectation|
626 // has is whether or not the test succeeds. 243 // has is whether or not the test succeeds.
627 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more 244 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more
628 // values in the ui_test_utils::BrowserTestWaitFlags enum. 245 // values in the ui_test_utils::BrowserTestWaitFlags enum.
629 void DownloadAndWaitWithDisposition(Browser* browser, 246 void DownloadAndWaitWithDisposition(Browser* browser,
630 const GURL& url, 247 const GURL& url,
631 WindowOpenDisposition disposition, 248 WindowOpenDisposition disposition,
632 SelectExpectation expectation, 249 SelectExpectation expectation,
633 int browser_test_flags) { 250 int browser_test_flags) {
634 // Setup notification, navigate, and block. 251 // Setup notification, navigate, and block.
635 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 252 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
636 // This call will block until the condition specified by 253 // This call will block until the condition specified by
637 // |browser_test_flags|, but will not wait for the download to finish. 254 // |browser_test_flags|, but will not wait for the download to finish.
638 ui_test_utils::NavigateToURLWithDisposition(browser, 255 ui_test_utils::NavigateToURLWithDisposition(browser,
639 url, 256 url,
640 disposition, 257 disposition,
641 browser_test_flags); 258 browser_test_flags);
642 // Waits for the download to complete. 259 // Waits for the download to complete.
643 observer->WaitForFinished(); 260 observer->WaitForFinished();
644 261
645 // If specified, check the state of the select file dialog. 262 // If specified, check the state of the select file dialog.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
716 // |expected_title_finished| need to be checked. 333 // |expected_title_finished| need to be checked.
717 FilePath filename; 334 FilePath filename;
718 net::FileURLToFilePath(url, &filename); 335 net::FileURLToFilePath(url, &filename);
719 string16 expected_title_in_progress( 336 string16 expected_title_in_progress(
720 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName()); 337 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName());
721 string16 expected_title_finished( 338 string16 expected_title_finished(
722 ASCIIToUTF16(total_indication) + filename.LossyDisplayName()); 339 ASCIIToUTF16(total_indication) + filename.LossyDisplayName());
723 340
724 // Download a partial web page in a background tab and wait. 341 // Download a partial web page in a background tab and wait.
725 // The mock system will not complete until it gets a special URL. 342 // The mock system will not complete until it gets a special URL.
726 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 343 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
727 ui_test_utils::NavigateToURL(browser, url); 344 ui_test_utils::NavigateToURL(browser, url);
728 345
729 // TODO(ahendrickson): check download status text before downloading. 346 // TODO(ahendrickson): check download status text before downloading.
730 // Need to: 347 // Need to:
731 // - Add a member function to the |DownloadShelf| interface class, that 348 // - Add a member function to the |DownloadShelf| interface class, that
732 // indicates how many members it has. 349 // indicates how many members it has.
733 // - Add a member function to |DownloadShelf| to get the status text 350 // - Add a member function to |DownloadShelf| to get the status text
734 // of a given member (for example, via the name in |DownloadItemView|'s 351 // of a given member (for example, via the name in |DownloadItemView|'s
735 // GetAccessibleState() member function), by index. 352 // GetAccessibleState() member function), by index.
736 // - Iterate over browser->window()->GetDownloadShelf()'s members 353 // - Iterate over browser->window()->GetDownloadShelf()'s members
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
979 CheckDownload(browser(), file, file); 596 CheckDownload(browser(), file, file);
980 CheckDownloadUI(browser(), true, true, file); 597 CheckDownloadUI(browser(), true, true, file);
981 } 598 }
982 #endif 599 #endif
983 600
984 // Put up a Select File dialog when the file is downloaded, due to its MIME 601 // Put up a Select File dialog when the file is downloaded, due to its MIME
985 // type. 602 // type.
986 // 603 //
987 // This test runs correctly, but leaves behind turds in the test user's 604 // This test runs correctly, but leaves behind turds in the test user's
988 // download directory because of http://crbug.com/62099. No big loss; it 605 // download directory because of http://crbug.com/62099. No big loss; it
989 // was primarily confirming DownloadsObserver wait on select file dialog 606 // was primarily confirming DownloadTestObserver wait on select file dialog
990 // functionality anyway. 607 // functionality anyway.
991 IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DownloadMimeTypeSelect) { 608 IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DownloadMimeTypeSelect) {
992 ASSERT_TRUE(InitialSetup(true)); 609 ASSERT_TRUE(InitialSetup(true));
993 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); 610 FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
994 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 611 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
995 612
996 // Download the file and wait. We expect the Select File dialog to appear 613 // Download the file and wait. We expect the Select File dialog to appear
997 // due to the MIME type. 614 // due to the MIME type.
998 DownloadAndWait(browser(), url, EXPECT_SELECT_DIALOG); 615 DownloadAndWait(browser(), url, EXPECT_SELECT_DIALOG);
999 616
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1401 CheckDownloadUI(browser(), false, true, file); 1018 CheckDownloadUI(browser(), false, true, file);
1402 1019
1403 CheckDownload(browser(), file, file); 1020 CheckDownload(browser(), file, file);
1404 } 1021 }
1405 1022
1406 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { 1023 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) {
1407 ASSERT_TRUE(InitialSetup(false)); 1024 ASSERT_TRUE(InitialSetup(false));
1408 EXPECT_EQ(1, browser()->tab_count()); 1025 EXPECT_EQ(1, browser()->tab_count());
1409 1026
1410 // TODO(rdsmith): Fragile code warning! The code below relies on the 1027 // TODO(rdsmith): Fragile code warning! The code below relies on the
1411 // DownloadsObserver only finishing when the new download has reached 1028 // DownloadTestObserver only finishing when the new download has reached
1412 // the state of being entered into the history and being user-visible 1029 // the state of being entered into the history and being user-visible
1413 // (that's what's required for the Remove to be valid and for the 1030 // (that's what's required for the Remove to be valid and for the
1414 // download shelf to be visible). By the pure semantics of 1031 // download shelf to be visible). By the pure semantics of
1415 // DownloadsObserver, that's not guaranteed; DownloadItems are created 1032 // DownloadTestObserver, that's not guaranteed; DownloadItems are created
1416 // in the IN_PROGRESS state and made known to the DownloadManager 1033 // in the IN_PROGRESS state and made known to the DownloadManager
1417 // immediately, so any ModelChanged event on the DownloadManager after 1034 // immediately, so any ModelChanged event on the DownloadManager after
1418 // navigation would allow the observer to return. However, the only 1035 // navigation would allow the observer to return. However, the only
1419 // ModelChanged() event the code will currently fire is in 1036 // ModelChanged() event the code will currently fire is in
1420 // OnCreateDownloadEntryComplete, at which point the download item will 1037 // OnCreateDownloadEntryComplete, at which point the download item will
1421 // be in the state we need. 1038 // be in the state we need.
1422 // The right way to fix this is to create finer grained states on the 1039 // The right way to fix this is to create finer grained states on the
1423 // DownloadItem, and wait for the state that indicates the item has been 1040 // DownloadItem, and wait for the state that indicates the item has been
1424 // entered in the history and made visible in the UI. 1041 // entered in the history and made visible in the UI.
1425 1042
1426 // Create a download, wait until it's started, and confirm 1043 // Create a download, wait until it's started, and confirm
1427 // we're in the expected state. 1044 // we're in the expected state.
1428 scoped_ptr<DownloadsObserver> observer( 1045 scoped_ptr<DownloadTestObserver> observer(
1429 CreateInProgressWaiter(browser(), 1)); 1046 CreateInProgressWaiter(browser(), 1));
1430 ui_test_utils::NavigateToURL( 1047 ui_test_utils::NavigateToURL(
1431 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); 1048 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl));
1432 observer->WaitForFinished(); 1049 observer->WaitForFinished();
1433 1050
1434 std::vector<DownloadItem*> downloads; 1051 std::vector<DownloadItem*> downloads;
1435 browser()->profile()->GetDownloadManager()->SearchDownloads( 1052 browser()->profile()->GetDownloadManager()->SearchDownloads(
1436 string16(), &downloads); 1053 string16(), &downloads);
1437 ASSERT_EQ(1u, downloads.size()); 1054 ASSERT_EQ(1u, downloads.size());
1438 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); 1055 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state());
1439 CheckDownloadUI(browser(), true, true, FilePath()); 1056 CheckDownloadUI(browser(), true, true, FilePath());
1440 1057
1441 // Cancel the download and wait for download system quiesce. 1058 // Cancel the download and wait for download system quiesce.
1442 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 1059 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
1443 scoped_refptr<DownloadsFlushObserver> flush_observer( 1060 scoped_refptr<DownloadTestFlushObserver> flush_observer(
1444 new DownloadsFlushObserver(browser()->profile()->GetDownloadManager())); 1061 new DownloadTestFlushObserver(
1062 browser()->profile()->GetDownloadManager()));
1445 flush_observer->WaitForFlush(); 1063 flush_observer->WaitForFlush();
1446 1064
1447 // Get the important info from other threads and check it. 1065 // Get the important info from other threads and check it.
1448 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); 1066 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector());
1449 info->WaitForDataCollected(); 1067 info->WaitForDataCollected();
1450 EXPECT_EQ(0, info->rdh_pending_requests()); 1068 EXPECT_EQ(0, info->rdh_pending_requests());
1451 EXPECT_EQ(0, info->dfm_pending_downloads()); 1069 EXPECT_EQ(0, info->dfm_pending_downloads());
1452 1070
1453 // Using "DownloadItem::Remove" follows the discard dangerous download path, 1071 // Using "DownloadItem::Remove" follows the discard dangerous download path,
1454 // which completely removes the browser from the shelf and closes the shelf 1072 // which completely removes the browser from the shelf and closes the shelf
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
1550 } 1168 }
1551 1169
1552 // Test to make sure the 'download' attribute in anchor tag is respected. 1170 // Test to make sure the 'download' attribute in anchor tag is respected.
1553 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) { 1171 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) {
1554 ASSERT_TRUE(InitialSetup(false)); 1172 ASSERT_TRUE(InitialSetup(false));
1555 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html")); 1173 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html"));
1556 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 1174 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
1557 1175
1558 // Create a download, wait until it's complete, and confirm 1176 // Create a download, wait until it's complete, and confirm
1559 // we're in the expected state. 1177 // we're in the expected state.
1560 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser(), 1)); 1178 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser(), 1));
1561 ui_test_utils::NavigateToURL(browser(), url); 1179 ui_test_utils::NavigateToURL(browser(), url);
1562 observer->WaitForFinished(); 1180 observer->WaitForFinished();
1563 1181
1564 // Confirm the downloaded data exists. 1182 // Confirm the downloaded data exists.
1565 FilePath downloaded_file = GetDownloadDirectory(browser()); 1183 FilePath downloaded_file = GetDownloadDirectory(browser());
1566 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png")); 1184 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png"));
1567 EXPECT_TRUE(file_util::PathExists(downloaded_file)); 1185 EXPECT_TRUE(file_util::PathExists(downloaded_file));
1568 } 1186 }
1569 1187
1570 // Test to make sure auto-open works. 1188 // Test to make sure auto-open works.
(...skipping 25 matching lines...) Expand all
1596 // Download shelf should close. Download panel stays open on ChromeOS. 1214 // Download shelf should close. Download panel stays open on ChromeOS.
1597 CheckDownloadUI(browser(), false, true, FilePath()); 1215 CheckDownloadUI(browser(), false, true, FilePath());
1598 } 1216 }
1599 1217
1600 // Download an extension. Expect a dangerous download warning. 1218 // Download an extension. Expect a dangerous download warning.
1601 // Deny the download. 1219 // Deny the download.
1602 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { 1220 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) {
1603 ASSERT_TRUE(InitialSetup(false)); 1221 ASSERT_TRUE(InitialSetup(false));
1604 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1222 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1605 1223
1606 scoped_ptr<DownloadsObserver> observer( 1224 scoped_ptr<DownloadTestObserver> observer(
1607 DangerousInstallWaiter(browser(), 1225 DangerousInstallWaiter(
1608 1, 1226 browser(), 1, DownloadItem::CANCELLED,
1609 DownloadItem::CANCELLED, 1227 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
1610 ON_DANGEROUS_DOWNLOAD_DENY));
1611 ui_test_utils::NavigateToURL(browser(), extension_url); 1228 ui_test_utils::NavigateToURL(browser(), extension_url);
1612 1229
1613 observer->WaitForFinished(); 1230 observer->WaitForFinished();
1614 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1231 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1615 1232
1616 // Download shelf should close. Download panel stays open on ChromeOS. 1233 // Download shelf should close. Download panel stays open on ChromeOS.
1617 CheckDownloadUI(browser(), false, true, FilePath()); 1234 CheckDownloadUI(browser(), false, true, FilePath());
1618 1235
1619 // Check that the CRX is not installed. 1236 // Check that the CRX is not installed.
1620 ExtensionService* extension_service = 1237 ExtensionService* extension_service =
1621 browser()->profile()->GetExtensionService(); 1238 browser()->profile()->GetExtensionService();
1622 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1239 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1623 } 1240 }
1624 1241
1625 // Download an extension. Expect a dangerous download warning. 1242 // Download an extension. Expect a dangerous download warning.
1626 // Allow the download, deny the install. 1243 // Allow the download, deny the install.
1627 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { 1244 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) {
1628 ASSERT_TRUE(InitialSetup(false)); 1245 ASSERT_TRUE(InitialSetup(false));
1629 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1246 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1630 1247
1631 // Install a mock install UI that simulates a user denying permission to 1248 // Install a mock install UI that simulates a user denying permission to
1632 // finish the install. 1249 // finish the install.
1633 download_crx_util::SetMockInstallUIForTesting( 1250 download_crx_util::SetMockInstallUIForTesting(
1634 new MockAbortExtensionInstallUI()); 1251 new MockAbortExtensionInstallUI());
1635 1252
1636 scoped_ptr<DownloadsObserver> observer( 1253 scoped_ptr<DownloadTestObserver> observer(
1637 DangerousInstallWaiter(browser(), 1254 DangerousInstallWaiter(
1638 1, 1255 browser(), 1, DownloadItem::COMPLETE,
1639 DownloadItem::COMPLETE, 1256 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1640 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1641 ui_test_utils::NavigateToURL(browser(), extension_url); 1257 ui_test_utils::NavigateToURL(browser(), extension_url);
1642 1258
1643 observer->WaitForFinished(); 1259 observer->WaitForFinished();
1644 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1260 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1645 1261
1646 // Download shelf should close. Download panel stays open on ChromeOS. 1262 // Download shelf should close. Download panel stays open on ChromeOS.
1647 CheckDownloadUI(browser(), false, true, FilePath()); 1263 CheckDownloadUI(browser(), false, true, FilePath());
1648 1264
1649 // Check that the extension was not installed. 1265 // Check that the extension was not installed.
1650 ExtensionService* extension_service = 1266 ExtensionService* extension_service =
1651 browser()->profile()->GetExtensionService(); 1267 browser()->profile()->GetExtensionService();
1652 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1268 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1653 } 1269 }
1654 1270
1655 // Download an extension. Expect a dangerous download warning. 1271 // Download an extension. Expect a dangerous download warning.
1656 // Allow the download, and the install. 1272 // Allow the download, and the install.
1657 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { 1273 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) {
1658 ASSERT_TRUE(InitialSetup(false)); 1274 ASSERT_TRUE(InitialSetup(false));
1659 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1275 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1660 1276
1661 // Install a mock install UI that simulates a user allowing permission to 1277 // Install a mock install UI that simulates a user allowing permission to
1662 // finish the install. 1278 // finish the install.
1663 download_crx_util::SetMockInstallUIForTesting( 1279 download_crx_util::SetMockInstallUIForTesting(
1664 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1280 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1665 1281
1666 scoped_ptr<DownloadsObserver> observer( 1282 scoped_ptr<DownloadTestObserver> observer(
1667 DangerousInstallWaiter(browser(), 1283 DangerousInstallWaiter(
1668 1, 1284 browser(), 1, DownloadItem::COMPLETE,
1669 DownloadItem::COMPLETE, 1285 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1670 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1671 ui_test_utils::NavigateToURL(browser(), extension_url); 1286 ui_test_utils::NavigateToURL(browser(), extension_url);
1672 1287
1673 observer->WaitForFinished(); 1288 observer->WaitForFinished();
1674 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1289 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1675 1290
1676 // Download shelf should close. Download panel stays open on ChromeOS. 1291 // Download shelf should close. Download panel stays open on ChromeOS.
1677 CheckDownloadUI(browser(), false, true, FilePath()); 1292 CheckDownloadUI(browser(), false, true, FilePath());
1678 1293
1679 // Check that the extension was installed. 1294 // Check that the extension was installed.
1680 ExtensionService* extension_service = 1295 ExtensionService* extension_service =
1681 browser()->profile()->GetExtensionService(); 1296 browser()->profile()->GetExtensionService();
1682 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false)); 1297 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false));
1683 } 1298 }
1684 1299
1685 // Test installing a CRX that fails integrity checks. 1300 // Test installing a CRX that fails integrity checks.
1686 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { 1301 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) {
1687 ASSERT_TRUE(InitialSetup(false)); 1302 ASSERT_TRUE(InitialSetup(false));
1688 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx")); 1303 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx"));
1689 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file)); 1304 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file));
1690 1305
1691 // Install a mock install UI that simulates a user allowing permission to 1306 // Install a mock install UI that simulates a user allowing permission to
1692 // finish the install, and dismisses any error message. We check that the 1307 // finish the install, and dismisses any error message. We check that the
1693 // install failed below. 1308 // install failed below.
1694 download_crx_util::SetMockInstallUIForTesting( 1309 download_crx_util::SetMockInstallUIForTesting(
1695 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1310 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1696 1311
1697 scoped_ptr<DownloadsObserver> observer( 1312 scoped_ptr<DownloadTestObserver> observer(
1698 DangerousInstallWaiter(browser(), 1313 DangerousInstallWaiter(
1699 1, 1314 browser(), 1, DownloadItem::COMPLETE,
1700 DownloadItem::COMPLETE, 1315 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1701 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1702 ui_test_utils::NavigateToURL(browser(), extension_url); 1316 ui_test_utils::NavigateToURL(browser(), extension_url);
1703 1317
1704 observer->WaitForFinished(); 1318 observer->WaitForFinished();
1705 1319
1706 // Check that the extension was not installed. 1320 // Check that the extension was not installed.
1707 ExtensionService* extension_service = 1321 ExtensionService* extension_service =
1708 browser()->profile()->GetExtensionService(); 1322 browser()->profile()->GetExtensionService();
1709 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1323 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1710 } 1324 }
1711 1325
1712 // Install a large (100kb) theme. 1326 // Install a large (100kb) theme.
1713 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { 1327 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) {
1714 ASSERT_TRUE(InitialSetup(false)); 1328 ASSERT_TRUE(InitialSetup(false));
1715 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath)); 1329 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath));
1716 1330
1717 // Install a mock install UI that simulates a user allowing permission to 1331 // Install a mock install UI that simulates a user allowing permission to
1718 // finish the install. 1332 // finish the install.
1719 download_crx_util::SetMockInstallUIForTesting( 1333 download_crx_util::SetMockInstallUIForTesting(
1720 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1334 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1721 1335
1722 scoped_ptr<DownloadsObserver> observer( 1336 scoped_ptr<DownloadTestObserver> observer(
1723 DangerousInstallWaiter(browser(), 1337 DangerousInstallWaiter(
1724 1, 1338 browser(), 1, DownloadItem::COMPLETE,
1725 DownloadItem::COMPLETE, 1339 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1726 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1727 ui_test_utils::NavigateToURL(browser(), extension_url); 1340 ui_test_utils::NavigateToURL(browser(), extension_url);
1728 1341
1729 observer->WaitForFinished(); 1342 observer->WaitForFinished();
1730 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1343 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1731 1344
1732 // Download shelf should close. Download panel stays open on ChromeOS. 1345 // Download shelf should close. Download panel stays open on ChromeOS.
1733 CheckDownloadUI(browser(), false, true, FilePath()); 1346 CheckDownloadUI(browser(), false, true, FilePath());
1734 1347
1735 // Check that the extension was installed. 1348 // Check that the extension was installed.
1736 ExtensionService* extension_service = 1349 ExtensionService* extension_service =
1737 browser()->profile()->GetExtensionService(); 1350 browser()->profile()->GetExtensionService();
1738 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false)); 1351 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false));
1739 } 1352 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/download/download_test_observer.h » ('j') | chrome/browser/ui/browser_close_browsertest.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698