15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
61e9bf3e0803691d0a228da41fc608347b6db4340Torne (Richard Coles)#include "base/prefs/scoped_user_pref_update.h"
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/run_loop.h"
8868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h"
92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/values.h"
1058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/chrome_notification_types.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/content_settings/cookie_settings.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/custom_handlers/protocol_handler_registry.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_info_cache.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_io_data.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/profiles/profile_manager.h"
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client.h"
18effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client_factory.h"
1958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/signin/fake_profile_oauth2_token_service.h"
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/fake_profile_oauth2_token_service_builder.h"
21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/signin/fake_signin_manager.h"
2258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h"
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/signin/signin_names_io_thread.h"
25a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)#include "chrome/browser/signin/signin_promo.h"
265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "chrome/browser/sync/profile_sync_components_factory_mock.h"
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/profile_sync_service_factory.h"
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/sync/test_profile_sync_service.h"
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/sync/one_click_signin_helper.h"
3058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service.h"
3158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "chrome/browser/ui/webui/signin/login_ui_service_factory.h"
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/common/pref_names.h"
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/chromium_strings.h"
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/grit/generated_resources.h"
357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/test/base/chrome_render_view_host_test_harness.h"
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_browser_process.h"
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h"
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile.h"
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h"
4058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)#include "components/autofill/core/common/password_form.h"
41effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/profile_oauth2_token_service.h"
42e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
4323730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)#include "components/sync_driver/pref_names.h"
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/browser_context.h"
45ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/browser/navigation_details.h"
46e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "content/public/browser/navigation_entry.h"
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "content/public/browser/web_contents.h"
48e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "content/public/browser/web_contents_delegate.h"
49ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch#include "content/public/common/frame_navigate_params.h"
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/url_constants.h"
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/mock_render_process_host.h"
52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "testing/gmock/include/gmock/gmock.h"
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "ui/base/l10n/l10n_util.h"
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::_;
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using ::testing::AtLeast;
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using ::testing::Return;
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace {
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
62e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// Used to confirm OneClickSigninHelper does not trigger redirect when there is
63e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch// a pending navigation.
64e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdochclass MockWebContentsDelegate : public content::WebContentsDelegate {
65e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch public:
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  MOCK_METHOD2(OpenURLFromTab,
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci               content::WebContents*(content::WebContents* source,
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                                     const content::OpenURLParams& params));
69e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch};
70e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SigninManagerMock : public FakeSigninManager {
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  explicit SigninManagerMock(Profile* profile) : FakeSigninManager(profile) {
74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    Initialize(NULL);
75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  }
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  MOCK_CONST_METHOD1(IsAllowedUsername, bool(const std::string& username));
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
79a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)static KeyedService* BuildSigninManagerMock(content::BrowserContext* profile) {
8058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return new SigninManagerMock(static_cast<Profile*>(profile));
8158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
8258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestProfileIOData : public ProfileIOData {
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
85a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestProfileIOData(Profile::ProfileType profile_type,
86a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    PrefService* pref_service, PrefService* local_state,
87a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    CookieSettings* cookie_settings)
88a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      : ProfileIOData(profile_type) {
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // Initialize the IO members required for these tests, but keep them on
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // this thread since we don't use a background thread here.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    google_services_username()->Init(prefs::kGoogleServicesUsername,
922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                     pref_service);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    reverse_autologin_enabled()->Init(prefs::kReverseAutologinEnabled,
942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      pref_service);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    one_click_signin_rejected_email_list()->Init(
962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        prefs::kReverseAutologinRejectedEmailList, pref_service);
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    google_services_username_pattern()->Init(
992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        prefs::kGoogleServicesUsernamePattern, local_state);
1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
10123730a6e56a168d1879203e4b3819bb36e3d8f1fTorne (Richard Coles)    sync_disabled()->Init(sync_driver::prefs::kSyncManaged, pref_service);
1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    signin_allowed()->Init(prefs::kSigninAllowed, pref_service);
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    set_signin_names_for_testing(new SigninNamesOnIOThread());
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    SetCookieSettingsForTesting(cookie_settings);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestProfileIOData() {
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    signin_names()->ReleaseResourcesOnUIThread();
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ProfileIOData overrides:
1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeInternal(
1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      ProfileParams* profile_params,
116a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
117cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors)
118a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const OVERRIDE {
1192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    NOTREACHED();
1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void InitializeExtensionsRequestContext(
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ProfileParams* profile_params) const OVERRIDE {
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1255f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext* InitializeAppRequestContext(
1265f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* main_context,
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& details,
1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          protocol_handler_interceptor,
130a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
131cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors)
132a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const OVERRIDE {
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext* InitializeMediaRequestContext(
1375f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* original_context,
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const StoragePartitionDescriptor& details) const OVERRIDE {
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1425f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext*
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireMediaRequestContext() const OVERRIDE {
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1475f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext* AcquireIsolatedAppRequestContext(
1485f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)      net::URLRequestContext* main_context,
149a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const StoragePartitionDescriptor& partition_descriptor,
150a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      scoped_ptr<ProtocolHandlerRegistry::JobInterceptorFactory>
151a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          protocol_handler_interceptor,
152a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      content::ProtocolHandlerMap* protocol_handlers,
153cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)      content::URLRequestInterceptorScopedVector request_interceptors)
154a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const OVERRIDE {
1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1585f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  virtual net::URLRequestContext*
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      AcquireIsolatedMediaRequestContext(
1605f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          net::URLRequestContext* app_context,
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const StoragePartitionDescriptor& partition_descriptor)
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)          const OVERRIDE {
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    NOTREACHED();
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    return NULL;
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class TestURLRequest : public base::SupportsUserData {
1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest() {}
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~TestURLRequest() {}
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OneClickTestProfileSyncService : public TestProfileSyncService {
175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public:
176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual ~OneClickTestProfileSyncService() {}
177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Helper routine to be used in conjunction with
179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // BrowserContextKeyedServiceFactory::SetTestingFactory().
180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  static KeyedService* Build(content::BrowserContext* profile) {
181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return new OneClickTestProfileSyncService(static_cast<Profile*>(profile));
182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
184c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Need to control this for certain tests.
185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool FirstSetupInProgress() const OVERRIDE {
186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    return first_setup_in_progress_;
187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  virtual bool sync_initialized() const OVERRIDE { return sync_initialized_; }
190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // Controls return value of FirstSetupInProgress. Because some bits
192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // of UI depend on that value, it's useful to control it separately
193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // from the internal work and components that are triggered (such as
194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  // ReconfigureDataTypeManager) to facilitate unit tests.
195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void set_first_setup_in_progress(bool in_progress) {
196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    first_setup_in_progress_ = in_progress;
197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  void set_sync_initialized(bool initialized) {
200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch    sync_initialized_ = initialized;
201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  }
202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
203c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private:
204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  explicit OneClickTestProfileSyncService(Profile* profile)
205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch      : TestProfileSyncService(
2065f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)          scoped_ptr<ProfileSyncComponentsFactory>(
2075f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)              new ProfileSyncComponentsFactoryMock()),
208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          profile,
209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          SigninManagerFactory::GetForProfile(profile),
210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch          browser_sync::MANUAL_START),
212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        first_setup_in_progress_(false),
213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch        sync_initialized_(false) {}
214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch
215c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bool first_setup_in_progress_;
216c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  bool sync_initialized_;
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}  // namespace
2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2217dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochclass OneClickSigninHelperTest : public ChromeRenderViewHostTestHarness {
2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public:
2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OneClickSigninHelperTest();
2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUp() OVERRIDE;
2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void TearDown() OVERRIDE;
2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
228effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  // Sets up the sign-in manager for tests.  If |username| is
2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // is not empty, the profile of the mock WebContents will be connected to
2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the given account.
231effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  void SetUpSigninManager(const std::string& username);
2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Set the ID of the signin process that the test will assume to be the
2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // only process allowed to sign the user in to Chrome.
2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetTrustedSigninProcessID(int id);
2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AddEmailToOneClickRejectedList(const std::string& email);
2382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void EnableOneClick(bool enable);
2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void AllowSigninCookies(bool enable);
2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SetAllowedUsernamePattern(const std::string& pattern);
2412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void SubmitGAIAPassword(OneClickSigninHelper* helper);
2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SigninManagerMock* signin_manager_;
24458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  FakeProfileOAuth2TokenService* fake_oauth2_token_service_;
2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
2477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  GoogleServiceAuthError no_error_;
2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
25058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  // ChromeRenderViewHostTestHarness overrides:
25158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  virtual content::BrowserContext* CreateBrowserContext() OVERRIDE;
25258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // The ID of the signin process the test will assume to be trusted.
2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // By default, set to the test RenderProcessHost's process ID, but
2552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // overridden by SetTrustedSigninProcessID.
2562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int trusted_signin_process_id_;
2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OneClickSigninHelperTest);
2592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)OneClickSigninHelperTest::OneClickSigninHelperTest()
26258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)    : signin_manager_(NULL),
26358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      fake_oauth2_token_service_(NULL),
26458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      no_error_(GoogleServiceAuthError::NONE),
2652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      trusted_signin_process_id_(-1) {
2662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OneClickSigninHelperTest::SetUp() {
269a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  signin::ForceWebBasedSigninFlowForTesting(true);
2702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::RenderViewHostTestHarness::SetUp();
2712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  SetTrustedSigninProcessID(process()->GetID());
2722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OneClickSigninHelperTest::TearDown() {
275a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)  signin::ForceWebBasedSigninFlowForTesting(false);
2762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::RenderViewHostTestHarness::TearDown();
2772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
2792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OneClickSigninHelperTest::SetTrustedSigninProcessID(int id) {
2802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  trusted_signin_process_id_ = id;
2812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
2822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
283effb81e5f8246d0db0270817048dc992db66e9fbBen Murdochvoid OneClickSigninHelperTest::SetUpSigninManager(const std::string& username) {
284cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)  SigninClient* signin_client =
285effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      ChromeSigninClientFactory::GetForProfile(profile());
286effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  if (signin_client)
287effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch    signin_client->SetSigninProcess(trusted_signin_process_id_);
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
289effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  signin_manager_ = static_cast<SigninManagerMock*>(
290effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      SigninManagerFactory::GetForProfile(profile()));
2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (!username.empty()) {
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    ASSERT_TRUE(signin_manager_);
293c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    signin_manager_->SetAuthenticatedUsername(username);
2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninHelperTest::EnableOneClick(bool enable) {
2987dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefService* pref_service = profile()->GetPrefs();
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetBoolean(prefs::kReverseAutologinEnabled, enable);
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninHelperTest::AddEmailToOneClickRejectedList(
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& email) {
3047dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefService* pref_service = profile()->GetPrefs();
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ListPrefUpdate updater(pref_service,
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                         prefs::kReverseAutologinRejectedEmailList);
3072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  updater->AppendIfNotPresent(new base::StringValue(email));
3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninHelperTest::AllowSigninCookies(bool enable) {
3117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  CookieSettings* cookie_settings =
3127dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      CookieSettings::Factory::GetForProfile(profile()).get();
3137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)  cookie_settings->SetDefaultCookieSetting(enable ? CONTENT_SETTING_ALLOW
3147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)                                                  : CONTENT_SETTING_BLOCK);
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninHelperTest::SetAllowedUsernamePattern(
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    const std::string& pattern) {
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* local_state = g_browser_process->local_state();
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  local_state->SetString(prefs::kGoogleServicesUsernamePattern, pattern);
3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)void OneClickSigninHelperTest::SubmitGAIAPassword(
3242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    OneClickSigninHelper* helper) {
32558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  autofill::PasswordForm password_form;
3262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  password_form.origin = GURL("https://accounts.google.com");
3272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  password_form.signon_realm = "https://accounts.google.com";
3285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  password_form.password_value = base::UTF8ToUTF16("password");
3293551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  helper->PasswordSubmitted(password_form);
3302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
3312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
33258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)content::BrowserContext* OneClickSigninHelperTest::CreateBrowserContext() {
33358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  TestingProfile::Builder builder;
33458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  builder.AddTestingFactory(ProfileOAuth2TokenServiceFactory::GetInstance(),
335effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            BuildFakeProfileOAuth2TokenService);
336effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  builder.AddTestingFactory(SigninManagerFactory::GetInstance(),
337effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch                            BuildSigninManagerMock);
33858537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  scoped_ptr<TestingProfile> profile = builder.Build();
33958537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
34058537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  fake_oauth2_token_service_ =
34158537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)      static_cast<FakeProfileOAuth2TokenService*>(
34258537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)          ProfileOAuth2TokenServiceFactory::GetForProfile(profile.get()));
34358537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
34458537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)  return profile.release();
34558537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)}
34658537e28ecd584eab876aee8be7156509866d23aTorne (Richard Coles)
3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class OneClickSigninHelperIOTest : public OneClickSigninHelperTest {
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OneClickSigninHelperIOTest();
3505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUp() OVERRIDE;
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestProfileIOData* CreateTestProfileIOData(Profile::ProfileType profile_type);
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected:
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestingProfileManager testing_profile_manager_;
3575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestURLRequest request_;
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const GURL valid_gaia_url_;
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(OneClickSigninHelperIOTest);
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)OneClickSigninHelperIOTest::OneClickSigninHelperIOTest()
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    : testing_profile_manager_(
3662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          TestingBrowserProcess::GetGlobal()),
367868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      valid_gaia_url_("https://accounts.google.com/") {
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void OneClickSigninHelperIOTest::SetUp() {
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  OneClickSigninHelperTest::SetUp();
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ASSERT_TRUE(testing_profile_manager_.SetUp());
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TestProfileIOData* OneClickSigninHelperIOTest::CreateTestProfileIOData(
376a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    Profile::ProfileType profile_type) {
3777dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefService* pref_service = profile()->GetPrefs();
3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PrefService* local_state = g_browser_process->local_state();
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CookieSettings* cookie_settings =
3807dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch      CookieSettings::Factory::GetForProfile(profile()).get();
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  TestProfileIOData* io_data = new TestProfileIOData(
382a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      profile_type, pref_service, local_state, cookie_settings);
3832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  io_data->set_reverse_autologin_pending_email("user@gmail.com");
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return io_data;
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3873551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)class OneClickSigninHelperIncognitoTest : public OneClickSigninHelperTest {
3883551c9c881056c480085172ff9840cab31610854Torne (Richard Coles) protected:
3893551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  // content::RenderViewHostTestHarness.
3903551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  virtual content::BrowserContext* CreateBrowserContext() OVERRIDE;
3913551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)};
3923551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
3933551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)content::BrowserContext*
3943551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)OneClickSigninHelperIncognitoTest::CreateBrowserContext() {
3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Simulate an incognito profile to run this test. RenderViewHostTestHarness
3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // takes ownership of the return value, so it can't be a "proper" incognito
3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // profile, since they are owned by their parent, non-incognito profile.
3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  scoped_ptr<TestingProfile> profile = TestingProfile::Builder().Build();
3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  profile->ForceIncognito(true);
4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return profile.release();
4013551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)}
4023551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferNoContents) {
4042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
4052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
4062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NULL, OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
4072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      NULL, OneClickSigninHelper::CAN_OFFER_FOR_ALL,
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
414c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL,
415c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
416c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
417c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &error_message));
4182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOffer) {
422effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        WillRepeatedly(Return(true));
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnableOneClick(true);
4282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
4292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
4302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", NULL));
4312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
4322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
4332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", NULL));
4342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
435c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
436c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
437c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
438c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL));
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnableOneClick(false);
4412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
4432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
4442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
4452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
4462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
4472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
4492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
4502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
4512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
452c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
453c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
454c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
455c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &error_message));
4562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferFirstSetup) {
460effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        WillRepeatedly(Return(true));
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Invoke OneClickTestProfileSyncService factory function and grab result.
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OneClickTestProfileSyncService* sync =
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      static_cast<OneClickTestProfileSyncService*>(
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)          ProfileSyncServiceFactory::GetInstance()->SetTestingFactoryAndUse(
469c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch              profile(), OneClickTestProfileSyncService::Build));
470c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  sync->set_sync_initialized(false);
4715d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  sync->Initialize();
472c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch  sync->set_sync_initialized(true);
4732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  sync->set_first_setup_in_progress(true);
4742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
4752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
4762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(),
4772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_ALL,
4782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", NULL));
4792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
4802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(),
4812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
4822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", NULL));
4832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
484c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
485c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
486c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
487c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      NULL));
4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferProfileConnected) {
491effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager("foo@gmail.com");
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WillRepeatedly(Return(true));
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
4972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
4982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
4992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", &error_message));
5002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
5012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
5022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo", &error_message));
5042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
5052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringFUTF8(IDS_SYNC_WRONG_EMAIL,
5095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      base::UTF8ToUTF16("foo@gmail.com")),
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            error_message);
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", &error_message));
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo", &error_message));
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringFUTF8(IDS_SYNC_WRONG_EMAIL,
5215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                                      base::UTF8ToUTF16("foo@gmail.com")),
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            error_message);
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
524c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
525c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
526c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
527c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &error_message));
5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferUsernameNotAllowed) {
531effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      WillRepeatedly(Return(false));
5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", &error_message));
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF8(IDS_SYNC_LOGIN_NAME_PROHIBITED),
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            error_message);
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", &error_message));
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(l10n_util::GetStringUTF8(IDS_SYNC_LOGIN_NAME_PROHIBITED),
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            error_message);
547c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
548c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
549c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
550c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
551c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &error_message));
5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferWithRejectedEmail) {
555effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        WillRepeatedly(Return(true));
5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddEmailToOneClickRejectedList("foo@gmail.com");
5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddEmailToOneClickRejectedList("user@gmail.com");
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", &error_message));
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "foo@gmail.com", &error_message));
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "john@gmail.com", &error_message));
5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5833551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(OneClickSigninHelperIncognitoTest, CanOfferIncognito) {
584effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
596c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
597c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
598c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
599c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &error_message));
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferNoSigninCookies) {
604effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AllowSigninCookies(false);
6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        WillRepeatedly(Return(true));
6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  std::string error_message;
6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
6142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", &error_message));
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
620c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      web_contents(),
621c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CAN_OFFER_FOR_INTERSTITAL_ONLY,
622c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      std::string(),
623c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      &error_message));
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ("", error_message);
6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(OneClickSigninHelperTest, CanOfferDisabledByPolicy) {
628effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_CALL(*signin_manager_, IsAllowedUsername(_)).
6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        WillRepeatedly(Return(true));
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EnableOneClick(true);
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", NULL));
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate a policy disabling signin by writing kSigninAllowed directly.
6397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile()->GetTestingPrefService()->SetManagedPref(
640116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      prefs::kSigninAllowed, new base::FundamentalValue(false));
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_FALSE(OneClickSigninHelper::CanOffer(
6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", NULL));
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Reset the preference value to true.
6477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile()->GetTestingPrefService()->SetManagedPref(
648116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      prefs::kSigninAllowed, new base::FundamentalValue(true));
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate a policy disabling sync by writing kSyncManaged directly.
6517dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile()->GetTestingPrefService()->SetManagedPref(
652116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      sync_driver::prefs::kSyncManaged, new base::FundamentalValue(true));
6532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Should still offer even if sync is disabled by policy.
6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(OneClickSigninHelper::CanOffer(
6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      web_contents(), OneClickSigninHelper::CAN_OFFER_FOR_ALL,
6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "user@gmail.com", NULL));
6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Should not crash if a helper instance is not associated with an incognito
6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// web contents.
6623551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)TEST_F(OneClickSigninHelperIncognitoTest, ShowInfoBarUIThreadIncognito) {
663effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  SetUpSigninManager(std::string());
6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OneClickSigninHelper* helper =
6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      OneClickSigninHelper::FromWebContents(web_contents());
6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(NULL, helper);
6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  OneClickSigninHelper::ShowInfoBarUIThread(
6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      "session_index", "email", OneClickSigninHelper::AUTO_ACCEPT_ACCEPTED,
670a36e5920737c6adbddd3e43b760e5de8431db6e0Torne (Richard Coles)      signin::SOURCE_UNKNOWN, GURL(), process()->GetID(),
6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      rvh()->GetRoutingID());
6725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
6735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
674ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// Checks that the state of OneClickSigninHelper is cleaned when there is a
675ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// navigation away from the sign in flow that is not triggered by the
676ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch// web contents.
677ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben MurdochTEST_F(OneClickSigninHelperTest, CleanTransientStateOnNavigate) {
678ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  content::WebContents* contents = web_contents();
679ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
6803551c9c881056c480085172ff9840cab31610854Torne (Richard Coles)  OneClickSigninHelper::CreateForWebContentsWithPasswordManager(contents, NULL);
681ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  OneClickSigninHelper* helper =
682ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch      OneClickSigninHelper::FromWebContents(contents);
683ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  helper->SetDoNotClearPendingEmailForTesting();
684ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  helper->auto_accept_ = OneClickSigninHelper::AUTO_ACCEPT_EXPLICIT;
685ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
686ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  content::LoadCommittedDetails details;
687ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  content::FrameNavigateParams params;
688ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  params.url = GURL("http://crbug.com");
6891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  params.transition = ui::PAGE_TRANSITION_TYPED;
690ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  helper->DidNavigateMainFrame(details, params);
691ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
692ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch  EXPECT_EQ(OneClickSigninHelper::AUTO_ACCEPT_NONE, helper->auto_accept_);
693ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch}
694ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch
695e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen MurdochTEST_F(OneClickSigninHelperTest, NoRedirectToNTPWithPendingEntry) {
696e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  content::NavigationController& controller = web_contents()->GetController();
697e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_FALSE(controller.GetPendingEntry());
698e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
699e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  const GURL fooWebUIURL("chrome://foo");
700e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  controller.LoadURL(fooWebUIURL, content::Referrer(),
7011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     ui::PAGE_TRANSITION_TYPED, std::string());
702e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_EQ(fooWebUIURL, controller.GetPendingEntry()->GetURL());
703e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
704e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  MockWebContentsDelegate delegate;
705e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_CALL(delegate, OpenURLFromTab(_, _)).Times(0);
706e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  web_contents()->SetDelegate(&delegate);
707e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  OneClickSigninHelper::RedirectToNtpOrAppsPage(
708e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      web_contents(), signin::SOURCE_UNKNOWN);
709e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
710e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  EXPECT_EQ(fooWebUIURL, controller.GetPendingEntry()->GetURL());
711e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch}
712e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch
7132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// I/O thread tests
7142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThread) {
716a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
717a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
7182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::CAN_OFFER,
7192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
7215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadIncognito) {
724a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
725a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::INCOGNITO_PROFILE));
7262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
7272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
7295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadNoIOData) {
7322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
7332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, NULL));
7355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadBadURL) {
738a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
739a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
740c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(
741c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::IGNORE_REQUEST,
742c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      OneClickSigninHelper::CanOfferOnIOThreadImpl(
7435d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)          GURL("https://foo.com/"), &request_, io_data.get()));
7442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::IGNORE_REQUEST,
7452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
746c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                GURL("http://accounts.google.com/"),
747c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                &request_,
748c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                io_data.get()));
7492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
7502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
7515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadDisabled) {
7525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EnableOneClick(false);
753a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
754a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
7552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
7562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
7585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadSignedIn) {
7617dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  PrefService* pref_service = profile()->GetPrefs();
7625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  pref_service->SetString(prefs::kGoogleServicesUsername, "user@gmail.com");
7635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
764a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
765a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
7662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
7672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7685d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
7695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadEmailNotAllowed) {
7725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  SetAllowedUsernamePattern("*@example.com");
773a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
774a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
7752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
7762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_,  &request_, io_data.get()));
7785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadEmailAlreadyUsed) {
7815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  ProfileInfoCache* cache = testing_profile_manager_.profile_info_cache();
7822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const base::FilePath& user_data_dir = cache->GetUserDataDir();
7835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  cache->AddProfileToCache(user_data_dir.Append(FILE_PATH_LITERAL("user")),
7845d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                           base::UTF8ToUTF16("user"),
7855d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                           base::UTF8ToUTF16("user@gmail.com"), 0,
7865d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                           std::string());
7875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
788a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
789a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
7902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
7912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
7925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
7935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
7945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
7955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadWithRejectedEmail) {
7965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AddEmailToOneClickRejectedList("user@gmail.com");
797a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
798a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
7992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
8002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
8015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
8025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
8035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
8045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadNoSigninCookies) {
8055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  AllowSigninCookies(false);
806a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
807a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
8082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
8092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
8105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
8112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
8122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(OneClickSigninHelperIOTest, CanOfferOnIOThreadDisabledByPolicy) {
814a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestProfileIOData> io_data(
815a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      CreateTestProfileIOData(Profile::REGULAR_PROFILE));
8162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::CAN_OFFER,
8172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
8185d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
8192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate a policy disabling signin by writing kSigninAllowed directly.
8212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We should not offer to sign in the browser.
8227dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile()->GetTestingPrefService()->SetManagedPref(
823116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      prefs::kSigninAllowed, new base::FundamentalValue(false));
8242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::DONT_OFFER,
8252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
8265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
8272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Reset the preference.
8297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile()->GetTestingPrefService()->SetManagedPref(
830116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      prefs::kSigninAllowed, new base::FundamentalValue(true));
8312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
8322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Simulate a policy disabling sync by writing kSyncManaged directly.
8332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // We should still offer to sign in the browser.
8347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch  profile()->GetTestingPrefService()->SetManagedPref(
835116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch      sync_driver::prefs::kSyncManaged, new base::FundamentalValue(true));
8362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(OneClickSigninHelper::CAN_OFFER,
8372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)            OneClickSigninHelper::CanOfferOnIOThreadImpl(
8385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)                valid_gaia_url_, &request_, io_data.get()));
8395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
840a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
841a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
842a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class MockStarterWrapper
843a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : public testing::StrictMock<OneClickSigninHelper::SyncStarterWrapper> {
844a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
845a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper(
846a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const OneClickSigninHelper::StartSyncArgs& args,
847a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      OneClickSigninSyncStarter::StartSyncMode start_mode);
848a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
849a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MOCK_METHOD1(DisplayErrorBubble, void(const std::string& error_message));
850a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MOCK_METHOD0(StartSigninOAuthHelper, void());
851a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MOCK_METHOD2(StartOneClickSigninSyncStarter,
852a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)               void(const std::string& email,
853a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                    const std::string& refresh_token));
854a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
855a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
856a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)MockStarterWrapper::MockStarterWrapper(
857a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    const OneClickSigninHelper::StartSyncArgs& args,
858a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    OneClickSigninSyncStarter::StartSyncMode start_mode)
859a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : testing::StrictMock<OneClickSigninHelper::SyncStarterWrapper>(
860a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          args, start_mode) {
861a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
862a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
863a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class OneClickSyncStarterWrapperTest : public testing::Test {
864a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) public:
865a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void SetUp() OVERRIDE {
866a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    TestingProfile::Builder builder;
867a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    profile_ = builder.Build();
868a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
869a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
870a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  virtual void TearDown() OVERRIDE {
871a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // Let the SyncStarterWrapper delete itself.
872a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    base::RunLoop().RunUntilIdle();
873a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
874a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
875a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SetCookie(const std::string& value) {
876a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    // Set a valid LSID cookie in the test cookie store.
877a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    scoped_refptr<net::CookieMonster> cookie_monster =
878a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        profile()->GetCookieMonster();
879a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    net::CookieOptions options;
880a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    options.set_include_httponly();
881a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    cookie_monster->SetCookieWithOptionsAsync(
882a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          GURL("https://accounts.google.com"),
883a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          value, options,
884a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          net::CookieMonster::SetCookiesCallback());
885a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
886a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
887a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  void SimulateRefreshTokenFetched(
888a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      SigninOAuthHelper::Consumer* consumer,
889a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const std::string& email,
890a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const std::string& display_email,
891a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      const std::string& refresh_token) {
892a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    consumer->OnSigninOAuthInformationAvailable(
893a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)        email, display_email, refresh_token);
894a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  }
895a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
896a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  TestingProfile* profile() { return profile_.get(); }
897a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
898a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) private:
899a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  content::TestBrowserThreadBundle thread_bundle_;
900a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  scoped_ptr<TestingProfile> profile_;
901a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)};
902a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
903a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(OneClickSyncStarterWrapperTest, SignInWithRefreshToken) {
904a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OneClickSigninHelper::StartSyncArgs args;
905a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.email = "foo@gmail.com";
906a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.password = "password";
907a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.refresh_token = "refresh_token";
908a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper* wrapper = new MockStarterWrapper(
909a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
910a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
911a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper,
912a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              StartOneClickSigninSyncStarter("foo@gmail.com",
913a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                             "refresh_token"));
914a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wrapper->Start();
915a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
916a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
917a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(OneClickSyncStarterWrapperTest, SignInWithPasswordNoRefreshToken) {
918a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OneClickSigninHelper::StartSyncArgs args;
919a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.email = "foo@gmail.com";
920a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.password = "password";
921a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper* wrapper = new MockStarterWrapper(
922a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
923a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
924a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper, StartSigninOAuthHelper());
925a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper,
926a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              StartOneClickSigninSyncStarter("foo@gmail.com",
927a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                             "refresh_token"));
928a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wrapper->Start();
929a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SimulateRefreshTokenFetched(wrapper, "foo@gmail.com", "foo@gmail.com",
930a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              "refresh_token");
931a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
932a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
933a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(OneClickSyncStarterWrapperTest, SignInWithWrongEmail) {
934a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OneClickSigninHelper::StartSyncArgs args;
935a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.email = "foo@gmail.com";
936a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.password = "password";
937a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper* wrapper = new MockStarterWrapper(
938a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
939a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
940a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper, StartSigninOAuthHelper());
941a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper, DisplayErrorBubble(_));
942a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wrapper->Start();
943a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SimulateRefreshTokenFetched(wrapper, "bar@gmail.com", "bar@gmail.com",
944a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              "refresh_token");
945a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
946a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
947a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(OneClickSyncStarterWrapperTest, SignInWithEmptyPasswordValidCookie) {
948a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OneClickSigninHelper::StartSyncArgs args;
949a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.email = "foo@gmail.com";
950a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.profile = profile();
951a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper* wrapper = new MockStarterWrapper(
952a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
953a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SetCookie("LSID=1234; secure; httponly");
954a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
955a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper, StartSigninOAuthHelper());
956a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper,
957a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)              StartOneClickSigninSyncStarter("foo@gmail.com",
958a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                                             "refresh_token"));
959a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wrapper->Start();
960a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
961a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SimulateRefreshTokenFetched(wrapper, "foo@gmail.com", "foo@gmail.com",
962a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                              "refresh_token");
963a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
964a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
965a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(OneClickSyncStarterWrapperTest, SignInWithEmptyPasswordNoCookie) {
966a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OneClickSigninHelper::StartSyncArgs args;
967a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.email = "foo@gmail.com";
968a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.profile = profile();
969a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper* wrapper = new MockStarterWrapper(
970a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
971a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
972a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper, DisplayErrorBubble(_));
973a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wrapper->Start();
974a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
975a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
976a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
977a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(OneClickSyncStarterWrapperTest, SignInWithEmptyPasswordInvalidCookie) {
978a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  OneClickSigninHelper::StartSyncArgs args;
979a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.email = "foo@gmail.com";
980a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  args.profile = profile();
981a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  MockStarterWrapper* wrapper = new MockStarterWrapper(
982a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      args, OneClickSigninSyncStarter::SYNC_WITH_DEFAULT_SETTINGS);
983a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  SetCookie("LSID=1234; domain=google.com; secure; httponly");
984a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
985a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  EXPECT_CALL(*wrapper, DisplayErrorBubble(_));
986a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  wrapper->Start();
987a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  base::RunLoop().RunUntilIdle();
988a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
989