OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import os | |
7 import glob | |
8 | |
9 import pyauto_functional # Must be imported before pyauto | |
10 import pyauto | |
11 from pyauto_errors import JSONInterfaceError | |
12 | |
13 | |
14 class PDFTest(pyauto.PyUITest): | |
15 """PDF related tests | |
16 | |
17 This test runs only on Google Chrome build, not on Chromium. | |
18 """ | |
19 | |
20 unloadable_pdfs = [] | |
21 | |
22 def _PerformPDFAction(self, action, tab_index=0, windex=0): | |
23 """Perform an action on a PDF tab. | |
24 | |
25 Args: | |
26 action: one of "fitToHeight", "fitToWidth", "ZoomIn", "ZoomOut" | |
27 tab_index: tab index Defaults to 0 | |
28 windex: window index. Defaults to 0 | |
29 """ | |
30 # Sometimes the zoom/fit bar is not fully loaded. We need to wait for it to | |
31 # load before we can perform actions. | |
32 js = """if (document.getElementsByName("plugin") && | |
33 document.getElementsByName("plugin")[0]) | |
34 { window.domAutomationController.send("true"); } | |
35 else {window.domAutomationController.send("false"); }""" | |
36 try: | |
37 self.assertTrue(self.WaitUntil(lambda: self.ExecuteJavascript(js, | |
38 tab_index=tab_index, windex=windex), expect_retval="true"), | |
39 msg='Could not find zoom/fit to page/width bar so we will not be able ' | |
40 'to peform the requested action') | |
41 except JSONInterfaceError as e: | |
42 # The PDF did not load, add it to the list and move on, we don't want the | |
43 # test to abort so we can check all of the PDFs. | |
44 PDFTest.unloadable_pdfs.append(self.GetActiveTabTitle()) | |
45 return | |
46 assert action in ('fitToHeight', 'fitToWidth', 'ZoomIn', 'ZoomOut') | |
47 js = 'document.getElementsByName("plugin")[0].%s()' % action | |
48 # Add an empty string so that there's something to return back | |
49 # (or else it hangs) | |
50 return self.GetDOMValue('%s + ""' % js, tab_index) | |
51 | |
52 | |
53 def testPDFRunner(self): | |
54 """Navigate to pdf files and verify that browser doesn't crash""" | |
55 # bail out if not a branded build | |
56 properties = self.GetBrowserInfo()['properties'] | |
57 if properties['branding'] != 'Google Chrome': | |
58 return | |
59 breakpad_folder = properties['DIR_CRASH_DUMPS'] | |
60 old_dmp_files = glob.glob(os.path.join(breakpad_folder, '*.dmp')) | |
61 pdf_files_path = os.path.join(self.DataDir(), 'pyauto_private', 'pdf') | |
62 pdf_files = map(self.GetFileURLForPath, | |
63 glob.glob(os.path.join(pdf_files_path, '*.pdf'))) | |
64 # Add a pdf file over http:// to the list of pdf files. | |
65 # crbug.com/70454 | |
66 pdf_files += ['http://www.irs.gov/pub/irs-pdf/fw4.pdf'] | |
67 | |
68 # Some pdfs cause known crashes. Exclude them. crbug.com/63549 | |
69 exclude_list = ('nullip.pdf', 'sample.pdf') | |
70 pdf_files = [x for x in pdf_files if | |
71 os.path.basename(x) not in exclude_list] | |
72 | |
73 PDFTest.unloadable_pdfs = [] | |
74 for url in pdf_files: | |
75 self.AppendTab(pyauto.GURL(url)) | |
76 for tab_index in range(1, len(pdf_files) + 1): | |
77 self.ActivateTab(tab_index) | |
78 self._PerformPDFAction('fitToHeight', tab_index=tab_index) | |
79 self._PerformPDFAction('fitToWidth', tab_index=tab_index) | |
80 # Assert that there is at least 1 browser window. | |
81 self.assertTrue(self.GetBrowserWindowCount(), | |
82 'Browser crashed, no window is open') | |
83 # Verify there're no crash dump files | |
84 for dmp_file in glob.glob(os.path.join(breakpad_folder, '*.dmp')): | |
85 self.assertTrue(dmp_file in old_dmp_files, | |
86 msg='Crash dump %s found' % dmp_file) | |
87 self.assertEqual(len(PDFTest.unloadable_pdfs), 0, msg='The following PDFs ' | |
88 'did not load: %s' % PDFTest.unloadable_pdfs) | |
89 | |
90 | |
91 if __name__ == '__main__': | |
92 pyauto_functional.Main() | |
OLD | NEW |