Chromium Code Reviews| Index: chrome/browser/printing/printing_layout_browsertest.cc |
| =================================================================== |
| --- chrome/browser/printing/printing_layout_browsertest.cc (revision 131326) |
| +++ chrome/browser/printing/printing_layout_browsertest.cc (working copy) |
| @@ -5,13 +5,25 @@ |
| #include "base/command_line.h" |
| #include "base/file_path.h" |
| #include "base/file_util.h" |
| +#include "base/message_loop.h" |
| +#include "base/path_service.h" |
| #include "base/process_util.h" |
| #include "base/string_util.h" |
| #include "base/test/test_file_util.h" |
| #include "base/threading/simple_thread.h" |
| #include "base/utf_string_conversions.h" |
| -#include "chrome/test/automation/tab_proxy.h" |
| -#include "chrome/test/ui/ui_test.h" |
| +#include "chrome/browser/printing/print_job.h" |
| +#include "chrome/browser/printing/print_view_manager.h" |
| +#include "chrome/browser/ui/browser.h" |
| +#include "chrome/browser/ui/tab_contents/tab_contents_wrapper.h" |
| +#include "chrome/common/chrome_paths.h" |
| +#include "chrome/common/chrome_switches.h" |
| +#include "chrome/common/chrome_notification_types.h" |
| +#include "chrome/test/base/in_process_browser_test.h" |
| +#include "chrome/test/base/ui_test_utils.h" |
| +#include "content/public/browser/notification_observer.h" |
| +#include "content/public/browser/notification_registrar.h" |
| +#include "content/public/browser/notification_service.h" |
| #include "net/test/test_server.h" |
| #include "printing/image.h" |
| #include "printing/printing_test.h" |
| @@ -23,32 +35,77 @@ |
| const char kGenerateSwitch[] = "print-layout-generate"; |
| const FilePath::CharType kDocRoot[] = FILE_PATH_LITERAL("chrome/test/data"); |
| -class PrintingLayoutTest : public PrintingTest<UITest> { |
| +class PrintingLayoutTest : public PrintingTest<InProcessBrowserTest>, |
| + public content::NotificationObserver { |
| public: |
| PrintingLayoutTest() { |
| - emf_path_ = browser_directory_.AppendASCII("metafile_dumps"); |
| - launch_arguments_.AppendSwitchPath("debug-print", emf_path_); |
| - show_window_ = true; |
| + FilePath browser_directory; |
| + PathService::Get(chrome::DIR_APP, &browser_directory); |
| + emf_path_ = browser_directory.AppendASCII("metafile_dumps"); |
| } |
| - virtual void SetUp() { |
| + virtual void SetUp() OVERRIDE { |
| // Make sure there is no left overs. |
| CleanupDumpDirectory(); |
| - UITest::SetUp(); |
| + InProcessBrowserTest::SetUp(); |
| } |
| - virtual void TearDown() { |
| - UITest::TearDown(); |
| + virtual void TearDown() OVERRIDE { |
| + InProcessBrowserTest::TearDown(); |
| file_util::Delete(emf_path_, true); |
| } |
| + virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { |
| + command_line->AppendSwitchPath(switches::kDebugPrint, emf_path_); |
| + } |
| + |
| protected: |
| void PrintNowTab() { |
| - scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| - ASSERT_TRUE(tab_proxy.get()); |
| - ASSERT_TRUE(tab_proxy->PrintNow()); |
| + registrar_.Add(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, |
| + content::NotificationService::AllSources()); |
| + |
| + content::WebContents* web_contents = browser()->GetSelectedWebContents(); |
|
Lei Zhang
2012/04/09 19:44:44
Just call browser()->GetSelectedTabContentsWrapper
jam
2012/04/09 20:16:22
Done.
|
| + TabContentsWrapper* wrapper = |
| + TabContentsWrapper::GetCurrentWrapperForContents(web_contents); |
| + wrapper->print_view_manager()->PrintNow(); |
| + ui_test_utils::RunMessageLoop(); |
| + registrar_.RemoveAll(); |
| } |
| + virtual void Observe(int type, |
| + const content::NotificationSource& source, |
| + const content::NotificationDetails& details) { |
| + DCHECK(type == chrome::NOTIFICATION_PRINT_JOB_EVENT); |
| + switch (content::Details<printing::JobEventDetails>(details)->type()) { |
| + case printing::JobEventDetails::JOB_DONE: { |
| + // Succeeded. |
| + MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
| + break; |
| + } |
| + case printing::JobEventDetails::USER_INIT_CANCELED: |
| + case printing::JobEventDetails::FAILED: { |
| + // Failed. |
| + ASSERT_TRUE(false); |
| + MessageLoop::current()->PostTask(FROM_HERE, MessageLoop::QuitClosure()); |
| + break; |
| + } |
| + case printing::JobEventDetails::NEW_DOC: |
| + case printing::JobEventDetails::USER_INIT_DONE: |
| + case printing::JobEventDetails::DEFAULT_INIT_DONE: |
| + case printing::JobEventDetails::NEW_PAGE: |
| + case printing::JobEventDetails::PAGE_DONE: |
| + case printing::JobEventDetails::DOC_DONE: |
| + case printing::JobEventDetails::ALL_PAGES_REQUESTED: { |
| + // Don't care. |
| + break; |
| + } |
| + default: { |
| + NOTREACHED(); |
| + break; |
| + } |
| + } |
| + } |
| + |
| // Finds the dump for the last print job and compares it to the data named |
| // |verification_name|. Compares the saved printed job pixels with the test |
| // data pixels and returns the percentage of different pixels; 0 for success, |
| @@ -60,7 +117,8 @@ |
| return 100.; |
| } |
| - FilePath base_path(test_data_directory_.AppendASCII("printing")); |
| + FilePath base_path(ui_test_utils::GetTestFilePath( |
| + FilePath().AppendASCII("printing"), FilePath())); |
|
Lei Zhang
2012/04/09 19:44:44
FilePath().AppendASCII("printing") -> FilePath(L"p
jam
2012/04/09 20:16:22
I didn't do it that way because that would make po
|
| FilePath emf(base_path.Append(verification_name + L".emf")); |
| FilePath png(base_path.Append(verification_name + L".png")); |
| @@ -110,8 +168,8 @@ |
| // Makes sure the directory exists and is empty. |
| void CleanupDumpDirectory() { |
| - EXPECT_TRUE(file_util::DieFileDie(emf_path(), true)); |
| - EXPECT_TRUE(file_util::CreateDirectory(emf_path())); |
| + EXPECT_TRUE(file_util::DieFileDie(emf_path_, true)); |
| + EXPECT_TRUE(file_util::CreateDirectory(emf_path_)); |
| } |
| // Returns if Clear Type is currently enabled. |
| @@ -136,7 +194,7 @@ |
| bool found_emf = false; |
| bool found_prn = false; |
| for (int i = 0; i < 100; ++i) { |
| - file_util::FileEnumerator enumerator(emf_path(), false, |
| + file_util::FileEnumerator enumerator(emf_path_, false, |
| file_util::FileEnumerator::FILES); |
| emf_file.clear(); |
| prn_file.clear(); |
| @@ -177,21 +235,12 @@ |
| return CommandLine::ForCurrentProcess()->HasSwitch(kGenerateSwitch); |
| } |
| - const FilePath& emf_path() const { return emf_path_; } |
| - |
| FilePath emf_path_; |
| + content::NotificationRegistrar registrar_; |
| DISALLOW_COPY_AND_ASSIGN(PrintingLayoutTest); |
| }; |
| -// Tests that don't need UI access. |
| -class PrintingLayoutTestHidden : public PrintingLayoutTest { |
| - public: |
| - PrintingLayoutTestHidden() { |
| - show_window_ = false; |
| - } |
| -}; |
| - |
| class PrintingLayoutTextTest : public PrintingLayoutTest { |
| typedef PrintingLayoutTest Parent; |
| public: |
| @@ -242,8 +291,8 @@ |
| // default button. |
| class DismissTheWindow : public base::DelegateSimpleThread::Delegate { |
| public: |
| - explicit DismissTheWindow(DWORD owner_process) |
| - : owner_process_(owner_process) { |
| + DismissTheWindow() |
| + : owner_process_(base::Process::Current().pid()) { |
| } |
| virtual void Run() { |
| @@ -277,21 +326,19 @@ |
| } // namespace |
| // Fails, see http://crbug.com/7721. |
| -TEST_F(PrintingLayoutTextTest, DISABLED_Complex) { |
| +IN_PROC_BROWSER_TEST_F(PrintingLayoutTextTest, DISABLED_Complex) { |
| if (IsTestCaseDisabled()) |
| return; |
| - DismissTheWindow dismisser(base::GetProcId(process())); |
| + DismissTheWindow dismisser; |
| base::DelegateSimpleThread close_printdlg_thread(&dismisser, |
| "close_printdlg_thread"); |
| // Print a document, check its output. |
| - net::TestServer test_server(net::TestServer::TYPE_HTTP, |
| - net::TestServer::kLocalhost, |
| - FilePath(kDocRoot)); |
| - ASSERT_TRUE(test_server.Start()); |
| + ASSERT_TRUE(test_server()->Start()); |
| - NavigateToURL(test_server.GetURL("files/printing/test1.html")); |
| + ui_test_utils::NavigateToURL( |
| + browser(), test_server()->GetURL("files/printing/test1.html")); |
| close_printdlg_thread.Start(); |
| PrintNowTab(); |
| close_printdlg_thread.Join(); |
| @@ -313,23 +360,20 @@ |
| }; |
| // http://crbug.com/7721 |
| -TEST_F(PrintingLayoutTestHidden, DISABLED_ManyTimes) { |
| +IN_PROC_BROWSER_TEST_F(PrintingLayoutTest, DISABLED_ManyTimes) { |
| if (IsTestCaseDisabled()) |
| return; |
| - net::TestServer test_server(net::TestServer::TYPE_HTTP, |
| - net::TestServer::kLocalhost, |
| - FilePath(kDocRoot)); |
| - ASSERT_TRUE(test_server.Start()); |
| + ASSERT_TRUE(test_server()->Start()); |
| - DismissTheWindow dismisser(base::GetProcId(process())); |
| + DismissTheWindow dismisser; |
| ASSERT_GT(arraysize(kTestPool), 0u); |
| for (int i = 0; i < arraysize(kTestPool); ++i) { |
| if (i) |
| CleanupDumpDirectory(); |
| const TestPool& test = kTestPool[i % arraysize(kTestPool)]; |
| - NavigateToURL(test_server.GetURL(test.source)); |
| + ui_test_utils::NavigateToURL(browser(), test_server()->GetURL(test.source)); |
| base::DelegateSimpleThread close_printdlg_thread1(&dismisser, |
| "close_printdlg_thread"); |
| EXPECT_EQ(NULL, FindDialogWindow(dismisser.owner_process())); |
| @@ -365,69 +409,57 @@ |
| } |
| // Prints a popup and immediately closes it. Disabled because it crashes. |
| -TEST_F(PrintingLayoutTest, DISABLED_Delayed) { |
| +IN_PROC_BROWSER_TEST_F(PrintingLayoutTest, DISABLED_Delayed) { |
| if (IsTestCaseDisabled()) |
| return; |
| - net::TestServer test_server(net::TestServer::TYPE_HTTP, |
| - net::TestServer::kLocalhost, |
| - FilePath(kDocRoot)); |
| - ASSERT_TRUE(test_server.Start()); |
| + ASSERT_TRUE(test_server()->Start()); |
| { |
| - scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| - ASSERT_TRUE(tab_proxy.get()); |
| bool is_timeout = true; |
| - GURL url = test_server.GetURL("files/printing/popup_delayed_print.htm"); |
| - EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| - tab_proxy->NavigateToURL(url)); |
| + GURL url = test_server()->GetURL("files/printing/popup_delayed_print.htm"); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| - DismissTheWindow dismisser(base::GetProcId(process())); |
| + DismissTheWindow dismisser; |
| base::DelegateSimpleThread close_printdlg_thread(&dismisser, |
| "close_printdlg_thread"); |
| close_printdlg_thread.Start(); |
| close_printdlg_thread.Join(); |
| // Force a navigation elsewhere to verify that it's fine with it. |
| - url = test_server.GetURL("files/printing/test1.html"); |
| - EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| - tab_proxy->NavigateToURL(url)); |
| + url = test_server()->GetURL("files/printing/test1.html"); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| } |
| - CloseBrowserAndServer(); |
| + browser()->CloseWindow(); |
| + ui_test_utils::RunAllPendingInMessageLoop(); |
| EXPECT_EQ(0., CompareWithResult(L"popup_delayed_print")) |
| << L"popup_delayed_print"; |
| } |
| // Prints a popup and immediately closes it. http://crbug.com/7721 |
| -TEST_F(PrintingLayoutTest, DISABLED_IFrame) { |
| +IN_PROC_BROWSER_TEST_F(PrintingLayoutTest, DISABLED_IFrame) { |
| if (IsTestCaseDisabled()) |
| return; |
| - net::TestServer test_server(net::TestServer::TYPE_HTTP, |
| - net::TestServer::kLocalhost, |
| - FilePath(kDocRoot)); |
| - ASSERT_TRUE(test_server.Start()); |
| + ASSERT_TRUE(test_server()->Start()); |
| { |
| - scoped_refptr<TabProxy> tab_proxy(GetActiveTab()); |
| - ASSERT_TRUE(tab_proxy.get()); |
| - GURL url = test_server.GetURL("files/printing/iframe.htm"); |
| - EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| - tab_proxy->NavigateToURL(url)); |
| + GURL url = test_server()->GetURL("files/printing/iframe.htm"); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| - DismissTheWindow dismisser(base::GetProcId(process())); |
| + DismissTheWindow dismisser; |
| base::DelegateSimpleThread close_printdlg_thread(&dismisser, |
| "close_printdlg_thread"); |
| close_printdlg_thread.Start(); |
| close_printdlg_thread.Join(); |
| // Force a navigation elsewhere to verify that it's fine with it. |
| - url = test_server.GetURL("files/printing/test1.html"); |
| - EXPECT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, |
| - tab_proxy->NavigateToURL(url)); |
| + url = test_server()->GetURL("files/printing/test1.html"); |
| + ui_test_utils::NavigateToURL(browser(), url); |
| } |
| - CloseBrowserAndServer(); |
| + browser()->CloseWindow(); |
| + ui_test_utils::RunAllPendingInMessageLoop(); |
| EXPECT_EQ(0., CompareWithResult(L"iframe")) << L"iframe"; |
| } |