11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chromeos/login/screenshot_testing_mixin.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/browser_process.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/chrome_notification_types.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/browser_thread.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/notification_service.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/browser/notification_types.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/compositor/compositor_switches.h" 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromeos { 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciScreenshotTestingMixin::ScreenshotTestingMixin() { 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciScreenshotTestingMixin::~ScreenshotTestingMixin() { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ScreenshotTestingMixin::SetUpInProcessBrowserTestFixture() { 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enable_test_screenshots_ = screenshot_tester_.TryInitialize(); 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ScreenshotTestingMixin::SetUpCommandLine(base::CommandLine* command_line) { 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (enable_test_screenshots_) { 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci command_line->AppendSwitch(switches::kEnablePixelOutputInTests); 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci command_line->AppendSwitch(switches::kUIEnableImplSidePainting); 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ScreenshotTestingMixin::RunScreenshotTesting( 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const std::string& test_name) { 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (enable_test_screenshots_) { 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SynchronizeAnimationLoadWithCompositor(); 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci screenshot_tester_.Run(test_name); 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Current implementation is a mockup. 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// It simply waits for 5 seconds, assuming that this time is enough for 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// animation to load completely. 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// TODO(elizavetai): Replace this temporary hack with getting a 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// valid notification from compositor. 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ScreenshotTestingMixin::SynchronizeAnimationLoadWithCompositor() { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::RunLoop waiter; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci animation_waiter_quitter_ = waiter.QuitClosure(); 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci timer_.Start(FROM_HERE, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::TimeDelta::FromSeconds(5), 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci this, 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &ScreenshotTestingMixin::HandleAnimationLoad); 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci waiter.Run(); 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccivoid ScreenshotTestingMixin::HandleAnimationLoad() { 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci timer_.Stop(); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserThread::PostTask( 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::BrowserThread::UI, FROM_HERE, animation_waiter_quitter_); 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace chromeos 63