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 <string>
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <vector>
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/string16.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/string_util.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/strings/utf_string_conversions.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/signin/easy_unlock_screenlock_state_handler.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/signin/easy_unlock_service.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/signin/screenlock_bridge.h"
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
155b892326406927b709cdaf6c384d4ababf456332Ben Murdoch#include "chrome/test/base/testing_browser_process.h"
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h"
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/l10n/l10n_util.h"
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace {
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)// Icons used by EasyUnlockScreenlockStateHandler. The icon id values are the
2234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)// same as the ones set by ScreenlockBridge.
2334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)const char kLockedIconId[] = "locked";
2434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)const char kUnlockedIconId[] = "unlocked";
2534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)const char kSpinnerIconId[] = "spinner";
2634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)const char kHardlockedIconId[] = "hardlocked";
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Checks if |input| string has any unreplaced placeholders.
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccibool StringHasPlaceholders(const base::string16& input) {
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<size_t> offsets;
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<base::string16> subst;
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  subst.push_back(base::string16());
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 replaced = ReplaceStringPlaceholders(input, subst, &offsets);
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return !offsets.empty();
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Fake lock handler to be used in these tests.
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestLockHandler : public ScreenlockBridge::LockHandler {
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  explicit TestLockHandler(const std::string& user_email)
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      : user_email_(user_email),
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        show_icon_count_(0u),
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        auth_type_(OFFLINE_PASSWORD) {
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~TestLockHandler() {}
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // ScreenlockBridge::LockHandler implementation:
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowBannerMessage(const base::string16& message) OVERRIDE {
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_FALSE(true) << "Should not be reached.";
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void ShowUserPodCustomIcon(
541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const std::string& user_email,
551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const ScreenlockBridge::UserPodCustomIconOptions& icon) OVERRIDE {
561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_EQ(user_email_, user_email);
571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ++show_icon_count_;
581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    last_custom_icon_ = icon.ToDictionaryValue().Pass();
591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ValidateCustomIcon();
601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void HideUserPodCustomIcon(const std::string& user_email) OVERRIDE {
631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_EQ(user_email_, user_email);
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    last_custom_icon_.reset();
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void EnableInput() OVERRIDE {
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_FALSE(true) << "Should not be reached.";
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetAuthType(const std::string& user_email,
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           AuthType auth_type,
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                           const base::string16& auth_value) OVERRIDE {
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_EQ(user_email_, user_email);
751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Generally, this is allowed, but EasyUnlockScreenlockStateHandler should
761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // avoid resetting the same auth type.
771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_NE(auth_type_, auth_type);
781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    auth_type_ = auth_type;
801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    auth_value_ = auth_value;
811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual AuthType GetAuthType(const std::string& user_email) const OVERRIDE {
841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(user_email_, user_email);
851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return auth_type_;
861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void Unlock(const std::string& user_email) OVERRIDE {
891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_FALSE(true) << "Should not be reached.";
901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void AttemptEasySignin(const std::string& user_email,
931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 const std::string& secret,
941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                 const std::string& key_label) OVERRIDE {
951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_FALSE(true) << "Should not be reached.";
961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Utility methods used by tests:
991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Gets last set auth value.
1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 GetAuthValue() const {
1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return auth_value_;
1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Sets the auth value.
1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void SetAuthValue(const base::string16& value) {
1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    auth_value_ = value;
1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns the number of times an icon was shown since the last call to this
1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // method.
1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  size_t GetAndResetShowIconCount() {
1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    size_t result = show_icon_count_;
1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    show_icon_count_ = 0u;
1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return result;
1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Whether the custom icon is set.
1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool HasCustomIcon() const {
1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return last_custom_icon_;
1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
12334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  // If custom icon is set, returns the icon's id.
12434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  // If there is no icon, or if it doesn't have an id set, returns an empty
12534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  // string.
12634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  std::string GetCustomIconId() const {
1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    std::string result;
1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (last_custom_icon_)
12934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      last_custom_icon_->GetString("id", &result);
1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return result;
1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Whether the custom icon is set and it has a tooltip.
1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool CustomIconHasTooltip() const {
1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return last_custom_icon_ && last_custom_icon_->HasKey("tooltip");
1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Gets the custom icon's tooltip text, if one is set.
1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 GetCustomIconTooltip() const {
1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    base::string16 result;
1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (last_custom_icon_)
1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      last_custom_icon_->GetString("tooltip.text", &result);
1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return result;
1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Whether the custom icon's tooltip should be autoshown. If the icon is not
1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // set, or it doesn't have a tooltip, returns false.
1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool IsCustomIconTooltipAutoshown() const {
1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool result = false;
1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (last_custom_icon_)
1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      last_custom_icon_->GetBoolean("tooltip.autoshow", &result);
1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return result;
1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Whether the custom icon is set and if has hardlock capability enabed.
1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  bool CustomIconHardlocksOnClick() const {
1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    bool result = false;
1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (last_custom_icon_)
1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      last_custom_icon_->GetBoolean("hardlockOnClick", &result);
1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return result;
1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Does some sanity checks on the last icon set by |ShowUserPodCustomIcon|.
1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // It will cause a test failure if the icon is not valid.
1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void ValidateCustomIcon() {
1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_TRUE(last_custom_icon_.get());
1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
16934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    EXPECT_TRUE(last_custom_icon_->HasKey("id"));
1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (last_custom_icon_->HasKey("tooltip")) {
1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::string16 tooltip;
1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EXPECT_TRUE(last_custom_icon_->GetString("tooltip.text", &tooltip));
1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EXPECT_FALSE(tooltip.empty());
1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EXPECT_FALSE(StringHasPlaceholders(tooltip));
1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The fake user email used in test. All methods called on |this| should be
1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // associated with this user.
1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string user_email_;
1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The last icon set using |SetUserPodCustomIcon|. Call to
1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |HideUserPodcustomIcon| resets it.
1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<base::DictionaryValue> last_custom_icon_;
1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  size_t show_icon_count_;
1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Auth type and value set using |SetAuthType|.
1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  AuthType auth_type_;
1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::string16 auth_value_;
1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(TestLockHandler);
1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass EasyUnlockScreenlockStateHandlerTest : public testing::Test {
1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EasyUnlockScreenlockStateHandlerTest() : user_email_("test_user@gmail.com") {}
1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~EasyUnlockScreenlockStateHandlerTest() {}
1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void SetUp() OVERRIDE {
2015b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    TestingBrowserProcess::GetGlobal()->SetApplicationLocale("en-US");
2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Create and inject fake lock handler to the screenlock bridge.
2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    lock_handler_.reset(new TestLockHandler(user_email_));
2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ScreenlockBridge* screenlock_bridge = ScreenlockBridge::Get();
2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    screenlock_bridge->SetLockHandler(lock_handler_.get());
2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    // Create the screenlock state handler object that will be tested.
20934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    state_handler_.reset(new EasyUnlockScreenlockStateHandler(
21034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)        user_email_,
21134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)        EasyUnlockScreenlockStateHandler::NO_HARDLOCK,
21234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)        screenlock_bridge));
2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual void TearDown() OVERRIDE {
2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ScreenlockBridge::Get()->SetLockHandler(NULL);
2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    lock_handler_.reset();
2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    state_handler_.reset();
2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected:
2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The state handler that is being tested.
2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<EasyUnlockScreenlockStateHandler> state_handler_;
2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // The user associated with |state_handler_|.
2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  const std::string user_email_;
2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Faked lock handler given to ScreenlockBridge during the test. Abstracts
2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // the screen lock UI.
2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<TestLockHandler> lock_handler_;
2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2335b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest, AuthenticatedTrialRun) {
2345b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetTrialRun();
2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
24334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kUnlockedIconId, lock_handler_->GetCustomIconId());
2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->IsCustomIconTooltipAutoshown());
2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Duplicated state change should be ignored.
2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, AuthenticatedNotInitialRun) {
2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
26334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kUnlockedIconId, lock_handler_->GetCustomIconId());
2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown());
2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick());
2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2695b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest, IsActive) {
2705b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_FALSE(state_handler_->IsActive());
2715b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
2725b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
2735b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_TRUE(state_handler_->IsActive());
2745b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
2755b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_INACTIVE);
2765b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_FALSE(state_handler_->IsActive());
2775b892326406927b709cdaf6c384d4ababf456332Ben Murdoch}
2785b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, BluetoothConnecting) {
2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
2825b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_TRUE(state_handler_->IsActive());
2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
28934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kSpinnerIconId, lock_handler_->GetCustomIconId());
2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_FALSE(lock_handler_->CustomIconHasTooltip());
2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick());
2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Duplicated state change should be ignored.
2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
29934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)TEST_F(EasyUnlockScreenlockStateHandlerTest, HardlockedState) {
30034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->ChangeState(
30134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
30234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
30334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
30434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
30534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
30634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
30734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
30834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
30934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
31034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
31134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
31234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
31334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
31434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
31534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
31634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_TRUE(lock_handler_->CustomIconHasTooltip());
3175b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_TRUE(lock_handler_->IsCustomIconTooltipAutoshown());
31834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick());
31934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
32034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
32134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
32234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
32334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
32434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
32534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)}
32634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
32734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)TEST_F(EasyUnlockScreenlockStateHandlerTest, HardlockedStateNoPairing) {
32834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->ChangeState(
32934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
33034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
33134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
33234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
33334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
33434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
33534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
33634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::NO_PAIRING);
33734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
33834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_FALSE(lock_handler_->HasCustomIcon());
33934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
34034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
34134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)}
34234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, StatesWithLockedIcon) {
3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<EasyUnlockScreenlockStateHandler::State> states;
3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(
3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < states.size(); ++i) {
3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    state_handler_->ChangeState(states[i]);
3555b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    EXPECT_TRUE(state_handler_->IsActive());
3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount())
3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci              lock_handler_->GetAuthType(user_email_))
3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_TRUE(lock_handler_->HasCustomIcon())
3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
36534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)    EXPECT_EQ(kLockedIconId, lock_handler_->GetCustomIconId())
3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_TRUE(lock_handler_->CustomIconHasTooltip())
3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown())
3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick())
3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    state_handler_->ChangeState(states[i]);
3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount())
3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
3805b892326406927b709cdaf6c384d4ababf456332Ben Murdoch// Verifies tooltips are autoshown on initial run.
3815b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest, StatesWithLockedIcon_TrialRun) {
3825b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetTrialRun();
3835b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
3845b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  std::vector<EasyUnlockScreenlockStateHandler::State> states;
3855b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
3865b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
3875b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
3885b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
3895b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  states.push_back(
3905b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
3915b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
3925b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
3935b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  for (size_t i = 0; i < states.size(); ++i) {
3945b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    state_handler_->ChangeState(states[i]);
3955b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    ASSERT_TRUE(lock_handler_->HasCustomIcon())
3965b892326406927b709cdaf6c384d4ababf456332Ben Murdoch        << "State: " << states[i];
3975b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    EXPECT_TRUE(lock_handler_->CustomIconHasTooltip())
3985b892326406927b709cdaf6c384d4ababf456332Ben Murdoch        << "State: " << states[i];
3995b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    EXPECT_TRUE(lock_handler_->IsCustomIconTooltipAutoshown())
4005b892326406927b709cdaf6c384d4ababf456332Ben Murdoch        << "State: " << states[i];
4015b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  }
4025b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4035b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ScreenlockBridge::Get()->SetLockHandler(NULL);
4045b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  lock_handler_.reset(new TestLockHandler(user_email_));
4055b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
4065b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
4075b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4085b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  // After the screen unlocks the tooltips should not be shown anymore.
4095b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  for (size_t i = 0; i < states.size(); ++i) {
4105b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    state_handler_->ChangeState(states[i]);
4115b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    ASSERT_TRUE(lock_handler_->HasCustomIcon())
4125b892326406927b709cdaf6c384d4ababf456332Ben Murdoch        << "State: " << states[i];
4135b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    EXPECT_TRUE(lock_handler_->CustomIconHasTooltip())
4145b892326406927b709cdaf6c384d4ababf456332Ben Murdoch        << "State: " << states[i];
4155b892326406927b709cdaf6c384d4ababf456332Ben Murdoch    EXPECT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown())
4165b892326406927b709cdaf6c384d4ababf456332Ben Murdoch        << "State: " << states[i];
4175b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  }
4185b892326406927b709cdaf6c384d4ababf456332Ben Murdoch}
4195b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4205b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest, SettingTrialRunUpdatesUI) {
4215b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
4225b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
4235b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4245b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
4255b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
4265b892326406927b709cdaf6c384d4ababf456332Ben Murdoch            lock_handler_->GetAuthType(user_email_));
4275b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4285b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
4295b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_FALSE(lock_handler_->IsCustomIconTooltipAutoshown());
4305b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4315b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetTrialRun();
4325b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4335b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
4345b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
4355b892326406927b709cdaf6c384d4ababf456332Ben Murdoch            lock_handler_->GetAuthType(user_email_));
4365b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4375b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
4385b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->IsCustomIconTooltipAutoshown());
4395b892326406927b709cdaf6c384d4ababf456332Ben Murdoch}
4405b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest,
4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       LockScreenClearedOnStateHandlerDestruction) {
4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_.reset();
4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_FALSE(lock_handler_->HasCustomIcon());
4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, StatePreservedWhenScreenUnlocks) {
4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
4671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
4681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
4691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(NULL);
4711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  lock_handler_.reset(new TestLockHandler(user_email_));
4721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
4731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
4741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
4761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
4771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
4781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
4791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
4801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, StateChangeWhileScreenUnlocked) {
4821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
4831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
4841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
4861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
4871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
4881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
4891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(NULL);
4911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  lock_handler_.reset(new TestLockHandler(user_email_));
4921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
4931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
4951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
4961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
4981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
4991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
5001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
5011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
5021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
50334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kSpinnerIconId, lock_handler_->GetCustomIconId());
5041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest,
5071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       HardlockEnabledAfterInitialUnlock) {
5085b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetTrialRun();
5095b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  std::vector<EasyUnlockScreenlockStateHandler::State> states;
5111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(
5121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
5131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(
5141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
5151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
5161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
5171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
5181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
5191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // This one should go last as changing state to AUTHENTICATED enables hard
5201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // locking.
5211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  states.push_back(EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
5221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < states.size(); ++i) {
5241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    state_handler_->ChangeState(states[i]);
5251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_TRUE(lock_handler_->HasCustomIcon()) << "State: " << states[i];
5261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_FALSE(lock_handler_->CustomIconHardlocksOnClick())
5271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
5281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
5291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(NULL);
5311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  lock_handler_.reset(new TestLockHandler(user_email_));
5321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
5331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  for (size_t i = 0; i < states.size(); ++i) {
5351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    state_handler_->ChangeState(states[i]);
5361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ASSERT_TRUE(lock_handler_->HasCustomIcon()) << "State: " << states[i];
5371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick())
5381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        << "State: " << states[i];
5391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
5401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
5411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
5425b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest,
5435b892326406927b709cdaf6c384d4ababf456332Ben Murdoch       NoPairingHardlockClearsIcon) {
5445b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
5455b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
5465b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5475b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
5485b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
5495b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(kLockedIconId, lock_handler_->GetCustomIconId());
5505b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5515b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetHardlockState(
5525b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::NO_PAIRING);
5535b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5545b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
5555b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_FALSE(lock_handler_->HasCustomIcon());
5565b892326406927b709cdaf6c384d4ababf456332Ben Murdoch}
5575b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5585b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest, PairingChangedHardlock) {
5595b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
5605b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
5615b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5625b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
5635b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
5645b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(kLockedIconId, lock_handler_->GetCustomIconId());
5655b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5665b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetHardlockState(
5675b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
5685b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5695b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
5705b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
5715b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
5725b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5735b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
5745b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
5755b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5765b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
5775b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
5785b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
5795b892326406927b709cdaf6c384d4ababf456332Ben Murdoch}
5805b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5815b892326406927b709cdaf6c384d4ababf456332Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest,
5825b892326406927b709cdaf6c384d4ababf456332Ben Murdoch       PairingChangedHardlockIneffectiveOnInitialRun) {
5835b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetTrialRun();
5845b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5855b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->ChangeState(
5865b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
5875b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5885b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
5895b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
5905b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(kLockedIconId, lock_handler_->GetCustomIconId());
5915b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5925b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  state_handler_->SetHardlockState(
5935b892326406927b709cdaf6c384d4ababf456332Ben Murdoch      EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
5945b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
5955b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
5965b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  ASSERT_TRUE(lock_handler_->HasCustomIcon());
5975b892326406927b709cdaf6c384d4ababf456332Ben Murdoch  EXPECT_EQ(kLockedIconId, lock_handler_->GetCustomIconId());
5985b892326406927b709cdaf6c384d4ababf456332Ben Murdoch}
5995b892326406927b709cdaf6c384d4ababf456332Ben Murdoch
6001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, InactiveStateHidesIcon) {
6011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
6031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_TRUE(lock_handler_->HasCustomIcon());
6051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_INACTIVE);
6081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ASSERT_FALSE(lock_handler_->HasCustomIcon());
6101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest,
6131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       AuthenticatedStateClearsPreviousAuthValue) {
6141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_INACTIVE);
6161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  lock_handler_->SetAuthValue(base::ASCIIToUTF16("xxx"));
6181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
6211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(l10n_util::GetStringUTF16(
6231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                IDS_EASY_UNLOCK_SCREENLOCK_USER_POD_AUTH_VALUE),
6241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthValue());
6251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
6281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(base::string16(), lock_handler_->GetAuthValue());
6301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest,
6331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci       ChangingStateDoesNotAffectAuthValueIfAuthTypeDoesNotChange) {
6341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  lock_handler_->SetAuthValue(base::ASCIIToUTF16("xxx"));
6351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
6381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(base::ASCIIToUTF16("xxx"), lock_handler_->GetAuthValue());
6391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
6421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(base::ASCIIToUTF16("xxx"), lock_handler_->GetAuthValue());
6431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_BLUETOOTH_CONNECTING);
6461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(base::ASCIIToUTF16("xxx"), lock_handler_->GetAuthValue());
64734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
64834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kSpinnerIconId, lock_handler_->GetCustomIconId());
6491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest, StateChangesIgnoredIfHardlocked) {
6521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
6541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
65534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
65634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
65734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
65834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
65934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
66034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
66134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
66234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
66334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
66434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
66534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
66634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
6671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
67034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
67134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
6721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
67534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
67634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
67734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
6781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
6791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
6801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(EasyUnlockScreenlockStateHandlerTest,
68234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)       LockScreenChangeableOnLockAfterHardlockReset) {
6831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
6851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
68634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
68734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
68834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(2u, lock_handler_->GetAndResetShowIconCount());
68934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
69034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
69134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::NO_HARDLOCK);
69234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
69334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ScreenlockBridge::Get()->SetLockHandler(NULL);
69434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  lock_handler_.reset(new TestLockHandler(user_email_));
69534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
69634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
6971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
6981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
6991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
70034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
70134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(2u, lock_handler_->GetAndResetShowIconCount());
70234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_TRUE(lock_handler_->HasCustomIcon());
7031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(NULL);
7051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  lock_handler_.reset(new TestLockHandler(user_email_));
7061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
7071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
7081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
7101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->HasCustomIcon());
7111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
7121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
71334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kLockedIconId, lock_handler_->GetCustomIconId());
7141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
7151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  state_handler_->ChangeState(
7161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
7171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
7181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->HasCustomIcon());
7191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_EQ(ScreenlockBridge::LockHandler::USER_CLICK,
7201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci            lock_handler_->GetAuthType(user_email_));
7211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  EXPECT_TRUE(lock_handler_->CustomIconHardlocksOnClick());
7221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
7231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
72434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)TEST_F(EasyUnlockScreenlockStateHandlerTest, HardlockStatePersistsOverUnlocks) {
72534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->ChangeState(
72634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
72734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->SetHardlockState(
72834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
72934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(2u, lock_handler_->GetAndResetShowIconCount());
73034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
73134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ScreenlockBridge::Get()->SetLockHandler(NULL);
73234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  lock_handler_.reset(new TestLockHandler(user_email_));
73334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
73434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ScreenlockBridge::Get()->SetLockHandler(lock_handler_.get());
73534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
73634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(1u, lock_handler_->GetAndResetShowIconCount());
73734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
73834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
73934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  ASSERT_TRUE(lock_handler_->HasCustomIcon());
74034680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(kHardlockedIconId, lock_handler_->GetCustomIconId());
74134680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
74234680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  state_handler_->ChangeState(
74334680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)      EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
74434680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(0u, lock_handler_->GetAndResetShowIconCount());
74534680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_TRUE(lock_handler_->HasCustomIcon());
74634680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)  EXPECT_EQ(ScreenlockBridge::LockHandler::OFFLINE_PASSWORD,
74734680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)            lock_handler_->GetAuthType(user_email_));
74834680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)}
74934680572440d7894ef8dafce81d8039ed80726a2Torne (Richard Coles)
750e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben MurdochTEST_F(EasyUnlockScreenlockStateHandlerTest, NoOverrideOnlineSignin) {
751e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  lock_handler_->SetAuthType(user_email_,
752e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch                             ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
753e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch                             base::string16());
754e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
755e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  std::vector<EasyUnlockScreenlockStateHandler::State> states;
756e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_BLUETOOTH);
757e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_NO_PHONE);
758e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
759e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
760e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(
761e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch      EasyUnlockScreenlockStateHandler::STATE_PHONE_NOT_AUTHENTICATED);
762e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_LOCKED);
763e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNLOCKABLE);
764e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_PHONE_UNSUPPORTED);
765e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  states.push_back(EasyUnlockScreenlockStateHandler::STATE_AUTHENTICATED);
766e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
767e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  for (size_t i = 0; i < states.size(); ++i) {
768e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    state_handler_->ChangeState(states[i]);
769e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    EXPECT_EQ(ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
770e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch              lock_handler_->GetAuthType(user_email_));
771e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  }
772e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
773e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  std::vector<EasyUnlockScreenlockStateHandler::HardlockState> hardlock_states;
774e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::NO_HARDLOCK);
775e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::USER_HARDLOCK);
776e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::PAIRING_CHANGED);
777e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::PAIRING_ADDED);
778e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::NO_PAIRING);
779e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  hardlock_states.push_back(EasyUnlockScreenlockStateHandler::LOGIN_FAILED);
780e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
781e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  for (size_t i = 0; i < hardlock_states.size(); ++i) {
782e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    state_handler_->SetHardlockState(hardlock_states[i]);
783e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch    EXPECT_EQ(ScreenlockBridge::LockHandler::ONLINE_SIGN_IN,
784e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch              lock_handler_->GetAuthType(user_email_));
785e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch  }
786e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch}
787e4256316f8b5e8d1ec0df1f7762771622a53fa63Ben Murdoch
7881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace
789