OLD | NEW |
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/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "base/stl_util.h" | 13 #include "base/stl_util.h" |
14 #include "base/test/test_file_util.h" | 14 #include "base/test/test_file_util.h" |
15 #include "base/utf_string_conversions.h" | 15 #include "base/utf_string_conversions.h" |
16 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
17 #include "chrome/browser/download/chrome_download_manager_delegate.h" | 17 #include "chrome/browser/download/chrome_download_manager_delegate.h" |
18 #include "chrome/browser/download/download_crx_util.h" | 18 #include "chrome/browser/download/download_crx_util.h" |
19 #include "chrome/browser/download/download_history.h" | 19 #include "chrome/browser/download/download_history.h" |
20 #include "chrome/browser/download/download_prefs.h" | 20 #include "chrome/browser/download/download_prefs.h" |
21 #include "chrome/browser/download/download_service.h" | 21 #include "chrome/browser/download/download_service.h" |
22 #include "chrome/browser/download/download_service_factory.h" | 22 #include "chrome/browser/download/download_service_factory.h" |
23 #include "chrome/browser/download/download_shelf.h" | 23 #include "chrome/browser/download/download_shelf.h" |
| 24 #include "chrome/browser/download/download_test_observer.h" |
24 #include "chrome/browser/download/download_util.h" | 25 #include "chrome/browser/download/download_util.h" |
25 #include "chrome/browser/extensions/extension_install_ui.h" | 26 #include "chrome/browser/extensions/extension_install_ui.h" |
26 #include "chrome/browser/extensions/extension_service.h" | 27 #include "chrome/browser/extensions/extension_service.h" |
27 #include "chrome/browser/history/history.h" | 28 #include "chrome/browser/history/history.h" |
28 #include "chrome/browser/net/url_request_mock_util.h" | 29 #include "chrome/browser/net/url_request_mock_util.h" |
29 #include "chrome/browser/prefs/pref_service.h" | 30 #include "chrome/browser/prefs/pref_service.h" |
30 #include "chrome/browser/profiles/profile.h" | 31 #include "chrome/browser/profiles/profile.h" |
31 #include "chrome/browser/ui/browser.h" | 32 #include "chrome/browser/ui/browser.h" |
32 #include "chrome/browser/ui/browser_list.h" | 33 #include "chrome/browser/ui/browser_list.h" |
33 #include "chrome/browser/ui/browser_window.h" | 34 #include "chrome/browser/ui/browser_window.h" |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
76 | 77 |
77 // Fake user click on "Deny". | 78 // Fake user click on "Deny". |
78 void DenyDangerousDownload(scoped_refptr<DownloadManager> download_manager, | 79 void DenyDangerousDownload(scoped_refptr<DownloadManager> download_manager, |
79 int32 download_id) { | 80 int32 download_id) { |
80 DownloadItem* download = download_manager->GetDownloadItem(download_id); | 81 DownloadItem* download = download_manager->GetDownloadItem(download_id); |
81 ASSERT_TRUE(download->IsPartialDownload()); | 82 ASSERT_TRUE(download->IsPartialDownload()); |
82 download->Cancel(true); | 83 download->Cancel(true); |
83 download->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); | 84 download->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); |
84 } | 85 } |
85 | 86 |
86 // Construction of this class defines a system state, based on some number | |
87 // of downloads being seen in a particular state + other events that | |
88 // may occur in the download system. That state will be recorded if it | |
89 // occurs at any point after construction. When that state occurs, the class | |
90 // is considered finished. Callers may either probe for the finished state, or | |
91 // wait on it. | |
92 // | |
93 // TODO(rdsmith): Detect manager going down, remove pointer to | |
94 // DownloadManager, transition to finished. (For right now we | |
95 // just use a scoped_refptr<> to keep it around, but that may cause | |
96 // timeouts on waiting if a DownloadManager::Shutdown() occurs which | |
97 // cancels our in-progress downloads.) | |
98 class DownloadsObserver : public DownloadManager::Observer, | |
99 public DownloadItem::Observer { | |
100 public: | |
101 // Create an object that will be considered finished when |wait_count| | |
102 // download items have entered state |download_finished_state|. | |
103 // If |finish_on_select_file| is true, the object will also be | |
104 // considered finished if the DownloadManager raises a | |
105 // SelectFileDialogDisplayed() notification. | |
106 | |
107 // TODO(rdsmith): Consider rewriting the interface to take a list of events | |
108 // to treat as completion events. | |
109 DownloadsObserver(DownloadManager* download_manager, | |
110 size_t wait_count, | |
111 DownloadItem::DownloadState download_finished_state, | |
112 bool finish_on_select_file, | |
113 DangerousDownloadAction dangerous_download_action) | |
114 : download_manager_(download_manager), | |
115 wait_count_(wait_count), | |
116 finished_downloads_at_construction_(0), | |
117 waiting_(false), | |
118 download_finished_state_(download_finished_state), | |
119 finish_on_select_file_(finish_on_select_file), | |
120 select_file_dialog_seen_(false), | |
121 dangerous_download_action_(dangerous_download_action) { | |
122 download_manager_->AddObserver(this); // Will call initial ModelChanged(). | |
123 finished_downloads_at_construction_ = finished_downloads_.size(); | |
124 EXPECT_NE(DownloadItem::REMOVING, download_finished_state) | |
125 << "Waiting for REMOVING is not supported. Try COMPLETE."; | |
126 } | |
127 | |
128 ~DownloadsObserver() { | |
129 std::set<DownloadItem*>::iterator it = downloads_observed_.begin(); | |
130 for (; it != downloads_observed_.end(); ++it) | |
131 (*it)->RemoveObserver(this); | |
132 | |
133 download_manager_->RemoveObserver(this); | |
134 } | |
135 | |
136 // State accessors. | |
137 bool select_file_dialog_seen() { return select_file_dialog_seen_; } | |
138 | |
139 // Wait for whatever state was specified in the constructor. | |
140 void WaitForFinished() { | |
141 if (!IsFinished()) { | |
142 waiting_ = true; | |
143 ui_test_utils::RunMessageLoop(); | |
144 waiting_ = false; | |
145 } | |
146 } | |
147 | |
148 // Return true if everything's happened that we're configured for. | |
149 bool IsFinished() { | |
150 if (finished_downloads_.size() - finished_downloads_at_construction_ | |
151 >= wait_count_) | |
152 return true; | |
153 return (finish_on_select_file_ && select_file_dialog_seen_); | |
154 } | |
155 | |
156 // DownloadItem::Observer | |
157 virtual void OnDownloadUpdated(DownloadItem* download) { | |
158 // The REMOVING state indicates that the download is being destroyed. | |
159 // Stop observing. Do not do anything with it, as it is about to be gone. | |
160 if (download->state() == DownloadItem::REMOVING) { | |
161 std::set<DownloadItem*>::iterator it = downloads_observed_.find(download); | |
162 ASSERT_TRUE(it != downloads_observed_.end()); | |
163 downloads_observed_.erase(it); | |
164 download->RemoveObserver(this); | |
165 return; | |
166 } | |
167 | |
168 // Real UI code gets the user's response after returning from the observer. | |
169 if (download->safety_state() == DownloadItem::DANGEROUS && | |
170 !ContainsKey(dangerous_downloads_seen_, download->id())) { | |
171 dangerous_downloads_seen_.insert(download->id()); | |
172 | |
173 // Calling DangerousDownloadValidated() at this point will | |
174 // cause the download to be completed twice. Do what the real UI | |
175 // code does: make the call as a delayed task. | |
176 switch (dangerous_download_action_) { | |
177 case ON_DANGEROUS_DOWNLOAD_ACCEPT: | |
178 // Fake user click on "Accept". Delay the actual click, as the | |
179 // real UI would. | |
180 BrowserThread::PostTask( | |
181 BrowserThread::UI, FROM_HERE, | |
182 base::Bind(&AcceptDangerousDownload, download_manager_, | |
183 download->id())); | |
184 break; | |
185 | |
186 case ON_DANGEROUS_DOWNLOAD_DENY: | |
187 // Fake a user click on "Deny". Delay the actual click, as the | |
188 // real UI would. | |
189 BrowserThread::PostTask( | |
190 BrowserThread::UI, FROM_HERE, | |
191 base::Bind(&DenyDangerousDownload, download_manager_, | |
192 download->id())); | |
193 break; | |
194 | |
195 case ON_DANGEROUS_DOWNLOAD_FAIL: | |
196 ADD_FAILURE() << "Unexpected dangerous download item."; | |
197 break; | |
198 | |
199 default: | |
200 NOTREACHED(); | |
201 } | |
202 } | |
203 | |
204 if (download->state() == download_finished_state_) | |
205 DownloadInFinalState(download); | |
206 } | |
207 | |
208 virtual void OnDownloadOpened(DownloadItem* download) {} | |
209 | |
210 // DownloadManager::Observer | |
211 virtual void ModelChanged() { | |
212 // Regenerate DownloadItem observers. If there are any download items | |
213 // in our final state, note them in |finished_downloads_| | |
214 // (done by |OnDownloadUpdated()|). | |
215 std::vector<DownloadItem*> downloads; | |
216 download_manager_->GetAllDownloads(FilePath(), &downloads); | |
217 | |
218 std::vector<DownloadItem*>::iterator it = downloads.begin(); | |
219 for (; it != downloads.end(); ++it) { | |
220 OnDownloadUpdated(*it); // Safe to call multiple times; checks state. | |
221 | |
222 std::set<DownloadItem*>::const_iterator | |
223 finished_it(finished_downloads_.find(*it)); | |
224 std::set<DownloadItem*>::iterator | |
225 observed_it(downloads_observed_.find(*it)); | |
226 | |
227 // If it isn't finished and we're aren't observing it, start. | |
228 if (finished_it == finished_downloads_.end() && | |
229 observed_it == downloads_observed_.end()) { | |
230 (*it)->AddObserver(this); | |
231 downloads_observed_.insert(*it); | |
232 continue; | |
233 } | |
234 | |
235 // If it is finished and we are observing it, stop. | |
236 if (finished_it != finished_downloads_.end() && | |
237 observed_it != downloads_observed_.end()) { | |
238 (*it)->RemoveObserver(this); | |
239 downloads_observed_.erase(observed_it); | |
240 continue; | |
241 } | |
242 } | |
243 } | |
244 | |
245 virtual void SelectFileDialogDisplayed(int32 /* id */) { | |
246 select_file_dialog_seen_ = true; | |
247 SignalIfFinished(); | |
248 } | |
249 | |
250 virtual size_t NumDangerousDownloadsSeen() const { | |
251 return dangerous_downloads_seen_.size(); | |
252 } | |
253 | |
254 private: | |
255 // Called when we know that a download item is in a final state. | |
256 // Note that this is not the same as it first transitioning in to the | |
257 // final state; multiple notifications may occur once the item is in | |
258 // that state. So we keep our own track of transitions into final. | |
259 void DownloadInFinalState(DownloadItem* download) { | |
260 if (finished_downloads_.find(download) != finished_downloads_.end()) { | |
261 // We've already seen terminal state on this download. | |
262 return; | |
263 } | |
264 | |
265 // Record the transition. | |
266 finished_downloads_.insert(download); | |
267 | |
268 SignalIfFinished(); | |
269 } | |
270 | |
271 void SignalIfFinished() { | |
272 if (waiting_ && IsFinished()) | |
273 MessageLoopForUI::current()->Quit(); | |
274 } | |
275 | |
276 // The observed download manager. | |
277 scoped_refptr<DownloadManager> download_manager_; | |
278 | |
279 // The set of DownloadItem's that have transitioned to their finished state | |
280 // since construction of this object. When the size of this array | |
281 // reaches wait_count_, we're done. | |
282 std::set<DownloadItem*> finished_downloads_; | |
283 | |
284 // The set of DownloadItem's we are currently observing. Generally there | |
285 // won't be any overlap with the above; once we see the final state | |
286 // on a DownloadItem, we'll stop observing it. | |
287 std::set<DownloadItem*> downloads_observed_; | |
288 | |
289 // The number of downloads to wait on completing. | |
290 size_t wait_count_; | |
291 | |
292 // The number of downloads entered in final state in initial | |
293 // ModelChanged(). We use |finished_downloads_| to track the incoming | |
294 // transitions to final state we should ignore, and to track the | |
295 // number of final state transitions that occurred between | |
296 // construction and return from wait. But some downloads may be in our | |
297 // final state (and thus be entered into |finished_downloads_|) when we | |
298 // construct this class. We don't want to count those in our transition | |
299 // to finished. | |
300 int finished_downloads_at_construction_; | |
301 | |
302 // Whether an internal message loop has been started and must be quit upon | |
303 // all downloads completing. | |
304 bool waiting_; | |
305 | |
306 // The state on which to consider the DownloadItem finished. | |
307 DownloadItem::DownloadState download_finished_state_; | |
308 | |
309 // True if we should transition the DownloadsObserver to finished if | |
310 // the select file dialog comes up. | |
311 bool finish_on_select_file_; | |
312 | |
313 // True if we've seen the select file dialog. | |
314 bool select_file_dialog_seen_; | |
315 | |
316 // Action to take if a dangerous download is encountered. | |
317 DangerousDownloadAction dangerous_download_action_; | |
318 | |
319 // Holds the download ids which were dangerous. | |
320 std::set<int32> dangerous_downloads_seen_; | |
321 | |
322 DISALLOW_COPY_AND_ASSIGN(DownloadsObserver); | |
323 }; | |
324 | |
325 // WaitForFlush() returns after: | |
326 // * There are no IN_PROGRESS download items remaining on the | |
327 // DownloadManager. | |
328 // * There have been two round trip messages through the file and | |
329 // IO threads. | |
330 // This almost certainly means that a Download cancel has propagated through | |
331 // the system. | |
332 class DownloadsFlushObserver | |
333 : public DownloadManager::Observer, | |
334 public DownloadItem::Observer, | |
335 public base::RefCountedThreadSafe<DownloadsFlushObserver> { | |
336 public: | |
337 explicit DownloadsFlushObserver(DownloadManager* download_manager) | |
338 : download_manager_(download_manager), | |
339 waiting_for_zero_inprogress_(true) {} | |
340 | |
341 void WaitForFlush() { | |
342 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); | |
343 download_manager_->AddObserver(this); | |
344 ui_test_utils::RunMessageLoop(); | |
345 } | |
346 | |
347 // DownloadsManager observer methods. | |
348 virtual void ModelChanged() { | |
349 // Model has changed, so there may be more DownloadItems to observe. | |
350 CheckDownloadsInProgress(true); | |
351 } | |
352 | |
353 // DownloadItem observer methods. | |
354 virtual void OnDownloadUpdated(DownloadItem* download) { | |
355 // No change in DownloadItem set on manager. | |
356 CheckDownloadsInProgress(false); | |
357 } | |
358 virtual void OnDownloadOpened(DownloadItem* download) {} | |
359 | |
360 protected: | |
361 friend class base::RefCountedThreadSafe<DownloadsFlushObserver>; | |
362 | |
363 virtual ~DownloadsFlushObserver() { | |
364 download_manager_->RemoveObserver(this); | |
365 for (std::set<DownloadItem*>::iterator it = downloads_observed_.begin(); | |
366 it != downloads_observed_.end(); ++it) { | |
367 (*it)->RemoveObserver(this); | |
368 } | |
369 } | |
370 | |
371 private: | |
372 // If we're waiting for that flush point, check the number | |
373 // of downloads in the IN_PROGRESS state and take appropriate | |
374 // action. If requested, also observes all downloads while iterating. | |
375 void CheckDownloadsInProgress(bool observe_downloads) { | |
376 if (waiting_for_zero_inprogress_) { | |
377 int count = 0; | |
378 | |
379 std::vector<DownloadItem*> downloads; | |
380 download_manager_->SearchDownloads(string16(), &downloads); | |
381 std::vector<DownloadItem*>::iterator it = downloads.begin(); | |
382 for (; it != downloads.end(); ++it) { | |
383 if ((*it)->state() == DownloadItem::IN_PROGRESS) | |
384 count++; | |
385 if (observe_downloads) { | |
386 if (downloads_observed_.find(*it) == downloads_observed_.end()) { | |
387 (*it)->AddObserver(this); | |
388 } | |
389 // Download items are forever, and we don't want to make | |
390 // assumptions about future state transitions, so once we | |
391 // start observing them, we don't stop until destruction. | |
392 } | |
393 } | |
394 | |
395 if (count == 0) { | |
396 waiting_for_zero_inprogress_ = false; | |
397 // Stop observing DownloadItems. We maintain the observation | |
398 // of DownloadManager so that we don't have to independently track | |
399 // whether we are observing it for conditional destruction. | |
400 for (std::set<DownloadItem*>::iterator it = downloads_observed_.begin(); | |
401 it != downloads_observed_.end(); ++it) { | |
402 (*it)->RemoveObserver(this); | |
403 } | |
404 downloads_observed_.clear(); | |
405 | |
406 // Trigger next step. We need to go past the IO thread twice, as | |
407 // there's a self-task posting in the IO thread cancel path. | |
408 BrowserThread::PostTask( | |
409 BrowserThread::FILE, FROM_HERE, | |
410 base::Bind(&DownloadsFlushObserver::PingFileThread, this, 2)); | |
411 } | |
412 } | |
413 } | |
414 | |
415 void PingFileThread(int cycle) { | |
416 BrowserThread::PostTask( | |
417 BrowserThread::IO, FROM_HERE, | |
418 base::Bind(&DownloadsFlushObserver::PingIOThread, this, cycle)); | |
419 } | |
420 | |
421 void PingIOThread(int cycle) { | |
422 if (--cycle) { | |
423 BrowserThread::PostTask( | |
424 BrowserThread::UI, FROM_HERE, | |
425 base::Bind(&DownloadsFlushObserver::PingFileThread, this, cycle)); | |
426 } else { | |
427 BrowserThread::PostTask( | |
428 BrowserThread::UI, FROM_HERE, new MessageLoop::QuitTask()); | |
429 } | |
430 } | |
431 | |
432 DownloadManager* download_manager_; | |
433 std::set<DownloadItem*> downloads_observed_; | |
434 bool waiting_for_zero_inprogress_; | |
435 | |
436 DISALLOW_COPY_AND_ASSIGN(DownloadsFlushObserver); | |
437 }; | |
438 | |
439 // Collect the information from FILE and IO threads needed for the Cancel | 87 // Collect the information from FILE and IO threads needed for the Cancel |
440 // Test, specifically the number of outstanding requests on the | 88 // Test, specifically the number of outstanding requests on the |
441 // ResourceDispatcherHost and the number of pending downloads on the | 89 // ResourceDispatcherHost and the number of pending downloads on the |
442 // DownloadFileManager. | 90 // DownloadFileManager. |
443 class CancelTestDataCollector | 91 class CancelTestDataCollector |
444 : public base::RefCountedThreadSafe<CancelTestDataCollector> { | 92 : public base::RefCountedThreadSafe<CancelTestDataCollector> { |
445 public: | 93 public: |
446 CancelTestDataCollector() | 94 CancelTestDataCollector() |
447 : resource_dispatcher_host_( | 95 : resource_dispatcher_host_( |
448 g_browser_process->resource_dispatcher_host()), | 96 g_browser_process->resource_dispatcher_host()), |
(...skipping 262 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
711 | 359 |
712 DownloadPrefs* GetDownloadPrefs(Browser* browser) { | 360 DownloadPrefs* GetDownloadPrefs(Browser* browser) { |
713 return DownloadPrefs::FromDownloadManager( | 361 return DownloadPrefs::FromDownloadManager( |
714 DownloadManagerForBrowser(browser)); | 362 DownloadManagerForBrowser(browser)); |
715 } | 363 } |
716 | 364 |
717 FilePath GetDownloadDirectory(Browser* browser) { | 365 FilePath GetDownloadDirectory(Browser* browser) { |
718 return GetDownloadPrefs(browser)->download_path(); | 366 return GetDownloadPrefs(browser)->download_path(); |
719 } | 367 } |
720 | 368 |
721 // Create a DownloadsObserver that will wait for the | 369 // Create a DownloadTestObserver that will wait for the |
722 // specified number of downloads to finish. | 370 // specified number of downloads to finish. |
723 DownloadsObserver* CreateWaiter(Browser* browser, int num_downloads) { | 371 DownloadTestObserver* CreateWaiter(Browser* browser, int num_downloads) { |
724 DownloadManager* download_manager = DownloadManagerForBrowser(browser); | 372 DownloadManager* download_manager = DownloadManagerForBrowser(browser); |
725 return new DownloadsObserver( | 373 return new DownloadTestObserver( |
726 download_manager, num_downloads, | 374 download_manager, num_downloads, |
727 DownloadItem::COMPLETE, // Really done | 375 DownloadItem::COMPLETE, // Really done |
728 true, // Bail on select file | 376 true, // Bail on select file |
729 ON_DANGEROUS_DOWNLOAD_FAIL); | 377 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); |
730 } | 378 } |
731 | 379 |
732 // Create a DownloadsObserver that will wait for the | 380 // Create a DownloadTestObserver that will wait for the |
733 // specified number of downloads to start. | 381 // specified number of downloads to start. |
734 DownloadsObserver* CreateInProgressWaiter(Browser* browser, | 382 DownloadTestObserver* CreateInProgressWaiter(Browser* browser, |
735 int num_downloads) { | 383 int num_downloads) { |
736 DownloadManager* download_manager = DownloadManagerForBrowser(browser); | 384 DownloadManager* download_manager = DownloadManagerForBrowser(browser); |
737 return new DownloadsObserver( | 385 return new DownloadTestObserver( |
738 download_manager, num_downloads, | 386 download_manager, num_downloads, |
739 DownloadItem::IN_PROGRESS, // Has started | 387 DownloadItem::IN_PROGRESS, // Has started |
740 true, // Bail on select file | 388 true, // Bail on select file |
741 ON_DANGEROUS_DOWNLOAD_FAIL); | 389 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL); |
742 } | 390 } |
743 | 391 |
744 // Create a DownloadsObserver that will wait for the | 392 // Create a DownloadTestObserver that will wait for the |
745 // specified number of downloads to finish, or for | 393 // specified number of downloads to finish, or for |
746 // a dangerous download warning to be shown. | 394 // a dangerous download warning to be shown. |
747 DownloadsObserver* DangerousInstallWaiter( | 395 DownloadTestObserver* DangerousInstallWaiter( |
748 Browser* browser, | 396 Browser* browser, |
749 int num_downloads, | 397 int num_downloads, |
750 DownloadItem::DownloadState final_state, | 398 DownloadItem::DownloadState final_state, |
751 DangerousDownloadAction dangerous_download_action) { | 399 DownloadTestObserver::DangerousDownloadAction dangerous_download_action) { |
752 DownloadManager* download_manager = DownloadManagerForBrowser(browser); | 400 DownloadManager* download_manager = DownloadManagerForBrowser(browser); |
753 return new DownloadsObserver( | 401 return new DownloadTestObserver( |
754 download_manager, num_downloads, | 402 download_manager, num_downloads, |
755 final_state, | 403 final_state, |
756 true, // Bail on select file | 404 true, // Bail on select file |
757 dangerous_download_action); | 405 dangerous_download_action); |
758 } | 406 } |
759 | 407 |
760 // Download |url|, then wait for the download to finish. | 408 // Download |url|, then wait for the download to finish. |
761 // |disposition| indicates where the navigation occurs (current tab, new | 409 // |disposition| indicates where the navigation occurs (current tab, new |
762 // foreground tab, etc). | 410 // foreground tab, etc). |
763 // |expectation| indicates whether or not a Select File dialog should be | 411 // |expectation| indicates whether or not a Select File dialog should be |
764 // open when the download is finished, or if we don't care. | 412 // open when the download is finished, or if we don't care. |
765 // If the dialog appears, the routine exits. The only effect |expectation| | 413 // If the dialog appears, the routine exits. The only effect |expectation| |
766 // has is whether or not the test succeeds. | 414 // has is whether or not the test succeeds. |
767 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more | 415 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more |
768 // values in the ui_test_utils::BrowserTestWaitFlags enum. | 416 // values in the ui_test_utils::BrowserTestWaitFlags enum. |
769 void DownloadAndWaitWithDisposition(Browser* browser, | 417 void DownloadAndWaitWithDisposition(Browser* browser, |
770 const GURL& url, | 418 const GURL& url, |
771 WindowOpenDisposition disposition, | 419 WindowOpenDisposition disposition, |
772 SelectExpectation expectation, | 420 SelectExpectation expectation, |
773 int browser_test_flags) { | 421 int browser_test_flags) { |
774 // Setup notification, navigate, and block. | 422 // Setup notification, navigate, and block. |
775 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); | 423 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1)); |
776 // This call will block until the condition specified by | 424 // This call will block until the condition specified by |
777 // |browser_test_flags|, but will not wait for the download to finish. | 425 // |browser_test_flags|, but will not wait for the download to finish. |
778 ui_test_utils::NavigateToURLWithDisposition(browser, | 426 ui_test_utils::NavigateToURLWithDisposition(browser, |
779 url, | 427 url, |
780 disposition, | 428 disposition, |
781 browser_test_flags); | 429 browser_test_flags); |
782 // Waits for the download to complete. | 430 // Waits for the download to complete. |
783 observer->WaitForFinished(); | 431 observer->WaitForFinished(); |
784 | 432 |
785 // If specified, check the state of the select file dialog. | 433 // If specified, check the state of the select file dialog. |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 // |expected_title_finished| need to be checked. | 505 // |expected_title_finished| need to be checked. |
858 FilePath filename; | 506 FilePath filename; |
859 net::FileURLToFilePath(url, &filename); | 507 net::FileURLToFilePath(url, &filename); |
860 string16 expected_title_in_progress( | 508 string16 expected_title_in_progress( |
861 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName()); | 509 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName()); |
862 string16 expected_title_finished( | 510 string16 expected_title_finished( |
863 ASCIIToUTF16(total_indication) + filename.LossyDisplayName()); | 511 ASCIIToUTF16(total_indication) + filename.LossyDisplayName()); |
864 | 512 |
865 // Download a partial web page in a background tab and wait. | 513 // Download a partial web page in a background tab and wait. |
866 // The mock system will not complete until it gets a special URL. | 514 // The mock system will not complete until it gets a special URL. |
867 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); | 515 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1)); |
868 ui_test_utils::NavigateToURL(browser, url); | 516 ui_test_utils::NavigateToURL(browser, url); |
869 | 517 |
870 // TODO(ahendrickson): check download status text before downloading. | 518 // TODO(ahendrickson): check download status text before downloading. |
871 // Need to: | 519 // Need to: |
872 // - Add a member function to the |DownloadShelf| interface class, that | 520 // - Add a member function to the |DownloadShelf| interface class, that |
873 // indicates how many members it has. | 521 // indicates how many members it has. |
874 // - Add a member function to |DownloadShelf| to get the status text | 522 // - Add a member function to |DownloadShelf| to get the status text |
875 // of a given member (for example, via the name in |DownloadItemView|'s | 523 // of a given member (for example, via the name in |DownloadItemView|'s |
876 // GetAccessibleState() member function), by index. | 524 // GetAccessibleState() member function), by index. |
877 // - Iterate over browser->window()->GetDownloadShelf()'s members | 525 // - Iterate over browser->window()->GetDownloadShelf()'s members |
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1065 // downloads preferences settings. | 713 // downloads preferences settings. |
1066 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) { | 714 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadMimeTypeSelect) { |
1067 ASSERT_TRUE(InitialSetup(true)); | 715 ASSERT_TRUE(InitialSetup(true)); |
1068 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); | 716 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); |
1069 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); | 717 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); |
1070 | 718 |
1071 NullSelectFile(browser()); | 719 NullSelectFile(browser()); |
1072 | 720 |
1073 // Download the file and wait. We expect the Select File dialog to appear | 721 // Download the file and wait. We expect the Select File dialog to appear |
1074 // due to the MIME type, but we still wait until the download completes. | 722 // due to the MIME type, but we still wait until the download completes. |
1075 scoped_ptr<DownloadsObserver> observer( | 723 scoped_ptr<DownloadTestObserver> observer( |
1076 new DownloadsObserver( | 724 new DownloadTestObserver( |
1077 DownloadManagerForBrowser(browser()), | 725 DownloadManagerForBrowser(browser()), |
1078 1, | 726 1, |
1079 DownloadItem::COMPLETE, // Really done | 727 DownloadItem::COMPLETE, // Really done |
1080 false, // Continue on select file. | 728 false, // Continue on select file. |
1081 ON_DANGEROUS_DOWNLOAD_FAIL)); | 729 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL)); |
1082 ui_test_utils::NavigateToURLWithDisposition( | 730 ui_test_utils::NavigateToURLWithDisposition( |
1083 browser(), url, CURRENT_TAB, | 731 browser(), url, CURRENT_TAB, |
1084 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 732 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
1085 observer->WaitForFinished(); | 733 observer->WaitForFinished(); |
1086 EXPECT_TRUE(observer->select_file_dialog_seen()); | 734 EXPECT_TRUE(observer->select_file_dialog_seen()); |
1087 | 735 |
1088 // Check state. | 736 // Check state. |
1089 EXPECT_EQ(1, browser()->tab_count()); | 737 EXPECT_EQ(1, browser()->tab_count()); |
1090 CheckDownload(browser(), file, file); | 738 CheckDownload(browser(), file, file); |
1091 CheckDownloadUI(browser(), true, true, file); | 739 CheckDownloadUI(browser(), true, true, file); |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1492 } | 1140 } |
1493 | 1141 |
1494 // Check that downloading multiple (in this case, 2) files does not result in | 1142 // Check that downloading multiple (in this case, 2) files does not result in |
1495 // corrupted files. | 1143 // corrupted files. |
1496 IN_PROC_BROWSER_TEST_F(DownloadTest, MultiDownload) { | 1144 IN_PROC_BROWSER_TEST_F(DownloadTest, MultiDownload) { |
1497 ASSERT_TRUE(InitialSetup(false)); | 1145 ASSERT_TRUE(InitialSetup(false)); |
1498 EXPECT_EQ(1, browser()->tab_count()); | 1146 EXPECT_EQ(1, browser()->tab_count()); |
1499 | 1147 |
1500 // Create a download, wait until it's started, and confirm | 1148 // Create a download, wait until it's started, and confirm |
1501 // we're in the expected state. | 1149 // we're in the expected state. |
1502 scoped_ptr<DownloadsObserver> observer1(CreateInProgressWaiter(browser(), 1)); | 1150 scoped_ptr<DownloadTestObserver> observer1( |
| 1151 CreateInProgressWaiter(browser(), 1)); |
1503 ui_test_utils::NavigateToURL( | 1152 ui_test_utils::NavigateToURL( |
1504 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 1153 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); |
1505 observer1->WaitForFinished(); | 1154 observer1->WaitForFinished(); |
1506 | 1155 |
1507 std::vector<DownloadItem*> downloads; | 1156 std::vector<DownloadItem*> downloads; |
1508 browser()->profile()->GetDownloadManager()->SearchDownloads( | 1157 browser()->profile()->GetDownloadManager()->SearchDownloads( |
1509 string16(), &downloads); | 1158 string16(), &downloads); |
1510 ASSERT_EQ(1u, downloads.size()); | 1159 ASSERT_EQ(1u, downloads.size()); |
1511 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); | 1160 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); |
1512 CheckDownloadUI(browser(), true, true, FilePath()); | 1161 CheckDownloadUI(browser(), true, true, FilePath()); |
(...skipping 13 matching lines...) Expand all Loading... |
1526 // We don't know the order of the downloads. | 1175 // We don't know the order of the downloads. |
1527 DownloadItem* download2 = downloads[(download1 == downloads[0]) ? 1 : 0]; | 1176 DownloadItem* download2 = downloads[(download1 == downloads[0]) ? 1 : 0]; |
1528 | 1177 |
1529 ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->state()); | 1178 ASSERT_EQ(DownloadItem::IN_PROGRESS, download1->state()); |
1530 ASSERT_EQ(DownloadItem::COMPLETE, download2->state()); | 1179 ASSERT_EQ(DownloadItem::COMPLETE, download2->state()); |
1531 // The download shelf should be open. | 1180 // The download shelf should be open. |
1532 CheckDownloadUI(browser(), true, true, FilePath()); | 1181 CheckDownloadUI(browser(), true, true, FilePath()); |
1533 | 1182 |
1534 // Allow the first request to finish. We do this by loading a third URL | 1183 // Allow the first request to finish. We do this by loading a third URL |
1535 // in a separate tab. | 1184 // in a separate tab. |
1536 scoped_ptr<DownloadsObserver> observer2(CreateWaiter(browser(), 1)); | 1185 scoped_ptr<DownloadTestObserver> observer2(CreateWaiter(browser(), 1)); |
1537 GURL finish_url(URLRequestSlowDownloadJob::kFinishDownloadUrl); | 1186 GURL finish_url(URLRequestSlowDownloadJob::kFinishDownloadUrl); |
1538 ui_test_utils::NavigateToURLWithDisposition( | 1187 ui_test_utils::NavigateToURLWithDisposition( |
1539 browser(), | 1188 browser(), |
1540 finish_url, | 1189 finish_url, |
1541 NEW_FOREGROUND_TAB, | 1190 NEW_FOREGROUND_TAB, |
1542 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); | 1191 ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
1543 observer2->WaitForFinished(); // Wait for the third request. | 1192 observer2->WaitForFinished(); // Wait for the third request. |
1544 | 1193 |
1545 // Get the important info from other threads and check it. | 1194 // Get the important info from other threads and check it. |
1546 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); | 1195 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); |
(...skipping 14 matching lines...) Expand all Loading... |
1561 | 1210 |
1562 FilePath file2(download2->full_path()); | 1211 FilePath file2(download2->full_path()); |
1563 ASSERT_TRUE(file_util::ContentsEqual(OriginFile(file), file2)); | 1212 ASSERT_TRUE(file_util::ContentsEqual(OriginFile(file), file2)); |
1564 } | 1213 } |
1565 | 1214 |
1566 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { | 1215 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { |
1567 ASSERT_TRUE(InitialSetup(false)); | 1216 ASSERT_TRUE(InitialSetup(false)); |
1568 EXPECT_EQ(1, browser()->tab_count()); | 1217 EXPECT_EQ(1, browser()->tab_count()); |
1569 | 1218 |
1570 // TODO(rdsmith): Fragile code warning! The code below relies on the | 1219 // TODO(rdsmith): Fragile code warning! The code below relies on the |
1571 // DownloadsObserver only finishing when the new download has reached | 1220 // DownloadTestObserver only finishing when the new download has reached |
1572 // the state of being entered into the history and being user-visible | 1221 // the state of being entered into the history and being user-visible |
1573 // (that's what's required for the Remove to be valid and for the | 1222 // (that's what's required for the Remove to be valid and for the |
1574 // download shelf to be visible). By the pure semantics of | 1223 // download shelf to be visible). By the pure semantics of |
1575 // DownloadsObserver, that's not guaranteed; DownloadItems are created | 1224 // DownloadTestObserver, that's not guaranteed; DownloadItems are created |
1576 // in the IN_PROGRESS state and made known to the DownloadManager | 1225 // in the IN_PROGRESS state and made known to the DownloadManager |
1577 // immediately, so any ModelChanged event on the DownloadManager after | 1226 // immediately, so any ModelChanged event on the DownloadManager after |
1578 // navigation would allow the observer to return. However, the only | 1227 // navigation would allow the observer to return. However, the only |
1579 // ModelChanged() event the code will currently fire is in | 1228 // ModelChanged() event the code will currently fire is in |
1580 // OnCreateDownloadEntryComplete, at which point the download item will | 1229 // OnCreateDownloadEntryComplete, at which point the download item will |
1581 // be in the state we need. | 1230 // be in the state we need. |
1582 // The right way to fix this is to create finer grained states on the | 1231 // The right way to fix this is to create finer grained states on the |
1583 // DownloadItem, and wait for the state that indicates the item has been | 1232 // DownloadItem, and wait for the state that indicates the item has been |
1584 // entered in the history and made visible in the UI. | 1233 // entered in the history and made visible in the UI. |
1585 | 1234 |
1586 // Create a download, wait until it's started, and confirm | 1235 // Create a download, wait until it's started, and confirm |
1587 // we're in the expected state. | 1236 // we're in the expected state. |
1588 scoped_ptr<DownloadsObserver> observer( | 1237 scoped_ptr<DownloadTestObserver> observer( |
1589 CreateInProgressWaiter(browser(), 1)); | 1238 CreateInProgressWaiter(browser(), 1)); |
1590 ui_test_utils::NavigateToURL( | 1239 ui_test_utils::NavigateToURL( |
1591 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); | 1240 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); |
1592 observer->WaitForFinished(); | 1241 observer->WaitForFinished(); |
1593 | 1242 |
1594 std::vector<DownloadItem*> downloads; | 1243 std::vector<DownloadItem*> downloads; |
1595 DownloadManagerForBrowser(browser())->SearchDownloads( | 1244 DownloadManagerForBrowser(browser())->SearchDownloads( |
1596 string16(), &downloads); | 1245 string16(), &downloads); |
1597 ASSERT_EQ(1u, downloads.size()); | 1246 ASSERT_EQ(1u, downloads.size()); |
1598 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); | 1247 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); |
1599 CheckDownloadUI(browser(), true, true, FilePath()); | 1248 CheckDownloadUI(browser(), true, true, FilePath()); |
1600 | 1249 |
1601 // Cancel the download and wait for download system quiesce. | 1250 // Cancel the download and wait for download system quiesce. |
1602 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); | 1251 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); |
1603 scoped_refptr<DownloadsFlushObserver> flush_observer( | 1252 scoped_refptr<DownloadTestFlushObserver> flush_observer( |
1604 new DownloadsFlushObserver(DownloadManagerForBrowser(browser()))); | 1253 new DownloadTestFlushObserver( |
| 1254 DownloadManagerForBrowser(browser()))); |
1605 flush_observer->WaitForFlush(); | 1255 flush_observer->WaitForFlush(); |
1606 | 1256 |
1607 // Get the important info from other threads and check it. | 1257 // Get the important info from other threads and check it. |
1608 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); | 1258 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); |
1609 info->WaitForDataCollected(); | 1259 info->WaitForDataCollected(); |
1610 EXPECT_EQ(0, info->rdh_pending_requests()); | 1260 EXPECT_EQ(0, info->rdh_pending_requests()); |
1611 EXPECT_EQ(0, info->dfm_pending_downloads()); | 1261 EXPECT_EQ(0, info->dfm_pending_downloads()); |
1612 | 1262 |
1613 // Using "DownloadItem::Remove" follows the discard dangerous download path, | 1263 // Using "DownloadItem::Remove" follows the discard dangerous download path, |
1614 // which completely removes the browser from the shelf and closes the shelf | 1264 // which completely removes the browser from the shelf and closes the shelf |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1708 } | 1358 } |
1709 | 1359 |
1710 // Test to make sure the 'download' attribute in anchor tag is respected. | 1360 // Test to make sure the 'download' attribute in anchor tag is respected. |
1711 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) { | 1361 IN_PROC_BROWSER_TEST_F(DownloadTest, AnchorDownloadTag) { |
1712 ASSERT_TRUE(InitialSetup(false)); | 1362 ASSERT_TRUE(InitialSetup(false)); |
1713 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html")); | 1363 FilePath file(FILE_PATH_LITERAL("download-anchor-attrib.html")); |
1714 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); | 1364 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); |
1715 | 1365 |
1716 // Create a download, wait until it's complete, and confirm | 1366 // Create a download, wait until it's complete, and confirm |
1717 // we're in the expected state. | 1367 // we're in the expected state. |
1718 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser(), 1)); | 1368 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser(), 1)); |
1719 ui_test_utils::NavigateToURL(browser(), url); | 1369 ui_test_utils::NavigateToURL(browser(), url); |
1720 observer->WaitForFinished(); | 1370 observer->WaitForFinished(); |
1721 | 1371 |
1722 // Confirm the downloaded data exists. | 1372 // Confirm the downloaded data exists. |
1723 FilePath downloaded_file = GetDownloadDirectory(browser()); | 1373 FilePath downloaded_file = GetDownloadDirectory(browser()); |
1724 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png")); | 1374 downloaded_file = downloaded_file.Append(FILE_PATH_LITERAL("a_red_dot.png")); |
1725 EXPECT_TRUE(file_util::PathExists(downloaded_file)); | 1375 EXPECT_TRUE(file_util::PathExists(downloaded_file)); |
1726 } | 1376 } |
1727 | 1377 |
1728 // Test to make sure auto-open works. | 1378 // Test to make sure auto-open works. |
(...skipping 25 matching lines...) Expand all Loading... |
1754 // Download shelf should close. Download panel stays open on ChromeOS. | 1404 // Download shelf should close. Download panel stays open on ChromeOS. |
1755 CheckDownloadUI(browser(), false, true, FilePath()); | 1405 CheckDownloadUI(browser(), false, true, FilePath()); |
1756 } | 1406 } |
1757 | 1407 |
1758 // Download an extension. Expect a dangerous download warning. | 1408 // Download an extension. Expect a dangerous download warning. |
1759 // Deny the download. | 1409 // Deny the download. |
1760 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { | 1410 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { |
1761 ASSERT_TRUE(InitialSetup(false)); | 1411 ASSERT_TRUE(InitialSetup(false)); |
1762 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); | 1412 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); |
1763 | 1413 |
1764 scoped_ptr<DownloadsObserver> observer( | 1414 scoped_ptr<DownloadTestObserver> observer( |
1765 DangerousInstallWaiter(browser(), | 1415 DangerousInstallWaiter( |
1766 1, | 1416 browser(), 1, DownloadItem::CANCELLED, |
1767 DownloadItem::CANCELLED, | 1417 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY)); |
1768 ON_DANGEROUS_DOWNLOAD_DENY)); | |
1769 ui_test_utils::NavigateToURL(browser(), extension_url); | 1418 ui_test_utils::NavigateToURL(browser(), extension_url); |
1770 | 1419 |
1771 observer->WaitForFinished(); | 1420 observer->WaitForFinished(); |
1772 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); | 1421 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
1773 | 1422 |
1774 // Download shelf should close. Download panel stays open on ChromeOS. | 1423 // Download shelf should close. Download panel stays open on ChromeOS. |
1775 CheckDownloadUI(browser(), false, true, FilePath()); | 1424 CheckDownloadUI(browser(), false, true, FilePath()); |
1776 | 1425 |
1777 // Check that the CRX is not installed. | 1426 // Check that the CRX is not installed. |
1778 ExtensionService* extension_service = | 1427 ExtensionService* extension_service = |
1779 browser()->profile()->GetExtensionService(); | 1428 browser()->profile()->GetExtensionService(); |
1780 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); | 1429 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); |
1781 } | 1430 } |
1782 | 1431 |
1783 // Download an extension. Expect a dangerous download warning. | 1432 // Download an extension. Expect a dangerous download warning. |
1784 // Allow the download, deny the install. | 1433 // Allow the download, deny the install. |
1785 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { | 1434 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { |
1786 ASSERT_TRUE(InitialSetup(false)); | 1435 ASSERT_TRUE(InitialSetup(false)); |
1787 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); | 1436 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); |
1788 | 1437 |
1789 // Install a mock install UI that simulates a user denying permission to | 1438 // Install a mock install UI that simulates a user denying permission to |
1790 // finish the install. | 1439 // finish the install. |
1791 download_crx_util::SetMockInstallUIForTesting( | 1440 download_crx_util::SetMockInstallUIForTesting( |
1792 new MockAbortExtensionInstallUI()); | 1441 new MockAbortExtensionInstallUI()); |
1793 | 1442 |
1794 scoped_ptr<DownloadsObserver> observer( | 1443 scoped_ptr<DownloadTestObserver> observer( |
1795 DangerousInstallWaiter(browser(), | 1444 DangerousInstallWaiter( |
1796 1, | 1445 browser(), 1, DownloadItem::COMPLETE, |
1797 DownloadItem::COMPLETE, | 1446 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
1798 ON_DANGEROUS_DOWNLOAD_ACCEPT)); | |
1799 ui_test_utils::NavigateToURL(browser(), extension_url); | 1447 ui_test_utils::NavigateToURL(browser(), extension_url); |
1800 | 1448 |
1801 observer->WaitForFinished(); | 1449 observer->WaitForFinished(); |
1802 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); | 1450 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
1803 | 1451 |
1804 // Download shelf should close. Download panel stays open on ChromeOS. | 1452 // Download shelf should close. Download panel stays open on ChromeOS. |
1805 CheckDownloadUI(browser(), false, true, FilePath()); | 1453 CheckDownloadUI(browser(), false, true, FilePath()); |
1806 | 1454 |
1807 // Check that the extension was not installed. | 1455 // Check that the extension was not installed. |
1808 ExtensionService* extension_service = | 1456 ExtensionService* extension_service = |
1809 browser()->profile()->GetExtensionService(); | 1457 browser()->profile()->GetExtensionService(); |
1810 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); | 1458 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); |
1811 } | 1459 } |
1812 | 1460 |
1813 // Download an extension. Expect a dangerous download warning. | 1461 // Download an extension. Expect a dangerous download warning. |
1814 // Allow the download, and the install. | 1462 // Allow the download, and the install. |
1815 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { | 1463 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { |
1816 ASSERT_TRUE(InitialSetup(false)); | 1464 ASSERT_TRUE(InitialSetup(false)); |
1817 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); | 1465 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); |
1818 | 1466 |
1819 // Install a mock install UI that simulates a user allowing permission to | 1467 // Install a mock install UI that simulates a user allowing permission to |
1820 // finish the install. | 1468 // finish the install. |
1821 download_crx_util::SetMockInstallUIForTesting( | 1469 download_crx_util::SetMockInstallUIForTesting( |
1822 new MockAutoConfirmExtensionInstallUI(browser()->profile())); | 1470 new MockAutoConfirmExtensionInstallUI(browser()->profile())); |
1823 | 1471 |
1824 scoped_ptr<DownloadsObserver> observer( | 1472 scoped_ptr<DownloadTestObserver> observer( |
1825 DangerousInstallWaiter(browser(), | 1473 DangerousInstallWaiter( |
1826 1, | 1474 browser(), 1, DownloadItem::COMPLETE, |
1827 DownloadItem::COMPLETE, | 1475 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
1828 ON_DANGEROUS_DOWNLOAD_ACCEPT)); | |
1829 ui_test_utils::NavigateToURL(browser(), extension_url); | 1476 ui_test_utils::NavigateToURL(browser(), extension_url); |
1830 | 1477 |
1831 observer->WaitForFinished(); | 1478 observer->WaitForFinished(); |
1832 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); | 1479 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
1833 | 1480 |
1834 // Download shelf should close. Download panel stays open on ChromeOS. | 1481 // Download shelf should close. Download panel stays open on ChromeOS. |
1835 CheckDownloadUI(browser(), false, true, FilePath()); | 1482 CheckDownloadUI(browser(), false, true, FilePath()); |
1836 | 1483 |
1837 // Check that the extension was installed. | 1484 // Check that the extension was installed. |
1838 ExtensionService* extension_service = | 1485 ExtensionService* extension_service = |
1839 browser()->profile()->GetExtensionService(); | 1486 browser()->profile()->GetExtensionService(); |
1840 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false)); | 1487 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false)); |
1841 } | 1488 } |
1842 | 1489 |
1843 // Test installing a CRX that fails integrity checks. | 1490 // Test installing a CRX that fails integrity checks. |
1844 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { | 1491 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { |
1845 ASSERT_TRUE(InitialSetup(false)); | 1492 ASSERT_TRUE(InitialSetup(false)); |
1846 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx")); | 1493 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx")); |
1847 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file)); | 1494 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file)); |
1848 | 1495 |
1849 // Install a mock install UI that simulates a user allowing permission to | 1496 // Install a mock install UI that simulates a user allowing permission to |
1850 // finish the install, and dismisses any error message. We check that the | 1497 // finish the install, and dismisses any error message. We check that the |
1851 // install failed below. | 1498 // install failed below. |
1852 download_crx_util::SetMockInstallUIForTesting( | 1499 download_crx_util::SetMockInstallUIForTesting( |
1853 new MockAutoConfirmExtensionInstallUI(browser()->profile())); | 1500 new MockAutoConfirmExtensionInstallUI(browser()->profile())); |
1854 | 1501 |
1855 scoped_ptr<DownloadsObserver> observer( | 1502 scoped_ptr<DownloadTestObserver> observer( |
1856 DangerousInstallWaiter(browser(), | 1503 DangerousInstallWaiter( |
1857 1, | 1504 browser(), 1, DownloadItem::COMPLETE, |
1858 DownloadItem::COMPLETE, | 1505 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
1859 ON_DANGEROUS_DOWNLOAD_ACCEPT)); | |
1860 ui_test_utils::NavigateToURL(browser(), extension_url); | 1506 ui_test_utils::NavigateToURL(browser(), extension_url); |
1861 | 1507 |
1862 observer->WaitForFinished(); | 1508 observer->WaitForFinished(); |
1863 | 1509 |
1864 // Check that the extension was not installed. | 1510 // Check that the extension was not installed. |
1865 ExtensionService* extension_service = | 1511 ExtensionService* extension_service = |
1866 browser()->profile()->GetExtensionService(); | 1512 browser()->profile()->GetExtensionService(); |
1867 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); | 1513 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); |
1868 } | 1514 } |
1869 | 1515 |
1870 // Install a large (100kb) theme. | 1516 // Install a large (100kb) theme. |
1871 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { | 1517 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { |
1872 ASSERT_TRUE(InitialSetup(false)); | 1518 ASSERT_TRUE(InitialSetup(false)); |
1873 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath)); | 1519 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath)); |
1874 | 1520 |
1875 // Install a mock install UI that simulates a user allowing permission to | 1521 // Install a mock install UI that simulates a user allowing permission to |
1876 // finish the install. | 1522 // finish the install. |
1877 download_crx_util::SetMockInstallUIForTesting( | 1523 download_crx_util::SetMockInstallUIForTesting( |
1878 new MockAutoConfirmExtensionInstallUI(browser()->profile())); | 1524 new MockAutoConfirmExtensionInstallUI(browser()->profile())); |
1879 | 1525 |
1880 scoped_ptr<DownloadsObserver> observer( | 1526 scoped_ptr<DownloadTestObserver> observer( |
1881 DangerousInstallWaiter(browser(), | 1527 DangerousInstallWaiter( |
1882 1, | 1528 browser(), 1, DownloadItem::COMPLETE, |
1883 DownloadItem::COMPLETE, | 1529 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT)); |
1884 ON_DANGEROUS_DOWNLOAD_ACCEPT)); | |
1885 ui_test_utils::NavigateToURL(browser(), extension_url); | 1530 ui_test_utils::NavigateToURL(browser(), extension_url); |
1886 | 1531 |
1887 observer->WaitForFinished(); | 1532 observer->WaitForFinished(); |
1888 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); | 1533 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); |
1889 | 1534 |
1890 // Download shelf should close. Download panel stays open on ChromeOS. | 1535 // Download shelf should close. Download panel stays open on ChromeOS. |
1891 CheckDownloadUI(browser(), false, true, FilePath()); | 1536 CheckDownloadUI(browser(), false, true, FilePath()); |
1892 | 1537 |
1893 // Check that the extension was installed. | 1538 // Check that the extension was installed. |
1894 ExtensionService* extension_service = | 1539 ExtensionService* extension_service = |
1895 browser()->profile()->GetExtensionService(); | 1540 browser()->profile()->GetExtensionService(); |
1896 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false)); | 1541 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false)); |
1897 } | 1542 } |
OLD | NEW |