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

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

Issue 7831075: Delegating the "are images allowed" decision to renderer. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Doc fix. Created 9 years, 1 month 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/content_settings_handler.h" 5 #include "chrome/browser/ui/webui/options/content_settings_handler.h"
6 6
7 #include <map> 7 #include <map>
8 #include <string> 8 #include <string>
9 #include <vector> 9 #include <vector>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/bind_helpers.h" 12 #include "base/bind_helpers.h"
13 #include "base/command_line.h" 13 #include "base/command_line.h"
14 #include "base/utf_string_conversions.h" 14 #include "base/utf_string_conversions.h"
15 #include "base/values.h" 15 #include "base/values.h"
16 #include "chrome/browser/browser_process.h" 16 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/content_settings/content_settings_details.h" 17 #include "chrome/browser/content_settings/content_settings_details.h"
18 #include "chrome/browser/content_settings/content_settings_utils.h" 18 #include "chrome/browser/content_settings/content_settings_utils.h"
19 #include "chrome/browser/content_settings/host_content_settings_map.h" 19 #include "chrome/browser/content_settings/host_content_settings_map.h"
20 #include "chrome/browser/custom_handlers/protocol_handler_registry.h" 20 #include "chrome/browser/custom_handlers/protocol_handler_registry.h"
21 #include "chrome/browser/notifications/desktop_notification_service.h" 21 #include "chrome/browser/notifications/desktop_notification_service.h"
22 #include "chrome/browser/notifications/desktop_notification_service_factory.h" 22 #include "chrome/browser/notifications/desktop_notification_service_factory.h"
23 #include "chrome/browser/profiles/profile.h" 23 #include "chrome/browser/profiles/profile.h"
24 #include "chrome/browser/ui/browser_list.h" 24 #include "chrome/browser/ui/browser_list.h"
25 #include "chrome/common/chrome_notification_types.h" 25 #include "chrome/common/chrome_notification_types.h"
26 #include "chrome/common/chrome_switches.h" 26 #include "chrome/common/chrome_switches.h"
27 #include "chrome/common/content_settings.h"
27 #include "chrome/common/content_settings_pattern.h" 28 #include "chrome/common/content_settings_pattern.h"
28 #include "chrome/common/pref_names.h" 29 #include "chrome/common/pref_names.h"
29 #include "chrome/common/url_constants.h" 30 #include "chrome/common/url_constants.h"
30 #include "content/browser/tab_contents/tab_contents.h" 31 #include "content/browser/tab_contents/tab_contents.h"
31 #include "content/public/browser/notification_service.h" 32 #include "content/public/browser/notification_service.h"
32 #include "content/public/browser/notification_source.h" 33 #include "content/public/browser/notification_source.h"
33 #include "content/public/browser/notification_types.h" 34 #include "content/public/browser/notification_types.h"
34 #include "content/public/common/content_switches.h" 35 #include "content/public/common/content_switches.h"
35 #include "grit/generated_resources.h" 36 #include "grit/generated_resources.h"
36 #include "grit/locale_settings.h" 37 #include "grit/locale_settings.h"
(...skipping 424 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 default: 462 default:
462 UpdateExceptionsViewFromOTRHostContentSettingsMap(type); 463 UpdateExceptionsViewFromOTRHostContentSettingsMap(type);
463 break; 464 break;
464 } 465 }
465 } 466 }
466 467
467 void ContentSettingsHandler::UpdateGeolocationExceptionsView() { 468 void ContentSettingsHandler::UpdateGeolocationExceptionsView() {
468 Profile* profile = Profile::FromWebUI(web_ui_); 469 Profile* profile = Profile::FromWebUI(web_ui_);
469 HostContentSettingsMap* map = profile->GetHostContentSettingsMap(); 470 HostContentSettingsMap* map = profile->GetHostContentSettingsMap();
470 471
471 HostContentSettingsMap::SettingsForOneType all_settings; 472 ContentSettingsForOneType all_settings;
472 map->GetSettingsForOneType( 473 map->GetSettingsForOneType(
473 CONTENT_SETTINGS_TYPE_GEOLOCATION, 474 CONTENT_SETTINGS_TYPE_GEOLOCATION,
474 std::string(), 475 std::string(),
475 &all_settings); 476 &all_settings);
476 477
477 // Group geolocation settings by primary_pattern. 478 // Group geolocation settings by primary_pattern.
478 AllPatternsSettings all_patterns_settings; 479 AllPatternsSettings all_patterns_settings;
479 for (HostContentSettingsMap::SettingsForOneType::iterator i = 480 for (ContentSettingsForOneType::iterator i =
480 all_settings.begin(); 481 all_settings.begin();
481 i != all_settings.end(); 482 i != all_settings.end();
482 ++i) { 483 ++i) {
483 all_patterns_settings[i->a][i->b] = i->c; 484 all_patterns_settings[i->primary_pattern][i->secondary_pattern] =
485 i->setting;
484 } 486 }
485 487
486 ListValue exceptions; 488 ListValue exceptions;
487 for (AllPatternsSettings::iterator i = all_patterns_settings.begin(); 489 for (AllPatternsSettings::iterator i = all_patterns_settings.begin();
488 i != all_patterns_settings.end(); 490 i != all_patterns_settings.end();
489 ++i) { 491 ++i) {
490 const ContentSettingsPattern& primary_pattern = i->first; 492 const ContentSettingsPattern& primary_pattern = i->first;
491 const OnePatternSettings& one_settings = i->second; 493 const OnePatternSettings& one_settings = i->second;
492 494
493 OnePatternSettings::const_iterator parent = 495 OnePatternSettings::const_iterator parent =
(...skipping 27 matching lines...) Expand all
521 // This is mainly here to keep this function ideologically parallel to 523 // This is mainly here to keep this function ideologically parallel to
522 // UpdateExceptionsViewFromHostContentSettingsMap(). 524 // UpdateExceptionsViewFromHostContentSettingsMap().
523 UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_GEOLOCATION); 525 UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_GEOLOCATION);
524 } 526 }
525 527
526 void ContentSettingsHandler::UpdateNotificationExceptionsView() { 528 void ContentSettingsHandler::UpdateNotificationExceptionsView() {
527 Profile* profile = Profile::FromWebUI(web_ui_); 529 Profile* profile = Profile::FromWebUI(web_ui_);
528 DesktopNotificationService* service = 530 DesktopNotificationService* service =
529 DesktopNotificationServiceFactory::GetForProfile(profile); 531 DesktopNotificationServiceFactory::GetForProfile(profile);
530 532
531 HostContentSettingsMap::SettingsForOneType settings; 533 ContentSettingsForOneType settings;
532 service->GetNotificationsSettings(&settings); 534 service->GetNotificationsSettings(&settings);
533 535
534 ListValue exceptions; 536 ListValue exceptions;
535 for (HostContentSettingsMap::SettingsForOneType::const_iterator i = 537 for (ContentSettingsForOneType::const_iterator i =
536 settings.begin(); 538 settings.begin();
537 i != settings.end(); 539 i != settings.end();
538 ++i) { 540 ++i) {
539 const HostContentSettingsMap::PatternSettingSourceTuple& tuple(*i);
540 exceptions.Append( 541 exceptions.Append(
541 GetNotificationExceptionForPage(tuple.a, tuple.c, tuple.d)); 542 GetNotificationExceptionForPage(i->primary_pattern, i->setting,
543 i->source));
542 } 544 }
543 545
544 StringValue type_string( 546 StringValue type_string(
545 ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_NOTIFICATIONS)); 547 ContentSettingsTypeToGroupName(CONTENT_SETTINGS_TYPE_NOTIFICATIONS));
546 web_ui_->CallJavascriptFunction("ContentSettings.setExceptions", 548 web_ui_->CallJavascriptFunction("ContentSettings.setExceptions",
547 type_string, exceptions); 549 type_string, exceptions);
548 550
549 // This is mainly here to keep this function ideologically parallel to 551 // This is mainly here to keep this function ideologically parallel to
550 // UpdateExceptionsViewFromHostContentSettingsMap(). 552 // UpdateExceptionsViewFromHostContentSettingsMap().
551 UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS); 553 UpdateSettingDefaultFromModel(CONTENT_SETTINGS_TYPE_NOTIFICATIONS);
552 } 554 }
553 555
554 void ContentSettingsHandler::UpdateExceptionsViewFromHostContentSettingsMap( 556 void ContentSettingsHandler::UpdateExceptionsViewFromHostContentSettingsMap(
555 ContentSettingsType type) { 557 ContentSettingsType type) {
556 HostContentSettingsMap::SettingsForOneType entries; 558 ContentSettingsForOneType entries;
557 GetContentSettingsMap()->GetSettingsForOneType(type, "", &entries); 559 GetContentSettingsMap()->GetSettingsForOneType(type, "", &entries);
558 560
559 ListValue exceptions; 561 ListValue exceptions;
560 for (size_t i = 0; i < entries.size(); ++i) { 562 for (size_t i = 0; i < entries.size(); ++i) {
561 // Skip default settings from extensions and policy, and the default content 563 // Skip default settings from extensions and policy, and the default content
562 // settings; all of them will affect the default setting UI. 564 // settings; all of them will affect the default setting UI.
563 if (entries[i].a == ContentSettingsPattern::Wildcard() && 565 if (entries[i].primary_pattern == ContentSettingsPattern::Wildcard() &&
564 entries[i].b == ContentSettingsPattern::Wildcard() && 566 entries[i].secondary_pattern == ContentSettingsPattern::Wildcard() &&
565 entries[i].d != "preference") { 567 entries[i].source != "preference") {
566 continue; 568 continue;
567 } 569 }
568 // The content settings UI does not support secondary content settings 570 // The content settings UI does not support secondary content settings
569 // pattern yet. For content settings set through the content settings UI the 571 // pattern yet. For content settings set through the content settings UI the
570 // secondary pattern is by default a wildcard pattern. Hence users are not 572 // secondary pattern is by default a wildcard pattern. Hence users are not
571 // able to modify content settings with a secondary pattern other than the 573 // able to modify content settings with a secondary pattern other than the
572 // wildcard pattern. So only show settings that the user is able to modify. 574 // wildcard pattern. So only show settings that the user is able to modify.
573 // TODO(bauerb): Support a read-only view for those patterns. 575 // TODO(bauerb): Support a read-only view for those patterns.
574 if (entries[i].b == ContentSettingsPattern::Wildcard()) { 576 if (entries[i].secondary_pattern == ContentSettingsPattern::Wildcard()) {
575 exceptions.Append( 577 exceptions.Append(
576 GetExceptionForPage(entries[i].a, entries[i].c, entries[i].d)); 578 GetExceptionForPage(entries[i].primary_pattern, entries[i].setting,
579 entries[i].source));
577 } else { 580 } else {
578 LOG(ERROR) << "Secondary content settings patterns are not " 581 LOG(ERROR) << "Secondary content settings patterns are not "
579 << "supported by the content settings UI"; 582 << "supported by the content settings UI";
580 } 583 }
581 } 584 }
582 585
583 StringValue type_string(ContentSettingsTypeToGroupName(type)); 586 StringValue type_string(ContentSettingsTypeToGroupName(type));
584 web_ui_->CallJavascriptFunction("ContentSettings.setExceptions", type_string, 587 web_ui_->CallJavascriptFunction("ContentSettings.setExceptions", type_string,
585 exceptions); 588 exceptions);
586 589
587 UpdateExceptionsViewFromOTRHostContentSettingsMap(type); 590 UpdateExceptionsViewFromOTRHostContentSettingsMap(type);
588 591
589 // The default may also have changed (we won't get a separate notification). 592 // The default may also have changed (we won't get a separate notification).
590 // If it hasn't changed, this call will be harmless. 593 // If it hasn't changed, this call will be harmless.
591 UpdateSettingDefaultFromModel(type); 594 UpdateSettingDefaultFromModel(type);
592 } 595 }
593 596
594 void ContentSettingsHandler::UpdateExceptionsViewFromOTRHostContentSettingsMap( 597 void ContentSettingsHandler::UpdateExceptionsViewFromOTRHostContentSettingsMap(
595 ContentSettingsType type) { 598 ContentSettingsType type) {
596 const HostContentSettingsMap* otr_settings_map = GetOTRContentSettingsMap(); 599 const HostContentSettingsMap* otr_settings_map = GetOTRContentSettingsMap();
597 if (!otr_settings_map) 600 if (!otr_settings_map)
598 return; 601 return;
599 602
600 HostContentSettingsMap::SettingsForOneType otr_entries; 603 ContentSettingsForOneType otr_entries;
601 otr_settings_map->GetSettingsForOneType(type, "", &otr_entries); 604 otr_settings_map->GetSettingsForOneType(type, "", &otr_entries);
602 605
603 ListValue otr_exceptions; 606 ListValue otr_exceptions;
604 for (size_t i = 0; i < otr_entries.size(); ++i) { 607 for (size_t i = 0; i < otr_entries.size(); ++i) {
605 // Off-the-record HostContentSettingsMap contains incognito content settings 608 // Off-the-record HostContentSettingsMap contains incognito content settings
606 // as well as normal content settings. Here, we use the incongnito settings 609 // as well as normal content settings. Here, we use the incongnito settings
607 // only. 610 // only.
608 if (!otr_entries[i].e) 611 if (!otr_entries[i].incognito)
609 continue; 612 continue;
610 // The content settings UI does not support secondary content settings 613 // The content settings UI does not support secondary content settings
611 // pattern yet. For content settings set through the content settings UI the 614 // pattern yet. For content settings set through the content settings UI the
612 // secondary pattern is by default a wildcard pattern. Hence users are not 615 // secondary pattern is by default a wildcard pattern. Hence users are not
613 // able to modify content settings with a secondary pattern other than the 616 // able to modify content settings with a secondary pattern other than the
614 // wildcard pattern. So only show settings that the user is able to modify. 617 // wildcard pattern. So only show settings that the user is able to modify.
615 // TODO(bauerb): Support a read-only view for those patterns. 618 // TODO(bauerb): Support a read-only view for those patterns.
616 if (otr_entries[i].b == ContentSettingsPattern::Wildcard()) { 619 if (otr_entries[i].secondary_pattern ==
620 ContentSettingsPattern::Wildcard()) {
617 otr_exceptions.Append( 621 otr_exceptions.Append(
618 GetExceptionForPage(otr_entries[i].a, 622 GetExceptionForPage(otr_entries[i].primary_pattern,
619 otr_entries[i].c, 623 otr_entries[i].setting,
620 otr_entries[i].d)); 624 otr_entries[i].source));
621 } else { 625 } else {
622 LOG(ERROR) << "Secondary content settings patterns are not " 626 LOG(ERROR) << "Secondary content settings patterns are not "
623 << "supported by the content settings UI"; 627 << "supported by the content settings UI";
624 } 628 }
625 } 629 }
626 630
627 StringValue type_string(ContentSettingsTypeToGroupName(type)); 631 StringValue type_string(ContentSettingsTypeToGroupName(type));
628 web_ui_->CallJavascriptFunction("ContentSettings.setOTRExceptions", 632 web_ui_->CallJavascriptFunction("ContentSettings.setOTRExceptions",
629 type_string, otr_exceptions); 633 type_string, otr_exceptions);
630 } 634 }
(...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after
802 return Profile::FromWebUI(web_ui_)->GetProtocolHandlerRegistry(); 806 return Profile::FromWebUI(web_ui_)->GetProtocolHandlerRegistry();
803 } 807 }
804 808
805 HostContentSettingsMap* 809 HostContentSettingsMap*
806 ContentSettingsHandler::GetOTRContentSettingsMap() { 810 ContentSettingsHandler::GetOTRContentSettingsMap() {
807 Profile* profile = Profile::FromWebUI(web_ui_); 811 Profile* profile = Profile::FromWebUI(web_ui_);
808 if (profile->HasOffTheRecordProfile()) 812 if (profile->HasOffTheRecordProfile())
809 return profile->GetOffTheRecordProfile()->GetHostContentSettingsMap(); 813 return profile->GetOffTheRecordProfile()->GetHostContentSettingsMap();
810 return NULL; 814 return NULL;
811 } 815 }
OLDNEW
« no previous file with comments | « chrome/browser/notifications/desktop_notification_service_unittest.cc ('k') | chrome/common/content_settings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698