| Index: chrome/browser/extensions/api/identity/account_tracker_unittest.cc
|
| diff --git a/chrome/browser/extensions/api/identity/account_tracker_unittest.cc b/chrome/browser/extensions/api/identity/account_tracker_unittest.cc
|
| deleted file mode 100644
|
| index 216aa3e84f865423383128eb37e3c22cf16a0192..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/extensions/api/identity/account_tracker_unittest.cc
|
| +++ /dev/null
|
| @@ -1,729 +0,0 @@
|
| -// Copyright 2013 The Chromium Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -
|
| -#include "chrome/browser/extensions/api/identity/account_tracker.h"
|
| -
|
| -#include <algorithm>
|
| -#include <vector>
|
| -
|
| -#include "base/strings/stringprintf.h"
|
| -#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
|
| -#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
|
| -#include "chrome/browser/signin/fake_signin_manager.h"
|
| -#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
|
| -#include "chrome/browser/signin/signin_manager_factory.h"
|
| -#include "chrome/test/base/testing_profile.h"
|
| -#include "components/signin/core/browser/signin_manager_base.h"
|
| -#include "content/public/test/test_browser_thread_bundle.h"
|
| -#include "google_apis/gaia/gaia_oauth_client.h"
|
| -#include "net/http/http_status_code.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "net/url_request/url_fetcher_delegate.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -// TODO(courage): Account removal really only applies to the primary account,
|
| -// because that's the only account tracked by the SigninManager. Many of the
|
| -// tests here remove non-primary accounts. They still properly test the account
|
| -// state machine, but it may be confusing to readers. Update these tests to
|
| -// avoid causing confusion.
|
| -
|
| -namespace {
|
| -
|
| -const char kPrimaryAccountKey[] = "primary_account@example.com";
|
| -
|
| -enum TrackingEventType {
|
| - ADDED,
|
| - REMOVED,
|
| - SIGN_IN,
|
| - SIGN_OUT
|
| -};
|
| -
|
| -std::string AccountKeyToObfuscatedId(const std::string email) {
|
| - return "obfid-" + email;
|
| -}
|
| -
|
| -class TrackingEvent {
|
| - public:
|
| - TrackingEvent(TrackingEventType type,
|
| - const std::string& account_key,
|
| - const std::string& gaia_id)
|
| - : type_(type),
|
| - account_key_(account_key),
|
| - gaia_id_(gaia_id) {}
|
| -
|
| - TrackingEvent(TrackingEventType type,
|
| - const std::string& account_key)
|
| - : type_(type),
|
| - account_key_(account_key),
|
| - gaia_id_(AccountKeyToObfuscatedId(account_key)) {}
|
| -
|
| - bool operator==(const TrackingEvent& event) const {
|
| - return type_ == event.type_ && account_key_ == event.account_key_ &&
|
| - gaia_id_ == event.gaia_id_;
|
| - }
|
| -
|
| - std::string ToString() const {
|
| - const char * typestr = "INVALID";
|
| - switch (type_) {
|
| - case ADDED:
|
| - typestr = "ADD";
|
| - break;
|
| - case REMOVED:
|
| - typestr = "REM";
|
| - break;
|
| - case SIGN_IN:
|
| - typestr = " IN";
|
| - break;
|
| - case SIGN_OUT:
|
| - typestr = "OUT";
|
| - break;
|
| - }
|
| - return base::StringPrintf("{ type: %s, email: %s, gaia: %s }",
|
| - typestr,
|
| - account_key_.c_str(),
|
| - gaia_id_.c_str());
|
| - }
|
| -
|
| - private:
|
| - friend bool CompareByUser(TrackingEvent a, TrackingEvent b);
|
| -
|
| - TrackingEventType type_;
|
| - std::string account_key_;
|
| - std::string gaia_id_;
|
| -};
|
| -
|
| -bool CompareByUser(TrackingEvent a, TrackingEvent b) {
|
| - return a.account_key_ < b.account_key_;
|
| -}
|
| -
|
| -std::string Str(const std::vector<TrackingEvent>& events) {
|
| - std::string str = "[";
|
| - bool needs_comma = false;
|
| - for (std::vector<TrackingEvent>::const_iterator it =
|
| - events.begin(); it != events.end(); ++it) {
|
| - if (needs_comma)
|
| - str += ",\n ";
|
| - needs_comma = true;
|
| - str += it->ToString();
|
| - }
|
| - str += "]";
|
| - return str;
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -namespace extensions {
|
| -
|
| -class AccountTrackerObserver : public AccountTracker::Observer {
|
| - public:
|
| - AccountTrackerObserver() {}
|
| - virtual ~AccountTrackerObserver() {}
|
| -
|
| - testing::AssertionResult CheckEvents();
|
| - testing::AssertionResult CheckEvents(const TrackingEvent& e1);
|
| - testing::AssertionResult CheckEvents(const TrackingEvent& e1,
|
| - const TrackingEvent& e2);
|
| - testing::AssertionResult CheckEvents(const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3);
|
| - testing::AssertionResult CheckEvents(const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3,
|
| - const TrackingEvent& e4);
|
| - testing::AssertionResult CheckEvents(const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3,
|
| - const TrackingEvent& e4,
|
| - const TrackingEvent& e5);
|
| - testing::AssertionResult CheckEvents(const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3,
|
| - const TrackingEvent& e4,
|
| - const TrackingEvent& e5,
|
| - const TrackingEvent& e6);
|
| - void Clear();
|
| - void SortEventsByUser();
|
| -
|
| - // AccountTracker::Observer implementation
|
| - virtual void OnAccountAdded(const AccountIds& ids) OVERRIDE;
|
| - virtual void OnAccountRemoved(const AccountIds& ids) OVERRIDE;
|
| - virtual void OnAccountSignInChanged(const AccountIds& ids, bool is_signed_in)
|
| - OVERRIDE;
|
| -
|
| - private:
|
| - testing::AssertionResult CheckEvents(
|
| - const std::vector<TrackingEvent>& events);
|
| -
|
| - std::vector<TrackingEvent> events_;
|
| -};
|
| -
|
| -void AccountTrackerObserver::OnAccountAdded(const AccountIds& ids) {
|
| - events_.push_back(TrackingEvent(ADDED, ids.email, ids.gaia));
|
| -}
|
| -
|
| -void AccountTrackerObserver::OnAccountRemoved(const AccountIds& ids) {
|
| - events_.push_back(TrackingEvent(REMOVED, ids.email, ids.gaia));
|
| -}
|
| -
|
| -void AccountTrackerObserver::OnAccountSignInChanged(const AccountIds& ids,
|
| - bool is_signed_in) {
|
| - events_.push_back(
|
| - TrackingEvent(is_signed_in ? SIGN_IN : SIGN_OUT, ids.email, ids.gaia));
|
| -}
|
| -
|
| -void AccountTrackerObserver::Clear() {
|
| - events_.clear();
|
| -}
|
| -
|
| -void AccountTrackerObserver::SortEventsByUser() {
|
| - std::stable_sort(events_.begin(), events_.end(), CompareByUser);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents() {
|
| - std::vector<TrackingEvent> events;
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const TrackingEvent& e1) {
|
| - std::vector<TrackingEvent> events;
|
| - events.push_back(e1);
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const TrackingEvent& e1,
|
| - const TrackingEvent& e2) {
|
| - std::vector<TrackingEvent> events;
|
| - events.push_back(e1);
|
| - events.push_back(e2);
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3) {
|
| - std::vector<TrackingEvent> events;
|
| - events.push_back(e1);
|
| - events.push_back(e2);
|
| - events.push_back(e3);
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3,
|
| - const TrackingEvent& e4) {
|
| - std::vector<TrackingEvent> events;
|
| - events.push_back(e1);
|
| - events.push_back(e2);
|
| - events.push_back(e3);
|
| - events.push_back(e4);
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3,
|
| - const TrackingEvent& e4,
|
| - const TrackingEvent& e5) {
|
| - std::vector<TrackingEvent> events;
|
| - events.push_back(e1);
|
| - events.push_back(e2);
|
| - events.push_back(e3);
|
| - events.push_back(e4);
|
| - events.push_back(e5);
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const TrackingEvent& e1,
|
| - const TrackingEvent& e2,
|
| - const TrackingEvent& e3,
|
| - const TrackingEvent& e4,
|
| - const TrackingEvent& e5,
|
| - const TrackingEvent& e6) {
|
| - std::vector<TrackingEvent> events;
|
| - events.push_back(e1);
|
| - events.push_back(e2);
|
| - events.push_back(e3);
|
| - events.push_back(e4);
|
| - events.push_back(e5);
|
| - events.push_back(e6);
|
| - return CheckEvents(events);
|
| -}
|
| -
|
| -testing::AssertionResult AccountTrackerObserver::CheckEvents(
|
| - const std::vector<TrackingEvent>& events) {
|
| - std::string maybe_newline = (events.size() + events_.size()) > 2 ? "\n" : "";
|
| - testing::AssertionResult result(
|
| - (events_ == events)
|
| - ? testing::AssertionSuccess()
|
| - : (testing::AssertionFailure()
|
| - << "Expected " << maybe_newline << Str(events) << ", "
|
| - << maybe_newline << "Got " << maybe_newline << Str(events_)));
|
| - events_.clear();
|
| - return result;
|
| -}
|
| -
|
| -class IdentityAccountTrackerTest : public testing::Test {
|
| - public:
|
| - IdentityAccountTrackerTest() {}
|
| -
|
| - virtual ~IdentityAccountTrackerTest() {}
|
| -
|
| - virtual void SetUp() OVERRIDE {
|
| - TestingProfile::Builder builder;
|
| - builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
|
| - BuildFakeProfileOAuth2TokenService);
|
| - builder.AddTestingFactory(SigninManagerFactory::GetInstance(),
|
| - FakeSigninManagerBase::Build);
|
| -
|
| - test_profile_ = builder.Build();
|
| -
|
| - fake_oauth2_token_service_ = static_cast<FakeProfileOAuth2TokenService*>(
|
| - ProfileOAuth2TokenServiceFactory::GetForProfile(test_profile_.get()));
|
| -
|
| - fake_signin_manager_ = static_cast<FakeSigninManagerForTesting*>(
|
| - SigninManagerFactory::GetForProfile(test_profile_.get()));
|
| -#if defined(OS_CHROMEOS)
|
| - // We don't sign the primary user in and out on ChromeOS, so set the
|
| - // username once in setup.
|
| - fake_signin_manager_->SetAuthenticatedUsername(kPrimaryAccountKey);
|
| -#endif
|
| -
|
| - account_tracker_.reset(new AccountTracker(test_profile_.get()));
|
| - account_tracker_->AddObserver(&observer_);
|
| -
|
| - // Start off signed into the primary account, because most tests need the
|
| - // profile to be signed in. Remove the initial sign-in events that the
|
| - // tests don't care about.
|
| - NotifyTokenAvailable(kPrimaryAccountKey);
|
| - ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
|
| - observer()->Clear();
|
| - }
|
| -
|
| - virtual void TearDown() OVERRIDE {
|
| - account_tracker_->RemoveObserver(&observer_);
|
| - account_tracker_->Shutdown();
|
| - }
|
| -
|
| - Profile* profile() {
|
| - return test_profile_.get();
|
| - }
|
| -
|
| - AccountTrackerObserver* observer() {
|
| - return &observer_;
|
| - }
|
| -
|
| - AccountTracker* account_tracker() {
|
| - return account_tracker_.get();
|
| - }
|
| -
|
| - // Helpers to pass fake events to the tracker.
|
| -
|
| - void NotifyRemoveAccount(const std::string& username) {
|
| -#if !defined(OS_CHROMEOS)
|
| - if (username == kPrimaryAccountKey)
|
| - fake_signin_manager_->SignOut(signin_metrics::SIGNOUT_TEST);
|
| - else
|
| - account_tracker()->GoogleSignedOut(username);
|
| -#else
|
| - account_tracker()->GoogleSignedOut(username);
|
| -#endif
|
| - }
|
| -
|
| - void NotifyTokenAvailable(const std::string& username) {
|
| - fake_oauth2_token_service_->IssueRefreshTokenForUser(username,
|
| - "refresh_token");
|
| -#if !defined(OS_CHROMEOS)
|
| - if (username == kPrimaryAccountKey)
|
| - fake_signin_manager_->OnExternalSigninCompleted(username);
|
| -#endif
|
| - }
|
| -
|
| - void NotifyTokenRevoked(const std::string& username) {
|
| - fake_oauth2_token_service_->IssueRefreshTokenForUser(username,
|
| - std::string());
|
| - }
|
| -
|
| - // Helpers to fake access token and user info fetching
|
| - void IssueAccessToken(const std::string& username) {
|
| - fake_oauth2_token_service_->IssueAllTokensForAccount(
|
| - username, "access_token-" + username, base::Time::Max());
|
| - }
|
| -
|
| - std::string GetValidTokenInfoResponse(const std::string account_key) {
|
| - return std::string("{ \"id\": \"") + AccountKeyToObfuscatedId(account_key) +
|
| - "\" }";
|
| - }
|
| -
|
| - void ReturnOAuthUrlFetchResults(int fetcher_id,
|
| - net::HttpStatusCode response_code,
|
| - const std::string& response_string);
|
| -
|
| - void ReturnOAuthUrlFetchSuccess(const std::string& account_key);
|
| - void ReturnOAuthUrlFetchFailure(const std::string& account_key);
|
| -
|
| - private:
|
| - scoped_ptr<TestingProfile> test_profile_;
|
| - net::TestURLFetcherFactory test_fetcher_factory_;
|
| - FakeProfileOAuth2TokenService* fake_oauth2_token_service_;
|
| - FakeSigninManagerForTesting* fake_signin_manager_;
|
| - content::TestBrowserThreadBundle thread_bundle_;
|
| -
|
| - scoped_ptr<AccountTracker> account_tracker_;
|
| - AccountTrackerObserver observer_;
|
| -};
|
| -
|
| -void IdentityAccountTrackerTest::ReturnOAuthUrlFetchResults(
|
| - int fetcher_id,
|
| - net::HttpStatusCode response_code,
|
| - const std::string& response_string) {
|
| -
|
| - net::TestURLFetcher* fetcher =
|
| - test_fetcher_factory_.GetFetcherByID(fetcher_id);
|
| - ASSERT_TRUE(fetcher);
|
| - fetcher->set_response_code(response_code);
|
| - fetcher->SetResponseString(response_string);
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| -}
|
| -
|
| -void IdentityAccountTrackerTest::ReturnOAuthUrlFetchSuccess(
|
| - const std::string& account_key) {
|
| - IssueAccessToken(account_key);
|
| - ReturnOAuthUrlFetchResults(gaia::GaiaOAuthClient::kUrlFetcherId,
|
| - net::HTTP_OK,
|
| - GetValidTokenInfoResponse(account_key));
|
| -}
|
| -
|
| -void IdentityAccountTrackerTest::ReturnOAuthUrlFetchFailure(
|
| - const std::string& account_key) {
|
| - IssueAccessToken(account_key);
|
| - ReturnOAuthUrlFetchResults(
|
| - gaia::GaiaOAuthClient::kUrlFetcherId, net::HTTP_BAD_REQUEST, "");
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, Available) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, Revoke) {
|
| - account_tracker()->OnRefreshTokenRevoked("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, Remove) {
|
| - NotifyRemoveAccount("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableRemoveFetchCancelAvailable) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - NotifyRemoveAccount("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableRemoveAvailable) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - NotifyRemoveAccount("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com"),
|
| - TrackingEvent(SIGN_OUT, "user@example.com"),
|
| - TrackingEvent(REMOVED, "user@example.com")));
|
| -
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableRevokeAvailable) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - NotifyTokenRevoked("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com"),
|
| - TrackingEvent(SIGN_OUT, "user@example.com")));
|
| -
|
| - NotifyTokenAvailable("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableRevokeAvailableWithPendingFetch) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - NotifyTokenRevoked("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableRevokeRemove) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - NotifyTokenRevoked("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com"),
|
| - TrackingEvent(SIGN_OUT, "user@example.com")));
|
| -
|
| - NotifyRemoveAccount("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(REMOVED, "user@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableRevokeRevoke) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - NotifyTokenRevoked("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com"),
|
| - TrackingEvent(SIGN_OUT, "user@example.com")));
|
| -
|
| - NotifyTokenRevoked("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableAvailable) {
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -
|
| - NotifyTokenAvailable("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, TwoAccounts) {
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - ReturnOAuthUrlFetchSuccess("alpha@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "alpha@example.com"),
|
| - TrackingEvent(SIGN_IN, "alpha@example.com")));
|
| -
|
| - NotifyTokenAvailable("beta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("beta@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "beta@example.com"),
|
| - TrackingEvent(SIGN_IN, "beta@example.com")));
|
| -
|
| - NotifyRemoveAccount("alpha@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, "alpha@example.com"),
|
| - TrackingEvent(REMOVED, "alpha@example.com")));
|
| -
|
| - NotifyRemoveAccount("beta@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, "beta@example.com"),
|
| - TrackingEvent(REMOVED, "beta@example.com")));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, GlobalErrors) {
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - ReturnOAuthUrlFetchSuccess("alpha@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "alpha@example.com"),
|
| - TrackingEvent(SIGN_IN, "alpha@example.com")));
|
| - NotifyTokenAvailable("beta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("beta@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "beta@example.com"),
|
| - TrackingEvent(SIGN_IN, "beta@example.com")));
|
| -
|
| - EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
|
| - account_tracker()->GetAuthStatus());
|
| -
|
| - account_tracker()->ReportAuthError(
|
| - "beta@example.com",
|
| - GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED));
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, "beta@example.com")));
|
| - EXPECT_EQ(GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
|
| - account_tracker()->GetAuthStatus());
|
| -
|
| - account_tracker()->ReportAuthError(
|
| - "alpha@example.com",
|
| - GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED));
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, "alpha@example.com")));
|
| - EXPECT_EQ(GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
|
| - account_tracker()->GetAuthStatus());
|
| -
|
| - NotifyRemoveAccount("alpha@example.com");
|
| - EXPECT_EQ(GoogleServiceAuthError(GoogleServiceAuthError::CONNECTION_FAILED),
|
| - account_tracker()->GetAuthStatus());
|
| -
|
| - NotifyTokenAvailable("beta@example.com");
|
| - EXPECT_EQ(GoogleServiceAuthError::AuthErrorNone(),
|
| - account_tracker()->GetAuthStatus());
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, AvailableTokenFetchFailAvailable) {
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - ReturnOAuthUrlFetchFailure("alpha@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -
|
| - NotifyTokenAvailable("user@example.com");
|
| - ReturnOAuthUrlFetchSuccess("user@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "user@example.com"),
|
| - TrackingEvent(SIGN_IN, "user@example.com")));
|
| -}
|
| -
|
| -// The Chrome OS fake sign-in manager doesn't do sign-in or sign-out.
|
| -#if !defined(OS_CHROMEOS)
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignIn) {
|
| - NotifyRemoveAccount(kPrimaryAccountKey);
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, kPrimaryAccountKey),
|
| - TrackingEvent(REMOVED, kPrimaryAccountKey)));
|
| -
|
| - NotifyTokenAvailable(kPrimaryAccountKey);
|
| - ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, kPrimaryAccountKey),
|
| - TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, PrimarySignOutSignInTwoAccounts) {
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - ReturnOAuthUrlFetchSuccess("alpha@example.com");
|
| - NotifyTokenAvailable("beta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("beta@example.com");
|
| -
|
| - observer()->SortEventsByUser();
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "alpha@example.com"),
|
| - TrackingEvent(SIGN_IN, "alpha@example.com"),
|
| - TrackingEvent(ADDED, "beta@example.com"),
|
| - TrackingEvent(SIGN_IN, "beta@example.com")));
|
| -
|
| - NotifyRemoveAccount(kPrimaryAccountKey);
|
| - observer()->SortEventsByUser();
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, "alpha@example.com"),
|
| - TrackingEvent(REMOVED, "alpha@example.com"),
|
| - TrackingEvent(SIGN_OUT, "beta@example.com"),
|
| - TrackingEvent(REMOVED, "beta@example.com"),
|
| - TrackingEvent(SIGN_OUT, kPrimaryAccountKey),
|
| - TrackingEvent(REMOVED, kPrimaryAccountKey)));
|
| -
|
| - // No events fire at all while profile is signed out.
|
| - NotifyTokenRevoked("alpha@example.com");
|
| - NotifyTokenAvailable("gamma@example.com");
|
| - EXPECT_TRUE(observer()->CheckEvents());
|
| -
|
| - // Signing the profile in again will resume tracking all accounts.
|
| - NotifyTokenAvailable(kPrimaryAccountKey);
|
| - ReturnOAuthUrlFetchSuccess("beta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("gamma@example.com");
|
| - ReturnOAuthUrlFetchSuccess(kPrimaryAccountKey);
|
| - observer()->SortEventsByUser();
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(ADDED, "beta@example.com"),
|
| - TrackingEvent(SIGN_IN, "beta@example.com"),
|
| - TrackingEvent(ADDED, "gamma@example.com"),
|
| - TrackingEvent(SIGN_IN, "gamma@example.com"),
|
| - TrackingEvent(ADDED, kPrimaryAccountKey),
|
| - TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
|
| -
|
| - // Revoking the primary token does not affect other accounts.
|
| - NotifyTokenRevoked(kPrimaryAccountKey);
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_OUT, kPrimaryAccountKey)));
|
| -
|
| - NotifyTokenAvailable(kPrimaryAccountKey);
|
| - EXPECT_TRUE(observer()->CheckEvents(
|
| - TrackingEvent(SIGN_IN, kPrimaryAccountKey)));
|
| -}
|
| -
|
| -#endif // !defined(OS_CHROMEOS)
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, GetAccountsPrimary) {
|
| - std::vector<AccountIds> ids = account_tracker()->GetAccounts();
|
| - EXPECT_EQ(1ul, ids.size());
|
| - EXPECT_EQ(kPrimaryAccountKey, ids[0].account_key);
|
| - EXPECT_EQ(AccountKeyToObfuscatedId(kPrimaryAccountKey), ids[0].gaia);
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, GetAccountsSignedOut) {
|
| - NotifyTokenRevoked(kPrimaryAccountKey);
|
| -
|
| - std::vector<AccountIds> ids = account_tracker()->GetAccounts();
|
| - EXPECT_EQ(0ul, ids.size());
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, GetAccountsOnlyReturnAccountsWithTokens) {
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - NotifyTokenAvailable("beta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("beta@example.com");
|
| -
|
| - std::vector<AccountIds> ids = account_tracker()->GetAccounts();
|
| - EXPECT_EQ(2ul, ids.size());
|
| - EXPECT_EQ(kPrimaryAccountKey, ids[0].account_key);
|
| - EXPECT_EQ(AccountKeyToObfuscatedId(kPrimaryAccountKey), ids[0].gaia);
|
| - EXPECT_EQ("beta@example.com", ids[1].account_key);
|
| - EXPECT_EQ(AccountKeyToObfuscatedId("beta@example.com"), ids[1].gaia);
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest, GetAccountsSortOrder) {
|
| - NotifyTokenAvailable("zeta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("zeta@example.com");
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - ReturnOAuthUrlFetchSuccess("alpha@example.com");
|
| -
|
| - // The primary account will be first in the vector. Remaining accounts
|
| - // will be sorted by gaia ID.
|
| - std::vector<AccountIds> ids = account_tracker()->GetAccounts();
|
| - EXPECT_EQ(3ul, ids.size());
|
| - EXPECT_EQ(kPrimaryAccountKey, ids[0].account_key);
|
| - EXPECT_EQ(AccountKeyToObfuscatedId(kPrimaryAccountKey), ids[0].gaia);
|
| - EXPECT_EQ("alpha@example.com", ids[1].account_key);
|
| - EXPECT_EQ(AccountKeyToObfuscatedId("alpha@example.com"), ids[1].gaia);
|
| - EXPECT_EQ("zeta@example.com", ids[2].account_key);
|
| - EXPECT_EQ(AccountKeyToObfuscatedId("zeta@example.com"), ids[2].gaia);
|
| -}
|
| -
|
| -TEST_F(IdentityAccountTrackerTest,
|
| - GetAccountsReturnNothingWhenPrimarySignedOut) {
|
| - NotifyTokenAvailable("zeta@example.com");
|
| - ReturnOAuthUrlFetchSuccess("zeta@example.com");
|
| - NotifyTokenAvailable("alpha@example.com");
|
| - ReturnOAuthUrlFetchSuccess("alpha@example.com");
|
| -
|
| - NotifyTokenRevoked(kPrimaryAccountKey);
|
| -
|
| - std::vector<AccountIds> ids = account_tracker()->GetAccounts();
|
| - EXPECT_EQ(0ul, ids.size());
|
| -}
|
| -
|
| -} // namespace extensions
|
|
|