15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/command_line.h" 6868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/files/file_enumerator.h" 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/files/file_path.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/files/file_util.h" 99ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/path_service.h" 1158e6fbe4ee35d65e14b626c557d37565bf8ad179Ben Murdoch#include "base/process/process.h" 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/test/test_file_util.h" 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/threading/simple_thread.h" 167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/print_job.h" 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/printing/print_view_manager.h" 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser.h" 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/tabs/tab_strip_model.h" 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_paths.h" 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/chrome_switches.h" 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h" 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_observer.h" 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_registrar.h" 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/notification_service.h" 29b2df76ea8fec9e32f6f3718986dba0d95315b29cTorne (Richard Coles)#include "net/test/spawned_test_server/spawned_test_server.h" 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/image.h" 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "printing/printing_test.h" 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using printing::Image; 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const char kGenerateSwitch[] = "print-layout-generate"; 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrintingLayoutTest : public PrintingTest<InProcessBrowserTest>, 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public content::NotificationObserver { 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintingLayoutTest() { 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath browser_directory; 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PathService::Get(chrome::DIR_APP, &browser_directory); 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emf_path_ = browser_directory.AppendASCII("metafile_dumps"); 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUp() OVERRIDE { 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make sure there is no left overs. 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CleanupDumpDirectory(); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InProcessBrowserTest::SetUp(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void TearDown() OVERRIDE { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) InProcessBrowserTest::TearDown(); 567dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DeleteFile(emf_path_, true); 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) command_line->AppendSwitchPath(switches::kDebugPrint, emf_path_); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void PrintNowTab() { 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.Add(this, chrome::NOTIFICATION_PRINT_JOB_EVENT, 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationService::AllSources()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::WebContents* web_contents = 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) browser()->tab_strip_model()->GetActiveWebContents(); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) printing::PrintViewManager::FromWebContents(web_contents)->PrintNow(); 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunMessageLoop(); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) registrar_.RemoveAll(); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Observe(int type, 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationSource& source, 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const content::NotificationDetails& details) { 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(chrome::NOTIFICATION_PRINT_JOB_EVENT, type); 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) switch (content::Details<printing::JobEventDetails>(details)->type()) { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::JOB_DONE: { 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Succeeded. 8290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 8390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FROM_HERE, base::MessageLoop::QuitClosure()); 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::USER_INIT_CANCELED: 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::FAILED: { 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Failed. 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(false); 9090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) base::MessageLoop::current()->PostTask( 9190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) FROM_HERE, base::MessageLoop::QuitClosure()); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::NEW_DOC: 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::USER_INIT_DONE: 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::DEFAULT_INIT_DONE: 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::NEW_PAGE: 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::PAGE_DONE: 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::DOC_DONE: 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) case printing::JobEventDetails::ALL_PAGES_REQUESTED: { 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Don't care. 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) default: { 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NOTREACHED(); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Finds the dump for the last print job and compares it to the data named 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // |verification_name|. Compares the saved printed job pixels with the test 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // data pixels and returns the percentage of different pixels; 0 for success, 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // [0, 100] for failure. 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double CompareWithResult(const std::wstring& verification_name) { 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath test_result(ScanFiles(verification_name)); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (test_result.value().empty()) { 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 100% different, the print job buffer is not there. 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 100.; 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath base_path(ui_test_utils::GetTestFilePath( 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath().AppendASCII("printing"), base::FilePath())); 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath emf(base_path.Append(verification_name + L".emf")); 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath png(base_path.Append(verification_name + L".png")); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath cleartype( 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base_path.Append(verification_name + L"_cleartype.png")); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Looks for Cleartype override. 1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch if (base::PathExists(cleartype) && IsClearTypeEnabled()) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) png = cleartype; 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (GenerateFiles()) { 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Copy the .emf and generate an .png. 1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::CopyFile(test_result, emf); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Image emf_content(emf); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emf_content.SaveToPng(png); 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Saving is always fine. 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return 0; 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } else { 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // File compare between test and result. 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Image emf_content(emf); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Image test_content(test_result); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) Image png_content(png); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double diff_emf = emf_content.PercentageDifferent(test_content); 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0., diff_emf) << base::WideToUTF8(verification_name) << 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " original size:" << emf_content.size().ToString() << 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " result size:" << test_content.size().ToString(); 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (diff_emf) { 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Backup the result emf file. 1522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath failed( 1532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base_path.Append(verification_name + L"_failed.emf")); 1547dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::CopyFile(test_result, failed); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // This verification is only to know that the EMF rendering stays 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // immutable. 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) double diff_png = emf_content.PercentageDifferent(png_content); 1605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_EQ(0., diff_png) << base::WideToUTF8(verification_name) << 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " original size:" << emf_content.size().ToString() << 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) " result size:" << test_content.size().ToString(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (diff_png) { 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Backup the rendered emf file to detect the rendering difference. 1652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath rendering( 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base_path.Append(verification_name + L"_rendering.png")); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emf_content.SaveToPng(rendering); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::max(diff_png, diff_emf); 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Makes sure the directory exists and is empty. 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void CleanupDumpDirectory() { 175a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) EXPECT_TRUE(base::DieFileDie(emf_path_, true)); 176a3f6a49ab37290eeeb8db0f41ec0f1cb74a68be7Torne (Richard Coles) EXPECT_TRUE(base::CreateDirectory(emf_path_)); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns if Clear Type is currently enabled. 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool IsClearTypeEnabled() { 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) BOOL ct_enabled = 0; 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SystemParametersInfo(SPI_GETCLEARTYPE, 0, &ct_enabled, 0) && ct_enabled) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) UINT smoothing = 0; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (SystemParametersInfo(SPI_GETFONTSMOOTHINGTYPE, 0, &smoothing, 0) && 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) smoothing == FE_FONTSMOOTHINGCLEARTYPE) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Verifies that there is one .emf and one .prn file in the dump directory. 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns the path of the .emf file and deletes the .prn file. 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ScanFiles(const std::wstring& verification_name) { 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to 10 seconds. 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring emf_file; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring prn_file; 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool found_emf = false; 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool found_prn = false; 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 100; ++i) { 201868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FileEnumerator enumerator(emf_path_, false, 202868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::FileEnumerator::FILES); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emf_file.clear(); 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prn_file.clear(); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found_emf = false; 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found_prn = false; 2072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath file; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (!(file = enumerator.Next()).empty()) { 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::wstring ext = file.Extension(); 2105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (base::strcasecmp(base::WideToUTF8(ext).c_str(), ".emf") == 0) { 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(found_emf) << "Found a leftover .EMF file: \"" << 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emf_file << "\" and \"" << file.value() << 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\" when looking for \"" << verification_name << "\""; 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found_emf = true; 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) emf_file = file.value(); 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) if (base::strcasecmp(base::WideToUTF8(ext).c_str(), ".prn") == 0) { 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_FALSE(found_prn) << "Found a leftover .PRN file: \"" << 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prn_file << "\" and \"" << file.value() << 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "\" when looking for \"" << verification_name << "\""; 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) prn_file = file.value(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) found_prn = true; 2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::DeleteFile(file, false); 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) continue; 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(false); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (found_emf && found_prn) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(100)); 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(found_emf) << ".PRN file is: " << prn_file; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(found_prn) << ".EMF file is: " << emf_file; 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return emf_file; 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool GenerateFiles() { 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return CommandLine::ForCurrentProcess()->HasSwitch(kGenerateSwitch); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath emf_path_; 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::NotificationRegistrar registrar_; 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(PrintingLayoutTest); 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PrintingLayoutTextTest : public PrintingLayoutTest { 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) typedef PrintingLayoutTest Parent; 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Returns if the test is disabled. 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // http://crbug.com/64869 Until the issue is fixed, disable the test if 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ClearType is enabled. 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) static bool IsTestCaseDisabled() { 2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return Parent::IsTestCaseDisabled() || IsClearTypeEnabled(); 2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Finds the first dialog window owned by owner_process. 2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)HWND FindDialogWindow(DWORD owner_process) { 2615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HWND dialog_window(NULL); 2625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (;;) { 2635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dialog_window = FindWindowEx(NULL, 2645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dialog_window, 2655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MAKEINTATOM(32770), 2665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) NULL); 2675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!dialog_window) 2685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The dialog must be owned by our target process. 2715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD process_id = 0; 2725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetWindowThreadProcessId(dialog_window, &process_id); 2735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (process_id == owner_process) 2745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 2755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 2765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return dialog_window; 2775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Tries to close a dialog window. 2805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool CloseDialogWindow(HWND dialog_window) { 2815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) LRESULT res = SendMessage(dialog_window, DM_GETDEFID, 0, 0); 2825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!res) 2835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 2845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(DC_HASDEFID, HIWORD(res)); 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WORD print_button_id = LOWORD(res); 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) res = SendMessage( 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dialog_window, 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WM_COMMAND, 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) print_button_id, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) reinterpret_cast<LPARAM>(GetDlgItem(dialog_window, print_button_id))); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return res == 0; 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Dismiss the first dialog box owned by owner_process by "executing" the 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// default button. 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class DismissTheWindow : public base::DelegateSimpleThread::Delegate { 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DismissTheWindow() 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : owner_process_(base::Process::Current().pid()) { 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) virtual void Run() { 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) HWND dialog_window; 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (;;) { 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // First enumerate the windows. 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) dialog_window = FindDialogWindow(owner_process_); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Try to close it. 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (dialog_window) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (CloseDialogWindow(dialog_window)) { 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) break; 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Now verify that it indeed closed itself. 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) while (IsWindow(dialog_window)) { 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CloseDialogWindow(dialog_window); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD owner_process() { return owner_process_; } 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DWORD owner_process_; 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Fails, see http://crbug.com/7721. 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PrintingLayoutTextTest, DISABLED_Complex) { 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsTestCaseDisabled()) 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DismissTheWindow dismisser; 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread(&dismisser, 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Print a document, check its output. 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL( 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) browser(), test_server()->GetURL("files/printing/test1.html")); 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread.Start(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintNowTab(); 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread.Join(); 3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(L"test1")); 3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct TestPool { 3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const char* source; 3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const wchar_t* result; 3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)const TestPool kTestPool[] = { 3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ImagesB&W 3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "files/printing/test2.html", L"test2", 3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ImagesTransparent 3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "files/printing/test3.html", L"test3", 3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ImageColor 3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "files/printing/test4.html", L"test4", 3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// http://crbug.com/7721 3675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PrintingLayoutTest, DISABLED_ManyTimes) { 3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsTestCaseDisabled()) 3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DismissTheWindow dismisser; 3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_GT(arraysize(kTestPool), 0u); 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < arraysize(kTestPool); ++i) { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (i) 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CleanupDumpDirectory(); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const TestPool& test = kTestPool[i % arraysize(kTestPool)]; 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), test_server()->GetURL(test.source)); 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread1(&dismisser, 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, FindDialogWindow(dismisser.owner_process())); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread1.Start(); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintNowTab(); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread1.Join(); 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(test.result)) << test.result; 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CleanupDumpDirectory(); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread2(&dismisser, 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, FindDialogWindow(dismisser.owner_process())); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread2.Start(); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintNowTab(); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread2.Join(); 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(test.result)) << test.result; 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CleanupDumpDirectory(); 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread3(&dismisser, 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, FindDialogWindow(dismisser.owner_process())); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread3.Start(); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintNowTab(); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread3.Join(); 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(test.result)) << test.result; 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) CleanupDumpDirectory(); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread4(&dismisser, 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(NULL, FindDialogWindow(dismisser.owner_process())); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread4.Start(); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) PrintNowTab(); 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread4.Join(); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(test.result)) << test.result; 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Prints a popup and immediately closes it. Disabled because it crashes. 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PrintingLayoutTest, DISABLED_Delayed) { 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsTestCaseDisabled()) 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) bool is_timeout = true; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = test_server()->GetURL("files/printing/popup_delayed_print.htm"); 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DismissTheWindow dismisser; 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread(&dismisser, 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread.Start(); 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread.Join(); 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force a navigation elsewhere to verify that it's fine with it. 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = test_server()->GetURL("files/printing/test1.html"); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::CloseWindow(browser()); 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(L"popup_delayed_print")) 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) << L"popup_delayed_print"; 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Prints a popup and immediately closes it. http://crbug.com/7721 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(PrintingLayoutTest, DISABLED_IFrame) { 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (IsTestCaseDisabled()) 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return; 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(test_server()->Start()); 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) { 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GURL url = test_server()->GetURL("files/printing/iframe.htm"); 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) DismissTheWindow dismisser; 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::DelegateSimpleThread close_printdlg_thread(&dismisser, 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) "close_printdlg_thread"); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread.Start(); 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) close_printdlg_thread.Join(); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Force a navigation elsewhere to verify that it's fine with it. 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) url = test_server()->GetURL("files/printing/test1.html"); 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ui_test_utils::NavigateToURL(browser(), url); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) chrome::CloseWindow(browser()); 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content::RunAllPendingInMessageLoop(); 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0., CompareWithResult(L"iframe")) << L"iframe"; 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 470