OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "chrome/browser/ui/webui/options/website_settings_handler.h" | 5 #include "chrome/browser/ui/webui/options/website_settings_handler.h" |
6 | 6 |
7 #include "chrome/browser/content_settings/content_settings_utils.h" | 7 #include "chrome/browser/content_settings/content_settings_utils.h" |
8 #include "chrome/browser/content_settings/host_content_settings_map.h" | 8 #include "chrome/browser/content_settings/host_content_settings_map.h" |
9 #include "chrome/browser/profiles/profile.h" | 9 #include "chrome/browser/profiles/profile.h" |
10 #include "content/public/browser/web_ui.h" | 10 #include "content/public/browser/web_ui.h" |
11 #include "grit/generated_resources.h" | 11 #include "grit/generated_resources.h" |
| 12 #include "ui/base/text/bytes_formatting.h" |
12 | 13 |
13 namespace { | 14 namespace { |
14 | 15 |
15 const char kPreferencesSource[] = "preference"; | 16 const char kPreferencesSource[] = "preference"; |
16 | 17 const char kStorage[] = "storage"; |
| 18 const ContentSettingsType kValidTypes[] = {CONTENT_SETTINGS_TYPE_GEOLOCATION, |
| 19 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, |
| 20 CONTENT_SETTINGS_TYPE_MEDIASTREAM}; |
| 21 const size_t kValidTypesLength = arraysize(kValidTypes); |
17 } // namespace | 22 } // namespace |
18 | 23 |
19 namespace options { | 24 namespace options { |
20 | 25 |
21 WebsiteSettingsHandler::WebsiteSettingsHandler() { | 26 WebsiteSettingsHandler::WebsiteSettingsHandler() : weak_ptr_factory_(this) { |
22 } | 27 } |
23 | 28 |
24 WebsiteSettingsHandler::~WebsiteSettingsHandler() { | 29 WebsiteSettingsHandler::~WebsiteSettingsHandler() { |
25 } | 30 } |
26 | 31 |
27 void WebsiteSettingsHandler::GetLocalizedValues( | 32 void WebsiteSettingsHandler::GetLocalizedValues( |
28 base::DictionaryValue* localized_strings) { | 33 base::DictionaryValue* localized_strings) { |
29 DCHECK(localized_strings); | 34 DCHECK(localized_strings); |
30 | 35 |
31 static OptionsStringResource resources[] = { | 36 static OptionsStringResource resources[] = { |
32 {"websitesOptionsPageTabTitle", IDS_WEBSITES_SETTINGS_TITLE}, | 37 {"websitesOptionsPageTabTitle", IDS_WEBSITES_SETTINGS_TITLE}, |
33 {"websitesManage", IDS_WEBSITE_SETTINGS_MANAGE}, | 38 {"websitesManage", IDS_WEBSITE_SETTINGS_MANAGE}, |
34 {"websitesSearch", IDS_WEBSITE_SETTINGS_SEARCH_ORIGINS}, | 39 {"websitesSearch", IDS_WEBSITE_SETTINGS_SEARCH_ORIGINS}, |
35 {"websitesLabelGeolocation", IDS_WEBSITE_SETTINGS_TYPE_LOCATION}, | 40 {"websitesLabelGeolocation", IDS_WEBSITE_SETTINGS_TYPE_LOCATION}, |
36 {"websitesLabelMediaStream", IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM}, | 41 {"websitesLabelMediaStream", IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM}, |
37 {"websitesLabelNotifications", IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS}, | 42 {"websitesLabelNotifications", IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS}, |
| 43 {"websitesLabelStorage", IDS_WEBSITE_SETTINGS_TYPE_STORAGE}, |
38 }; | 44 }; |
39 | 45 |
40 RegisterStrings(localized_strings, resources, arraysize(resources)); | 46 RegisterStrings(localized_strings, resources, arraysize(resources)); |
41 RegisterTitle( | 47 RegisterTitle( |
42 localized_strings, "websiteSettingsPage", IDS_WEBSITES_SETTINGS_TITLE); | 48 localized_strings, "websiteSettingsPage", IDS_WEBSITES_SETTINGS_TITLE); |
43 } | 49 } |
44 | 50 |
45 void WebsiteSettingsHandler::RegisterMessages() { | 51 void WebsiteSettingsHandler::RegisterMessages() { |
46 web_ui()->RegisterMessageCallback( | 52 web_ui()->RegisterMessageCallback( |
47 "updateOrigins", | 53 "updateOrigins", |
48 base::Bind(&WebsiteSettingsHandler::HandleUpdateOrigins, | 54 base::Bind(&WebsiteSettingsHandler::HandleUpdateOrigins, |
49 base::Unretained(this))); | 55 base::Unretained(this))); |
50 | 56 |
51 web_ui()->RegisterMessageCallback( | 57 web_ui()->RegisterMessageCallback( |
52 "updateOriginsSearchResults", | 58 "updateOriginsSearchResults", |
53 base::Bind(&WebsiteSettingsHandler::HandleUpdateSearchResults, | 59 base::Bind(&WebsiteSettingsHandler::HandleUpdateSearchResults, |
54 base::Unretained(this))); | 60 base::Unretained(this))); |
| 61 |
| 62 web_ui()->RegisterMessageCallback( |
| 63 "updateLocalStorage", |
| 64 base::Bind(&WebsiteSettingsHandler::HandleUpdateLocalStorage, |
| 65 base::Unretained(this))); |
55 } | 66 } |
56 | 67 |
57 void WebsiteSettingsHandler::HandleUpdateOrigins(const base::ListValue* args) { | 68 void WebsiteSettingsHandler::HandleUpdateOrigins(const base::ListValue* args) { |
58 std::string content_setting_name; | 69 std::string content_setting_name; |
59 bool rv = args->GetString(0, &content_setting_name); | 70 bool rv = args->GetString(0, &content_setting_name); |
60 DCHECK(rv); | 71 DCHECK(rv); |
| 72 |
61 ContentSettingsType content_type; | 73 ContentSettingsType content_type; |
62 content_settings::GetTypeFromName(content_setting_name, &content_type); | 74 rv = content_settings::GetTypeFromName(content_setting_name, &content_type); |
| 75 DCHECK(rv); |
| 76 DCHECK_NE( |
| 77 kValidTypes + kValidTypesLength, |
| 78 std::find(kValidTypes, kValidTypes + kValidTypesLength, content_type)); |
63 | 79 |
64 last_setting_ = content_type; | 80 last_setting_ = content_setting_name; |
65 | 81 UpdateOrigins(); |
66 UpdateOrigins(std::string()); | |
67 } | 82 } |
68 | 83 |
69 void WebsiteSettingsHandler::HandleUpdateSearchResults( | 84 void WebsiteSettingsHandler::HandleUpdateSearchResults( |
70 const base::ListValue* args) { | 85 const base::ListValue* args) { |
71 std::string filter; | 86 bool rv = args->GetString(0, &last_filter_); |
72 bool rv = args->GetString(0, &filter); | |
73 DCHECK(rv); | 87 DCHECK(rv); |
74 | 88 |
75 UpdateOrigins(filter); | 89 if (last_setting_ == kStorage) |
| 90 UpdateLocalStorage(); |
| 91 else |
| 92 UpdateOrigins(); |
76 } | 93 } |
77 | 94 |
78 void WebsiteSettingsHandler::UpdateOrigins(const std::string& filter) { | 95 void WebsiteSettingsHandler::HandleUpdateLocalStorage( |
| 96 const base::ListValue* args) { |
| 97 if (!local_storage_) { |
| 98 Profile* profile = Profile::FromWebUI(web_ui()); |
| 99 local_storage_ = new BrowsingDataLocalStorageHelper(profile); |
| 100 } |
| 101 |
| 102 last_setting_ = kStorage; |
| 103 |
| 104 local_storage_->StartFetching( |
| 105 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched, |
| 106 weak_ptr_factory_.GetWeakPtr())); |
| 107 } |
| 108 |
| 109 void WebsiteSettingsHandler::OnLocalStorageFetched(const std::list< |
| 110 BrowsingDataLocalStorageHelper::LocalStorageInfo>& storage) { |
| 111 local_storage_list_ = storage; |
| 112 UpdateLocalStorage(); |
| 113 } |
| 114 |
| 115 void WebsiteSettingsHandler::UpdateOrigins() { |
79 Profile* profile = Profile::FromWebUI(web_ui()); | 116 Profile* profile = Profile::FromWebUI(web_ui()); |
80 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap(); | 117 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap(); |
81 | 118 |
82 ContentSettingsForOneType all_settings; | 119 ContentSettingsForOneType all_settings; |
83 settings->GetSettingsForOneType(last_setting_, std::string(), &all_settings); | 120 ContentSettingsType last_setting; |
| 121 content_settings::GetTypeFromName(last_setting_, &last_setting); |
| 122 settings->GetSettingsForOneType(last_setting, std::string(), &all_settings); |
84 | 123 |
85 base::DictionaryValue origins; | 124 base::DictionaryValue origins; |
86 for (ContentSettingsForOneType::const_iterator it = all_settings.begin(); | 125 for (ContentSettingsForOneType::const_iterator it = all_settings.begin(); |
87 it != all_settings.end(); | 126 it != all_settings.end(); |
88 ++it) { | 127 ++it) { |
89 // Don't add default settings. | 128 // Don't add default settings. |
90 if (it->primary_pattern == ContentSettingsPattern::Wildcard() && | 129 if (it->primary_pattern == ContentSettingsPattern::Wildcard() && |
91 it->secondary_pattern == ContentSettingsPattern::Wildcard() && | 130 it->secondary_pattern == ContentSettingsPattern::Wildcard() && |
92 it->source != kPreferencesSource) { | 131 it->source != kPreferencesSource) { |
93 continue; | 132 continue; |
94 } | 133 } |
95 | 134 |
96 std::string origin = it->primary_pattern.ToString(); | 135 std::string origin = it->primary_pattern.ToString(); |
97 | 136 |
98 if (origin.find(filter) == base::string16::npos) | 137 if (origin.find(last_filter_) == base::string16::npos) |
99 continue; | 138 continue; |
100 | 139 |
101 // TODO(dhnishi): Change 0 to a timestamp representing last API usage. | 140 // TODO(dhnishi): Change 0 to a timestamp representing last API usage. |
102 origins.SetDoubleWithoutPathExpansion(origin, 0); | 141 origins.SetDoubleWithoutPathExpansion(origin, 0); |
103 } | 142 } |
104 | 143 |
105 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins", | 144 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins", |
106 origins); | 145 origins); |
107 } | 146 } |
108 | 147 |
| 148 void WebsiteSettingsHandler::UpdateLocalStorage() { |
| 149 base::DictionaryValue local_storage_map; |
| 150 for (LocalStorageList::const_iterator it = local_storage_list_.begin(); |
| 151 it != local_storage_list_.end(); |
| 152 it++) { |
| 153 std::string origin = it->origin_url.spec(); |
| 154 |
| 155 if (origin.find(last_filter_) == base::string16::npos) |
| 156 continue; |
| 157 |
| 158 base::DictionaryValue* origin_entry = new base::DictionaryValue(); |
| 159 origin_entry->SetWithoutPathExpansion( |
| 160 "usage", new base::FundamentalValue(static_cast<double>(it->size))); |
| 161 origin_entry->SetWithoutPathExpansion( |
| 162 "usageString", new base::StringValue(ui::FormatBytes(it->size))); |
| 163 local_storage_map.SetWithoutPathExpansion(origin, origin_entry); |
| 164 } |
| 165 web_ui()->CallJavascriptFunction( |
| 166 "WebsiteSettingsManager.populateLocalStorage", local_storage_map); |
| 167 } |
| 168 |
109 } // namespace options | 169 } // namespace options |
OLD | NEW |