| #!/usr/bin/python |
| # Copyright (c) 2010 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. |
| |
| import os |
| import glob |
| |
| import pyauto_functional # Must be imported before pyauto |
| import pyauto |
| |
| |
| class PDFTest(pyauto.PyUITest): |
| """PDF related tests |
| |
| This test runs only on Google Chrome build, not on Chromium. |
| """ |
| |
| def _PerformPDFAction(self, action, tab_index=0, windex=0): |
| """Perform an action on a PDF tab. |
| |
| Args: |
| action: one of "fitToHeight", "fitToWidth", "ZoomIn", "ZoomOut" |
| tab_index: tab index Defaults to 0 |
| windex: window index. Defaults to 0 |
| """ |
| assert action in ('fitToHeight', 'fitToWidth', 'ZoomIn', 'ZoomOut') |
| js = 'document.getElementsByName("plugin")[0].%s()' % action |
| # Add an empty string so that there's something to return back |
| # (or else it hangs) |
| return self.GetDOMValue('%s + ""' % js, 0, tab_index) |
| |
| |
| def testPDFRunner(self): |
| """Navigate to pdf files and verify that browser doesn't crash""" |
| # bail out if not a branded build |
| properties = self.GetBrowserInfo()['properties'] |
| if properties['branding'] != 'Google Chrome': |
| return |
| breakpad_folder = properties['DIR_CRASH_DUMPS'] |
| old_dmp_files = glob.glob(os.path.join(breakpad_folder, '*.dmp')) |
| pdf_files_path = os.path.join(self.DataDir(), 'pyauto_private', 'pdf') |
| pdf_files = map(self.GetFileURLForPath, |
| glob.glob(os.path.join(pdf_files_path, '*.pdf'))) |
| # Add a pdf file over http:// to the list of pdf files. |
| # crbug.com/70454 |
| pdf_files += ['http://www.irs.gov/pub/irs-pdf/fw4.pdf'] |
| for url in pdf_files: |
| # Some pdfs cause known crashes. Exclude them. crbug.com/63549 |
| if os.path.basename(url) in ('nullip.pdf', 'sample.pdf'): |
| continue |
| self.AppendTab(pyauto.GURL(url)) |
| for tab_index in range(1, len(pdf_files) + 1): |
| self.ActivateTab(tab_index) |
| self._PerformPDFAction('fitToHeight', tab_index=tab_index) |
| self._PerformPDFAction('fitToWidth', tab_index=tab_index) |
| # Assert that there is at least 1 browser window. |
| self.assertTrue(self.GetBrowserWindowCount(), |
| 'Browser crashed, no window is open') |
| # Verify there're no crash dump files |
| for dmp_file in glob.glob(os.path.join(breakpad_folder, '*.dmp')): |
| self.assertTrue(dmp_file in old_dmp_files, |
| msg='Crash dump %s found' % dmp_file) |
| |
| |
| if __name__ == '__main__': |
| pyauto_functional.Main() |