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

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: Fix compiler warning. Created 9 years, 5 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_file_manager.h" 15 #include "chrome/browser/download/download_file_manager.h"
16 #include "chrome/browser/download/download_history.h" 16 #include "chrome/browser/download/download_history.h"
17 #include "chrome/browser/download/download_item.h" 17 #include "chrome/browser/download/download_item.h"
18 #include "chrome/browser/download/download_manager.h" 18 #include "chrome/browser/download/download_manager.h"
19 #include "chrome/browser/download/download_prefs.h" 19 #include "chrome/browser/download/download_prefs.h"
20 #include "chrome/browser/download/download_shelf.h" 20 #include "chrome/browser/download/download_shelf.h"
21 #include "chrome/browser/download/download_test_observer.h"
21 #include "chrome/browser/download/download_util.h" 22 #include "chrome/browser/download/download_util.h"
22 #include "chrome/browser/extensions/extension_install_ui.h" 23 #include "chrome/browser/extensions/extension_install_ui.h"
23 #include "chrome/browser/extensions/extension_service.h" 24 #include "chrome/browser/extensions/extension_service.h"
24 #include "chrome/browser/history/download_history_info.h" 25 #include "chrome/browser/history/download_history_info.h"
25 #include "chrome/browser/history/history.h" 26 #include "chrome/browser/history/history.h"
26 #include "chrome/browser/prefs/pref_service.h" 27 #include "chrome/browser/prefs/pref_service.h"
27 #include "chrome/browser/profiles/profile.h" 28 #include "chrome/browser/profiles/profile.h"
28 #include "chrome/browser/ui/browser.h" 29 #include "chrome/browser/ui/browser.h"
29 #include "chrome/browser/ui/browser_list.h" 30 #include "chrome/browser/ui/browser_list.h"
30 #include "chrome/browser/ui/browser_window.h" 31 #include "chrome/browser/ui/browser_window.h"
(...skipping 15 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 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
569 DownloadPrefs* GetDownloadPrefs(Browser* browser) { 186 DownloadPrefs* GetDownloadPrefs(Browser* browser) {
570 return browser->profile()->GetDownloadManager()->download_prefs(); 187 return browser->profile()->GetDownloadManager()->download_prefs();
571 } 188 }
572 189
573 FilePath GetDownloadDirectory(Browser* browser) { 190 FilePath GetDownloadDirectory(Browser* browser) {
574 DownloadManager* download_mananger = 191 DownloadManager* download_mananger =
575 browser->profile()->GetDownloadManager(); 192 browser->profile()->GetDownloadManager();
576 return download_mananger->download_prefs()->download_path(); 193 return download_mananger->download_prefs()->download_path();
577 } 194 }
578 195
579 // Create a DownloadsObserver that will wait for the 196 // Create a DownloadTestObserver that will wait for the
580 // specified number of downloads to finish. 197 // specified number of downloads to finish.
581 DownloadsObserver* CreateWaiter(Browser* browser, int num_downloads) { 198 DownloadTestObserver* CreateWaiter(Browser* browser, int num_downloads) {
582 DownloadManager* download_manager = 199 DownloadManager* download_manager =
583 browser->profile()->GetDownloadManager(); 200 browser->profile()->GetDownloadManager();
584 return new DownloadsObserver( 201 return new DownloadTestObserver(
585 download_manager, num_downloads, 202 download_manager, num_downloads,
586 DownloadItem::COMPLETE, // Really done 203 DownloadItem::COMPLETE, // Really done
587 false, // Bail on select file 204 false, // Bail on select file
588 ON_DANGEROUS_DOWNLOAD_FAIL); 205 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
589 } 206 }
590 207
591 // Create a DownloadsObserver that will wait for the 208 // Create a DownloadTestObserver that will wait for the
592 // specified number of downloads to start. 209 // specified number of downloads to start.
593 DownloadsObserver* CreateInProgressWaiter(Browser* browser, 210 DownloadTestObserver* CreateInProgressWaiter(Browser* browser,
594 int num_downloads) { 211 int num_downloads) {
595 DownloadManager* download_manager = 212 DownloadManager* download_manager =
596 browser->profile()->GetDownloadManager(); 213 browser->profile()->GetDownloadManager();
597 return new DownloadsObserver( 214 return new DownloadTestObserver(
598 download_manager, num_downloads, 215 download_manager, num_downloads,
599 DownloadItem::IN_PROGRESS, // Has started 216 DownloadItem::IN_PROGRESS, // Has started
600 true, // Bail on select file 217 true, // Bail on select file
601 ON_DANGEROUS_DOWNLOAD_FAIL); 218 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_FAIL);
602 } 219 }
603 220
604 // Create a DownloadsObserver that will wait for the 221 // Create a DownloadTestObserver that will wait for the
605 // specified number of downloads to finish, or for 222 // specified number of downloads to finish, or for
606 // a dangerous download warning to be shown. 223 // a dangerous download warning to be shown.
607 DownloadsObserver* DangerousInstallWaiter( 224 DownloadTestObserver* DangerousInstallWaiter(
608 Browser* browser, 225 Browser* browser,
609 int num_downloads, 226 int num_downloads,
610 DownloadItem::DownloadState final_state, 227 DownloadItem::DownloadState final_state,
611 DangerousDownloadAction dangerous_download_action) { 228 DownloadTestObserver::DangerousDownloadAction dangerous_download_action) {
612 DownloadManager* download_manager = 229 DownloadManager* download_manager =
613 browser->profile()->GetDownloadManager(); 230 browser->profile()->GetDownloadManager();
614 return new DownloadsObserver( 231 return new DownloadTestObserver(
615 download_manager, num_downloads, 232 download_manager, num_downloads,
616 final_state, 233 final_state,
617 true, // Bail on select file 234 true, // Bail on select file
618 dangerous_download_action); 235 dangerous_download_action);
619 } 236 }
620 237
621 // Download |url|, then wait for the download to finish. 238 // Download |url|, then wait for the download to finish.
622 // |disposition| indicates where the navigation occurs (current tab, new 239 // |disposition| indicates where the navigation occurs (current tab, new
623 // foreground tab, etc). 240 // foreground tab, etc).
624 // |expectation| indicates whether or not a Select File dialog should be 241 // |expectation| indicates whether or not a Select File dialog should be
625 // open when the download is finished, or if we don't care. 242 // open when the download is finished, or if we don't care.
626 // If the dialog appears, the routine exits. The only effect |expectation| 243 // If the dialog appears, the routine exits. The only effect |expectation|
627 // has is whether or not the test succeeds. 244 // has is whether or not the test succeeds.
628 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more 245 // |browser_test_flags| indicate what to wait for, and is an OR of 0 or more
629 // values in the ui_test_utils::BrowserTestWaitFlags enum. 246 // values in the ui_test_utils::BrowserTestWaitFlags enum.
630 void DownloadAndWaitWithDisposition(Browser* browser, 247 void DownloadAndWaitWithDisposition(Browser* browser,
631 const GURL& url, 248 const GURL& url,
632 WindowOpenDisposition disposition, 249 WindowOpenDisposition disposition,
633 SelectExpectation expectation, 250 SelectExpectation expectation,
634 int browser_test_flags) { 251 int browser_test_flags) {
635 // Setup notification, navigate, and block. 252 // Setup notification, navigate, and block.
636 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 253 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
637 // This call will block until the condition specified by 254 // This call will block until the condition specified by
638 // |browser_test_flags|, but will not wait for the download to finish. 255 // |browser_test_flags|, but will not wait for the download to finish.
639 ui_test_utils::NavigateToURLWithDisposition(browser, 256 ui_test_utils::NavigateToURLWithDisposition(browser,
640 url, 257 url,
641 disposition, 258 disposition,
642 browser_test_flags); 259 browser_test_flags);
643 // Waits for the download to complete. 260 // Waits for the download to complete.
644 observer->WaitForFinished(); 261 observer->WaitForFinished();
645 262
646 // If specified, check the state of the select file dialog. 263 // If specified, check the state of the select file dialog.
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
717 // |expected_title_finished| need to be checked. 334 // |expected_title_finished| need to be checked.
718 FilePath filename; 335 FilePath filename;
719 net::FileURLToFilePath(url, &filename); 336 net::FileURLToFilePath(url, &filename);
720 string16 expected_title_in_progress( 337 string16 expected_title_in_progress(
721 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName()); 338 ASCIIToUTF16(partial_indication) + filename.LossyDisplayName());
722 string16 expected_title_finished( 339 string16 expected_title_finished(
723 ASCIIToUTF16(total_indication) + filename.LossyDisplayName()); 340 ASCIIToUTF16(total_indication) + filename.LossyDisplayName());
724 341
725 // Download a partial web page in a background tab and wait. 342 // Download a partial web page in a background tab and wait.
726 // The mock system will not complete until it gets a special URL. 343 // The mock system will not complete until it gets a special URL.
727 scoped_ptr<DownloadsObserver> observer(CreateWaiter(browser, 1)); 344 scoped_ptr<DownloadTestObserver> observer(CreateWaiter(browser, 1));
728 ui_test_utils::NavigateToURL(browser, url); 345 ui_test_utils::NavigateToURL(browser, url);
729 346
730 // TODO(ahendrickson): check download status text before downloading. 347 // TODO(ahendrickson): check download status text before downloading.
731 // Need to: 348 // Need to:
732 // - Add a member function to the |DownloadShelf| interface class, that 349 // - Add a member function to the |DownloadShelf| interface class, that
733 // indicates how many members it has. 350 // indicates how many members it has.
734 // - Add a member function to |DownloadShelf| to get the status text 351 // - Add a member function to |DownloadShelf| to get the status text
735 // of a given member (for example, via the name in |DownloadItemView|'s 352 // of a given member (for example, via the name in |DownloadItemView|'s
736 // GetAccessibleState() member function), by index. 353 // GetAccessibleState() member function), by index.
737 // - Iterate over browser->window()->GetDownloadShelf()'s members 354 // - Iterate over browser->window()->GetDownloadShelf()'s members
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
978 CheckDownload(browser(), file, file); 595 CheckDownload(browser(), file, file);
979 CheckDownloadUI(browser(), true, true, file); 596 CheckDownloadUI(browser(), true, true, file);
980 } 597 }
981 #endif 598 #endif
982 599
983 // Put up a Select File dialog when the file is downloaded, due to its MIME 600 // Put up a Select File dialog when the file is downloaded, due to its MIME
984 // type. 601 // type.
985 // 602 //
986 // This test runs correctly, but leaves behind turds in the test user's 603 // This test runs correctly, but leaves behind turds in the test user's
987 // download directory because of http://crbug.com/62099. No big loss; it 604 // download directory because of http://crbug.com/62099. No big loss; it
988 // was primarily confirming DownloadsObserver wait on select file dialog 605 // was primarily confirming DownloadTestObserver wait on select file dialog
989 // functionality anyway. 606 // functionality anyway.
990 IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DownloadMimeTypeSelect) { 607 IN_PROC_BROWSER_TEST_F(DownloadTest, DISABLED_DownloadMimeTypeSelect) {
991 ASSERT_TRUE(InitialSetup(true)); 608 ASSERT_TRUE(InitialSetup(true));
992 FilePath file(FILE_PATH_LITERAL("download-test1.lib")); 609 FilePath file(FILE_PATH_LITERAL("download-test1.lib"));
993 GURL url(URLRequestMockHTTPJob::GetMockUrl(file)); 610 GURL url(URLRequestMockHTTPJob::GetMockUrl(file));
994 611
995 // Download the file and wait. We expect the Select File dialog to appear 612 // Download the file and wait. We expect the Select File dialog to appear
996 // due to the MIME type. 613 // due to the MIME type.
997 DownloadAndWait(browser(), url, EXPECT_SELECT_DIALOG); 614 DownloadAndWait(browser(), url, EXPECT_SELECT_DIALOG);
998 615
(...skipping 401 matching lines...) Expand 10 before | Expand all | Expand 10 after
1400 CheckDownloadUI(browser(), false, true, file); 1017 CheckDownloadUI(browser(), false, true, file);
1401 1018
1402 CheckDownload(browser(), file, file); 1019 CheckDownload(browser(), file, file);
1403 } 1020 }
1404 1021
1405 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) { 1022 IN_PROC_BROWSER_TEST_F(DownloadTest, DownloadCancelled) {
1406 ASSERT_TRUE(InitialSetup(false)); 1023 ASSERT_TRUE(InitialSetup(false));
1407 EXPECT_EQ(1, browser()->tab_count()); 1024 EXPECT_EQ(1, browser()->tab_count());
1408 1025
1409 // TODO(rdsmith): Fragile code warning! The code below relies on the 1026 // TODO(rdsmith): Fragile code warning! The code below relies on the
1410 // DownloadsObserver only finishing when the new download has reached 1027 // DownloadTestObserver only finishing when the new download has reached
1411 // the state of being entered into the history and being user-visible 1028 // the state of being entered into the history and being user-visible
1412 // (that's what's required for the Remove to be valid and for the 1029 // (that's what's required for the Remove to be valid and for the
1413 // download shelf to be visible). By the pure semantics of 1030 // download shelf to be visible). By the pure semantics of
1414 // DownloadsObserver, that's not guaranteed; DownloadItems are created 1031 // DownloadTestObserver, that's not guaranteed; DownloadItems are created
1415 // in the IN_PROGRESS state and made known to the DownloadManager 1032 // in the IN_PROGRESS state and made known to the DownloadManager
1416 // immediately, so any ModelChanged event on the DownloadManager after 1033 // immediately, so any ModelChanged event on the DownloadManager after
1417 // navigation would allow the observer to return. However, the only 1034 // navigation would allow the observer to return. However, the only
1418 // ModelChanged() event the code will currently fire is in 1035 // ModelChanged() event the code will currently fire is in
1419 // OnCreateDownloadEntryComplete, at which point the download item will 1036 // OnCreateDownloadEntryComplete, at which point the download item will
1420 // be in the state we need. 1037 // be in the state we need.
1421 // The right way to fix this is to create finer grained states on the 1038 // The right way to fix this is to create finer grained states on the
1422 // DownloadItem, and wait for the state that indicates the item has been 1039 // DownloadItem, and wait for the state that indicates the item has been
1423 // entered in the history and made visible in the UI. 1040 // entered in the history and made visible in the UI.
1424 1041
1425 // Create a download, wait until it's started, and confirm 1042 // Create a download, wait until it's started, and confirm
1426 // we're in the expected state. 1043 // we're in the expected state.
1427 scoped_ptr<DownloadsObserver> observer( 1044 scoped_ptr<DownloadTestObserver> observer(
1428 CreateInProgressWaiter(browser(), 1)); 1045 CreateInProgressWaiter(browser(), 1));
1429 ui_test_utils::NavigateToURL( 1046 ui_test_utils::NavigateToURL(
1430 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl)); 1047 browser(), GURL(URLRequestSlowDownloadJob::kUnknownSizeUrl));
1431 observer->WaitForFinished(); 1048 observer->WaitForFinished();
1432 1049
1433 std::vector<DownloadItem*> downloads; 1050 std::vector<DownloadItem*> downloads;
1434 browser()->profile()->GetDownloadManager()->SearchDownloads( 1051 browser()->profile()->GetDownloadManager()->SearchDownloads(
1435 string16(), &downloads); 1052 string16(), &downloads);
1436 ASSERT_EQ(1u, downloads.size()); 1053 ASSERT_EQ(1u, downloads.size());
1437 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state()); 1054 ASSERT_EQ(DownloadItem::IN_PROGRESS, downloads[0]->state());
1438 CheckDownloadUI(browser(), true, true, FilePath()); 1055 CheckDownloadUI(browser(), true, true, FilePath());
1439 1056
1440 // Cancel the download and wait for download system quiesce. 1057 // Cancel the download and wait for download system quiesce.
1441 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD); 1058 downloads[0]->Delete(DownloadItem::DELETE_DUE_TO_USER_DISCARD);
1442 scoped_refptr<DownloadsFlushObserver> flush_observer( 1059 scoped_refptr<DownloadTestFlushObserver> flush_observer(
1443 new DownloadsFlushObserver(browser()->profile()->GetDownloadManager())); 1060 new DownloadTestFlushObserver(
1061 browser()->profile()->GetDownloadManager()));
1444 flush_observer->WaitForFlush(); 1062 flush_observer->WaitForFlush();
1445 1063
1446 // Get the important info from other threads and check it. 1064 // Get the important info from other threads and check it.
1447 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector()); 1065 scoped_refptr<CancelTestDataCollector> info(new CancelTestDataCollector());
1448 info->WaitForDataCollected(); 1066 info->WaitForDataCollected();
1449 EXPECT_EQ(0, info->rdh_pending_requests()); 1067 EXPECT_EQ(0, info->rdh_pending_requests());
1450 EXPECT_EQ(0, info->dfm_pending_downloads()); 1068 EXPECT_EQ(0, info->dfm_pending_downloads());
1451 1069
1452 // Using "DownloadItem::Remove" follows the discard dangerous download path, 1070 // Using "DownloadItem::Remove" follows the discard dangerous download path,
1453 // which completely removes the browser from the shelf and closes the shelf 1071 // which completely removes the browser from the shelf and closes the shelf
(...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after
1577 // Download shelf should close. Download panel stays open on ChromeOS. 1195 // Download shelf should close. Download panel stays open on ChromeOS.
1578 CheckDownloadUI(browser(), false, true, FilePath()); 1196 CheckDownloadUI(browser(), false, true, FilePath());
1579 } 1197 }
1580 1198
1581 // Download an extension. Expect a dangerous download warning. 1199 // Download an extension. Expect a dangerous download warning.
1582 // Deny the download. 1200 // Deny the download.
1583 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) { 1201 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxDenyInstall) {
1584 ASSERT_TRUE(InitialSetup(false)); 1202 ASSERT_TRUE(InitialSetup(false));
1585 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1203 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1586 1204
1587 scoped_ptr<DownloadsObserver> observer( 1205 scoped_ptr<DownloadTestObserver> observer(
1588 DangerousInstallWaiter(browser(), 1206 DangerousInstallWaiter(
1589 1, 1207 browser(), 1, DownloadItem::CANCELLED,
1590 DownloadItem::CANCELLED, 1208 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_DENY));
1591 ON_DANGEROUS_DOWNLOAD_DENY));
1592 ui_test_utils::NavigateToURL(browser(), extension_url); 1209 ui_test_utils::NavigateToURL(browser(), extension_url);
1593 1210
1594 observer->WaitForFinished(); 1211 observer->WaitForFinished();
1595 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1212 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1596 1213
1597 // Download shelf should close. Download panel stays open on ChromeOS. 1214 // Download shelf should close. Download panel stays open on ChromeOS.
1598 CheckDownloadUI(browser(), false, true, FilePath()); 1215 CheckDownloadUI(browser(), false, true, FilePath());
1599 1216
1600 // Check that the CRX is not installed. 1217 // Check that the CRX is not installed.
1601 ExtensionService* extension_service = 1218 ExtensionService* extension_service =
1602 browser()->profile()->GetExtensionService(); 1219 browser()->profile()->GetExtensionService();
1603 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1220 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1604 } 1221 }
1605 1222
1606 // Download an extension. Expect a dangerous download warning. 1223 // Download an extension. Expect a dangerous download warning.
1607 // Allow the download, deny the install. 1224 // Allow the download, deny the install.
1608 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) { 1225 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallDenysPermissions) {
1609 ASSERT_TRUE(InitialSetup(false)); 1226 ASSERT_TRUE(InitialSetup(false));
1610 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1227 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1611 1228
1612 // Install a mock install UI that simulates a user denying permission to 1229 // Install a mock install UI that simulates a user denying permission to
1613 // finish the install. 1230 // finish the install.
1614 download_crx_util::SetMockInstallUIForTesting( 1231 download_crx_util::SetMockInstallUIForTesting(
1615 new MockAbortExtensionInstallUI()); 1232 new MockAbortExtensionInstallUI());
1616 1233
1617 scoped_ptr<DownloadsObserver> observer( 1234 scoped_ptr<DownloadTestObserver> observer(
1618 DangerousInstallWaiter(browser(), 1235 DangerousInstallWaiter(
1619 1, 1236 browser(), 1, DownloadItem::COMPLETE,
1620 DownloadItem::COMPLETE, 1237 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1621 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1622 ui_test_utils::NavigateToURL(browser(), extension_url); 1238 ui_test_utils::NavigateToURL(browser(), extension_url);
1623 1239
1624 observer->WaitForFinished(); 1240 observer->WaitForFinished();
1625 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1241 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1626 1242
1627 // Download shelf should close. Download panel stays open on ChromeOS. 1243 // Download shelf should close. Download panel stays open on ChromeOS.
1628 CheckDownloadUI(browser(), false, true, FilePath()); 1244 CheckDownloadUI(browser(), false, true, FilePath());
1629 1245
1630 // Check that the extension was not installed. 1246 // Check that the extension was not installed.
1631 ExtensionService* extension_service = 1247 ExtensionService* extension_service =
1632 browser()->profile()->GetExtensionService(); 1248 browser()->profile()->GetExtensionService();
1633 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1249 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1634 } 1250 }
1635 1251
1636 // Download an extension. Expect a dangerous download warning. 1252 // Download an extension. Expect a dangerous download warning.
1637 // Allow the download, and the install. 1253 // Allow the download, and the install.
1638 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) { 1254 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInstallAcceptPermissions) {
1639 ASSERT_TRUE(InitialSetup(false)); 1255 ASSERT_TRUE(InitialSetup(false));
1640 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath)); 1256 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kGoodCrxPath));
1641 1257
1642 // Install a mock install UI that simulates a user allowing permission to 1258 // Install a mock install UI that simulates a user allowing permission to
1643 // finish the install. 1259 // finish the install.
1644 download_crx_util::SetMockInstallUIForTesting( 1260 download_crx_util::SetMockInstallUIForTesting(
1645 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1261 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1646 1262
1647 scoped_ptr<DownloadsObserver> observer( 1263 scoped_ptr<DownloadTestObserver> observer(
1648 DangerousInstallWaiter(browser(), 1264 DangerousInstallWaiter(
1649 1, 1265 browser(), 1, DownloadItem::COMPLETE,
1650 DownloadItem::COMPLETE, 1266 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1651 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1652 ui_test_utils::NavigateToURL(browser(), extension_url); 1267 ui_test_utils::NavigateToURL(browser(), extension_url);
1653 1268
1654 observer->WaitForFinished(); 1269 observer->WaitForFinished();
1655 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1270 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1656 1271
1657 // Download shelf should close. Download panel stays open on ChromeOS. 1272 // Download shelf should close. Download panel stays open on ChromeOS.
1658 CheckDownloadUI(browser(), false, true, FilePath()); 1273 CheckDownloadUI(browser(), false, true, FilePath());
1659 1274
1660 // Check that the extension was installed. 1275 // Check that the extension was installed.
1661 ExtensionService* extension_service = 1276 ExtensionService* extension_service =
1662 browser()->profile()->GetExtensionService(); 1277 browser()->profile()->GetExtensionService();
1663 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false)); 1278 ASSERT_TRUE(extension_service->GetExtensionById(kGoodCrxId, false));
1664 } 1279 }
1665 1280
1666 // Test installing a CRX that fails integrity checks. 1281 // Test installing a CRX that fails integrity checks.
1667 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) { 1282 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxInvalid) {
1668 ASSERT_TRUE(InitialSetup(false)); 1283 ASSERT_TRUE(InitialSetup(false));
1669 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx")); 1284 FilePath file(FILE_PATH_LITERAL("extensions/bad_signature.crx"));
1670 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file)); 1285 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(file));
1671 1286
1672 // Install a mock install UI that simulates a user allowing permission to 1287 // Install a mock install UI that simulates a user allowing permission to
1673 // finish the install, and dismisses any error message. We check that the 1288 // finish the install, and dismisses any error message. We check that the
1674 // install failed below. 1289 // install failed below.
1675 download_crx_util::SetMockInstallUIForTesting( 1290 download_crx_util::SetMockInstallUIForTesting(
1676 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1291 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1677 1292
1678 scoped_ptr<DownloadsObserver> observer( 1293 scoped_ptr<DownloadTestObserver> observer(
1679 DangerousInstallWaiter(browser(), 1294 DangerousInstallWaiter(
1680 1, 1295 browser(), 1, DownloadItem::COMPLETE,
1681 DownloadItem::COMPLETE, 1296 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1682 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1683 ui_test_utils::NavigateToURL(browser(), extension_url); 1297 ui_test_utils::NavigateToURL(browser(), extension_url);
1684 1298
1685 observer->WaitForFinished(); 1299 observer->WaitForFinished();
1686 1300
1687 // Check that the extension was not installed. 1301 // Check that the extension was not installed.
1688 ExtensionService* extension_service = 1302 ExtensionService* extension_service =
1689 browser()->profile()->GetExtensionService(); 1303 browser()->profile()->GetExtensionService();
1690 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false)); 1304 ASSERT_FALSE(extension_service->GetExtensionById(kGoodCrxId, false));
1691 } 1305 }
1692 1306
1693 // Install a large (100kb) theme. 1307 // Install a large (100kb) theme.
1694 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) { 1308 IN_PROC_BROWSER_TEST_F(DownloadTest, CrxLargeTheme) {
1695 ASSERT_TRUE(InitialSetup(false)); 1309 ASSERT_TRUE(InitialSetup(false));
1696 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath)); 1310 GURL extension_url(URLRequestMockHTTPJob::GetMockUrl(kLargeThemePath));
1697 1311
1698 // Install a mock install UI that simulates a user allowing permission to 1312 // Install a mock install UI that simulates a user allowing permission to
1699 // finish the install. 1313 // finish the install.
1700 download_crx_util::SetMockInstallUIForTesting( 1314 download_crx_util::SetMockInstallUIForTesting(
1701 new MockAutoConfirmExtensionInstallUI(browser()->profile())); 1315 new MockAutoConfirmExtensionInstallUI(browser()->profile()));
1702 1316
1703 scoped_ptr<DownloadsObserver> observer( 1317 scoped_ptr<DownloadTestObserver> observer(
1704 DangerousInstallWaiter(browser(), 1318 DangerousInstallWaiter(
1705 1, 1319 browser(), 1, DownloadItem::COMPLETE,
1706 DownloadItem::COMPLETE, 1320 DownloadTestObserver::ON_DANGEROUS_DOWNLOAD_ACCEPT));
1707 ON_DANGEROUS_DOWNLOAD_ACCEPT));
1708 ui_test_utils::NavigateToURL(browser(), extension_url); 1321 ui_test_utils::NavigateToURL(browser(), extension_url);
1709 1322
1710 observer->WaitForFinished(); 1323 observer->WaitForFinished();
1711 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen()); 1324 EXPECT_EQ(1u, observer->NumDangerousDownloadsSeen());
1712 1325
1713 // Download shelf should close. Download panel stays open on ChromeOS. 1326 // Download shelf should close. Download panel stays open on ChromeOS.
1714 CheckDownloadUI(browser(), false, true, FilePath()); 1327 CheckDownloadUI(browser(), false, true, FilePath());
1715 1328
1716 // Check that the extension was installed. 1329 // Check that the extension was installed.
1717 ExtensionService* extension_service = 1330 ExtensionService* extension_service =
1718 browser()->profile()->GetExtensionService(); 1331 browser()->profile()->GetExtensionService();
1719 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false)); 1332 ASSERT_TRUE(extension_service->GetExtensionById(kLargeThemeCrxId, false));
1720 } 1333 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/download/download_test_observer.h » ('j') | chrome/browser/profiles/profile.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698