1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
5868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_signin_helper.h"
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind.h"
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/bind_helpers.h"
97dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "base/run_loop.h"
10868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/stringprintf.h"
11a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_service_url.h"
13868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "components/autofill/content/browser/wallet/wallet_signin_helper_delegate.h"
147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h"
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "google_apis/gaia/gaia_constants.h"
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "google_apis/gaia/gaia_urls.h"
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "google_apis/gaia/google_service_auth_error.h"
187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/cookies/canonical_cookie.h"
197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/cookies/cookie_monster.h"
207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/cookies/cookie_options.h"
21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "net/http/http_status_code.h"
22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/test_url_fetcher_factory.h"
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request.h"
247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "net/url_request/url_request_context.h"
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request_context_getter.h"
26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "net/url_request/url_request_status.h"
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h"
28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)using testing::_;
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace autofill {
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace wallet {
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace {
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGetTokenPairValidResponse[] =
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    "{"
39c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    "  \"refresh_token\": \"rt1\","
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    "  \"access_token\": \"at1\","
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    "  \"expires_in\": 3600,"
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    "  \"token_type\": \"Bearer\""
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    "}";
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)const char kGetAccountInfoValidResponseFormat[] =
46a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    "{\"user_info\":["
47a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    "  {"
48a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    "    \"email\": \"%s\""
49a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    "  }"
50a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)    "]}";
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class MockWalletSigninHelperDelegate : public WalletSigninHelperDelegate {
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MOCK_METHOD1(OnPassiveSigninSuccess, void(const std::string& username));
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MOCK_METHOD1(OnUserNameFetchSuccess, void(const std::string& username));
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MOCK_METHOD1(OnPassiveSigninFailure,
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               void(const GoogleServiceAuthError& error));
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MOCK_METHOD1(OnUserNameFetchFailure,
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)               void(const GoogleServiceAuthError& error));
607dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  MOCK_METHOD1(OnDidFetchWalletCookieValue,
617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch               void(const std::string& cookie_value));
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WalletSigninHelperForTesting : public WalletSigninHelper {
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) public:
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WalletSigninHelperForTesting(WalletSigninHelperDelegate* delegate,
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                               net::URLRequestContextGetter* getter)
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      : WalletSigninHelper(delegate, getter) {
69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Bring in the test-only getters.
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  using WalletSigninHelper::GetGetAccountInfoUrlForTesting;
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  using WalletSigninHelper::state;
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Bring in the State enum.
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  using WalletSigninHelper::State;
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  using WalletSigninHelper::IDLE;
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
82c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class WalletSigninHelperTest : public testing::Test {
83a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch protected:
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void SetUp() OVERRIDE {
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    signin_helper_.reset(new WalletSigninHelperForTesting(
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        &mock_delegate_,
87eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        browser_context_.GetRequestContext()));
88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    EXPECT_EQ(WalletSigninHelperForTesting::IDLE, state());
89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
90c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  virtual void TearDown() OVERRIDE {
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    signin_helper_.reset();
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Sets up a response for the mock URLFetcher and completes the request.
96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void SetUpFetcherResponseAndCompleteRequest(
97c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& url,
98c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      int response_code,
99c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const net::ResponseCookies& cookies,
100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      const std::string& response_string) {
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    net::TestURLFetcher* fetcher = factory_.GetFetcherByID(0);
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(fetcher);
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    ASSERT_TRUE(fetcher->delegate());
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fetcher->set_url(GURL(url));
106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fetcher->set_status(net::URLRequestStatus());
107c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fetcher->set_response_code(response_code);
108c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fetcher->SetResponseString(response_string);
109c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fetcher->set_cookies(cookies);
110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    fetcher->delegate()->OnURLFetchComplete(fetcher);
111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
112c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
113c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void MockSuccessfulGetAccountInfoResponse(const std::string& username) {
114c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SetUpFetcherResponseAndCompleteRequest(
115eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        signin_helper_->GetGetAccountInfoUrlForTesting(), net::HTTP_OK,
116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        net::ResponseCookies(),
117c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        base::StringPrintf(
118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            kGetAccountInfoValidResponseFormat,
119c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)            username.c_str()));
120c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
121c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
122c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  void MockFailedGetAccountInfoResponse404() {
123c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SetUpFetcherResponseAndCompleteRequest(
124c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        signin_helper_->GetGetAccountInfoUrlForTesting(),
125eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch        net::HTTP_NOT_FOUND,
126c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        net::ResponseCookies(),
127c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        std::string());
128c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
129c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
130eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void MockSuccessfulPassiveSignInResponse() {
131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SetUpFetcherResponseAndCompleteRequest(wallet::GetPassiveAuthUrl().spec(),
132eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                           net::HTTP_OK,
133c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                           net::ResponseCookies(),
134eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                           "YES");
135eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  }
136eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
137eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void MockFailedPassiveSignInResponseNo() {
138eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch    SetUpFetcherResponseAndCompleteRequest(wallet::GetPassiveAuthUrl().spec(),
139eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                           net::HTTP_OK,
140eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                           net::ResponseCookies(),
141eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                           "NOOOOOOOOOOOOOOO");
142c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
143c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
144eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  void MockFailedPassiveSignInResponse404() {
145c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    SetUpFetcherResponseAndCompleteRequest(wallet::GetPassiveAuthUrl().spec(),
146eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch                                           net::HTTP_NOT_FOUND,
147c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                           net::ResponseCookies(),
148c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                                           std::string());
149c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
150c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
151c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  WalletSigninHelperForTesting::State state() const {
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    return signin_helper_->state();
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
155a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  content::TestBrowserThreadBundle thread_bundle_;
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  scoped_ptr<WalletSigninHelperForTesting> signin_helper_;
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockWalletSigninHelperDelegate mock_delegate_;
158a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  TestingProfile browser_context_;
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) private:
161a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch  net::TestURLFetcherFactory factory_;
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)};
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletSigninHelperTest, PassiveSigninSuccessful) {
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_CALL(mock_delegate_, OnPassiveSigninSuccess("user@gmail.com"));
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signin_helper_->StartPassiveSignin();
167eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MockSuccessfulPassiveSignInResponse();
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockSuccessfulGetAccountInfoResponse("user@gmail.com");
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
171eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(WalletSigninHelperTest, PassiveSigninFailedSignin404) {
172c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_CALL(mock_delegate_, OnPassiveSigninFailure(_));
173c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signin_helper_->StartPassiveSignin();
174eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MockFailedPassiveSignInResponse404();
175eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}
176eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch
177eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(WalletSigninHelperTest, PassiveSigninFailedSigninNo) {
178eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  EXPECT_CALL(mock_delegate_, OnPassiveSigninFailure(_));
179eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  signin_helper_->StartPassiveSignin();
180eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MockFailedPassiveSignInResponseNo();
181c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
182c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
183c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletSigninHelperTest, PassiveSigninFailedUserInfo) {
184c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_CALL(mock_delegate_, OnPassiveSigninFailure(_));
185c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signin_helper_->StartPassiveSignin();
186eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch  MockSuccessfulPassiveSignInResponse();
187c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockFailedGetAccountInfoResponse404();
188c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletSigninHelperTest, PassiveUserInfoSuccessful) {
191c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_CALL(mock_delegate_, OnUserNameFetchSuccess("user@gmail.com"));
192c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signin_helper_->StartUserNameFetch();
193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockSuccessfulGetAccountInfoResponse("user@gmail.com");
194c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
195c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
196c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(WalletSigninHelperTest, PassiveUserInfoFailedUserInfo) {
197c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_CALL(mock_delegate_, OnUserNameFetchFailure(_));
198c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  signin_helper_->StartUserNameFetch();
199c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  MockFailedGetAccountInfoResponse404();
200c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
201c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2027dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(WalletSigninHelperTest, GetWalletCookieValueWhenPresent) {
2037dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_CALL(mock_delegate_, OnDidFetchWalletCookieValue("gdToken"));
2047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  net::CookieMonster* cookie_monster = new net::CookieMonster(NULL, NULL);
2057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  net::CookieOptions httponly_options;
2067dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  httponly_options.set_include_httponly();
2077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<net::CanonicalCookie> cookie(
2087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      net::CanonicalCookie::Create(GetPassiveAuthUrl().GetWithEmptyPath(),
2097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   "gdToken=gdToken; HttpOnly",
2107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   base::Time::Now(),
2117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   httponly_options));
2127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2137dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  net::CookieList cookie_list;
2147dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  cookie_list.push_back(*cookie);
2157dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  cookie_monster->InitializeFrom(cookie_list);
2167dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  browser_context_.GetRequestContext()->GetURLRequestContext()
2177dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ->set_cookie_store(cookie_monster);
2187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  signin_helper_->StartWalletCookieValueFetch();
2197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::RunLoop().RunUntilIdle();
220c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
221c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
2227dbb3d5cf0c15f500944d211057644d6a2f37371Ben MurdochTEST_F(WalletSigninHelperTest, GetWalletCookieValueWhenMissing) {
2237dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  EXPECT_CALL(mock_delegate_, OnDidFetchWalletCookieValue(std::string()));
2247dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  net::CookieMonster* cookie_monster = new net::CookieMonster(NULL, NULL);
2257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  net::CookieOptions httponly_options;
2267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  httponly_options.set_include_httponly();
2277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  scoped_ptr<net::CanonicalCookie> cookie(
2287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      net::CanonicalCookie::Create(GetPassiveAuthUrl().GetWithEmptyPath(),
2297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   "fake_cookie=monkeys; HttpOnly",
2307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   base::Time::Now(),
2317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch                                   httponly_options));
2327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
2337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  net::CookieList cookie_list;
2347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  cookie_list.push_back(*cookie);
2357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  cookie_monster->InitializeFrom(cookie_list);
2367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  browser_context_.GetRequestContext()->GetURLRequestContext()
2377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      ->set_cookie_store(cookie_monster);
2387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  signin_helper_->StartWalletCookieValueFetch();
2397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  base::RunLoop().RunUntilIdle();
240c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
242c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// TODO(aruslan): http://crbug.com/188317 Need more tests.
243c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
244c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace wallet
245c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace autofill
246