management_policy.cc revision f2477e01787aa58f445919b809d89e252beef54f
1f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/browser/management_policy.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace extensions { 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace { 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void GetExtensionNameAndId(const Extension* extension, 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* name, 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) std::string* id) { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The extension may be NULL in testing. 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *id = extension ? extension->id() : "[test]"; 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *name = extension ? extension->name() : "test"; 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ManagementPolicy::ManagementPolicy() { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ManagementPolicy::~ManagementPolicy() { 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ManagementPolicy::Provider::UserMayLoad(const Extension* extension, 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16* error) const { 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ManagementPolicy::Provider::UserMayModifySettings( 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const Extension* extension, string16* error) const { 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return true; 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ManagementPolicy::Provider::MustRemainEnabled(const Extension* extension, 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16* error) const { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return false; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ManagementPolicy::Provider::MustRemainDisabled( 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const Extension* extension, 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Extension::DisableReason* reason, 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) string16* error) const { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ManagementPolicy::RegisterProvider(Provider* provider) { 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) providers_.insert(provider); 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ManagementPolicy::UnregisterProvider(Provider* provider) { 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) providers_.erase(provider); 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ManagementPolicy::UserMayLoad(const Extension* extension, 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16* error) const { 590f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return ApplyToProviderList(&Provider::UserMayLoad, "Installation", 600f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) true, extension, error); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ManagementPolicy::UserMayModifySettings(const Extension* extension, 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16* error) const { 650f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return ApplyToProviderList(&Provider::UserMayModifySettings, "Modification", 660f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) true, extension, error); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool ManagementPolicy::MustRemainEnabled(const Extension* extension, 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) string16* error) const { 710f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return ApplyToProviderList(&Provider::MustRemainEnabled, "Disabling", 720f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) false, extension, error); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool ManagementPolicy::MustRemainDisabled(const Extension* extension, 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) Extension::DisableReason* reason, 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) string16* error) const { 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (ProviderList::const_iterator it = providers_.begin(); 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) it != providers_.end(); ++it) 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) if ((*it)->MustRemainDisabled(extension, reason, error)) 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return true; 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return false; 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ManagementPolicy::UnregisterAllProviders() { 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) providers_.clear(); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)int ManagementPolicy::GetNumProviders() const { 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return providers_.size(); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 940f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)bool ManagementPolicy::ApplyToProviderList(ProviderFunction function, 950f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const char* debug_operation_name, 960f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool normal_result, 970f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const Extension* extension, 980f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) string16* error) const { 990f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) for (ProviderList::const_iterator it = providers_.begin(); 1000f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) it != providers_.end(); ++it) { 1010f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) const Provider* provider = *it; 1020f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) bool result = (provider->*function)(extension, error); 1030f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) if (result != normal_result) { 1040f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string id; 1050f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) std::string name; 1060f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) GetExtensionNameAndId(extension, &name, &id); 1070f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) DVLOG(1) << debug_operation_name << " of extension " << name 1080f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) << " (" << id << ")" 1090f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) << " prohibited by " << provider->GetDebugPolicyProviderName(); 1100f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return !normal_result; 1110f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 1120f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) } 1130f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) return normal_result; 1140f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles)} 1150f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace extensions 117