// Copyright 2013 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_CONTENT_SETTINGS_CONTENT_SETTINGS_USAGES_STATE_H_ #define CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_USAGES_STATE_H_ #include #include #include "components/content_settings/core/common/content_settings.h" #include "components/content_settings/core/common/content_settings_types.h" #include "url/gurl.h" class Profile; namespace content { struct LoadCommittedDetails; } // This class manages a content setting state per tab for a given // |ContentSettingsType|, and provides information and presentation data about // the content setting usage. class ContentSettingsUsagesState { public: ContentSettingsUsagesState(Profile* profile, ContentSettingsType type); virtual ~ContentSettingsUsagesState(); typedef std::map StateMap; const StateMap& state_map() const { return state_map_; } // Sets the state for |requesting_origin|. void OnPermissionSet(const GURL& requesting_origin, bool allowed); // Delegated by WebContents to indicate a navigation has happened and we // may need to clear our settings. void DidNavigate(const content::LoadCommittedDetails& details); void ClearStateMap(); enum TabState { TABSTATE_NONE = 0, // There's at least one entry with non-default setting. TABSTATE_HAS_EXCEPTION = 1 << 1, // There's at least one entry with a non-ASK setting. TABSTATE_HAS_ANY_ICON = 1 << 2, // There's at least one entry with ALLOWED setting. TABSTATE_HAS_ANY_ALLOWED = 1 << 3, // There's at least one entry that doesn't match the saved setting. TABSTATE_HAS_CHANGED = 1 << 4, }; // Maps ContentSetting to a set of hosts formatted for presentation. typedef std::map > FormattedHostsPerState; // Returns an (optional) |formatted_hosts_per_state| and a mask of TabState. void GetDetailedInfo(FormattedHostsPerState* formatted_hosts_per_state, unsigned int* tab_state_flags) const; private: std::string GURLToFormattedHost(const GURL& url) const; Profile* profile_; ContentSettingsType type_; StateMap state_map_; GURL embedder_url_; DISALLOW_COPY_AND_ASSIGN(ContentSettingsUsagesState); }; #endif // CHROME_BROWSER_CONTENT_SETTINGS_CONTENT_SETTINGS_USAGES_STATE_H_