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_UI_WEBUI_OPTIONS_WEBSITE_SETTINGS_HANDLER_H_ 6#define CHROME_BROWSER_UI_WEBUI_OPTIONS_WEBSITE_SETTINGS_HANDLER_H_ 7 8#include <string> 9 10#include "base/basictypes.h" 11#include "base/macros.h" 12#include "base/scoped_observer.h" 13#include "chrome/browser/browsing_data/browsing_data_local_storage_helper.h" 14#include "chrome/browser/content_settings/host_content_settings_map.h" 15#include "chrome/browser/content_settings/local_shared_objects_container.h" 16#include "chrome/browser/ui/webui/options/options_ui.h" 17#include "components/content_settings/core/browser/content_settings_observer.h" 18#include "components/power/origin_power_map.h" 19 20namespace options { 21 22class WebsiteSettingsHandler : public content_settings::Observer, 23 public OptionsPageUIHandler { 24 public: 25 WebsiteSettingsHandler(); 26 virtual ~WebsiteSettingsHandler(); 27 28 typedef std::list<BrowsingDataLocalStorageHelper::LocalStorageInfo> 29 LocalStorageList; 30 31 // OptionsPageUIHandler implementation. 32 virtual void GetLocalizedValues( 33 base::DictionaryValue* localized_strings) OVERRIDE; 34 virtual void InitializeHandler() OVERRIDE; 35 virtual void RegisterMessages() OVERRIDE; 36 37 // content_settings::Observer implementation. 38 virtual void OnContentSettingChanged( 39 const ContentSettingsPattern& primary_pattern, 40 const ContentSettingsPattern& secondary_pattern, 41 ContentSettingsType content_type, 42 std::string resource_identifier) OVERRIDE; 43 virtual void OnContentSettingUsed( 44 const ContentSettingsPattern& primary_pattern, 45 const ContentSettingsPattern& secondary_pattern, 46 ContentSettingsType content_type) OVERRIDE; 47 48 private: 49 // Update the page with all origins for a given content setting. 50 // |args| is the string name of the content setting. 51 void HandleUpdateOrigins(const base::ListValue* args); 52 53 // Update the page with all origins given a filter string. 54 // |args| is the filter string. 55 void HandleUpdateSearchResults(const base::ListValue* args); 56 57 // Update the single site edit view with the permission values for a given 58 // url, if the url is valid. 59 // |args| is the URL. 60 void HandleGetOriginInfo(const base::ListValue* args); 61 62 // Sets the content setting permissions for a given setting type for the last 63 // used origin. 64 // |args| is the name of the setting and the new value. 65 void HandleSetOriginPermission(const base::ListValue* args); 66 67 // Update the page with all origins that are using local storage. 68 void HandleUpdateLocalStorage(const base::ListValue* args); 69 70 // Show the single site edit view if the given URL is valid. 71 // |args| is the URL. 72 void HandleMaybeShowEditPage(const base::ListValue* args); 73 74 // Get all origins that have used power, filter them by |last_filter_|, and 75 // update the page. 76 void HandleUpdateBatteryUsage(const base::ListValue* args); 77 78 // Deletes the local storage and repopulates the page. 79 void HandleDeleteLocalStorage(const base::ListValue* args); 80 81 // Populates the default setting drop down on the single site edit page. 82 void HandleUpdateDefaultSetting(const base::ListValue* args); 83 84 // Sets the default setting for the last used content setting to |args|. 85 void HandleSetDefaultSetting(const base::ListValue* args); 86 87 // Sets if a certain content setting enabled to |args|. 88 void HandleSetGlobalToggle(const base::ListValue* args); 89 90 // Closes all tabs and app windows which have the same origin as the selected 91 // page. 92 void HandleStopOrigin(const base::ListValue* args); 93 94 // Callback method to be invoked when fetching the data is complete. 95 void OnLocalStorageFetched(const LocalStorageList& storage); 96 97 // Get all origins with Content Settings for the last given content setting, 98 // filter them by |last_filter_|, and update the page. 99 void UpdateOrigins(); 100 101 // Get all origins with local storage usage, filter them by |last_filter_|, 102 // and update the page. 103 void UpdateLocalStorage(); 104 105 // Get all origins with power consumption, filter them by |last_filter_|, 106 // and update the page. 107 void UpdateBatteryUsage(); 108 109 // Kill all tabs and app windows which have the same origin as |site_url|. 110 void StopOrigin(const GURL& site_url); 111 112 // Delete all of the local storage for the |site_url|. 113 void DeleteLocalStorage(const GURL& site_url); 114 115 // Populates the single site edit view with the permissions and local storage 116 // usage for a given |site_url|. If |show_page| is true, it raises a new 117 // single site edit view. 118 void GetInfoForOrigin(const GURL& site_url, bool show_page); 119 120 // Updates the page with the last settings used. 121 void Update(); 122 123 // Gets the default setting in string form. If |provider_id| is not NULL, the 124 // id of the provider which provided the default setting is assigned to it. 125 std::string GetSettingDefaultFromModel(ContentSettingsType type, 126 std::string* provider_id); 127 128 // Returns the base URL for websites, or the app name for Chrome App URLs. 129 const std::string& GetReadableName(const GURL& site_url); 130 131 Profile* GetProfile(); 132 133 std::string last_setting_; 134 std::string last_filter_; 135 GURL last_site_; 136 scoped_refptr<BrowsingDataLocalStorageHelper> local_storage_; 137 LocalStorageList local_storage_list_; 138 139 // Observer to watch for content settings changes. 140 ScopedObserver<HostContentSettingsMap, content_settings::Observer> observer_; 141 142 // Subscription to watch for power consumption updates. 143 scoped_ptr<power::OriginPowerMap::Subscription> subscription_; 144 145 base::WeakPtrFactory<WebsiteSettingsHandler> weak_ptr_factory_; 146 147 DISALLOW_COPY_AND_ASSIGN(WebsiteSettingsHandler); 148}; 149 150} // namespace options 151 152#endif // CHROME_BROWSER_UI_WEBUI_OPTIONS_WEBSITE_SETTINGS_HANDLER_H_ 153