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

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

Issue 582983002: Fix a bug where Guest Profiles in CrOS could cause crashes when collecting (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: No colon. 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
« no previous file with comments | « chrome/browser/ui/webui/options/website_settings_handler.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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/extensions/extension_service.h" 9 #include "chrome/browser/extensions/extension_service.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 {"storageTabLabel", IDS_WEBSITE_SETTINGS_TYPE_STORAGE}, 103 {"storageTabLabel", IDS_WEBSITE_SETTINGS_TYPE_STORAGE},
104 {"batteryTabLabel", IDS_WEBSITE_SETTINGS_TYPE_BATTERY}, 104 {"batteryTabLabel", IDS_WEBSITE_SETTINGS_TYPE_BATTERY},
105 }; 105 };
106 106
107 RegisterStrings(localized_strings, resources, arraysize(resources)); 107 RegisterStrings(localized_strings, resources, arraysize(resources));
108 RegisterTitle( 108 RegisterTitle(
109 localized_strings, "websiteSettingsPage", IDS_WEBSITE_SETTINGS_TITLE); 109 localized_strings, "websiteSettingsPage", IDS_WEBSITE_SETTINGS_TITLE);
110 } 110 }
111 111
112 void WebsiteSettingsHandler::InitializeHandler() { 112 void WebsiteSettingsHandler::InitializeHandler() {
113 Profile* profile = Profile::FromWebUI(web_ui()); 113 Profile* profile = GetProfile();
114 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap(); 114 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap();
115 observer_.Add(settings); 115 observer_.Add(settings);
116 116
117 power::OriginPowerMap* origin_power_map = 117 power::OriginPowerMap* origin_power_map =
118 power::OriginPowerMapFactory::GetForBrowserContext(profile); 118 power::OriginPowerMapFactory::GetForBrowserContext(profile);
119 // OriginPowerMap may not be available in tests. 119 // OriginPowerMap may not be available in tests.
120 if (origin_power_map) { 120 if (origin_power_map) {
121 subscription_ = origin_power_map->AddPowerConsumptionUpdatedCallback( 121 subscription_ = origin_power_map->AddPowerConsumptionUpdatedCallback(
122 base::Bind(&WebsiteSettingsHandler::Update, base::Unretained(this))); 122 base::Bind(&WebsiteSettingsHandler::Update, base::Unretained(this)));
123 } 123 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 const base::ListValue* args) { 221 const base::ListValue* args) {
222 bool rv = args->GetString(0, &last_filter_); 222 bool rv = args->GetString(0, &last_filter_);
223 DCHECK(rv); 223 DCHECK(rv);
224 224
225 Update(); 225 Update();
226 } 226 }
227 227
228 void WebsiteSettingsHandler::HandleUpdateLocalStorage( 228 void WebsiteSettingsHandler::HandleUpdateLocalStorage(
229 const base::ListValue* args) { 229 const base::ListValue* args) {
230 if (!local_storage_.get()) { 230 if (!local_storage_.get()) {
231 Profile* profile = Profile::FromWebUI(web_ui()); 231 Profile* profile = GetProfile();
232 local_storage_ = new BrowsingDataLocalStorageHelper(profile); 232 local_storage_ = new BrowsingDataLocalStorageHelper(profile);
233 } 233 }
234 234
235 last_setting_ = kStorage; 235 last_setting_ = kStorage;
236 236
237 local_storage_->StartFetching( 237 local_storage_->StartFetching(
238 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched, 238 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched,
239 weak_ptr_factory_.GetWeakPtr())); 239 weak_ptr_factory_.GetWeakPtr()));
240 } 240 }
241 241
(...skipping 24 matching lines...) Expand all
266 DCHECK(!last_setting_.empty()); 266 DCHECK(!last_setting_.empty());
267 if (last_setting_ == kStorage) 267 if (last_setting_ == kStorage)
268 UpdateLocalStorage(); 268 UpdateLocalStorage();
269 else if (last_setting_ == kBattery) 269 else if (last_setting_ == kBattery)
270 UpdateBatteryUsage(); 270 UpdateBatteryUsage();
271 else 271 else
272 UpdateOrigins(); 272 UpdateOrigins();
273 } 273 }
274 274
275 void WebsiteSettingsHandler::UpdateOrigins() { 275 void WebsiteSettingsHandler::UpdateOrigins() {
276 Profile* profile = Profile::FromWebUI(web_ui()); 276 Profile* profile = GetProfile();
277 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap(); 277 HostContentSettingsMap* settings = profile->GetHostContentSettingsMap();
278 278
279 ContentSettingsForOneType all_settings; 279 ContentSettingsForOneType all_settings;
280 ContentSettingsType last_setting; 280 ContentSettingsType last_setting;
281 content_settings::GetTypeFromName(last_setting_, &last_setting); 281 content_settings::GetTypeFromName(last_setting_, &last_setting);
282 282
283 if (last_setting == CONTENT_SETTINGS_TYPE_MEDIASTREAM) 283 if (last_setting == CONTENT_SETTINGS_TYPE_MEDIASTREAM)
284 last_setting = CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC; 284 last_setting = CONTENT_SETTINGS_TYPE_MEDIASTREAM_MIC;
285 285
286 settings->GetSettingsForOneType(last_setting, std::string(), &all_settings); 286 settings->GetSettingsForOneType(last_setting, std::string(), &all_settings);
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
372 DCHECK(rv); 372 DCHECK(rv);
373 ContentSettingsType settings_type; 373 ContentSettingsType settings_type;
374 rv = content_settings::GetTypeFromName(setting_name, &settings_type); 374 rv = content_settings::GetTypeFromName(setting_name, &settings_type);
375 DCHECK(rv); 375 DCHECK(rv);
376 376
377 std::string value; 377 std::string value;
378 rv = args->GetString(1, &value); 378 rv = args->GetString(1, &value);
379 DCHECK(rv); 379 DCHECK(rv);
380 380
381 ContentSetting setting = content_settings::ContentSettingFromString(value); 381 ContentSetting setting = content_settings::ContentSettingFromString(value);
382 Profile* profile = Profile::FromWebUI(web_ui()); 382 Profile* profile = GetProfile();
383 HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 383 HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
384 ContentSetting default_value = 384 ContentSetting default_value =
385 map->GetDefaultContentSetting(settings_type, NULL); 385 map->GetDefaultContentSetting(settings_type, NULL);
386 386
387 // Users are not allowed to be the source of the "ask" setting. It is an 387 // Users are not allowed to be the source of the "ask" setting. It is an
388 // ephemeral setting which is removed once the question is asked. 388 // ephemeral setting which is removed once the question is asked.
389 if (setting == CONTENT_SETTING_ASK && setting == default_value) 389 if (setting == CONTENT_SETTING_ASK && setting == default_value)
390 setting = CONTENT_SETTING_DEFAULT; 390 setting = CONTENT_SETTING_DEFAULT;
391 391
392 ContentSettingsPattern primary_pattern; 392 ContentSettingsPattern primary_pattern;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 std::string setting; 476 std::string setting;
477 if (!args->GetString(0, &setting)) { 477 if (!args->GetString(0, &setting)) {
478 NOTREACHED(); 478 NOTREACHED();
479 return; 479 return;
480 } 480 }
481 ContentSetting new_default = 481 ContentSetting new_default =
482 content_settings::ContentSettingFromString(setting); 482 content_settings::ContentSettingFromString(setting);
483 483
484 ContentSettingsType last_setting; 484 ContentSettingsType last_setting;
485 content_settings::GetTypeFromName(last_setting_, &last_setting); 485 content_settings::GetTypeFromName(last_setting_, &last_setting);
486 Profile* profile = Profile::FromWebUI(web_ui()); 486 Profile* profile = GetProfile();
487
488 #if defined(OS_CHROMEOS)
489 // ChromeOS special case : in Guest mode settings are opened in Incognito
490 // mode, so we need original profile to actually modify settings.
491 if (user_manager::UserManager::Get()->IsLoggedInAsGuest())
492 profile = profile->GetOriginalProfile();
493 #endif
494 487
495 HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 488 HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
496 map->SetDefaultContentSetting(last_setting, new_default); 489 map->SetDefaultContentSetting(last_setting, new_default);
497 490
498 switch (last_setting) { 491 switch (last_setting) {
499 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS: 492 case CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS:
500 content::RecordAction( 493 content::RecordAction(
501 UserMetricsAction("Options_DefaultMultipleAutomaticDLSettingChange")); 494 UserMetricsAction("Options_DefaultMultipleAutomaticDLSettingChange"));
502 break; 495 break;
503 case CONTENT_SETTINGS_TYPE_COOKIES: 496 case CONTENT_SETTINGS_TYPE_COOKIES:
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 const base::ListValue* args) { 535 const base::ListValue* args) {
543 DCHECK_EQ(1U, args->GetSize()); 536 DCHECK_EQ(1U, args->GetSize());
544 bool is_enabled; 537 bool is_enabled;
545 bool rv = args->GetBoolean(0, &is_enabled); 538 bool rv = args->GetBoolean(0, &is_enabled);
546 DCHECK(rv); 539 DCHECK(rv);
547 540
548 ContentSettingsType last_setting; 541 ContentSettingsType last_setting;
549 rv = content_settings::GetTypeFromName(last_setting_, &last_setting); 542 rv = content_settings::GetTypeFromName(last_setting_, &last_setting);
550 DCHECK(rv); 543 DCHECK(rv);
551 544
552 Profile* profile = Profile::FromWebUI(web_ui()); 545 Profile* profile = GetProfile();
553 HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 546 HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
554 map->SetContentSettingOverride(last_setting, is_enabled); 547 map->SetContentSettingOverride(last_setting, is_enabled);
555 } 548 }
556 549
557 void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url, 550 void WebsiteSettingsHandler::GetInfoForOrigin(const GURL& site_url,
558 bool show_page) { 551 bool show_page) {
559 Profile* profile = Profile::FromWebUI(web_ui()); 552 Profile* profile = GetProfile();
560 HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 553 HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
561 554
562 double storage = 0.0; 555 double storage = 0.0;
563 for (LocalStorageList::const_iterator it = local_storage_list_.begin(); 556 for (LocalStorageList::const_iterator it = local_storage_list_.begin();
564 it != local_storage_list_.end(); 557 it != local_storage_list_.end();
565 it++) { 558 it++) {
566 if (it->origin_url == site_url) { 559 if (it->origin_url == site_url) {
567 storage = static_cast<double>(it->size); 560 storage = static_cast<double>(it->size);
568 break; 561 break;
569 } 562 }
570 } 563 }
571 564
572 int battery = 0; 565 int battery = 0;
573 battery = OriginPowerMapFactory::GetForBrowserContext( 566 battery = OriginPowerMapFactory::GetForBrowserContext(
574 Profile::FromWebUI(web_ui()))->GetPowerForOrigin(site_url); 567 GetProfile())->GetPowerForOrigin(site_url);
575 568
576 base::DictionaryValue* permissions = new base::DictionaryValue; 569 base::DictionaryValue* permissions = new base::DictionaryValue;
577 for (size_t i = 0; i < arraysize(kValidTypes); ++i) { 570 for (size_t i = 0; i < arraysize(kValidTypes); ++i) {
578 ContentSettingsType permission_type = kValidTypes[i]; 571 ContentSettingsType permission_type = kValidTypes[i];
579 572
580 // Append the possible settings. 573 // Append the possible settings.
581 base::ListValue* options = new base::ListValue; 574 base::ListValue* options = new base::ListValue;
582 ContentSetting default_value = 575 ContentSetting default_value =
583 map->GetDefaultContentSetting(permission_type, NULL); 576 map->GetDefaultContentSetting(permission_type, NULL);
584 if (default_value != CONTENT_SETTING_ALLOW && 577 if (default_value != CONTENT_SETTING_ALLOW &&
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
664 "readableName", GetReadableName(it->origin_url)); 657 "readableName", GetReadableName(it->origin_url));
665 local_storage_map.SetWithoutPathExpansion(origin, origin_entry); 658 local_storage_map.SetWithoutPathExpansion(origin, origin_entry);
666 } 659 }
667 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins", 660 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins",
668 local_storage_map); 661 local_storage_map);
669 } 662 }
670 663
671 void WebsiteSettingsHandler::UpdateBatteryUsage() { 664 void WebsiteSettingsHandler::UpdateBatteryUsage() {
672 base::DictionaryValue power_map; 665 base::DictionaryValue power_map;
673 OriginPowerMap* origins = 666 OriginPowerMap* origins =
674 OriginPowerMapFactory::GetForBrowserContext(Profile::FromWebUI(web_ui())); 667 OriginPowerMapFactory::GetForBrowserContext(GetProfile());
675 OriginPowerMap::PercentOriginMap percent_map = origins->GetPercentOriginMap(); 668 OriginPowerMap::PercentOriginMap percent_map = origins->GetPercentOriginMap();
676 for (std::map<GURL, int>::iterator it = percent_map.begin(); 669 for (std::map<GURL, int>::iterator it = percent_map.begin();
677 it != percent_map.end(); 670 it != percent_map.end();
678 ++it) { 671 ++it) {
679 std::string origin = it->first.spec(); 672 std::string origin = it->first.spec();
680 673
681 if (origin.find(last_filter_) == base::string16::npos) 674 if (origin.find(last_filter_) == base::string16::npos)
682 continue; 675 continue;
683 676
684 base::DictionaryValue* origin_entry = new base::DictionaryValue(); 677 base::DictionaryValue* origin_entry = new base::DictionaryValue();
685 origin_entry->SetInteger("usage", it->second); 678 origin_entry->SetInteger("usage", it->second);
686 origin_entry->SetString( 679 origin_entry->SetString(
687 "usageString", 680 "usageString",
688 l10n_util::GetStringFUTF16Int(IDS_WEBSITE_SETTINGS_BATTERY_PERCENT, 681 l10n_util::GetStringFUTF16Int(IDS_WEBSITE_SETTINGS_BATTERY_PERCENT,
689 it->second)); 682 it->second));
690 origin_entry->SetStringWithoutPathExpansion("readableName", 683 origin_entry->SetStringWithoutPathExpansion("readableName",
691 GetReadableName(it->first)); 684 GetReadableName(it->first));
692 power_map.SetWithoutPathExpansion(origin, origin_entry); 685 power_map.SetWithoutPathExpansion(origin, origin_entry);
693 } 686 }
694 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins", 687 web_ui()->CallJavascriptFunction("WebsiteSettingsManager.populateOrigins",
695 power_map); 688 power_map);
696 } 689 }
697 690
698 std::string WebsiteSettingsHandler::GetSettingDefaultFromModel( 691 std::string WebsiteSettingsHandler::GetSettingDefaultFromModel(
699 ContentSettingsType type, 692 ContentSettingsType type,
700 std::string* provider_id) { 693 std::string* provider_id) {
701 Profile* profile = Profile::FromWebUI(web_ui()); 694 Profile* profile = GetProfile();
702 ContentSetting default_setting = 695 ContentSetting default_setting =
703 profile->GetHostContentSettingsMap()->GetDefaultContentSetting( 696 profile->GetHostContentSettingsMap()->GetDefaultContentSetting(
704 type, provider_id); 697 type, provider_id);
705 698
706 return content_settings::ContentSettingToString(default_setting); 699 return content_settings::ContentSettingToString(default_setting);
707 } 700 }
708 701
709 void WebsiteSettingsHandler::StopOrigin(const GURL& site_url) { 702 void WebsiteSettingsHandler::StopOrigin(const GURL& site_url) {
710 Profile* profile = Profile::FromWebUI(web_ui()); 703 Profile* profile = GetProfile();
711 if (site_url.SchemeIs(extensions::kExtensionScheme)) { 704 if (site_url.SchemeIs(extensions::kExtensionScheme)) {
712 const extensions::Extension* extension = 705 const extensions::Extension* extension =
713 extensions::ExtensionRegistry::Get(profile) 706 extensions::ExtensionRegistry::Get(profile)
714 ->enabled_extensions() 707 ->enabled_extensions()
715 .GetHostedAppByURL(site_url); 708 .GetHostedAppByURL(site_url);
716 if (extension) { 709 if (extension) {
717 extensions::AppWindowRegistry::Get(profile) 710 extensions::AppWindowRegistry::Get(profile)
718 ->CloseAllAppWindowsForApp(extension->id()); 711 ->CloseAllAppWindowsForApp(extension->id());
719 } 712 }
720 } 713 }
(...skipping 12 matching lines...) Expand all
733 profile != 726 profile !=
734 Profile::FromBrowserContext(web_contents->GetBrowserContext())) { 727 Profile::FromBrowserContext(web_contents->GetBrowserContext())) {
735 continue; 728 continue;
736 } 729 }
737 model->DiscardWebContentsAt(idx); 730 model->DiscardWebContentsAt(idx);
738 } 731 }
739 } 732 }
740 } 733 }
741 734
742 void WebsiteSettingsHandler::DeleteLocalStorage(const GURL& site_url) { 735 void WebsiteSettingsHandler::DeleteLocalStorage(const GURL& site_url) {
743 Profile* profile = Profile::FromWebUI(web_ui()); 736 Profile* profile = GetProfile();
744 content::DOMStorageContext* dom_storage_context_ = 737 content::DOMStorageContext* dom_storage_context_ =
745 content::BrowserContext::GetDefaultStoragePartition(profile) 738 content::BrowserContext::GetDefaultStoragePartition(profile)
746 ->GetDOMStorageContext(); 739 ->GetDOMStorageContext();
747 dom_storage_context_->DeleteLocalStorage(site_url); 740 dom_storage_context_->DeleteLocalStorage(site_url);
748 741
749 // Load a new BrowsingDataLocalStorageHelper to update. 742 // Load a new BrowsingDataLocalStorageHelper to update.
750 local_storage_ = new BrowsingDataLocalStorageHelper(profile); 743 local_storage_ = new BrowsingDataLocalStorageHelper(profile);
751 744
752 local_storage_->StartFetching( 745 local_storage_->StartFetching(
753 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched, 746 base::Bind(&WebsiteSettingsHandler::OnLocalStorageFetched,
754 weak_ptr_factory_.GetWeakPtr())); 747 weak_ptr_factory_.GetWeakPtr()));
755 } 748 }
756 749
757 const std::string& WebsiteSettingsHandler::GetReadableName( 750 const std::string& WebsiteSettingsHandler::GetReadableName(
758 const GURL& site_url) { 751 const GURL& site_url) {
759 if (site_url.SchemeIs(extensions::kExtensionScheme)) { 752 if (site_url.SchemeIs(extensions::kExtensionScheme)) {
760 Profile* profile = Profile::FromWebUI(web_ui()); 753 Profile* profile = GetProfile();
761 ExtensionService* extension_service = 754 ExtensionService* extension_service =
762 extensions::ExtensionSystem::Get(profile)->extension_service(); 755 extensions::ExtensionSystem::Get(profile)->extension_service();
763 756
764 const extensions::Extension* extension = 757 const extensions::Extension* extension =
765 extension_service->extensions()->GetExtensionOrAppByURL(site_url); 758 extension_service->extensions()->GetExtensionOrAppByURL(site_url);
766 // If extension is NULL, it was removed and we cannot look up its name. 759 // If extension is NULL, it was removed and we cannot look up its name.
767 if (!extension) 760 if (!extension)
768 return site_url.spec(); 761 return site_url.spec();
769 762
770 return extension->name(); 763 return extension->name();
771 } 764 }
772 return site_url.spec(); 765 return site_url.spec();
773 } 766 }
774 767
768 Profile* WebsiteSettingsHandler::GetProfile() {
769 Profile* profile = Profile::FromWebUI(web_ui());
770 #if defined(OS_CHROMEOS)
771 // Chrome OS special case: in Guest mode settings are opened in Incognito
772 // mode, so we need original profile to actually modify settings.
773 if (user_manager::UserManager::Get()->IsLoggedInAsGuest())
774 profile = profile->GetOriginalProfile();
775 #endif
776 return profile;
777 }
778
775 } // namespace options 779 } // namespace options
OLDNEW
« no previous file with comments | « chrome/browser/ui/webui/options/website_settings_handler.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698