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