1// Copyright 2014 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#ifndef CHROME_BROWSER_CHROMEOS_LOGIN_SCREENSHOT_TESTING_MIXIN_H_ 6#define CHROME_BROWSER_CHROMEOS_LOGIN_SCREENSHOT_TESTING_MIXIN_H_ 7 8#include <string> 9 10#include "base/command_line.h" 11#include "base/timer/timer.h" 12#include "chrome/browser/chromeos/login/mixin_based_browser_test.h" 13#include "chrome/browser/chromeos/login/screenshot_tester.h" 14#include "content/public/test/browser_test_base.h" 15 16namespace chromeos { 17 18// Base mixin class for tests which support testing with screenshots. 19// Sets up everything required for taking screenshots. 20// Provides functionality to deal with animation load: screenshots 21// should be taken only when all the animation is loaded. 22class ScreenshotTestingMixin : public MixinBasedBrowserTest::Mixin { 23 public: 24 ScreenshotTestingMixin(); 25 virtual ~ScreenshotTestingMixin(); 26 27 // Override from BrowsertestBase::Mixin. 28 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE; 29 30 // Override from BrowsertestBase::Mixin. 31 virtual void SetUpCommandLine(base::CommandLine* command_line) OVERRIDE; 32 33 // Runs screenshot testing if it is turned on by command line switches. 34 void RunScreenshotTesting(const std::string& test_name); 35 36 private: 37 // It turns out that it takes some more time for the animation 38 // to finish loading even after all the notifications have been sent. 39 // That happens due to some properties of compositor. 40 // This method should be used after getting all the necessary notifications 41 // to wait for the actual load of animation. 42 void SynchronizeAnimationLoadWithCompositor(); 43 44 // This method exists only because of the current implementation of 45 // SynchronizeAnimationLoadWithCompositor. 46 void HandleAnimationLoad(); 47 48 // Required for current implementation of 49 // SynchronizeAnimationLoadWithCompositor() 50 base::OneShotTimer<ScreenshotTestingMixin> timer_; 51 base::Closure animation_waiter_quitter_; 52 53 // Is true if testing with screenshots is turned on with all proper switches. 54 bool enable_test_screenshots_; 55 56 // |screenshot_tester_ | does everything connected with taking, loading and 57 // comparing screenshots 58 ScreenshotTester screenshot_tester_; 59}; 60 61} // namespace chromeos 62 63#endif // CHROME_BROWSER_CHROMEOS_LOGIN_SCREENSHOT_TESTING_MIXIN_H_ 64