1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)# found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)import os 5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 66e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)from telemetry.page import page_test 7f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)from telemetry.page import page_test 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdochfrom telemetry.value import scalar 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 10f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 116e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles)class Screenshot(page_test.PageTest): 12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def __init__(self): 13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) super(Screenshot, self).__init__( 14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) action_name_to_run = 'RunPrepareForScreenshot', 15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) is_action_name_to_run_optional=True) 16f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 17f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) @classmethod 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def AddCommandLineArgs(cls, parser): 19f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) parser.add_option('--png-outdir', 20f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) help='Output directory for the PNG files') 21f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 22f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) @classmethod 23f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) def ProcessCommandLineArgs(cls, parser, args): 24f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if not args.png_outdir: 25f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) parser.error('Please specify --png-outdir') 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) cls._png_outdir = args.png_outdir 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 286e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) def ValidateAndMeasurePage(self, page, tab, results): 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if not tab.screenshot_supported: 30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) raise page_test.TestNotSupportedOnPlatformFailure( 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 'Browser does not support screenshotting') 32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) tab.WaitForDocumentReadyStateToBeComplete() 34f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) screenshot = tab.Screenshot(60) 35f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 36f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) outpath = os.path.abspath( 37f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) os.path.join(self._png_outdir, page.file_safe_name)) + '.png' 38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if os.path.exists(outpath): 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) previous_mtime = os.path.getmtime(outpath) 41f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) else: 42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) previous_mtime = -1 43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) screenshot.WritePngFile(outpath) 45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 46f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) saved_picture_count = 0 47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) if os.path.exists(outpath) and os.path.getmtime(outpath) > previous_mtime: 48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) saved_picture_count = 1 49116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch results.AddValue(scalar.ScalarValue( 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch results.current_page, 'saved_picture_count', 'count', 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch saved_picture_count)) 52