// Copyright 2015 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef CHROME_BROWSER_PERMISSIONS_CHOOSER_CONTEXT_BASE_H_ #define CHROME_BROWSER_PERMISSIONS_CHOOSER_CONTEXT_BASE_H_ #include #include #include "base/memory/scoped_ptr.h" #include "base/values.h" #include "components/content_settings/core/common/content_settings_types.h" #include "components/keyed_service/core/keyed_service.h" #include "url/gurl.h" class HostContentSettingsMap; class Profile; // This is the base class for services that manage any type of permission that // is granted through a chooser-style UI instead of a simple allow/deny prompt. // Subclasses must define the structure of the objects that are stored. class ChooserContextBase : public KeyedService { public: struct Object { // The contents of |object| are Swap()ed into the internal dictionary. Object(GURL requesting_origin, GURL embedding_origin, base::DictionaryValue* object, const std::string& source, bool incognito); ~Object(); GURL requesting_origin; GURL embedding_origin; base::DictionaryValue object; std::string source; bool incognito; }; ChooserContextBase(Profile* profile, ContentSettingsType data_content_settings_type); ~ChooserContextBase() override; // Returns the list of objects that |requesting_origin| has been granted // permission to access when embedded within |embedding_origin|. // // This method may be extended by a subclass to return objects not stored in // |host_content_settings_map_|. virtual std::vector> GetGrantedObjects( const GURL& requesting_origin, const GURL& embedding_origin); // Returns the set of all objects that any origin has been granted permission // to access. // // This method may be extended by a subclass to return objects not stored in // |host_content_settings_map_|. virtual std::vector> GetAllGrantedObjects(); // Grants |requesting_origin| access to |object| when embedded within // |embedding_origin| by writing it into |host_content_settings_map_|. void GrantObjectPermission(const GURL& requesting_origin, const GURL& embedding_origin, scoped_ptr object); // Revokes |requesting_origin|'s permission to access |object| when embedded // within |embedding_origin|. // // This method may be extended by a subclass to revoke permission to access // objects returned by GetPreviouslyChosenObjects but not stored in // |host_content_settings_map_|. virtual void RevokeObjectPermission(const GURL& requesting_origin, const GURL& embedding_origin, const base::DictionaryValue& object); // Validates the structure of an object read from // |host_content_settings_map_|. virtual bool IsValidObject(const base::DictionaryValue& object) = 0; private: scoped_ptr GetWebsiteSetting( const GURL& requesting_origin, const GURL& embedding_origin); void SetWebsiteSetting(const GURL& requesting_origin, const GURL& embedding_origin, scoped_ptr value); HostContentSettingsMap* const host_content_settings_map_; const ContentSettingsType data_content_settings_type_; }; #endif // CHROME_BROWSER_PERMISSIONS_CHOOSER_CONTEXT_BASE_H_