Index: chrome/browser/chromeos/login/login_ui_browsertest.cc |
diff --git a/chrome/browser/chromeos/login/login_ui_browsertest.cc b/chrome/browser/chromeos/login/login_ui_browsertest.cc |
index 12c91c489507bb121867a5f862d1821fabe654d3..73620226391895b1de560e63edcf7bdc221b3ed1 100644 |
--- a/chrome/browser/chromeos/login/login_ui_browsertest.cc |
+++ b/chrome/browser/chromeos/login/login_ui_browsertest.cc |
@@ -8,7 +8,7 @@ |
#include "chrome/browser/browser_process.h" |
#include "chrome/browser/chrome_notification_types.h" |
#include "chrome/browser/chromeos/login/login_manager_test.h" |
-#include "chrome/browser/chromeos/login/screenshot_tester.h" |
+#include "chrome/browser/chromeos/login/screenshot_testing_mixin.h" |
#include "chrome/browser/chromeos/login/startup_utils.h" |
#include "chrome/browser/chromeos/login/test/oobe_screen_waiter.h" |
#include "chrome/browser/ui/webui/chromeos/login/signin_screen_handler.h" |
@@ -27,134 +27,19 @@ namespace { |
const char kTestUser1[] = "test-user1@gmail.com"; |
const char kTestUser2[] = "test-user2@gmail.com"; |
-// A class that provides a way to wait until all the animation |
-// has loaded and is properly shown on the screen. |
-class AnimationDelayHandler : public content::NotificationObserver { |
- public: |
- AnimationDelayHandler(); |
- |
- // Should be run as early as possible on order not to miss notifications. |
- // It seems though that it can't be moved to constructor(?). |
- void Initialize(); |
- |
- // Override from content::NotificationObserver. |
- virtual void Observe(int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) OVERRIDE; |
- |
- // This method checks if animation is loaded, and, if not, |
- // waits until it is loaded and properly shown on the screen. |
- void WaitUntilAnimationLoads(); |
- |
- private: |
- void InitializeForWaiting(const base::Closure& quitter); |
- |
- // It turns out that it takes some more time for the animation |
- // to finish loading even after all the notifications have been sent. |
- // That happens due to some properties of compositor. |
- // This method should be used after getting all the necessary notifications |
- // to wait for the actual load of animation. |
- void SynchronizeAnimationLoadWithCompositor(); |
- |
- // This method exists only because of the current implementation of |
- // SynchronizeAnimationLoadWithCompositor. |
- void HandleAnimationLoad(); |
- |
- // Returns true if, according to the notificatons received, animation has |
- // finished loading by now. |
- bool IsAnimationLoaded(); |
- |
- base::OneShotTimer<AnimationDelayHandler> timer_; |
- bool waiter_loop_is_on_; |
- bool login_or_lock_webui_visible_; |
- base::Closure animation_waiter_quitter_; |
- content::NotificationRegistrar registrar_; |
-}; |
- |
-} // anonymous namespace |
- |
-AnimationDelayHandler::AnimationDelayHandler() |
- : waiter_loop_is_on_(false), login_or_lock_webui_visible_(false) { |
-} |
- |
-void AnimationDelayHandler::Initialize() { |
- waiter_loop_is_on_ = false; |
- registrar_.Add(this, |
- chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, |
- content::NotificationService::AllSources()); |
-} |
- |
-bool AnimationDelayHandler::IsAnimationLoaded() { |
- return login_or_lock_webui_visible_; |
-} |
- |
-void AnimationDelayHandler::Observe( |
- int type, |
- const content::NotificationSource& source, |
- const content::NotificationDetails& details) { |
- if (chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE == type) { |
- login_or_lock_webui_visible_ = true; |
- registrar_.Remove(this, |
- chrome::NOTIFICATION_LOGIN_OR_LOCK_WEBUI_VISIBLE, |
- content::NotificationService::AllSources()); |
- } |
- if (waiter_loop_is_on_ && IsAnimationLoaded()) { |
- content::BrowserThread::PostTask( |
- content::BrowserThread::UI, FROM_HERE, animation_waiter_quitter_); |
- } |
-} |
- |
-void AnimationDelayHandler::InitializeForWaiting(const base::Closure& quitter) { |
- waiter_loop_is_on_ = true; |
- animation_waiter_quitter_ = quitter; |
-} |
- |
-void AnimationDelayHandler::HandleAnimationLoad() { |
- timer_.Stop(); |
- content::BrowserThread::PostTask( |
- content::BrowserThread::UI, FROM_HERE, animation_waiter_quitter_); |
-} |
- |
-// Current implementation is a mockup. |
-// It simply waits for 5 seconds, assuming that this time is enough for |
-// animation to load completely. |
-// TODO(elizavetai): Replace this temporary hack with getting a |
-// valid notification from compositor. |
-void AnimationDelayHandler::SynchronizeAnimationLoadWithCompositor() { |
- base::RunLoop waiter; |
- animation_waiter_quitter_ = waiter.QuitClosure(); |
- timer_.Start(FROM_HERE, |
- base::TimeDelta::FromSeconds(5), |
- this, |
- &AnimationDelayHandler::HandleAnimationLoad); |
- waiter.Run(); |
-} |
- |
-void AnimationDelayHandler::WaitUntilAnimationLoads() { |
- if (!IsAnimationLoaded()) { |
- base::RunLoop animation_waiter; |
- InitializeForWaiting(animation_waiter.QuitClosure()); |
- animation_waiter.Run(); |
- } |
- SynchronizeAnimationLoadWithCompositor(); |
} |
class LoginUITest : public chromeos::LoginManagerTest { |
public: |
bool enable_test_screenshots_; |
- LoginUITest() : LoginManagerTest(false) {} |
- virtual ~LoginUITest() {} |
- virtual void SetUpOnMainThread() OVERRIDE { |
- enable_test_screenshots_ = screenshot_tester.TryInitialize(); |
- if (enable_test_screenshots_) { |
- animation_delay_handler.Initialize(); |
- } |
- LoginManagerTest::SetUpOnMainThread(); |
+ LoginUITest() : LoginManagerTest(false) { |
+ screenshot_testing_ = new ScreenshotTestingMixin; |
+ AddMixin(screenshot_testing_); |
} |
+ virtual ~LoginUITest() {} |
protected: |
- AnimationDelayHandler animation_delay_handler; |
- ScreenshotTester screenshot_tester; |
+ ScreenshotTestingMixin* screenshot_testing_; |
}; |
IN_PROC_BROWSER_TEST_F(LoginUITest, PRE_LoginUIVisible) { |
@@ -174,10 +59,7 @@ IN_PROC_BROWSER_TEST_F(LoginUITest, LoginUIVisible) { |
".user.emailAddress == '" + std::string(kTestUser1) + "'"); |
JSExpect("document.querySelectorAll('.pod:not(#user-pod-template)')[1]" |
".user.emailAddress == '" + std::string(kTestUser2) + "'"); |
- if (enable_test_screenshots_) { |
- animation_delay_handler.WaitUntilAnimationLoads(); |
- screenshot_tester.Run("LoginUITest-LoginUIVisible"); |
- } |
+ screenshot_testing_->RunScreenshotTesting("LoginUITest-LoginUIVisible"); |
} |
IN_PROC_BROWSER_TEST_F(LoginUITest, PRE_InterruptedAutoStartEnrollment) { |