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)26 SendTabToSelfClientService* 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()34 SendTabToSelfClientServiceFactory::GetInstance() {
35   return base::Singleton<SendTabToSelfClientServiceFactory>::get();
36 }
37 
SendTabToSelfClientServiceFactory()38 SendTabToSelfClientServiceFactory::SendTabToSelfClientServiceFactory()
39     : BrowserContextKeyedServiceFactory(
40           "SendTabToSelfClientService",
41           BrowserContextDependencyManager::GetInstance()) {
42   DependsOn(NotificationDisplayServiceFactory::GetInstance());
43   DependsOn(SendTabToSelfSyncServiceFactory::GetInstance());
44 }
45 
~SendTabToSelfClientServiceFactory()46 SendTabToSelfClientServiceFactory::~SendTabToSelfClientServiceFactory() {}
47 
48 // BrowserStateKeyedServiceFactory implementation.
BuildServiceInstanceFor(content::BrowserContext * context) const49 KeyedService* 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() const76 bool SendTabToSelfClientServiceFactory::ServiceIsCreatedWithBrowserContext()
77     const {
78   return true;
79 }
80 
ServiceIsNULLWhileTesting() const81 bool SendTabToSelfClientServiceFactory::ServiceIsNULLWhileTesting() const {
82   return true;
83 }
84 
85 }  // namespace send_tab_to_self
86