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