// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "base/file_path.h" #include "base/file_util.h" #include "base/memory/scoped_temp_dir.h" #include "base/path_service.h" #include "chrome/app/chrome_command_ids.h" #include "chrome/browser/net/url_request_mock_http_job.h" #include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/download/download_tab_helper.h" #include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" #include "chrome/common/chrome_paths.h" #include "chrome/common/url_constants.h" #include "chrome/test/in_process_browser_test.h" #include "chrome/test/ui_test_utils.h" #include "content/browser/tab_contents/tab_contents.h" #include "content/common/notification_service.h" #include "testing/gtest/include/gtest/gtest.h" namespace { static const FilePath::CharType* kTestDir = FILE_PATH_LITERAL("save_page"); static const char* kAppendedExtension = #if defined(OS_WIN) ".htm"; #else ".html"; #endif class SavePageBrowserTest : public InProcessBrowserTest { protected: void SetUp() { ASSERT_TRUE(PathService::Get(chrome::DIR_TEST_DATA, &test_dir_)); ASSERT_TRUE(save_dir_.CreateUniqueTempDir()); InProcessBrowserTest::SetUp(); } GURL WaitForSavePackageToFinish() { ui_test_utils::TestNotificationObserver observer; ui_test_utils::RegisterAndWait(&observer, NotificationType::SAVE_PACKAGE_SUCCESSFULLY_FINISHED, NotificationService::AllSources()); return *Details<GURL>(observer.details()).ptr(); } // Path to directory containing test data. FilePath test_dir_; // Temporary directory we will save pages to. ScopedTempDir save_dir_; }; IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveHTMLOnly) { FilePath file_name(FILE_PATH_LITERAL("a.htm")); GURL url = URLRequestMockHTTPJob::GetMockUrl( FilePath(kTestDir).Append(file_name)); ui_test_utils::NavigateToURL(browser(), url); TabContentsWrapper* current_tab = browser()->GetSelectedTabContentsWrapper(); ASSERT_TRUE(current_tab); FilePath full_file_name = save_dir_.path().Append(file_name); FilePath dir = save_dir_.path().AppendASCII("a_files"); ASSERT_TRUE(current_tab->download_tab_helper()->SavePage( full_file_name, dir, SavePackage::SAVE_AS_ONLY_HTML)); EXPECT_EQ(url, WaitForSavePackageToFinish()); if (browser()->SupportsWindowFeature(Browser::FEATURE_DOWNLOADSHELF)) EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); EXPECT_TRUE(file_util::PathExists(full_file_name)); EXPECT_FALSE(file_util::PathExists(dir)); EXPECT_TRUE(file_util::ContentsEqual( test_dir_.Append(FilePath(kTestDir)).Append(file_name), full_file_name)); } IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveViewSourceHTMLOnly) { FilePath file_name(FILE_PATH_LITERAL("a.htm")); GURL view_source_url = URLRequestMockHTTPJob::GetMockViewSourceUrl( FilePath(kTestDir).Append(file_name)); GURL actual_page_url = URLRequestMockHTTPJob::GetMockUrl( FilePath(kTestDir).Append(file_name)); ui_test_utils::NavigateToURL(browser(), view_source_url); TabContentsWrapper* current_tab = browser()->GetSelectedTabContentsWrapper(); ASSERT_TRUE(current_tab); FilePath full_file_name = save_dir_.path().Append(file_name); FilePath dir = save_dir_.path().AppendASCII("a_files"); ASSERT_TRUE(current_tab->download_tab_helper()->SavePage( full_file_name, dir, SavePackage::SAVE_AS_ONLY_HTML)); EXPECT_EQ(actual_page_url, WaitForSavePackageToFinish()); if (browser()->SupportsWindowFeature(Browser::FEATURE_DOWNLOADSHELF)) EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); EXPECT_TRUE(file_util::PathExists(full_file_name)); EXPECT_FALSE(file_util::PathExists(dir)); EXPECT_TRUE(file_util::ContentsEqual( test_dir_.Append(FilePath(kTestDir)).Append(file_name), full_file_name)); } IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, SaveCompleteHTML) { FilePath file_name(FILE_PATH_LITERAL("b.htm")); GURL url = URLRequestMockHTTPJob::GetMockUrl( FilePath(kTestDir).Append(file_name)); ui_test_utils::NavigateToURL(browser(), url); TabContentsWrapper* current_tab = browser()->GetSelectedTabContentsWrapper(); ASSERT_TRUE(current_tab); FilePath full_file_name = save_dir_.path().Append(file_name); FilePath dir = save_dir_.path().AppendASCII("b_files"); ASSERT_TRUE(current_tab->download_tab_helper()->SavePage( full_file_name, dir, SavePackage::SAVE_AS_COMPLETE_HTML)); EXPECT_EQ(url, WaitForSavePackageToFinish()); if (browser()->SupportsWindowFeature(Browser::FEATURE_DOWNLOADSHELF)) EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); EXPECT_TRUE(file_util::PathExists(full_file_name)); EXPECT_TRUE(file_util::PathExists(dir)); EXPECT_TRUE(file_util::TextContentsEqual( test_dir_.Append(FilePath(kTestDir)).AppendASCII("b.saved1.htm"), full_file_name)); EXPECT_TRUE(file_util::ContentsEqual( test_dir_.Append(FilePath(kTestDir)).AppendASCII("1.png"), dir.AppendASCII("1.png"))); EXPECT_TRUE(file_util::ContentsEqual( test_dir_.Append(FilePath(kTestDir)).AppendASCII("1.css"), dir.AppendASCII("1.css"))); } IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, NoSave) { ui_test_utils::NavigateToURL(browser(), GURL(chrome::kAboutBlankURL)); ASSERT_TRUE(browser()->command_updater()->SupportsCommand(IDC_SAVE_PAGE)); EXPECT_FALSE(browser()->command_updater()->IsCommandEnabled(IDC_SAVE_PAGE)); } IN_PROC_BROWSER_TEST_F(SavePageBrowserTest, FileNameFromPageTitle) { FilePath file_name(FILE_PATH_LITERAL("b.htm")); GURL url = URLRequestMockHTTPJob::GetMockUrl( FilePath(kTestDir).Append(file_name)); ui_test_utils::NavigateToURL(browser(), url); FilePath full_file_name = save_dir_.path().AppendASCII( std::string("Test page for saving page feature") + kAppendedExtension); FilePath dir = save_dir_.path().AppendASCII( "Test page for saving page feature_files"); TabContentsWrapper* current_tab = browser()->GetSelectedTabContentsWrapper(); ASSERT_TRUE(current_tab); ASSERT_TRUE(current_tab->download_tab_helper()->SavePage( full_file_name, dir, SavePackage::SAVE_AS_COMPLETE_HTML)); EXPECT_EQ(url, WaitForSavePackageToFinish()); if (browser()->SupportsWindowFeature(Browser::FEATURE_DOWNLOADSHELF)) EXPECT_TRUE(browser()->window()->IsDownloadShelfVisible()); EXPECT_TRUE(file_util::PathExists(full_file_name)); EXPECT_TRUE(file_util::PathExists(dir)); EXPECT_TRUE(file_util::TextContentsEqual( test_dir_.Append(FilePath(kTestDir)).AppendASCII("b.saved2.htm"), full_file_name)); EXPECT_TRUE(file_util::ContentsEqual( test_dir_.Append(FilePath(kTestDir)).AppendASCII("1.png"), dir.AppendASCII("1.png"))); EXPECT_TRUE(file_util::ContentsEqual( test_dir_.Append(FilePath(kTestDir)).AppendASCII("1.css"), dir.AppendASCII("1.css"))); } } // namespace