1 // Copyright 2019 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/send_tab_to_self/send_tab_to_self_client_service_factory.h" 6 7 #include <string> 8 9 #include "base/bind.h" 10 #include "base/memory/singleton.h" 11 #include "chrome/browser/notifications/notification_display_service_factory.h" 12 #include "chrome/browser/profiles/profile.h" 13 #include "chrome/browser/send_tab_to_self/send_tab_to_self_client_service.h" 14 #include "chrome/browser/sync/send_tab_to_self_sync_service_factory.h" 15 #include "components/keyed_service/content/browser_context_dependency_manager.h" 16 #include "components/send_tab_to_self/send_tab_to_self_model.h" 17 #include "components/send_tab_to_self/send_tab_to_self_sync_service.h" 18 19 #if defined(OS_CHROMEOS) 20 #include "chrome/browser/chromeos/profiles/profile_helper.h" 21 #include "components/user_manager/user.h" 22 #endif 23 24 namespace send_tab_to_self { 25 // static GetForProfile(Profile * profile)26SendTabToSelfClientService* SendTabToSelfClientServiceFactory::GetForProfile( 27 Profile* profile) { 28 return static_cast<send_tab_to_self::SendTabToSelfClientService*>( 29 GetInstance()->GetServiceForBrowserContext(profile, true)); 30 } 31 32 // static 33 SendTabToSelfClientServiceFactory* GetInstance()34SendTabToSelfClientServiceFactory::GetInstance() { 35 return base::Singleton<SendTabToSelfClientServiceFactory>::get(); 36 } 37 SendTabToSelfClientServiceFactory()38SendTabToSelfClientServiceFactory::SendTabToSelfClientServiceFactory() 39 : BrowserContextKeyedServiceFactory( 40 "SendTabToSelfClientService", 41 BrowserContextDependencyManager::GetInstance()) { 42 DependsOn(NotificationDisplayServiceFactory::GetInstance()); 43 DependsOn(SendTabToSelfSyncServiceFactory::GetInstance()); 44 } 45 ~SendTabToSelfClientServiceFactory()46SendTabToSelfClientServiceFactory::~SendTabToSelfClientServiceFactory() {} 47 48 // BrowserStateKeyedServiceFactory implementation. BuildServiceInstanceFor(content::BrowserContext * context) const49KeyedService* SendTabToSelfClientServiceFactory::BuildServiceInstanceFor( 50 content::BrowserContext* context) const { 51 Profile* profile = Profile::FromBrowserContext(context); 52 SendTabToSelfSyncService* sync_service = 53 SendTabToSelfSyncServiceFactory::GetForProfile(profile); 54 55 #if defined(OS_CHROMEOS) 56 // Create SendTabToSelfClientService only for profiles of Gaia users. 57 // ChromeOS has system level profiles, such as the sign-in profile, or 58 // users that are not Gaia users, such as public account users. Do not 59 // create the service for them. 60 user_manager::User* user = 61 chromeos::ProfileHelper::Get()->GetUserByProfile(profile); 62 // Ensure that the profile is a user profile. 63 if (!user) 64 return nullptr; 65 // Ensure that the user is a Gaia user, since other types of user should not 66 // have access to the service. 67 if (!user->HasGaiaAccount()) 68 return nullptr; 69 #endif 70 71 // TODO(crbug.com/976741) refactor profile out of STTSClient constructor. 72 return new SendTabToSelfClientService(profile, 73 sync_service->GetSendTabToSelfModel()); 74 } 75 ServiceIsCreatedWithBrowserContext() const76bool SendTabToSelfClientServiceFactory::ServiceIsCreatedWithBrowserContext() 77 const { 78 return true; 79 } 80 ServiceIsNULLWhileTesting() const81bool SendTabToSelfClientServiceFactory::ServiceIsNULLWhileTesting() const { 82 return true; 83 } 84 85 } // namespace send_tab_to_self 86