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

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

Issue 10831412: Added some cancel/close tab tests to SavePackage. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/bind.h" 5 #include "base/bind.h"
6 #include "base/bind_helpers.h" 6 #include "base/bind_helpers.h"
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/file_util.h" 9 #include "base/file_util.h"
10 #include "base/path_service.h" 10 #include "base/path_service.h"
(...skipping 18 matching lines...) Expand all
29 #include "chrome/common/pref_names.h" 29 #include "chrome/common/pref_names.h"
30 #include "chrome/common/url_constants.h" 30 #include "chrome/common/url_constants.h"
31 #include "chrome/test/base/in_process_browser_test.h" 31 #include "chrome/test/base/in_process_browser_test.h"
32 #include "chrome/test/base/ui_test_utils.h" 32 #include "chrome/test/base/ui_test_utils.h"
33 #include "content/public/browser/download_item.h" 33 #include "content/public/browser/download_item.h"
34 #include "content/public/browser/download_manager.h" 34 #include "content/public/browser/download_manager.h"
35 #include "content/public/browser/download_persistent_store_info.h" 35 #include "content/public/browser/download_persistent_store_info.h"
36 #include "content/public/browser/notification_service.h" 36 #include "content/public/browser/notification_service.h"
37 #include "content/public/browser/notification_types.h" 37 #include "content/public/browser/notification_types.h"
38 #include "content/public/browser/web_contents.h" 38 #include "content/public/browser/web_contents.h"
39 #include "content/public/test/test_utils.h"
39 #include "content/test/net/url_request_mock_http_job.h" 40 #include "content/test/net/url_request_mock_http_job.h"
40 #include "testing/gtest/include/gtest/gtest.h" 41 #include "testing/gtest/include/gtest/gtest.h"
41 42
42 #if defined(OS_CHROMEOS) 43 #if defined(OS_CHROMEOS)
43 #include "chrome/browser/download/save_package_file_picker_chromeos.h" 44 #include "chrome/browser/download/save_package_file_picker_chromeos.h"
44 #else 45 #else
45 #include "chrome/browser/download/save_package_file_picker.h" 46 #include "chrome/browser/download/save_package_file_picker.h"
46 #endif 47 #endif
47 48
48 using content::BrowserContext; 49 using content::BrowserContext;
49 using content::BrowserThread; 50 using content::BrowserThread;
50 using content::DownloadItem; 51 using content::DownloadItem;
51 using content::DownloadManager; 52 using content::DownloadManager;
52 using content::DownloadPersistentStoreInfo; 53 using content::DownloadPersistentStoreInfo;
53 using content::WebContents; 54 using content::WebContents;
54 55
55 namespace { 56 namespace {
56 57
57 static const FilePath::CharType* kTestDir = FILE_PATH_LITERAL("save_page"); 58 static const FilePath::CharType* kTestDir = FILE_PATH_LITERAL("save_page");
58 59
59 static const char* kAppendedExtension = 60 static const char* kAppendedExtension =
60 #if defined(OS_WIN) 61 #if defined(OS_WIN)
61 ".htm"; 62 ".htm";
62 #else 63 #else
63 ".html"; 64 ".html";
64 #endif 65 #endif
65 66
66 } // namespace 67 } // namespace
67 68
69 // Loosely based on logic in DownloadTestObserver.
70 class DownloadItemCreatedObserver : public DownloadManager::Observer {
71 public:
72 explicit DownloadItemCreatedObserver(DownloadManager* manager)
73 : waiting_(false), manager_(manager), created_item_(NULL) {
74 manager->AddObserver(this);
75 }
76
77 ~DownloadItemCreatedObserver() {
78 if (manager_)
79 manager_->RemoveObserver(this);
80 }
81
82 // Wait for the first download item created after object creation.
83 // Note that this class provides no protection against the download
84 // being destroyed between creation and return of WaitForNewDownloadItem();
85 // the caller must guarantee that in some other fashion.
86 DownloadItem* WaitForNewDownloadItem() {
87 if (!manager_) {
88 // The manager went away before we were asked to wait; return
89 // what we have, even if it's null.
90 return created_item_;
91 }
92
93 if (!created_item_) {
94 waiting_ = true;
95 content::RunMessageLoop();
96 waiting_ = false;
97 }
98 return created_item_;
99 }
100
101 private:
102
103 // DownloadManager::Observer
104 void OnDownloadCreated(DownloadManager* manager, DownloadItem* item) {
105 DCHECK_EQ(manager, manager_);
106 if (!created_item_)
107 created_item_ = item;
108
109 if (waiting_)
110 MessageLoopForUI::current()->Quit();
111
112 manager_->RemoveObserver(this);
benjhayden 2012/08/21 20:00:24 Why do this here?
Randy Smith (Not in Mondays) 2012/08/21 22:00:37 We have no interest in hearing anything from the D
113 manager_ = NULL;
114 }
115
116 void ManagerGoingDownload(DownloadManager* manager) {
117 manager_->RemoveObserver(this);
118 manager_ = NULL;
119 if (waiting_)
120 MessageLoopForUI::current()->Quit();
121 }
122
123 bool waiting_;
124 DownloadManager* manager_;
125 DownloadItem* created_item_;
126
127 DISALLOW_COPY_AND_ASSIGN(DownloadItemCreatedObserver);
128 };
129
68 class SavePageBrowserTest : public InProcessBrowserTest { 130 class SavePageBrowserTest : public InProcessBrowserTest {
69 public: 131 public:
70 SavePageBrowserTest() {} 132 SavePageBrowserTest() {}
71 virtual ~SavePageBrowserTest(); 133 virtual ~SavePageBrowserTest();
72 134
73 protected: 135 protected:
74 void SetUp() OVERRIDE { 136 void SetUp() OVERRIDE {
75 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir_)); 137 ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir_));
76 ASSERT_TRUE(save_dir_.CreateUniqueTempDir()); 138 ASSERT_TRUE(save_dir_.CreateUniqueTempDir());
77 InProcessBrowserTest::SetUp(); 139 InProcessBrowserTest::SetUp();
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
225 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); 287 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
226 CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file. 288 CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file.
227 289
228 EXPECT_TRUE(file_util::PathExists(full_file_name)); 290 EXPECT_TRUE(file_util::PathExists(full_file_name));
229 EXPECT_FALSE(file_util::PathExists(dir)); 291 EXPECT_FALSE(file_util::PathExists(dir));
230 EXPECT_TRUE(file_util::ContentsEqual( 292 EXPECT_TRUE(file_util::ContentsEqual(
231 test_dir_.Append(FilePath(kTestDir)).Append(FILE_PATH_LITERAL("a.htm")), 293 test_dir_.Append(FilePath(kTestDir)).Append(FILE_PATH_LITERAL("a.htm")),
232 full_file_name)); 294 full_file_name));
233 } 295 }
234 296
297 IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyCancel) {
298 GURL url = NavigateToMockURL("a");
benjhayden 2012/08/21 20:00:24 I'm just curious. Why "GURL url = ..." instead of
Randy Smith (Not in Mondays) 2012/08/21 22:00:37 I don't think there's any difference at the C++ le
299 DownloadManager* manager(GetDownloadManager());
300 std::vector<DownloadItem*> downloads;
301 manager->SearchDownloads(string16(), &downloads);
302 ASSERT_EQ(0u, downloads.size());
303
304 FilePath full_file_name, dir;
305 GetDestinationPaths("a", &full_file_name, &dir);
306 DownloadItemCreatedObserver creation_observer(manager);
307 ASSERT_TRUE(GetCurrentTab()->SavePage(full_file_name, dir,
308 content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
309 DownloadItem* item = creation_observer.WaitForNewDownloadItem();
310 item->Cancel(true);
311
312 // TODO(rdsmith): Fix DII::Cancel() to actually cancel the save package.
313 // Currently it's ignored.
314 EXPECT_EQ(url, WaitForSavePackageToFinish());
315
316 EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible());
317 CheckDownloadHistory(url, full_file_name, 1); // a.htm is 1 file.
318
319 EXPECT_TRUE(file_util::PathExists(full_file_name));
320 EXPECT_FALSE(file_util::PathExists(dir));
321 EXPECT_TRUE(file_util::ContentsEqual(
322 test_dir_.Append(FilePath(kTestDir)).Append(FILE_PATH_LITERAL("a.htm")),
323 full_file_name));
324 }
325
326 IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnlyTabDestroy) {
327 GURL url = NavigateToMockURL("a");
328 DownloadManager* manager(GetDownloadManager());
329 std::vector<DownloadItem*> downloads;
330 manager->SearchDownloads(string16(), &downloads);
331 ASSERT_EQ(0u, downloads.size());
332
333 FilePath full_file_name, dir;
334 GetDestinationPaths("a", &full_file_name, &dir);
335 DownloadItemCreatedObserver creation_observer(manager);
336 ASSERT_TRUE(GetCurrentTab()->SavePage(full_file_name, dir,
337 content::SAVE_PAGE_TYPE_AS_ONLY_HTML));
338 DownloadItem* item = creation_observer.WaitForNewDownloadItem();
339
340 // Close the tab; does this cancel the download?
341 GetCurrentTab()->Close();
342 EXPECT_TRUE(item->IsCancelled());
343
344 EXPECT_FALSE(file_util::PathExists(full_file_name));
benjhayden 2012/08/21 20:00:24 What happens if you WaitForSavePackageToFinish()?
Randy Smith (Not in Mondays) 2012/08/21 22:00:37 Well, I didn't try it, but a tab close should resu
benjhayden 2012/08/22 13:23:13 If you think it would help your DFM CL. If not, th
Randy Smith (Not in Mondays) 2012/08/22 14:50:43 Nope; from the DFM perspective, the question is "D
345 EXPECT_FALSE(file_util::PathExists(dir));
346 }
347
235 IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveViewSourceHTMLOnly) { 348 IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveViewSourceHTMLOnly) {
236 FilePath file_name(FILE_PATH_LITERAL("a.htm")); 349 FilePath file_name(FILE_PATH_LITERAL("a.htm"));
237 GURL view_source_url = URLRequestMockHTTPJob::GetMockViewSourceUrl( 350 GURL view_source_url = URLRequestMockHTTPJob::GetMockViewSourceUrl(
238 FilePath(kTestDir).Append(file_name)); 351 FilePath(kTestDir).Append(file_name));
239 GURL actual_page_url = URLRequestMockHTTPJob::GetMockUrl( 352 GURL actual_page_url = URLRequestMockHTTPJob::GetMockUrl(
240 FilePath(kTestDir).Append(file_name)); 353 FilePath(kTestDir).Append(file_name));
241 ui_test_utils::NavigateToURL(browser(), view_source_url); 354 ui_test_utils::NavigateToURL(browser(), view_source_url);
242 355
243 FilePath full_file_name, dir; 356 FilePath full_file_name, dir;
244 GetDestinationPaths("a", &full_file_name, &dir); 357 GetDestinationPaths("a", &full_file_name, &dir);
(...skipping 163 matching lines...) Expand 10 before | Expand all | Expand 10 after
408 content::NotificationService::AllSources()); 521 content::NotificationService::AllSources());
409 chrome::SavePage(browser()); 522 chrome::SavePage(browser());
410 observer.Wait(); 523 observer.Wait();
411 CheckDownloadHistory(url, full_file_name, -1); 524 CheckDownloadHistory(url, full_file_name, -1);
412 525
413 EXPECT_TRUE(file_util::PathExists(full_file_name)); 526 EXPECT_TRUE(file_util::PathExists(full_file_name));
414 int64 actual_file_size = -1; 527 int64 actual_file_size = -1;
415 EXPECT_TRUE(file_util::GetFileSize(full_file_name, &actual_file_size)); 528 EXPECT_TRUE(file_util::GetFileSize(full_file_name, &actual_file_size));
416 EXPECT_LE(kFileSizeMin, actual_file_size); 529 EXPECT_LE(kFileSizeMin, actual_file_size);
417 } 530 }
OLDNEW
« no previous file with comments | « no previous file | content/browser/download/download_manager_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698