Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: chrome/browser/ui/webui/options/website_settings_handler.cc

Issue 501063002: Surface battery auditing information on the website settings option page. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@origin-power-map
Patch Set: Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "apps/app_window_registry.h" 7 #include "apps/app_window_registry.h"
8 #include "chrome/browser/content_settings/content_settings_utils.h" 8 #include "chrome/browser/content_settings/content_settings_utils.h"
9 #include "chrome/browser/content_settings/host_content_settings_map.h" 9 #include "chrome/browser/content_settings/host_content_settings_map.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
11 #include "chrome/browser/ui/browser.h" 11 #include "chrome/browser/ui/browser.h"
12 #include "chrome/browser/ui/browser_iterator.h" 12 #include "chrome/browser/ui/browser_iterator.h"
13 #include "chrome/browser/ui/tabs/tab_strip_model.h" 13 #include "chrome/browser/ui/tabs/tab_strip_model.h"
14 #include "components/power/origin_power_map.h"
15 #include "components/power/origin_power_map_factory.h"
14 #include "content/public/browser/dom_storage_context.h" 16 #include "content/public/browser/dom_storage_context.h"
15 #include "content/public/browser/storage_partition.h" 17 #include "content/public/browser/storage_partition.h"
16 #include "content/public/browser/web_contents.h" 18 #include "content/public/browser/web_contents.h"
17 #include "content/public/browser/web_ui.h" 19 #include "content/public/browser/web_ui.h"
18 #include "extensions/browser/extension_registry.h" 20 #include "extensions/browser/extension_registry.h"
19 #include "extensions/common/constants.h" 21 #include "extensions/common/constants.h"
20 #include "extensions/common/extension.h" 22 #include "extensions/common/extension.h"
21 #include "grit/generated_resources.h" 23 #include "grit/generated_resources.h"
22 #include "ui/base/l10n/l10n_util.h" 24 #include "ui/base/l10n/l10n_util.h"
23 #include "ui/base/l10n/time_format.h" 25 #include "ui/base/l10n/time_format.h"
24 #include "ui/base/text/bytes_formatting.h" 26 #include "ui/base/text/bytes_formatting.h"
25 27
28 using power::OriginPowerMap;
29 using power::OriginPowerMapFactory;
30
26 namespace { 31 namespace {
27 32
28 const int kHttpPort = 80; 33 const int kHttpPort = 80;
29 const int kHttpsPort = 443; 34 const int kHttpsPort = 443;
30 const char kPreferencesSource[] = "preference"; 35 const char kPreferencesSource[] = "preference";
31 const char kStorage[] = "storage"; 36 const char kStorage[] = "storage";
32 const ContentSettingsType kValidTypes[] = {CONTENT_SETTINGS_TYPE_GEOLOCATION, 37 const ContentSettingsType kValidTypes[] = {CONTENT_SETTINGS_TYPE_GEOLOCATION,
33 CONTENT_SETTINGS_TYPE_NOTIFICATIONS, 38 CONTENT_SETTINGS_TYPE_NOTIFICATIONS,
34 CONTENT_SETTINGS_TYPE_MEDIASTREAM}; 39 CONTENT_SETTINGS_TYPE_MEDIASTREAM};
35 const size_t kValidTypesLength = arraysize(kValidTypes); 40 const size_t kValidTypesLength = arraysize(kValidTypes);
(...skipping 14 matching lines...) Expand all
50 55
51 static OptionsStringResource resources[] = { 56 static OptionsStringResource resources[] = {
52 {"websitesOptionsPageTabTitle", IDS_WEBSITE_SETTINGS_TITLE}, 57 {"websitesOptionsPageTabTitle", IDS_WEBSITE_SETTINGS_TITLE},
53 {"websitesSettingsEditPage", IDS_WEBSITE_SETTINGS_EDIT_TITLE}, 58 {"websitesSettingsEditPage", IDS_WEBSITE_SETTINGS_EDIT_TITLE},
54 {"websitesManage", IDS_WEBSITE_SETTINGS_MANAGE}, 59 {"websitesManage", IDS_WEBSITE_SETTINGS_MANAGE},
55 {"websitesSearch", IDS_WEBSITE_SETTINGS_SEARCH_ORIGINS}, 60 {"websitesSearch", IDS_WEBSITE_SETTINGS_SEARCH_ORIGINS},
56 {"websitesLabelGeolocation", IDS_WEBSITE_SETTINGS_TYPE_LOCATION}, 61 {"websitesLabelGeolocation", IDS_WEBSITE_SETTINGS_TYPE_LOCATION},
57 {"websitesLabelMediaStream", IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM}, 62 {"websitesLabelMediaStream", IDS_WEBSITE_SETTINGS_TYPE_MEDIASTREAM},
58 {"websitesLabelNotifications", IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS}, 63 {"websitesLabelNotifications", IDS_WEBSITE_SETTINGS_TYPE_NOTIFICATIONS},
59 {"websitesLabelStorage", IDS_WEBSITE_SETTINGS_TYPE_STORAGE}, 64 {"websitesLabelStorage", IDS_WEBSITE_SETTINGS_TYPE_STORAGE},
65 {"websitesLabelBattery", IDS_WEBSITE_SETTINGS_TYPE_BATTERY},
60 {"websitesLocationDescription", 66 {"websitesLocationDescription",
61 IDS_WEBSITE_SETTINGS_LOCATION_DESCRIPTION}, 67 IDS_WEBSITE_SETTINGS_LOCATION_DESCRIPTION},
62 {"websitesMediastreamDescription", 68 {"websitesMediastreamDescription",
63 IDS_WEBSITE_SETTINGS_MEDIASTREAM_DESCRIPTION}, 69 IDS_WEBSITE_SETTINGS_MEDIASTREAM_DESCRIPTION},
64 {"websitesNotificationsDescription", 70 {"websitesNotificationsDescription",
65 IDS_WEBSITE_SETTINGS_NOTIFICATIONS_DESCRIPTION}, 71 IDS_WEBSITE_SETTINGS_NOTIFICATIONS_DESCRIPTION},
66 {"websitesButtonClear", IDS_WEBSITE_SETTINGS_STORAGE_CLEAR_BUTTON}, 72 {"websitesButtonClear", IDS_WEBSITE_SETTINGS_STORAGE_CLEAR_BUTTON},
73 {"websitesButtonStop", IDS_WEBSITE_SETTINGS_BATTERY_STOP_BUTTON},
67 }; 74 };
68 75
69 RegisterStrings(localized_strings, resources, arraysize(resources)); 76 RegisterStrings(localized_strings, resources, arraysize(resources));
70 RegisterTitle( 77 RegisterTitle(
71 localized_strings, "websiteSettingsPage", IDS_WEBSITE_SETTINGS_TITLE); 78 localized_strings, "websiteSettingsPage", IDS_WEBSITE_SETTINGS_TITLE);
72 } 79 }
73 80
74 void WebsiteSettingsHandler::InitializeHandler() { 81 void WebsiteSettingsHandler::InitializeHandler() {
75 Profile* profile = Profile::FromWebUI(web_ui()); 82 Profile* profile = Profile::FromWebUI(web_ui());
76 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap(); 83 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap();
(...skipping 10 matching lines...) Expand all
87 "updateOriginsSearchResults", 94 "updateOriginsSearchResults",
88 base::Bind(&WebsiteSettingsHandler::HandleUpdateSearchResults, 95 base::Bind(&WebsiteSettingsHandler::HandleUpdateSearchResults,
89 base::Unretained(this))); 96 base::Unretained(this)));
90 97
91 web_ui()->RegisterMessageCallback( 98 web_ui()->RegisterMessageCallback(
92 "updateLocalStorage", 99 "updateLocalStorage",
93 base::Bind(&WebsiteSettingsHandler::HandleUpdateLocalStorage, 100 base::Bind(&WebsiteSettingsHandler::HandleUpdateLocalStorage,
94 base::Unretained(this))); 101 base::Unretained(this)));
95 102
96 web_ui()->RegisterMessageCallback( 103 web_ui()->RegisterMessageCallback(
104 "updateBatteryUsage",
105 base::Bind(&WebsiteSettingsHandler::HandleUpdateBatteryUsage,
106 base::Unretained(this)));
107
108 web_ui()->RegisterMessageCallback(
97 "getOriginInfo", 109 "getOriginInfo",
98 base::Bind(&WebsiteSettingsHandler::HandleGetOriginInfo, 110 base::Bind(&WebsiteSettingsHandler::HandleGetOriginInfo,
99 base::Unretained(this))); 111 base::Unretained(this)));
100 112
101 web_ui()->RegisterMessageCallback( 113 web_ui()->RegisterMessageCallback(
102 "setOriginPermission", 114 "setOriginPermission",
103 base::Bind(&WebsiteSettingsHandler::HandleSetOriginPermission, 115 base::Bind(&WebsiteSettingsHandler::HandleSetOriginPermission,
104 base::Unretained(this))); 116 base::Unretained(this)));
105 117
106 web_ui()->RegisterMessageCallback( 118 web_ui()->RegisterMessageCallback(
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 scoped_ptr<base::Value> v(map->GetWebsiteSetting( 351 scoped_ptr<base::Value> v(map->GetWebsiteSetting(
340 last_site_, last_site_, settings_type, std::string(), &info)); 352 last_site_, last_site_, settings_type, std::string(), &info));
341 map->SetNarrowestWebsiteSetting(primary_pattern, 353 map->SetNarrowestWebsiteSetting(primary_pattern,
342 secondary_pattern, 354 secondary_pattern,
343 settings_type, 355 settings_type,
344 std::string(), 356 std::string(),
345 setting, 357 setting,
346 info); 358 info);
347 } 359 }
348 360
361 void WebsiteSettingsHandler::HandleUpdateBatteryUsage(
362 const base::ListValue* args) {
363 base::DictionaryValue power_map;
364 OriginPowerMap* origins =
365 OriginPowerMapFactory::GetForBrowserContext(Profile::FromWebUI(web_ui()));
366 OriginPowerMap::PercentOriginMap percent_map = origins->GetPercentOriginMap();
367 for (std::map<GURL, int>::iterator it = percent_map.begin();
368 it != percent_map.end();
369 ++it) {
370 std::string origin = it->first.spec();
371
372 if (origin.find(last_filter_) == base::string16::npos)
373 continue;
374
375 base::DictionaryValue* origin_entry = new base::DictionaryValue();
376 origin_entry->SetWithoutPathExpansion(
Bernhard Bauer 2014/08/26 08:16:07 The ...WithoutPathExpansion variant isn't necessar
Daniel Nishi 2014/08/26 17:45:39 Done.
377 "usage", new base::FundamentalValue(it->second));
378 origin_entry->SetWithoutPathExpansion(
Bernhard Bauer 2014/08/26 08:16:07 SetString() here.
Daniel Nishi 2014/08/26 17:45:39 Done.
379 "usageString",
380 new base::StringValue(l10n_util::GetStringFUTF16Int(
381 IDS_WEBSITE_SETTINGS_BATTERY_PERCENT, it->second)));
382 power_map.SetWithoutPathExpansion(origin, origin_entry);
383 }
384 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins",
385 power_map);
386 }
387
349 void WebsiteSettingsHandler::HandleDeleteLocalStorage( 388 void WebsiteSettingsHandler::HandleDeleteLocalStorage(
350 const base::ListValue* args) { 389 const base::ListValue* args) {
351 DCHECK(!last_site_.is_empty()); 390 DCHECK(!last_site_.is_empty());
352 DeleteLocalStorage(last_site_); 391 DeleteLocalStorage(last_site_);
353 } 392 }
354 393
355 void WebsiteSettingsHandler::HandleStopOrigin(const base::ListValue* args) { 394 void WebsiteSettingsHandler::HandleStopOrigin(const base::ListValue* args) {
356 DCHECK(!last_site_.is_empty()); 395 DCHECK(!last_site_.is_empty());
357 StopOrigin(last_site_); 396 StopOrigin(last_site_);
358 } 397 }
359 398
360 void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url, 399 void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url,
361 bool show_page) { 400 bool show_page) {
362 Profile* profile = Profile::FromWebUI(web_ui()); 401 Profile* profile = Profile::FromWebUI(web_ui());
363 HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 402 HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
364 403
365 double storage = 0.0; 404 double storage = 0.0;
366 for (LocalStorageList::const_iterator it = local_storage_list_.begin(); 405 for (LocalStorageList::const_iterator it = local_storage_list_.begin();
367 it != local_storage_list_.end(); 406 it != local_storage_list_.end();
368 it++) { 407 it++) {
369 if (it->origin_url == site_url) { 408 if (it->origin_url == site_url) {
370 storage = static_cast<double>(it->size); 409 storage = static_cast<double>(it->size);
371 break; 410 break;
372 } 411 }
373 } 412 }
374 413
414 int battery = 0;
415 battery = OriginPowerMapFactory::GetForBrowserContext(
416 Profile::FromWebUI(web_ui()))->GetPowerForOrigin(site_url);
Bernhard Bauer 2014/08/26 08:16:08 Indent just four spaces w/r/t the preceding line.
Daniel Nishi 2014/08/26 17:45:39 Done.
417
375 base::DictionaryValue* permissions = new base::DictionaryValue; 418 base::DictionaryValue* permissions = new base::DictionaryValue;
376 for (size_t i = 0; i < arraysize(kValidTypes); ++i) { 419 for (size_t i = 0; i < arraysize(kValidTypes); ++i) {
377 ContentSettingsType permission_type = kValidTypes[i]; 420 ContentSettingsType permission_type = kValidTypes[i];
378 421
379 // Append the possible settings. 422 // Append the possible settings.
380 base::ListValue* options = new base::ListValue; 423 base::ListValue* options = new base::ListValue;
381 ContentSetting default_value = 424 ContentSetting default_value =
382 map->GetDefaultContentSetting(permission_type, NULL); 425 map->GetDefaultContentSetting(permission_type, NULL);
383 if (default_value != CONTENT_SETTING_ALLOW && 426 if (default_value != CONTENT_SETTING_ALLOW &&
384 default_value != CONTENT_SETTING_BLOCK) { 427 default_value != CONTENT_SETTING_BLOCK) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 "setting", content_settings::ContentSettingToString(permission)); 465 "setting", content_settings::ContentSettingToString(permission));
423 permission_info->SetWithoutPathExpansion("options", options); 466 permission_info->SetWithoutPathExpansion("options", options);
424 permission_info->SetBooleanWithoutPathExpansion( 467 permission_info->SetBooleanWithoutPathExpansion(
425 "editable", info.source == content_settings::SETTING_SOURCE_USER); 468 "editable", info.source == content_settings::SETTING_SOURCE_USER);
426 permissions->SetWithoutPathExpansion( 469 permissions->SetWithoutPathExpansion(
427 content_settings::GetTypeName(permission_type), permission_info); 470 content_settings::GetTypeName(permission_type), permission_info);
428 } 471 }
429 472
430 base::Value* storage_used = new base::StringValue(l10n_util::GetStringFUTF16( 473 base::Value* storage_used = new base::StringValue(l10n_util::GetStringFUTF16(
431 IDS_WEBSITE_SETTINGS_STORAGE_USED, ui::FormatBytes(storage))); 474 IDS_WEBSITE_SETTINGS_STORAGE_USED, ui::FormatBytes(storage)));
475 base::Value* battery_used =
476 new base::StringValue(l10n_util::GetStringFUTF16Int(
477 IDS_WEBSITE_SETTINGS_BATTERY_USED, battery));
432 478
433 web_ui()->CallJavascriptFunction("WebsiteSettingsEditor.populateOrigin", 479 web_ui()->CallJavascriptFunction("WebsiteSettingsEditor.populateOrigin",
434 *storage_used, 480 *storage_used,
481 *battery_used,
435 *permissions, 482 *permissions,
436 base::FundamentalValue(show_page)); 483 base::FundamentalValue(show_page));
437 } 484 }
438 485
439 void WebsiteSettingsHandler::UpdateLocalStorage() { 486 void WebsiteSettingsHandler::UpdateLocalStorage() {
440 base::DictionaryValue local_storage_map; 487 base::DictionaryValue local_storage_map;
441 for (LocalStorageList::const_iterator it = local_storage_list_.begin(); 488 for (LocalStorageList::const_iterator it = local_storage_list_.begin();
442 it != local_storage_list_.end(); 489 it != local_storage_list_.end();
443 it++) { 490 it++) {
444 std::string origin = it->origin_url.spec(); 491 std::string origin = it->origin_url.spec();
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
499 546
500 // Load a new BrowsingDataLocalStorageHelper to update. 547 // Load a new BrowsingDataLocalStorageHelper to update.
501 local_storage_ = new BrowsingDataLocalStorageHelper(profile); 548 local_storage_ = new BrowsingDataLocalStorageHelper(profile);
502 549
503 local_storage_->StartFetching( 550 local_storage_->StartFetching(
504 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched, 551 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched,
505 weak_ptr_factory_.GetWeakPtr())); 552 weak_ptr_factory_.GetWeakPtr()));
506 } 553 }
507 554
508 } // namespace options 555 } // namespace options
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698