1// Copyright 2014 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_OVERRIDE_PROVIDER_H_ 6#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_OVERRIDE_PROVIDER_H_ 7 8#include "base/macros.h" 9#include "base/synchronization/lock.h" 10#include "components/content_settings/core/browser/content_settings_provider.h" 11#include "components/content_settings/core/common/content_settings_types.h" 12 13class ContentSettingsPattern; 14class PrefService; 15 16namespace user_prefs { 17class PrefRegistrySyncable; 18} 19 20namespace content_settings { 21 22// OverrideProvider contains if certain content settings are enabled or 23// globally disabled. It may only be written to using the UI thread, but may be 24// read on any thread. 25class OverrideProvider : public ProviderInterface { 26 public: 27 static void RegisterProfilePrefs(user_prefs::PrefRegistrySyncable* registry); 28 29 OverrideProvider(PrefService* prefs, bool incognito); 30 virtual ~OverrideProvider(); 31 32 // ProviderInterface implementations. 33 virtual RuleIterator* GetRuleIterator( 34 ContentSettingsType content_type, 35 const ResourceIdentifier& resource_identifier, 36 bool incognito) const OVERRIDE; 37 38 virtual void ClearAllContentSettingsRules( 39 ContentSettingsType content_type) OVERRIDE; 40 41 virtual bool SetWebsiteSetting( 42 const ContentSettingsPattern& primary_pattern, 43 const ContentSettingsPattern& secondary_pattern, 44 ContentSettingsType content_type, 45 const ResourceIdentifier& resource_identifier, 46 base::Value* value) OVERRIDE; 47 48 virtual void ShutdownOnUIThread() OVERRIDE; 49 50 // Sets if a given |content_type| is |enabled|. 51 void SetOverrideSetting(ContentSettingsType content_type, bool enabled); 52 53 // Returns if |content_type| is enabled. If it is not enabled, the content 54 // setting type is considered globally disabled and acts as though it is 55 // blocked. If it is enabled, the content setting type's permission is granted 56 // by the other providers. 57 bool IsEnabled(ContentSettingsType content_type) const; 58 59 private: 60 // Reads the override settings from the preferences service. 61 void ReadOverrideSettings(); 62 63 // Copies of the pref data, so that we can read it on the IO thread. 64 bool allowed_settings_[CONTENT_SETTINGS_NUM_TYPES]; 65 66 PrefService* prefs_; 67 68 bool is_incognito_; 69 70 // Used around accesses to the |override_content_settings_| object to 71 // guarantee thread safety. 72 mutable base::Lock lock_; 73 74 DISALLOW_COPY_AND_ASSIGN(OverrideProvider); 75}; 76 77} // namespace content_settings 78 79#endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_OVERRIDE_PROVIDER_H_ 80