Commit 042810ea authored by Marc Treib's avatar Marc Treib Committed by Commit Bot

OneGoogleBar on local NTP: Use cookie auth instead of OAuth2

This is achieved by talking to a different endpoint for fetching the
OGB sources, which accepts cookies. As a consequence, the cached data
is now cleared when the Gaia cookies change, rather than when the
SigninManager state changes.

Bug: 740462
Change-Id: Id230a118507e32e6f1a17c103c93c8eb5ccb0ba6
Reviewed-on: https://chromium-review.googlesource.com/595990
Commit-Queue: Marc Treib <treib@chromium.org>
Reviewed-by: default avatarChris Pickel <sfiera@chromium.org>
Cr-Commit-Position: refs/heads/master@{#492008}
parent 70fc047e
...@@ -15,8 +15,6 @@ ...@@ -15,8 +15,6 @@
#include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h" #include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h"
class GoogleURLTracker; class GoogleURLTracker;
class OAuth2TokenService;
class SigninManagerBase;
namespace base { namespace base {
class Value; class Value;
...@@ -29,11 +27,12 @@ class URLRequestContextGetter; ...@@ -29,11 +27,12 @@ class URLRequestContextGetter;
struct OneGoogleBarData; struct OneGoogleBarData;
// TODO(treib): This class uses cookies for authentication. After "Dice" account
// consistency launches, we should switch to using OAuth2 instead.
// See crbug.com/751534.
class OneGoogleBarFetcherImpl : public OneGoogleBarFetcher { class OneGoogleBarFetcherImpl : public OneGoogleBarFetcher {
public: public:
OneGoogleBarFetcherImpl(SigninManagerBase* signin_manager, OneGoogleBarFetcherImpl(net::URLRequestContextGetter* request_context,
OAuth2TokenService* token_service,
net::URLRequestContextGetter* request_context,
GoogleURLTracker* google_url_tracker); GoogleURLTracker* google_url_tracker);
~OneGoogleBarFetcherImpl() override; ~OneGoogleBarFetcherImpl() override;
...@@ -51,8 +50,6 @@ class OneGoogleBarFetcherImpl : public OneGoogleBarFetcher { ...@@ -51,8 +50,6 @@ class OneGoogleBarFetcherImpl : public OneGoogleBarFetcher {
void Respond(Status status, const base::Optional<OneGoogleBarData>& data); void Respond(Status status, const base::Optional<OneGoogleBarData>& data);
SigninManagerBase* signin_manager_;
OAuth2TokenService* token_service_;
net::URLRequestContextGetter* request_context_; net::URLRequestContextGetter* request_context_;
GoogleURLTracker* google_url_tracker_; GoogleURLTracker* google_url_tracker_;
......
...@@ -15,12 +15,6 @@ ...@@ -15,12 +15,6 @@
#include "chrome/browser/search/one_google_bar/one_google_bar_data.h" #include "chrome/browser/search/one_google_bar/one_google_bar_data.h"
#include "components/google/core/browser/google_url_tracker.h" #include "components/google/core/browser/google_url_tracker.h"
#include "components/safe_json/testing_json_parser.h" #include "components/safe_json/testing_json_parser.h"
#include "components/signin/core/browser/account_tracker_service.h"
#include "components/signin/core/browser/fake_profile_oauth2_token_service.h"
#include "components/signin/core/browser/fake_signin_manager.h"
#include "components/signin/core/browser/test_signin_client.h"
#include "components/sync_preferences/testing_pref_service_syncable.h"
#include "google_apis/gaia/fake_oauth2_token_service_delegate.h"
#include "net/http/http_request_headers.h" #include "net/http/http_request_headers.h"
#include "net/http/http_status_code.h" #include "net/http/http_status_code.h"
#include "net/url_request/test_url_fetcher_factory.h" #include "net/url_request/test_url_fetcher_factory.h"
...@@ -37,10 +31,10 @@ using testing::StartsWith; ...@@ -37,10 +31,10 @@ using testing::StartsWith;
namespace { namespace {
const char kMinimalValidResponse[] = R"json({"oneGoogleBar": { const char kMinimalValidResponse[] = R"json({"update": { "ogb": {
"html": { "privateDoNotAccessOrElseSafeHtmlWrappedValue": "" }, "html": { "private_do_not_access_or_else_safe_html_wrapped_value": "" },
"pageHooks": {} "page_hooks": {}
}})json"; }}})json";
// Required to instantiate a GoogleUrlTracker in UNIT_TEST_MODE. // Required to instantiate a GoogleUrlTracker in UNIT_TEST_MODE.
class GoogleURLTrackerClientStub : public GoogleURLTrackerClient { class GoogleURLTrackerClientStub : public GoogleURLTrackerClient {
...@@ -61,39 +55,13 @@ class GoogleURLTrackerClientStub : public GoogleURLTrackerClient { ...@@ -61,39 +55,13 @@ class GoogleURLTrackerClientStub : public GoogleURLTrackerClient {
class OneGoogleBarFetcherImplTest : public testing::Test { class OneGoogleBarFetcherImplTest : public testing::Test {
public: public:
OneGoogleBarFetcherImplTest() OneGoogleBarFetcherImplTest()
: signin_client_(&pref_service_), : task_runner_(new base::TestSimpleTaskRunner()),
signin_manager_(&signin_client_, &account_tracker_),
task_runner_(new base::TestSimpleTaskRunner()),
request_context_getter_( request_context_getter_(
new net::TestURLRequestContextGetter(task_runner_)), new net::TestURLRequestContextGetter(task_runner_)),
token_service_(base::MakeUnique<FakeOAuth2TokenServiceDelegate>(
request_context_getter_.get())),
google_url_tracker_(base::MakeUnique<GoogleURLTrackerClientStub>(), google_url_tracker_(base::MakeUnique<GoogleURLTrackerClientStub>(),
GoogleURLTracker::UNIT_TEST_MODE), GoogleURLTracker::UNIT_TEST_MODE),
one_google_bar_fetcher_(&signin_manager_, one_google_bar_fetcher_(request_context_getter_.get(),
&token_service_, &google_url_tracker_) {}
request_context_getter_.get(),
&google_url_tracker_) {
SigninManagerBase::RegisterProfilePrefs(pref_service_.registry());
SigninManagerBase::RegisterPrefs(pref_service_.registry());
}
void SignIn() {
signin_manager_.SignIn("account");
token_service_.GetDelegate()->UpdateCredentials("account", "refresh_token");
}
void IssueAccessToken() {
token_service_.IssueAllTokensForAccount(
"account", "access_token",
base::Time::Now() + base::TimeDelta::FromHours(1));
}
void IssueAccessTokenError() {
token_service_.IssueErrorForAllPendingRequestsForAccount(
"account",
GoogleServiceAuthError(GoogleServiceAuthError::SERVICE_UNAVAILABLE));
}
net::TestURLFetcher* GetRunningURLFetcher() { net::TestURLFetcher* GetRunningURLFetcher() {
// All created URLFetchers have ID 0 by default. // All created URLFetchers have ID 0 by default.
...@@ -137,40 +105,18 @@ class OneGoogleBarFetcherImplTest : public testing::Test { ...@@ -137,40 +105,18 @@ class OneGoogleBarFetcherImplTest : public testing::Test {
safe_json::TestingJsonParser::ScopedFactoryOverride factory_override_; safe_json::TestingJsonParser::ScopedFactoryOverride factory_override_;
net::TestURLFetcherFactory url_fetcher_factory_; net::TestURLFetcherFactory url_fetcher_factory_;
sync_preferences::TestingPrefServiceSyncable pref_service_;
TestSigninClient signin_client_;
AccountTrackerService account_tracker_;
FakeSigninManagerBase signin_manager_;
scoped_refptr<base::TestSimpleTaskRunner> task_runner_; scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_; scoped_refptr<net::TestURLRequestContextGetter> request_context_getter_;
FakeProfileOAuth2TokenService token_service_;
GoogleURLTracker google_url_tracker_; GoogleURLTracker google_url_tracker_;
OneGoogleBarFetcherImpl one_google_bar_fetcher_; OneGoogleBarFetcherImpl one_google_bar_fetcher_;
}; };
TEST_F(OneGoogleBarFetcherImplTest, UnauthenticatedRequestReturns) { TEST_F(OneGoogleBarFetcherImplTest, RequestReturns) {
base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback;
one_google_bar_fetcher()->Fetch(callback.Get());
base::Optional<OneGoogleBarData> data;
EXPECT_CALL(callback, Run(OneGoogleBarFetcher::Status::OK, _))
.WillOnce(SaveArg<1>(&data));
RespondWithData(kMinimalValidResponse);
EXPECT_TRUE(data.has_value());
}
TEST_F(OneGoogleBarFetcherImplTest, AuthenticatedRequestReturns) {
SignIn();
base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback; base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback;
one_google_bar_fetcher()->Fetch(callback.Get()); one_google_bar_fetcher()->Fetch(callback.Get());
IssueAccessToken();
base::Optional<OneGoogleBarData> data; base::Optional<OneGoogleBarData> data;
EXPECT_CALL(callback, Run(OneGoogleBarFetcher::Status::OK, _)) EXPECT_CALL(callback, Run(OneGoogleBarFetcher::Status::OK, _))
.WillOnce(SaveArg<1>(&data)); .WillOnce(SaveArg<1>(&data));
...@@ -179,57 +125,6 @@ TEST_F(OneGoogleBarFetcherImplTest, AuthenticatedRequestReturns) { ...@@ -179,57 +125,6 @@ TEST_F(OneGoogleBarFetcherImplTest, AuthenticatedRequestReturns) {
EXPECT_TRUE(data.has_value()); EXPECT_TRUE(data.has_value());
} }
TEST_F(OneGoogleBarFetcherImplTest, UnauthenticatedRequestHasApiKey) {
base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback;
one_google_bar_fetcher()->Fetch(callback.Get());
// The request should have an API key (as a query param).
EXPECT_THAT(GetRunningURLFetcher()->GetOriginalURL().query(),
StartsWith("key="));
// But no "Authorization" header.
net::HttpRequestHeaders headers;
GetRunningURLFetcher()->GetExtraRequestHeaders(&headers);
EXPECT_FALSE(headers.HasHeader("Authorization"));
}
TEST_F(OneGoogleBarFetcherImplTest, AuthenticatedRequestHasAuthHeader) {
SignIn();
base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback;
one_google_bar_fetcher()->Fetch(callback.Get());
IssueAccessToken();
// The request should *not* have an API key (as a query param).
EXPECT_THAT(GetRunningURLFetcher()->GetOriginalURL().query(), IsEmpty());
// It should have an "Authorization" header.
net::HttpRequestHeaders headers;
GetRunningURLFetcher()->GetExtraRequestHeaders(&headers);
EXPECT_TRUE(headers.HasHeader("Authorization"));
}
TEST_F(OneGoogleBarFetcherImplTest,
AuthenticatedRequestFallsBackToUnauthenticated) {
SignIn();
base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback;
one_google_bar_fetcher()->Fetch(callback.Get());
IssueAccessTokenError();
// The request should have fallen back to unauthenticated mode with an API key
// (as a query param).
EXPECT_THAT(GetRunningURLFetcher()->GetOriginalURL().query(),
StartsWith("key="));
// But no "Authorization" header.
net::HttpRequestHeaders headers;
GetRunningURLFetcher()->GetExtraRequestHeaders(&headers);
EXPECT_FALSE(headers.HasHeader("Authorization"));
}
TEST_F(OneGoogleBarFetcherImplTest, HandlesResponsePreamble) { TEST_F(OneGoogleBarFetcherImplTest, HandlesResponsePreamble) {
base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback; base::MockCallback<OneGoogleBarFetcher::OneGoogleCallback> callback;
one_google_bar_fetcher()->Fetch(callback.Get()); one_google_bar_fetcher()->Fetch(callback.Get());
...@@ -251,34 +146,41 @@ TEST_F(OneGoogleBarFetcherImplTest, ParsesFullResponse) { ...@@ -251,34 +146,41 @@ TEST_F(OneGoogleBarFetcherImplTest, ParsesFullResponse) {
base::Optional<OneGoogleBarData> data; base::Optional<OneGoogleBarData> data;
EXPECT_CALL(callback, Run(OneGoogleBarFetcher::Status::OK, _)) EXPECT_CALL(callback, Run(OneGoogleBarFetcher::Status::OK, _))
.WillOnce(SaveArg<1>(&data)); .WillOnce(SaveArg<1>(&data));
RespondWithData(R"json({"oneGoogleBar": { RespondWithData(R"json({"update": { "ogb": {
"html": { "privateDoNotAccessOrElseSafeHtmlWrappedValue": "bar_html" }, "html": {
"pageHooks": { "private_do_not_access_or_else_safe_html_wrapped_value": "bar_html_value"
"inHeadScript": { },
"privateDoNotAccessOrElseSafeScriptWrappedValue": "in_head_script" "page_hooks": {
"in_head_script": {
"private_do_not_access_or_else_safe_script_wrapped_value":
"in_head_script_value"
}, },
"inHeadStyle": { "in_head_style": {
"privateDoNotAccessOrElseSafeStyleSheetWrappedValue": "in_head_style" "private_do_not_access_or_else_safe_style_sheet_wrapped_value":
"in_head_style_value"
}, },
"afterBarScript": { "after_bar_script": {
"privateDoNotAccessOrElseSafeScriptWrappedValue": "after_bar_script" "private_do_not_access_or_else_safe_script_wrapped_value":
"after_bar_script_value"
}, },
"endOfBodyHtml": { "end_of_body_html": {
"privateDoNotAccessOrElseSafeHtmlWrappedValue": "end_of_body_html" "private_do_not_access_or_else_safe_html_wrapped_value":
"end_of_body_html_value"
}, },
"endOfBodyScript": { "end_of_body_script": {
"privateDoNotAccessOrElseSafeScriptWrappedValue": "end_of_body_script" "private_do_not_access_or_else_safe_script_wrapped_value":
"end_of_body_script_value"
} }
} }
}})json"); }}})json");
ASSERT_TRUE(data.has_value()); ASSERT_TRUE(data.has_value());
EXPECT_THAT(data->bar_html, Eq("bar_html")); EXPECT_THAT(data->bar_html, Eq("bar_html_value"));
EXPECT_THAT(data->in_head_script, Eq("in_head_script")); EXPECT_THAT(data->in_head_script, Eq("in_head_script_value"));
EXPECT_THAT(data->in_head_style, Eq("in_head_style")); EXPECT_THAT(data->in_head_style, Eq("in_head_style_value"));
EXPECT_THAT(data->after_bar_script, Eq("after_bar_script")); EXPECT_THAT(data->after_bar_script, Eq("after_bar_script_value"));
EXPECT_THAT(data->end_of_body_html, Eq("end_of_body_html")); EXPECT_THAT(data->end_of_body_html, Eq("end_of_body_html_value"));
EXPECT_THAT(data->end_of_body_script, Eq("end_of_body_script")); EXPECT_THAT(data->end_of_body_script, Eq("end_of_body_script_value"));
} }
TEST_F(OneGoogleBarFetcherImplTest, CoalescesMultipleRequests) { TEST_F(OneGoogleBarFetcherImplTest, CoalescesMultipleRequests) {
...@@ -342,8 +244,8 @@ TEST_F(OneGoogleBarFetcherImplTest, IncompleteJsonErrorIsFatal) { ...@@ -342,8 +244,8 @@ TEST_F(OneGoogleBarFetcherImplTest, IncompleteJsonErrorIsFatal) {
EXPECT_CALL(callback, EXPECT_CALL(callback,
Run(OneGoogleBarFetcher::Status::FATAL_ERROR, Eq(base::nullopt))); Run(OneGoogleBarFetcher::Status::FATAL_ERROR, Eq(base::nullopt)));
RespondWithData(R"json({"oneGoogleBar": { RespondWithData(R"json({"update": { "ogb": {
"html": {}, "html": {},
"pageHooks": {} "page_hooks": {}
}})json"); }}})json");
} }
...@@ -10,42 +10,39 @@ ...@@ -10,42 +10,39 @@
#include "base/callback.h" #include "base/callback.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h" #include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h"
#include "components/signin/core/browser/signin_manager_base.h" #include "components/signin/core/browser/gaia_cookie_manager_service.h"
class OneGoogleBarService::SigninObserver : public SigninManagerBase::Observer { class OneGoogleBarService::SigninObserver
: public GaiaCookieManagerService::Observer {
public: public:
using SigninStatusChangedCallback = base::Closure; using SigninStatusChangedCallback = base::Closure;
SigninObserver(SigninManagerBase* signin_manager, SigninObserver(GaiaCookieManagerService* cookie_service,
const SigninStatusChangedCallback& callback) const SigninStatusChangedCallback& callback)
: signin_manager_(signin_manager), callback_(callback) { : cookie_service_(cookie_service), callback_(callback) {
signin_manager_->AddObserver(this); cookie_service_->AddObserver(this);
} }
~SigninObserver() override { signin_manager_->RemoveObserver(this); } ~SigninObserver() override { cookie_service_->RemoveObserver(this); }
private: private:
// SigninManagerBase::Observer implementation. // GaiaCookieManagerService::Observer implementation.
void GoogleSigninSucceeded(const std::string& account_id, void OnGaiaAccountsInCookieUpdated(const std::vector<gaia::ListedAccount>&,
const std::string& username) override { const std::vector<gaia::ListedAccount>&,
const GoogleServiceAuthError&) override {
callback_.Run(); callback_.Run();
} }
void GoogleSignedOut(const std::string& account_id, GaiaCookieManagerService* const cookie_service_;
const std::string& username) override {
callback_.Run();
}
SigninManagerBase* const signin_manager_;
SigninStatusChangedCallback callback_; SigninStatusChangedCallback callback_;
}; };
OneGoogleBarService::OneGoogleBarService( OneGoogleBarService::OneGoogleBarService(
SigninManagerBase* signin_manager, GaiaCookieManagerService* cookie_service,
std::unique_ptr<OneGoogleBarFetcher> fetcher) std::unique_ptr<OneGoogleBarFetcher> fetcher)
: fetcher_(std::move(fetcher)), : fetcher_(std::move(fetcher)),
signin_observer_(base::MakeUnique<SigninObserver>( signin_observer_(base::MakeUnique<SigninObserver>(
signin_manager, cookie_service,
base::Bind(&OneGoogleBarService::SigninStatusChanged, base::Bind(&OneGoogleBarService::SigninStatusChanged,
base::Unretained(this)))) {} base::Unretained(this)))) {}
......
...@@ -14,14 +14,14 @@ ...@@ -14,14 +14,14 @@
#include "chrome/browser/search/one_google_bar/one_google_bar_service_observer.h" #include "chrome/browser/search/one_google_bar/one_google_bar_service_observer.h"
#include "components/keyed_service/core/keyed_service.h" #include "components/keyed_service/core/keyed_service.h"
class SigninManagerBase; class GaiaCookieManagerService;
// A service that downloads, caches, and hands out OneGoogleBarData. It never // A service that downloads, caches, and hands out OneGoogleBarData. It never
// initiates a download automatically, only when Refresh is called. When the // initiates a download automatically, only when Refresh is called. When the
// user signs in or out, the cached value is cleared. // user signs in or out, the cached value is cleared.
class OneGoogleBarService : public KeyedService { class OneGoogleBarService : public KeyedService {
public: public:
OneGoogleBarService(SigninManagerBase* signin_manager, OneGoogleBarService(GaiaCookieManagerService* cookie_service,
std::unique_ptr<OneGoogleBarFetcher> fetcher); std::unique_ptr<OneGoogleBarFetcher> fetcher);
~OneGoogleBarService() override; ~OneGoogleBarService() override;
......
...@@ -9,11 +9,8 @@ ...@@ -9,11 +9,8 @@
#include "chrome/browser/profiles/profile.h" #include "chrome/browser/profiles/profile.h"
#include "chrome/browser/search/one_google_bar/one_google_bar_fetcher_impl.h" #include "chrome/browser/search/one_google_bar/one_google_bar_fetcher_impl.h"
#include "chrome/browser/search/one_google_bar/one_google_bar_service.h" #include "chrome/browser/search/one_google_bar/one_google_bar_service.h"
#include "chrome/browser/signin/profile_oauth2_token_service_factory.h" #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h"
#include "chrome/browser/signin/signin_manager_factory.h"
#include "components/keyed_service/content/browser_context_dependency_manager.h" #include "components/keyed_service/content/browser_context_dependency_manager.h"
#include "components/signin/core/browser/profile_oauth2_token_service.h"
#include "components/signin/core/browser/signin_manager.h"
#include "content/public/browser/browser_context.h" #include "content/public/browser/browser_context.h"
// static // static
...@@ -32,8 +29,7 @@ OneGoogleBarServiceFactory::OneGoogleBarServiceFactory() ...@@ -32,8 +29,7 @@ OneGoogleBarServiceFactory::OneGoogleBarServiceFactory()
: BrowserContextKeyedServiceFactory( : BrowserContextKeyedServiceFactory(
"OneGoogleBarService", "OneGoogleBarService",
BrowserContextDependencyManager::GetInstance()) { BrowserContextDependencyManager::GetInstance()) {
DependsOn(SigninManagerFactory::GetInstance()); DependsOn(GaiaCookieManagerServiceFactory::GetInstance());
DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
DependsOn(GoogleURLTrackerFactory::GetInstance()); DependsOn(GoogleURLTrackerFactory::GetInstance());
} }
...@@ -42,14 +38,11 @@ OneGoogleBarServiceFactory::~OneGoogleBarServiceFactory() = default; ...@@ -42,14 +38,11 @@ OneGoogleBarServiceFactory::~OneGoogleBarServiceFactory() = default;
KeyedService* OneGoogleBarServiceFactory::BuildServiceInstanceFor( KeyedService* OneGoogleBarServiceFactory::BuildServiceInstanceFor(
content::BrowserContext* context) const { content::BrowserContext* context) const {
Profile* profile = Profile::FromBrowserContext(context); Profile* profile = Profile::FromBrowserContext(context);
SigninManagerBase* signin_manager = GaiaCookieManagerService* cookie_service =
SigninManagerFactory::GetForProfile(profile); GaiaCookieManagerServiceFactory::GetForProfile(profile);
OAuth2TokenService* token_service =
ProfileOAuth2TokenServiceFactory::GetForProfile(profile);
GoogleURLTracker* google_url_tracker = GoogleURLTracker* google_url_tracker =
GoogleURLTrackerFactory::GetForProfile(profile); GoogleURLTrackerFactory::GetForProfile(profile);
return new OneGoogleBarService( return new OneGoogleBarService(
signin_manager, base::MakeUnique<OneGoogleBarFetcherImpl>( cookie_service, base::MakeUnique<OneGoogleBarFetcherImpl>(
signin_manager, token_service,
profile->GetRequestContext(), google_url_tracker)); profile->GetRequestContext(), google_url_tracker));
} }
...@@ -11,13 +11,16 @@ ...@@ -11,13 +11,16 @@
#include "base/macros.h" #include "base/macros.h"
#include "base/memory/ptr_util.h" #include "base/memory/ptr_util.h"
#include "base/optional.h" #include "base/optional.h"
#include "base/test/scoped_task_environment.h"
#include "chrome/browser/search/one_google_bar/one_google_bar_data.h" #include "chrome/browser/search/one_google_bar/one_google_bar_data.h"
#include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h" #include "chrome/browser/search/one_google_bar/one_google_bar_fetcher.h"
#include "components/signin/core/browser/account_tracker_service.h" #include "components/signin/core/browser/account_tracker_service.h"
#include "components/signin/core/browser/fake_profile_oauth2_token_service.h" #include "components/signin/core/browser/fake_gaia_cookie_manager_service.h"
#include "components/signin/core/browser/fake_signin_manager.h"
#include "components/signin/core/browser/test_signin_client.h" #include "components/signin/core/browser/test_signin_client.h"
#include "components/sync_preferences/testing_pref_service_syncable.h" #include "components/sync_preferences/testing_pref_service_syncable.h"
#include "google_apis/gaia/fake_oauth2_token_service.h"
#include "google_apis/gaia/gaia_constants.h"
#include "net/url_request/test_url_fetcher_factory.h"
#include "testing/gmock/include/gmock/gmock.h" #include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h" #include "testing/gtest/include/gtest/gtest.h"
...@@ -54,24 +57,46 @@ class OneGoogleBarServiceTest : public testing::Test { ...@@ -54,24 +57,46 @@ class OneGoogleBarServiceTest : public testing::Test {
public: public:
OneGoogleBarServiceTest() OneGoogleBarServiceTest()
: signin_client_(&pref_service_), : signin_client_(&pref_service_),
signin_manager_(&signin_client_, &account_tracker_) { fetcher_factory_(/*default_factory=*/nullptr),
SigninManagerBase::RegisterProfilePrefs(pref_service_.registry()); cookie_service_(&token_service_,
SigninManagerBase::RegisterPrefs(pref_service_.registry()); GaiaConstants::kChromeSource,
&signin_client_) {
// GaiaCookieManagerService calls static methods of AccountTrackerService
// which access prefs.
AccountTrackerService::RegisterPrefs(pref_service_.registry());
cookie_service_.Init(&fetcher_factory_);
auto fetcher = base::MakeUnique<FakeOneGoogleBarFetcher>(); auto fetcher = base::MakeUnique<FakeOneGoogleBarFetcher>();
fetcher_ = fetcher.get(); fetcher_ = fetcher.get();
service_ = base::MakeUnique<OneGoogleBarService>(&signin_manager_, service_ = base::MakeUnique<OneGoogleBarService>(&cookie_service_,
std::move(fetcher)); std::move(fetcher));
} }
FakeOneGoogleBarFetcher* fetcher() { return fetcher_; } FakeOneGoogleBarFetcher* fetcher() { return fetcher_; }
OneGoogleBarService* service() { return service_.get(); } OneGoogleBarService* service() { return service_.get(); }
void SignIn() {
cookie_service_.SetListAccountsResponseOneAccount("user@gmail.com",
"gaia_id");
cookie_service_.TriggerListAccounts(GaiaConstants::kChromeSource);
task_environment_.RunUntilIdle();
}
void SignOut() {
cookie_service_.SetListAccountsResponseNoAccounts();
cookie_service_.TriggerListAccounts(GaiaConstants::kChromeSource);
task_environment_.RunUntilIdle();
}
private: private:
base::test::ScopedTaskEnvironment task_environment_;
sync_preferences::TestingPrefServiceSyncable pref_service_; sync_preferences::TestingPrefServiceSyncable pref_service_;
TestSigninClient signin_client_; TestSigninClient signin_client_;
AccountTrackerService account_tracker_; FakeOAuth2TokenService token_service_;
FakeSigninManagerBase signin_manager_; net::FakeURLFetcherFactory fetcher_factory_;
FakeGaiaCookieManagerService cookie_service_;
// Owned by the service. // Owned by the service.
FakeOneGoogleBarFetcher* fetcher_; FakeOneGoogleBarFetcher* fetcher_;
...@@ -192,50 +217,7 @@ TEST_F(OneGoogleBarServiceTest, ClearsCacheOnFatalError) { ...@@ -192,50 +217,7 @@ TEST_F(OneGoogleBarServiceTest, ClearsCacheOnFatalError) {
service()->RemoveObserver(&observer); service()->RemoveObserver(&observer);
} }
#if !defined(OS_CHROMEOS) TEST_F(OneGoogleBarServiceTest, ResetsOnSignIn) {
// Like OneGoogleBarServiceTest, but it has a FakeSigninManager (rather than
// FakeSigninManagerBase), so it can simulate sign-in and sign-out.
class OneGoogleBarServiceSignInTest : public testing::Test {
public:
OneGoogleBarServiceSignInTest()
: signin_client_(&pref_service_),
signin_manager_(&signin_client_,
&token_service_,
&account_tracker_,
nullptr) {
SigninManagerBase::RegisterProfilePrefs(pref_service_.registry());
SigninManagerBase::RegisterPrefs(pref_service_.registry());
AccountTrackerService::RegisterPrefs(pref_service_.registry());
account_tracker_.Initialize(&signin_client_);
auto fetcher = base::MakeUnique<FakeOneGoogleBarFetcher>();
fetcher_ = fetcher.get();
service_ = base::MakeUnique<OneGoogleBarService>(&signin_manager_,
std::move(fetcher));
}
void SignIn() { signin_manager_.SignIn("account", "username", "pass"); }
void SignOut() { signin_manager_.ForceSignOut(); }
FakeOneGoogleBarFetcher* fetcher() { return fetcher_; }
OneGoogleBarService* service() { return service_.get(); }
private:
sync_preferences::TestingPrefServiceSyncable pref_service_;
TestSigninClient signin_client_;
FakeProfileOAuth2TokenService token_service_;
AccountTrackerService account_tracker_;
FakeSigninManager signin_manager_;
// Owned by the service.
FakeOneGoogleBarFetcher* fetcher_;
std::unique_ptr<OneGoogleBarService> service_;
};
TEST_F(OneGoogleBarServiceSignInTest, ResetsOnSignIn) {
// Load some data. // Load some data.
service()->Refresh(); service()->Refresh();
OneGoogleBarData data; OneGoogleBarData data;
...@@ -248,7 +230,7 @@ TEST_F(OneGoogleBarServiceSignInTest, ResetsOnSignIn) { ...@@ -248,7 +230,7 @@ TEST_F(OneGoogleBarServiceSignInTest, ResetsOnSignIn) {
EXPECT_THAT(service()->one_google_bar_data(), Eq(base::nullopt)); EXPECT_THAT(service()->one_google_bar_data(), Eq(base::nullopt));
} }
TEST_F(OneGoogleBarServiceSignInTest, ResetsOnSignOut) { TEST_F(OneGoogleBarServiceTest, ResetsOnSignOut) {
SignIn(); SignIn();
// Load some data. // Load some data.
...@@ -262,5 +244,3 @@ TEST_F(OneGoogleBarServiceSignInTest, ResetsOnSignOut) { ...@@ -262,5 +244,3 @@ TEST_F(OneGoogleBarServiceSignInTest, ResetsOnSignOut) {
SignOut(); SignOut();
EXPECT_THAT(service()->one_google_bar_data(), Eq(base::nullopt)); EXPECT_THAT(service()->one_google_bar_data(), Eq(base::nullopt));
} }
#endif // OS_CHROMEOS
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
#include "chrome/browser/search/one_google_bar/one_google_bar_service_factory.h" #include "chrome/browser/search/one_google_bar/one_google_bar_service_factory.h"
#include "chrome/browser/search/search.h" #include "chrome/browser/search/search.h"
#include "chrome/browser/search_engines/template_url_service_factory.h" #include "chrome/browser/search_engines/template_url_service_factory.h"
#include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/browser/signin/gaia_cookie_manager_service_factory.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_commands.h" #include "chrome/browser/ui/browser_commands.h"
#include "chrome/browser/ui/search/instant_test_base.h" #include "chrome/browser/ui/search/instant_test_base.h"
...@@ -35,7 +35,6 @@ ...@@ -35,7 +35,6 @@
#include "components/search_engines/template_url.h" #include "components/search_engines/template_url.h"
#include "components/search_engines/template_url_data.h" #include "components/search_engines/template_url_data.h"
#include "components/search_engines/template_url_service.h" #include "components/search_engines/template_url_service.h"
#include "components/signin/core/browser/signin_manager.h"
#include "content/public/browser/navigation_entry.h" #include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
#include "content/public/common/content_switches.h" #include "content/public/common/content_switches.h"
...@@ -398,10 +397,11 @@ class LocalNTPOneGoogleBarSmokeTest : public InProcessBrowserTest { ...@@ -398,10 +397,11 @@ class LocalNTPOneGoogleBarSmokeTest : public InProcessBrowserTest {
private: private:
static std::unique_ptr<KeyedService> CreateOneGoogleBarService( static std::unique_ptr<KeyedService> CreateOneGoogleBarService(
content::BrowserContext* context) { content::BrowserContext* context) {
SigninManagerBase* signin_manager = SigninManagerFactory::GetForProfile( GaiaCookieManagerService* cookie_service =
GaiaCookieManagerServiceFactory::GetForProfile(
Profile::FromBrowserContext(context)); Profile::FromBrowserContext(context));
return base::MakeUnique<OneGoogleBarService>( return base::MakeUnique<OneGoogleBarService>(
signin_manager, base::MakeUnique<FakeOneGoogleBarFetcher>()); cookie_service, base::MakeUnique<FakeOneGoogleBarFetcher>());
} }
void OnWillCreateBrowserContextServices(content::BrowserContext* context) { void OnWillCreateBrowserContextServices(content::BrowserContext* context) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment