1// Copyright (c) 2012 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 5#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_INTERNAL_EXTENSION_PROVIDER_H_ 6#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_INTERNAL_EXTENSION_PROVIDER_H_ 7 8#include "base/memory/scoped_ptr.h" 9#include "base/synchronization/lock.h" 10#include "components/content_settings/core/browser/content_settings_observable_provider.h" 11#include "components/content_settings/core/browser/content_settings_origin_identifier_value_map.h" 12#include "components/content_settings/core/common/content_settings.h" 13#include "content/public/browser/notification_observer.h" 14#include "content/public/browser/notification_registrar.h" 15 16class ExtensionService; 17 18namespace extensions { 19class Extension; 20} 21 22namespace content_settings { 23 24// A content settings provider which disables certain plugins for platform apps. 25class InternalExtensionProvider : public ObservableProvider, 26 public content::NotificationObserver { 27 public: 28 explicit InternalExtensionProvider(ExtensionService* extension_service); 29 30 virtual ~InternalExtensionProvider(); 31 32 // ProviderInterface methods: 33 virtual RuleIterator* GetRuleIterator( 34 ContentSettingsType content_type, 35 const ResourceIdentifier& resource_identifier, 36 bool incognito) const OVERRIDE; 37 38 virtual bool SetWebsiteSetting( 39 const ContentSettingsPattern& primary_pattern, 40 const ContentSettingsPattern& secondary_pattern, 41 ContentSettingsType content_type, 42 const ResourceIdentifier& resource_identifier, 43 base::Value* value) OVERRIDE; 44 45 virtual void ClearAllContentSettingsRules(ContentSettingsType content_type) 46 OVERRIDE; 47 48 virtual void ShutdownOnUIThread() OVERRIDE; 49 50 // content::NotificationObserver implementation. 51 virtual void Observe(int type, 52 const content::NotificationSource& source, 53 const content::NotificationDetails& details) OVERRIDE; 54 private: 55 void SetContentSettingForExtension(const extensions::Extension* extension, 56 ContentSetting setting); 57 void SetContentSettingForExtensionAndResource( 58 const extensions::Extension* extension, 59 const ResourceIdentifier& resource, 60 ContentSetting setting); 61 62 OriginIdentifierValueMap value_map_; 63 64 // Used around accesses to the |value_map_| list to guarantee thread safety. 65 mutable base::Lock lock_; 66 scoped_ptr<content::NotificationRegistrar> registrar_; 67 68 DISALLOW_COPY_AND_ASSIGN(InternalExtensionProvider); 69}; 70 71} // namespace content_settings 72 73#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_INTERNAL_EXTENSION_PROVIDER_H_ 74