// Copyright (c) 2012 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_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_VIEW_H_ #define CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_VIEW_H_ #include "base/basictypes.h" #include "base/compiler_specific.h" #include "base/memory/scoped_ptr.h" #include "base/observer_list.h" #include "base/string16.h" #include "chrome/browser/ui/views/website_settings/permission_selector_view_observer.h" #include "chrome/browser/ui/website_settings/permission_menu_model.h" #include "chrome/common/content_settings.h" #include "chrome/common/content_settings_types.h" #include "ui/views/controls/button/menu_button_listener.h" #include "ui/views/view.h" namespace internal { class PermissionMenuButton; } namespace views { class ImageView; class MenuRunner; } // A custom view for selecting a permission setting for the given permission // |type|. class PermissionSelectorView : public views::View, public PermissionMenuModel::Delegate { public: PermissionSelectorView(const GURL& url, ContentSettingsType type, ContentSetting default_setting, ContentSetting current_setting, content_settings::SettingSource source); void AddObserver(PermissionSelectorViewObserver* observer); // Returns the selected setting. ContentSetting current_setting() const { return current_setting_; } // Returns the permission type. ContentSettingsType type() const { return type_; } protected: // Overridden from views::View. virtual void ChildPreferredSizeChanged(View* child) OVERRIDE; private: virtual ~PermissionSelectorView(); // Overridden from PermissionMenuModel::Delegate. virtual void ExecuteCommand(int command_id) OVERRIDE; virtual bool IsCommandIdChecked(int command_id) OVERRIDE; views::ImageView* icon_; // Owned by the views hierachy. internal::PermissionMenuButton* menu_button_; // Owned by the views hierachy. scoped_ptr menu_button_model_; // The site permission (the |ContentSettingsType|) for which the menu model // provides settings. ContentSettingsType type_; // The global default setting for the permission |type_|. ContentSetting default_setting_; // The currently active setting for the permission |type_|. ContentSetting current_setting_; ObserverList observer_list_; DISALLOW_COPY_AND_ASSIGN(PermissionSelectorView); }; #endif // CHROME_BROWSER_UI_VIEWS_WEBSITE_SETTINGS_PERMISSION_SELECTOR_VIEW_H_