12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 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)
52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/signin/about_signin_internals_factory.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
8effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/profiles/profile.h"
9e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/signin/chrome_signin_client_factory.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/signin/profile_oauth2_token_service_factory.h"
11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "chrome/browser/signin/signin_manager_factory.h"
122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/common/pref_names.h"
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
14cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
15e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/about_signin_internals.h"
16effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "components/signin/core/browser/signin_internals_util.h"
17e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "google_apis/gaia/gaia_constants.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using namespace signin_internals_util;
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AboutSigninInternalsFactory::AboutSigninInternalsFactory()
2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)    : BrowserContextKeyedServiceFactory(
2490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        "AboutSigninInternals",
2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)        BrowserContextDependencyManager::GetInstance()) {
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DependsOn(SigninManagerFactory::GetInstance());
275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  DependsOn(ProfileOAuth2TokenServiceFactory::GetInstance());
28e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  DependsOn(ChromeSigninClientFactory::GetInstance());
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AboutSigninInternalsFactory::~AboutSigninInternalsFactory() {}
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AboutSigninInternals* AboutSigninInternalsFactory::GetForProfile(
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    Profile* profile) {
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return static_cast<AboutSigninInternals*>(
3790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(profile, true));
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// static
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)AboutSigninInternalsFactory* AboutSigninInternalsFactory::GetInstance() {
422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return Singleton<AboutSigninInternalsFactory>::get();
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochvoid AboutSigninInternalsFactory::RegisterProfilePrefs(
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs::PrefRegistrySyncable* user_prefs) {
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // SigninManager information for about:signin-internals.
482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int i = UNTIMED_FIELDS_BEGIN; i < UNTIMED_FIELDS_END; ++i) {
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string pref_path = SigninStatusFieldToString(
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        static_cast<UntimedSigninStatusField>(i));
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs->RegisterStringPref(
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        pref_path.c_str(),
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        std::string(),
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  for (int i = TIMED_FIELDS_BEGIN; i < TIMED_FIELDS_END; ++i) {
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string value = SigninStatusFieldToString(
582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        static_cast<TimedSigninStatusField>(i)) + ".value";
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    const std::string time = SigninStatusFieldToString(
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        static_cast<TimedSigninStatusField>(i)) + ".time";
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs->RegisterStringPref(
62c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        value.c_str(),
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        std::string(),
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)    user_prefs->RegisterStringPref(
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        time.c_str(),
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        std::string(),
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)        user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
72a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService* AboutSigninInternalsFactory::BuildServiceInstanceFor(
73e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch    content::BrowserContext* context) const {
74e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  Profile* profile = Profile::FromBrowserContext(context);
75e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  AboutSigninInternals* service = new AboutSigninInternals(
76e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      ProfileOAuth2TokenServiceFactory::GetForProfile(profile),
77e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch      SigninManagerFactory::GetForProfile(profile));
78e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch  service->Initialize(ChromeSigninClientFactory::GetForProfile(profile));
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  return service;
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
81