12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/sync/profile_signin_confirmation_helper.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/basictypes.h" 82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind_helpers.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/callback.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/command_line.h" 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/compiler_specific.h" 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 149ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch#include "base/message_loop/message_loop.h" 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_notifier_impl.h" 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h" 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/testing_pref_service.h" 182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/run_loop.h" 19868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string16.h" 20868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/string_util.h" 21868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#include "base/strings/utf_string_conversions.h" 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model.h" 232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/bookmarks/bookmark_model_factory.h" 242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/extensions/test_extension_system.h" 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service.h" 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/history/history_service_factory.h" 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/prefs/browser_prefs.h" 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/extension.h" 302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/extension_constants.h" 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/extension_manifest_constants.h" 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/extensions/permissions/permission_set.h" 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_pref_service_syncable.h" 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "components/user_prefs/pref_registry_syncable.h" 377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h" 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_CHROMEOS) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/login/user_manager.h" 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/cros_settings.h" 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/chromeos/settings/device_settings_service.h" 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template<typename T> 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)void GetValueAndQuit(T* result, const base::Closure& quit, T actual) { 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) *result = actual; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) quit.Run(); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)template<typename T> 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)T GetCallbackResult( 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const base::Callback<void(const base::Callback<void(T)>&)>& callback) { 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) T result = false; 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::RunLoop loop; 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) callback.Run(base::Bind(&GetValueAndQuit<T>, &result, loop.QuitClosure())); 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) loop.Run(); 632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return result; 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// A pref store that can have its read_error property changed for testing. 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)class TestingPrefStoreWithCustomReadError : public TestingPrefStore { 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefStoreWithCustomReadError() 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : read_error_(PersistentPrefStore::PREF_READ_ERROR_NO_FILE) { 712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // By default the profile is "new" (NO_FILE means that the profile 722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // wasn't found on disk, so it was created). 732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual PrefReadError GetReadError() const OVERRIDE { 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return read_error_; 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual bool IsInitializationComplete() const OVERRIDE { 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return true; 792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) void set_read_error(PrefReadError read_error) { 812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) read_error_ = read_error; 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private: 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~TestingPrefStoreWithCustomReadError() {} 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) PrefReadError read_error_; 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN) 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kExtensionFilePath[] = 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("c:\\foo"); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#elif defined(OS_POSIX) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const base::FilePath::CharType kExtensionFilePath[] = 932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) FILE_PATH_LITERAL("/oo"); 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)static scoped_refptr<extensions::Extension> CreateExtension( 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& name, 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) const std::string& id) { 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) DictionaryValue manifest; 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manifest.SetString(extension_manifest_keys::kVersion, "1.0.0.0"); 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manifest.SetString(extension_manifest_keys::kName, name); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) std::string error; 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<extensions::Extension> extension = 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Extension::Create( 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kExtensionFilePath).AppendASCII(name), 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Manifest::INTERNAL, 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) manifest, 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::Extension::NO_FLAGS, 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) id, 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) &error); 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) return extension; 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 116c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ProfileSigninConfirmationHelperTest : public testing::Test { 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 118c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ProfileSigninConfirmationHelperTest() 1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch : user_prefs_(NULL), 1202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_(NULL) { 1212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void SetUp() OVERRIDE { 1242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Create the profile. 1252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingProfile::Builder builder; 1262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs_ = new TestingPrefStoreWithCustomReadError; 1272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefServiceSyncable* pref_service = new TestingPrefServiceSyncable( 1282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestingPrefStore(), 1292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs_, 1302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new TestingPrefStore(), 131c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) new user_prefs::PrefRegistrySyncable(), 1322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) new PrefNotifierImpl()); 1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch chrome::RegisterUserProfilePrefs(pref_service->registry()); 1342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) builder.SetPrefService(make_scoped_ptr<PrefServiceSyncable>(pref_service)); 1352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_ = builder.Build(); 1362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Initialize the services we check. 1382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_->CreateBookmarkModel(true); 1392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_ = BookmarkModelFactory::GetForProfile(profile_.get()); 1402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ui_test_utils::WaitForBookmarkModelToLoad(model_); 141bbcdd45c55eb7c4641ab97aef9889b0fc828e7d3Ben Murdoch ASSERT_TRUE(profile_->CreateHistoryService(true, false)); 1422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::TestExtensionSystem* system = 1432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) static_cast<extensions::TestExtensionSystem*>( 1442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile_.get())); 1452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CommandLine command_line(CommandLine::NO_PROGRAM); 1462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) system->CreateExtensionService(&command_line, 1472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::FilePath(kExtensionFilePath), 1482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) false); 1492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual void TearDown() OVERRIDE { 152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // TestExtensionSystem uses DeleteSoon, so we need to delete the profile 153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // and then run the message queue to clean up. 154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_.reset(); 1557dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch base::RunLoop().RunUntilIdle(); 1562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 1572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected: 1597dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 1602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_ptr<TestingProfile> profile_; 1612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) TestingPrefStoreWithCustomReadError* user_prefs_; 1622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) BookmarkModel* model_; 163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined OS_CHROMEOS 165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestCrosSettings test_cros_settings_; 167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chromeos::ScopedTestUserManager test_user_manager_; 168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif 1692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 1702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ProfileSigninConfirmationHelperTest, DoNotPromptForNewProfile) { 1722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Profile is new and there's no profile data. 1732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_FALSE( 1742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCallbackResult( 1752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 176c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ui::CheckShouldPromptForNewProfile, 177c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_.get()))); 1782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 180c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ProfileSigninConfirmationHelperTest, PromptForNewProfile_Bookmarks) { 1812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(model_); 1822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Profile is new but has bookmarks. 1842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) model_->AddURL(model_->bookmark_bar_node(), 0, string16(ASCIIToUTF16("foo")), 1852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL("http://foo.com")); 1862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 1872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCallbackResult( 1882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 189c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ui::CheckShouldPromptForNewProfile, 190c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_.get()))); 1912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 193c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ProfileSigninConfirmationHelperTest, PromptForNewProfile_Extensions) { 1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ExtensionService* extensions = 1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions::ExtensionSystem::Get(profile_.get())->extension_service(); 1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(extensions); 1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Profile is new but has synced extensions. 1992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // (The web store doesn't count.) 2012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) scoped_refptr<extensions::Extension> webstore = 2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) CreateExtension("web store", extension_misc::kWebStoreAppId); 2032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions->extension_prefs()->AddGrantedPermissions( 2047d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) webstore->id(), make_scoped_refptr(new extensions::PermissionSet).get()); 205868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) extensions->AddExtension(webstore.get()); 206868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_FALSE(GetCallbackResult( 207868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Bind(&ui::CheckShouldPromptForNewProfile, profile_.get()))); 2082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 209c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<extensions::Extension> extension = 210c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) CreateExtension("foo", std::string()); 2112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) extensions->extension_prefs()->AddGrantedPermissions( 2127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) extension->id(), make_scoped_refptr(new extensions::PermissionSet).get()); 213868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) extensions->AddExtension(extension.get()); 214868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) EXPECT_TRUE(GetCallbackResult( 215868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles) base::Bind(&ui::CheckShouldPromptForNewProfile, profile_.get()))); 2162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 218c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ProfileSigninConfirmationHelperTest, PromptForNewProfile_History) { 2192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryService* history = HistoryServiceFactory::GetForProfile( 2202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), 2212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::EXPLICIT_ACCESS); 2222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(history); 2232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Profile is new but has more than $(kHistoryEntriesBeforeNewProfilePrompt) 2252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // history items. 2262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) char buf[18]; 2272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) for (int i = 0; i < 10; i++) { 2282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::snprintf(buf, arraysize(buf), "http://foo.com/%d", i); 2292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) history->AddPage( 2302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(std::string(buf)), base::Time::Now(), NULL, 1, 2312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(), history::RedirectList(), content::PAGE_TRANSITION_LINK, 2322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) history::SOURCE_BROWSED, false); 2332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 2342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 2352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCallbackResult( 2362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 237c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ui::CheckShouldPromptForNewProfile, 238c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_.get()))); 2392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 241c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ProfileSigninConfirmationHelperTest, PromptForNewProfile_TypedURLs) { 2422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) HistoryService* history = HistoryServiceFactory::GetForProfile( 2432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) profile_.get(), 2442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) Profile::EXPLICIT_ACCESS); 2452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) ASSERT_TRUE(history); 2462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 2472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Profile is new but has a typed URL. 2482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) history->AddPage( 2492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL("http://example.com"), base::Time::Now(), NULL, 1, 2502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GURL(), history::RedirectList(), content::PAGE_TRANSITION_TYPED, 2512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) history::SOURCE_BROWSED, false); 2522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 2532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCallbackResult( 2542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 255c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ui::CheckShouldPromptForNewProfile, 256c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_.get()))); 2572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 2582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 259c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)TEST_F(ProfileSigninConfirmationHelperTest, PromptForNewProfile_Restarted) { 2602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Browser has been shut down since profile was created. 2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) user_prefs_->set_read_error(PersistentPrefStore::PREF_READ_ERROR_NONE); 2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_TRUE( 2632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) GetCallbackResult( 2642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) base::Bind( 265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) &ui::CheckShouldPromptForNewProfile, 266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) profile_.get()))); 2672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 268