/chromium-webcl/src/chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.cc

https://bitbucket.org/peixuan/chromium_r197479_base · C++ · 65 lines · 44 code · 10 blank · 11 comment · 4 complexity · 2993c97a7f5528c386f5a5c0c4612e9a MD5 · raw file

  1. // Copyright (c) 2013 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. #include "chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder_factory.h"
  5. #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_chromeos.h"
  6. #include "chrome/browser/chromeos/policy/user_cloud_policy_manager_factory_chromeos.h"
  7. #include "chrome/browser/chromeos/policy/user_cloud_policy_token_forwarder.h"
  8. #include "chrome/browser/profiles/profile.h"
  9. #include "chrome/browser/profiles/profile_dependency_manager.h"
  10. #include "chrome/browser/signin/token_service.h"
  11. #include "chrome/browser/signin/token_service_factory.h"
  12. namespace policy {
  13. // static
  14. UserCloudPolicyTokenForwarderFactory*
  15. UserCloudPolicyTokenForwarderFactory::GetInstance() {
  16. return Singleton<UserCloudPolicyTokenForwarderFactory>::get();
  17. }
  18. UserCloudPolicyTokenForwarderFactory::UserCloudPolicyTokenForwarderFactory()
  19. : ProfileKeyedServiceFactory("UserCloudPolicyTokenForwarder",
  20. ProfileDependencyManager::GetInstance()) {
  21. DependsOn(TokenServiceFactory::GetInstance());
  22. DependsOn(UserCloudPolicyManagerFactoryChromeOS::GetInstance());
  23. }
  24. UserCloudPolicyTokenForwarderFactory::~UserCloudPolicyTokenForwarderFactory() {}
  25. ProfileKeyedService*
  26. UserCloudPolicyTokenForwarderFactory::BuildServiceInstanceFor(
  27. content::BrowserContext* context) const {
  28. Profile* profile = static_cast<Profile*>(context);
  29. UserCloudPolicyManagerChromeOS* manager =
  30. UserCloudPolicyManagerFactoryChromeOS::GetForProfile(profile);
  31. TokenService* token_service =
  32. TokenServiceFactory::GetForProfile(profile);
  33. if (!token_service || !manager)
  34. return NULL;
  35. if (manager->IsClientRegistered()) {
  36. // The CloudPolicyClient is already registered, so the manager doesn't need
  37. // the refresh token. The manager may have fetched a refresh token if it
  38. // performed a blocking policy fetch; send it to the TokenService in that
  39. // case, so that it can be reused for other services.
  40. if (!manager->oauth2_tokens().refresh_token.empty())
  41. token_service->UpdateCredentialsWithOAuth2(manager->oauth2_tokens());
  42. return NULL;
  43. }
  44. return new UserCloudPolicyTokenForwarder(manager, token_service);
  45. }
  46. bool UserCloudPolicyTokenForwarderFactory::ServiceIsCreatedWithProfile() const {
  47. // Create this object when the profile is created so it fetches the token
  48. // during startup.
  49. return true;
  50. }
  51. bool UserCloudPolicyTokenForwarderFactory::ServiceIsNULLWhileTesting() const {
  52. // This is only needed in a handful of tests that manually create the object.
  53. return true;
  54. }
  55. } // namespace policy