168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// found in the LICENSE file.
468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context_factory.h"
668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/media/protected_media_identifier_permission_context.h"
868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/incognito_helpers.h"
968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/browser/profiles/profile.h"
1068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)#include "chrome/common/pref_names.h"
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "components/keyed_service/content/browser_context_dependency_manager.h"
12cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles)#include "components/pref_registry/pref_registry_syncable.h"
1368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
1468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)namespace {
1568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)class Service : public KeyedService {
1768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) public:
1868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  explicit Service(Profile* profile) {
1968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    context_ = new ProtectedMediaIdentifierPermissionContext(profile);
2068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
2168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  ProtectedMediaIdentifierPermissionContext* context() {
2368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    return context_.get();
2468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
2568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
2668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  virtual void Shutdown() OVERRIDE {
2768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    context()->ShutdownOnUIThread();
2868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  }
2968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles) private:
3168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  scoped_refptr<ProtectedMediaIdentifierPermissionContext> context_;
3268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(Service);
3468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)};
3568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}  // namespace
3768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
3868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// static
3968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContext*
4068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::GetForProfile(
4168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    Profile* profile) {
4268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return static_cast<Service*>(
4368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      GetInstance()->GetServiceForBrowserContext(profile, true))->context();
4468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
4568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
4668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)// static
4768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory*
4868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::GetInstance() {
4968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return Singleton<
5068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      ProtectedMediaIdentifierPermissionContextFactory>::get();
5168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
5268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
5368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::
5468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory()
5568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    : BrowserContextKeyedServiceFactory(
5668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          "ProtectedMediaIdentifierPermissionContext",
5768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)          BrowserContextDependencyManager::GetInstance()) {
5868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
5968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
6068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::
6168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)~ProtectedMediaIdentifierPermissionContextFactory() {
6268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
6368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
64a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)KeyedService*
6568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::BuildServiceInstanceFor(
6668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    content::BrowserContext* profile) const {
6768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return new Service(static_cast<Profile*>(profile));
6868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
6968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
7068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)void
7168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::RegisterProfilePrefs(
7268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    user_prefs::PrefRegistrySyncable* registry) {
7368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  registry->RegisterBooleanPref(
7468043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      prefs::kProtectedMediaIdentifierEnabled,
7568043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      true,
7668043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)      user_prefs::PrefRegistrySyncable::UNSYNCABLE_PREF);
7768043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
7868043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)
7968043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)content::BrowserContext*
8068043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)ProtectedMediaIdentifierPermissionContextFactory::GetBrowserContextToUse(
8168043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)    content::BrowserContext* context) const {
8268043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)  return chrome::GetBrowserContextOwnInstanceInIncognito(context);
8368043e1e95eeb07d5cae7aca370b26518b0867d6Torne (Richard Coles)}
84