| Index: chrome/browser/ui/webui/options/website_settings_handler.cc
|
| diff --git a/chrome/browser/ui/webui/options/website_settings_handler.cc b/chrome/browser/ui/webui/options/website_settings_handler.cc
|
| index a1b267de2230679d0f74ec09428c0d7b6aec063a..be6aa3d8e755a5c1ceea743a53061328eff5baf9 100644
|
| --- a/chrome/browser/ui/webui/options/website_settings_handler.cc
|
| +++ b/chrome/browser/ui/webui/options/website_settings_handler.cc
|
| @@ -9,16 +9,21 @@
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "content/public/browser/web_ui.h"
|
| #include "grit/generated_resources.h"
|
| +#include "ui/base/text/bytes_formatting.h"
|
|
|
| namespace {
|
|
|
| const char kPreferencesSource[] = "preference";
|
| -
|
| +const char kStorage[] = "storage";
|
| +const ContentSettingsType kValidTypes[] = {CONTENT_SETTINGS_TYPE_GEOLOCATION,
|
| + CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
|
| + CONTENT_SETTINGS_TYPE_MEDIASTREAM};
|
| +const size_t kValidTypesLength = arraysize(kValidTypes);
|
| } // namespace
|
|
|
| namespace options {
|
|
|
| -WebsiteSettingsHandler::WebsiteSettingsHandler() {
|
| +WebsiteSettingsHandler::WebsiteSettingsHandler() : weak_ptr_factory_(this) {
|
| }
|
|
|
| WebsiteSettingsHandler::~WebsiteSettingsHandler() {
|
| @@ -35,6 +40,7 @@ void WebsiteSettingsHandler::GetLocalizedValues(
|
| {"websitesLabelGeolocation", IDS_WEBSITE_SETTINGS_TYPE_LOCATION},
|
| {"websitesLabelMediaStream", IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM},
|
| {"websitesLabelNotifications", IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS},
|
| + {"websitesLabelStorage", IDS_WEBSITE_SETTINGS_TYPE_STORAGE},
|
| };
|
|
|
| RegisterStrings(localized_strings, resources, arraysize(resources));
|
| @@ -52,35 +58,68 @@ void WebsiteSettingsHandler::RegisterMessages() {
|
| "updateOriginsSearchResults",
|
| base::Bind(&WebsiteSettingsHandler::HandleUpdateSearchResults,
|
| base::Unretained(this)));
|
| +
|
| + web_ui()->RegisterMessageCallback(
|
| + "updateLocalStorage",
|
| + base::Bind(&WebsiteSettingsHandler::HandleUpdateLocalStorage,
|
| + base::Unretained(this)));
|
| }
|
|
|
| void WebsiteSettingsHandler::HandleUpdateOrigins(const base::ListValue* args) {
|
| std::string content_setting_name;
|
| bool rv = args->GetString(0, &content_setting_name);
|
| DCHECK(rv);
|
| - ContentSettingsType content_type;
|
| - content_settings::GetTypeFromName(content_setting_name, &content_type);
|
|
|
| - last_setting_ = content_type;
|
| + ContentSettingsType content_type;
|
| + rv = content_settings::GetTypeFromName(content_setting_name, &content_type);
|
| + DCHECK(rv);
|
| + DCHECK_NE(
|
| + kValidTypes + kValidTypesLength,
|
| + std::find(kValidTypes, kValidTypes + kValidTypesLength, content_type));
|
|
|
| - UpdateOrigins(std::string());
|
| + last_setting_ = content_setting_name;
|
| + UpdateOrigins();
|
| }
|
|
|
| void WebsiteSettingsHandler::HandleUpdateSearchResults(
|
| const base::ListValue* args) {
|
| - std::string filter;
|
| - bool rv = args->GetString(0, &filter);
|
| + bool rv = args->GetString(0, &last_filter_);
|
| DCHECK(rv);
|
|
|
| - UpdateOrigins(filter);
|
| + if (last_setting_ == kStorage)
|
| + UpdateLocalStorage();
|
| + else
|
| + UpdateOrigins();
|
| }
|
|
|
| -void WebsiteSettingsHandler::UpdateOrigins(const std::string& filter) {
|
| +void WebsiteSettingsHandler::HandleUpdateLocalStorage(
|
| + const base::ListValue* args) {
|
| + if (!local_storage_) {
|
| + Profile* profile = Profile::FromWebUI(web_ui());
|
| + local_storage_ = new BrowsingDataLocalStorageHelper(profile);
|
| + }
|
| +
|
| + last_setting_ = kStorage;
|
| +
|
| + local_storage_->StartFetching(
|
| + base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| +}
|
| +
|
| +void WebsiteSettingsHandler::OnLocalStorageFetched(const std::list<
|
| + BrowsingDataLocalStorageHelper::LocalStorageInfo>& storage) {
|
| + local_storage_list_ = storage;
|
| + UpdateLocalStorage();
|
| +}
|
| +
|
| +void WebsiteSettingsHandler::UpdateOrigins() {
|
| Profile* profile = Profile::FromWebUI(web_ui());
|
| HostContentSettingsMap* settings = profile->GetHostContentSettingsMap();
|
|
|
| ContentSettingsForOneType all_settings;
|
| - settings->GetSettingsForOneType(last_setting_, std::string(), &all_settings);
|
| + ContentSettingsType last_setting;
|
| + content_settings::GetTypeFromName(last_setting_, &last_setting);
|
| + settings->GetSettingsForOneType(last_setting, std::string(), &all_settings);
|
|
|
| base::DictionaryValue origins;
|
| for (ContentSettingsForOneType::const_iterator it = all_settings.begin();
|
| @@ -95,7 +134,7 @@ void WebsiteSettingsHandler::UpdateOrigins(const std::string& filter) {
|
|
|
| std::string origin = it->primary_pattern.ToString();
|
|
|
| - if (origin.find(filter) == base::string16::npos)
|
| + if (origin.find(last_filter_) == base::string16::npos)
|
| continue;
|
|
|
| // TODO(dhnishi): Change 0 to a timestamp representing last API usage.
|
| @@ -106,4 +145,25 @@ void WebsiteSettingsHandler::UpdateOrigins(const std::string& filter) {
|
| origins);
|
| }
|
|
|
| +void WebsiteSettingsHandler::UpdateLocalStorage() {
|
| + base::DictionaryValue local_storage_map;
|
| + for (LocalStorageList::const_iterator it = local_storage_list_.begin();
|
| + it != local_storage_list_.end();
|
| + it++) {
|
| + std::string origin = it->origin_url.spec();
|
| +
|
| + if (origin.find(last_filter_) == base::string16::npos)
|
| + continue;
|
| +
|
| + base::DictionaryValue* origin_entry = new base::DictionaryValue();
|
| + origin_entry->SetWithoutPathExpansion(
|
| + "usage", new base::FundamentalValue(static_cast<double>(it->size)));
|
| + origin_entry->SetWithoutPathExpansion(
|
| + "usageString", new base::StringValue(ui::FormatBytes(it->size)));
|
| + local_storage_map.SetWithoutPathExpansion(origin, origin_entry);
|
| + }
|
| + web_ui()->CallJavascriptFunction(
|
| + "WebsiteSettingsManager.populateLocalStorage", local_storage_map);
|
| +}
|
| +
|
| } // namespace options
|
|
|