15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 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)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#ifndef CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_CUSTOM_EXTENSION_PROVIDER_H_
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_CUSTOM_EXTENSION_PROVIDER_H_
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include <string>
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/memory/ref_counted.h"
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/extensions/api/content_settings/content_settings_store.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/content_settings/core/browser/content_settings_observable_provider.h"
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace content_settings {
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A content settings provider which manages settings defined by extensions.
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class CustomExtensionProvider : public ObservableProvider,
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                          public extensions::ContentSettingsStore::Observer {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CustomExtensionProvider(const scoped_refptr<extensions::ContentSettingsStore>&
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                              extensions_settings,
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                          bool incognito);
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~CustomExtensionProvider();
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // ProviderInterface methods:
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual RuleIterator* GetRuleIterator(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ContentSettingsType content_type,
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ResourceIdentifier& resource_identifier,
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      bool incognito) const OVERRIDE;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual bool SetWebsiteSetting(
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ContentSettingsPattern& primary_pattern,
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ContentSettingsPattern& secondary_pattern,
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      ContentSettingsType content_type,
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      const ResourceIdentifier& resource_identifier,
375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      base::Value* value) OVERRIDE;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ClearAllContentSettingsRules(ContentSettingsType content_type)
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      OVERRIDE {}
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void ShutdownOnUIThread() OVERRIDE;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // extensions::ContentSettingsStore::Observer methods:
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void OnContentSettingChanged(const std::string& extension_id,
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                       bool incognito) OVERRIDE;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private:
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Specifies whether this provider manages settings for incognito or regular
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // sessions.
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bool incognito_;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The backend storing content setting rules defined by extensions.
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<extensions::ContentSettingsStore> extensions_settings_;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  DISALLOW_COPY_AND_ASSIGN(CustomExtensionProvider);
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}  // namespace content_settings
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#endif  // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_CUSTOM_EXTENSION_PROVIDER_H_
62