Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/content_settings/tab_specific_content_settings.h" | 5 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
| 6 | 6 |
| 7 #include <list> | 7 #include <list> |
| 8 | 8 |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #include "base/lazy_instance.h" | 10 #include "base/lazy_instance.h" |
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 99 Profile::FromBrowserContext(tab->GetBrowserContext())), | 99 Profile::FromBrowserContext(tab->GetBrowserContext())), |
| 100 CONTENT_SETTINGS_TYPE_MIDI_SYSEX), | 100 CONTENT_SETTINGS_TYPE_MIDI_SYSEX), |
| 101 pending_protocol_handler_(ProtocolHandler::EmptyProtocolHandler()), | 101 pending_protocol_handler_(ProtocolHandler::EmptyProtocolHandler()), |
| 102 previous_protocol_handler_(ProtocolHandler::EmptyProtocolHandler()), | 102 previous_protocol_handler_(ProtocolHandler::EmptyProtocolHandler()), |
| 103 pending_protocol_handler_setting_(CONTENT_SETTING_DEFAULT), | 103 pending_protocol_handler_setting_(CONTENT_SETTING_DEFAULT), |
| 104 load_plugins_link_enabled_(true), | 104 load_plugins_link_enabled_(true), |
| 105 microphone_camera_state_(MICROPHONE_CAMERA_NOT_ACCESSED), | 105 microphone_camera_state_(MICROPHONE_CAMERA_NOT_ACCESSED), |
| 106 subresource_filter_enabled_(false), | 106 subresource_filter_enabled_(false), |
| 107 subresource_filter_blockage_indicated_(false), | 107 subresource_filter_blockage_indicated_(false), |
| 108 observer_(this) { | 108 observer_(this) { |
| 109 ClearBlockedContentSettingsExceptForCookies(); | 109 ClearBlockedContentSettingsExceptForNavigationRelatedSettings(); |
| 110 ClearCookieSpecificContentSettings(); | 110 ClearNavigationRelatedContentSettings(); |
| 111 | 111 |
| 112 observer_.Add(HostContentSettingsMapFactory::GetForProfile( | 112 observer_.Add(HostContentSettingsMapFactory::GetForProfile( |
| 113 Profile::FromBrowserContext(tab->GetBrowserContext()))); | 113 Profile::FromBrowserContext(tab->GetBrowserContext()))); |
| 114 } | 114 } |
| 115 | 115 |
| 116 TabSpecificContentSettings::~TabSpecificContentSettings() { | 116 TabSpecificContentSettings::~TabSpecificContentSettings() { |
| 117 FOR_EACH_OBSERVER( | 117 FOR_EACH_OBSERVER( |
| 118 SiteDataObserver, observer_list_, ContentSettingsDestroyed()); | 118 SiteDataObserver, observer_list_, ContentSettingsDestroyed()); |
| 119 } | 119 } |
| 120 | 120 |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 210 const GURL& url, | 210 const GURL& url, |
| 211 bool blocked_by_policy) { | 211 bool blocked_by_policy) { |
| 212 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 212 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 213 TabSpecificContentSettings* settings = GetForFrame( | 213 TabSpecificContentSettings* settings = GetForFrame( |
| 214 render_process_id, render_frame_id); | 214 render_process_id, render_frame_id); |
| 215 if (settings) | 215 if (settings) |
| 216 settings->OnFileSystemAccessed(url, blocked_by_policy); | 216 settings->OnFileSystemAccessed(url, blocked_by_policy); |
| 217 } | 217 } |
| 218 | 218 |
| 219 // static | 219 // static |
| 220 void TabSpecificContentSettings::ServiceWorkerAccessed(int render_process_id, | 220 void TabSpecificContentSettings::ServiceWorkerAccessed( |
| 221 int render_frame_id, | 221 int render_process_id, |
| 222 const GURL& scope, | 222 int render_frame_id, |
| 223 bool blocked_by_policy) { | 223 const GURL& scope, |
| 224 bool blocked_by_policy_javascript, | |
| 225 bool blocked_by_policy_cookie) { | |
| 224 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 226 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
| 225 TabSpecificContentSettings* settings = | 227 TabSpecificContentSettings* settings = |
| 226 GetForFrame(render_process_id, render_frame_id); | 228 GetForFrame(render_process_id, render_frame_id); |
| 227 if (settings) | 229 if (settings) |
| 228 settings->OnServiceWorkerAccessed(scope, blocked_by_policy); | 230 settings->OnServiceWorkerAccessed(scope, blocked_by_policy_javascript, |
| 231 blocked_by_policy_cookie); | |
| 229 } | 232 } |
| 230 | 233 |
| 231 bool TabSpecificContentSettings::IsContentBlocked( | 234 bool TabSpecificContentSettings::IsContentBlocked( |
| 232 ContentSettingsType content_type) const { | 235 ContentSettingsType content_type) const { |
| 233 DCHECK_NE(CONTENT_SETTINGS_TYPE_GEOLOCATION, content_type) | 236 DCHECK_NE(CONTENT_SETTINGS_TYPE_GEOLOCATION, content_type) |
| 234 << "Geolocation settings handled by ContentSettingGeolocationImageModel"; | 237 << "Geolocation settings handled by ContentSettingGeolocationImageModel"; |
| 235 DCHECK_NE(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, content_type) | 238 DCHECK_NE(CONTENT_SETTINGS_TYPE_NOTIFICATIONS, content_type) |
| 236 << "Notifications settings handled by " | 239 << "Notifications settings handled by " |
| 237 << "ContentSettingsNotificationsImageModel"; | 240 << "ContentSettingsNotificationsImageModel"; |
| 238 | 241 |
| (...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 463 if (blocked_by_policy) | 466 if (blocked_by_policy) |
| 464 OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); | 467 OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); |
| 465 else | 468 else |
| 466 OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); | 469 OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); |
| 467 | 470 |
| 468 NotifySiteDataObservers(); | 471 NotifySiteDataObservers(); |
| 469 } | 472 } |
| 470 | 473 |
| 471 void TabSpecificContentSettings::OnServiceWorkerAccessed( | 474 void TabSpecificContentSettings::OnServiceWorkerAccessed( |
| 472 const GURL& scope, | 475 const GURL& scope, |
| 473 bool blocked_by_policy) { | 476 bool blocked_by_policy_javascript, |
| 477 bool blocked_by_policy_cookie) { | |
| 474 DCHECK(scope.is_valid()); | 478 DCHECK(scope.is_valid()); |
| 475 if (blocked_by_policy) { | 479 if (blocked_by_policy_javascript || blocked_by_policy_cookie) { |
| 476 blocked_local_shared_objects_.service_workers()->AddServiceWorker( | 480 blocked_local_shared_objects_.service_workers()->AddServiceWorker( |
| 477 scope.GetOrigin(), std::vector<GURL>(1, scope)); | 481 scope.GetOrigin(), std::vector<GURL>(1, scope)); |
| 478 OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); | |
| 479 } else { | 482 } else { |
| 480 allowed_local_shared_objects_.service_workers()->AddServiceWorker( | 483 allowed_local_shared_objects_.service_workers()->AddServiceWorker( |
| 481 scope.GetOrigin(), std::vector<GURL>(1, scope)); | 484 scope.GetOrigin(), std::vector<GURL>(1, scope)); |
| 485 } | |
| 486 | |
| 487 if (blocked_by_policy_javascript) { | |
| 488 OnContentBlocked(CONTENT_SETTINGS_TYPE_JAVASCRIPT); | |
| 489 } else { | |
| 490 OnContentAllowed(CONTENT_SETTINGS_TYPE_JAVASCRIPT); | |
| 491 } | |
| 492 if (blocked_by_policy_cookie) { | |
| 493 OnContentBlocked(CONTENT_SETTINGS_TYPE_COOKIES); | |
| 494 } else { | |
| 482 OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); | 495 OnContentAllowed(CONTENT_SETTINGS_TYPE_COOKIES); |
| 483 } | 496 } |
| 484 } | 497 } |
| 485 | 498 |
| 486 void TabSpecificContentSettings::OnWebDatabaseAccessed( | 499 void TabSpecificContentSettings::OnWebDatabaseAccessed( |
| 487 const GURL& url, | 500 const GURL& url, |
| 488 const base::string16& name, | 501 const base::string16& name, |
| 489 const base::string16& display_name, | 502 const base::string16& display_name, |
| 490 bool blocked_by_policy) { | 503 bool blocked_by_policy) { |
| 491 if (blocked_by_policy) { | 504 if (blocked_by_policy) { |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 644 midi_usages_state_.OnPermissionSet(requesting_origin, true); | 657 midi_usages_state_.OnPermissionSet(requesting_origin, true); |
| 645 OnContentAllowed(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 658 OnContentAllowed(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 646 } | 659 } |
| 647 | 660 |
| 648 void TabSpecificContentSettings::OnMidiSysExAccessBlocked( | 661 void TabSpecificContentSettings::OnMidiSysExAccessBlocked( |
| 649 const GURL& requesting_origin) { | 662 const GURL& requesting_origin) { |
| 650 midi_usages_state_.OnPermissionSet(requesting_origin, false); | 663 midi_usages_state_.OnPermissionSet(requesting_origin, false); |
| 651 OnContentBlocked(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); | 664 OnContentBlocked(CONTENT_SETTINGS_TYPE_MIDI_SYSEX); |
| 652 } | 665 } |
| 653 | 666 |
| 654 void TabSpecificContentSettings::ClearBlockedContentSettingsExceptForCookies() { | 667 void TabSpecificContentSettings:: |
| 668 ClearBlockedContentSettingsExceptForNavigationRelatedSettings() { | |
| 655 for (auto& status : content_settings_status_) { | 669 for (auto& status : content_settings_status_) { |
| 656 if (status.first == CONTENT_SETTINGS_TYPE_COOKIES) | 670 if (status.first == CONTENT_SETTINGS_TYPE_COOKIES || |
| 671 status.first == CONTENT_SETTINGS_TYPE_JAVASCRIPT) | |
|
falken
2016/10/05 01:16:50
Why was this change needed? Before this patch, if
shimazu
2016/10/05 02:10:57
Yes, the icon will be shown during navigation and
| |
| 657 continue; | 672 continue; |
| 658 status.second.blocked = false; | 673 status.second.blocked = false; |
| 659 status.second.blockage_indicated_to_user = false; | 674 status.second.blockage_indicated_to_user = false; |
| 660 status.second.allowed = false; | 675 status.second.allowed = false; |
| 661 } | 676 } |
| 662 microphone_camera_state_ = MICROPHONE_CAMERA_NOT_ACCESSED; | 677 microphone_camera_state_ = MICROPHONE_CAMERA_NOT_ACCESSED; |
| 663 load_plugins_link_enabled_ = true; | 678 load_plugins_link_enabled_ = true; |
| 664 content::NotificationService::current()->Notify( | 679 content::NotificationService::current()->Notify( |
| 665 chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, | 680 chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, |
| 666 content::Source<WebContents>(web_contents()), | 681 content::Source<WebContents>(web_contents()), |
| 667 content::NotificationService::NoDetails()); | 682 content::NotificationService::NoDetails()); |
| 668 } | 683 } |
| 669 | 684 |
| 670 void TabSpecificContentSettings::ClearCookieSpecificContentSettings() { | 685 void TabSpecificContentSettings::ClearNavigationRelatedContentSettings() { |
| 671 blocked_local_shared_objects_.Reset(); | 686 blocked_local_shared_objects_.Reset(); |
| 672 allowed_local_shared_objects_.Reset(); | 687 allowed_local_shared_objects_.Reset(); |
| 673 ContentSettingsStatus& status = | 688 for (ContentSettingsType type : |
| 674 content_settings_status_[CONTENT_SETTINGS_TYPE_COOKIES]; | 689 {CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTINGS_TYPE_JAVASCRIPT}) { |
| 675 status.blocked = false; | 690 ContentSettingsStatus& status = |
| 676 status.blockage_indicated_to_user = false; | 691 content_settings_status_[type]; |
| 677 status.allowed = false; | 692 status.blocked = false; |
| 693 status.blockage_indicated_to_user = false; | |
| 694 status.allowed = false; | |
| 695 } | |
| 678 content::NotificationService::current()->Notify( | 696 content::NotificationService::current()->Notify( |
| 679 chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, | 697 chrome::NOTIFICATION_WEB_CONTENT_SETTINGS_CHANGED, |
| 680 content::Source<WebContents>(web_contents()), | 698 content::Source<WebContents>(web_contents()), |
| 681 content::NotificationService::NoDetails()); | 699 content::NotificationService::NoDetails()); |
| 682 } | 700 } |
| 683 | 701 |
| 684 void TabSpecificContentSettings::SetDownloadsBlocked(bool blocked) { | 702 void TabSpecificContentSettings::SetDownloadsBlocked(bool blocked) { |
| 685 ContentSettingsStatus& status = | 703 ContentSettingsStatus& status = |
| 686 content_settings_status_[CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS]; | 704 content_settings_status_[CONTENT_SETTINGS_TYPE_AUTOMATIC_DOWNLOADS]; |
| 687 status.blocked = blocked; | 705 status.blocked = blocked; |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 784 web_contents()->GetController(); | 802 web_contents()->GetController(); |
| 785 content::NavigationEntry* last_committed_entry = | 803 content::NavigationEntry* last_committed_entry = |
| 786 controller.GetLastCommittedEntry(); | 804 controller.GetLastCommittedEntry(); |
| 787 if (last_committed_entry) | 805 if (last_committed_entry) |
| 788 previous_url_ = last_committed_entry->GetURL(); | 806 previous_url_ = last_committed_entry->GetURL(); |
| 789 | 807 |
| 790 // If we're displaying a network error page do not reset the content | 808 // If we're displaying a network error page do not reset the content |
| 791 // settings delegate's cookies so the user has a chance to modify cookie | 809 // settings delegate's cookies so the user has a chance to modify cookie |
| 792 // settings. | 810 // settings. |
| 793 if (!navigation_handle->IsErrorPage()) | 811 if (!navigation_handle->IsErrorPage()) |
| 794 ClearCookieSpecificContentSettings(); | 812 ClearNavigationRelatedContentSettings(); |
| 795 ClearGeolocationContentSettings(); | 813 ClearGeolocationContentSettings(); |
| 796 ClearMidiContentSettings(); | 814 ClearMidiContentSettings(); |
| 797 ClearPendingProtocolHandler(); | 815 ClearPendingProtocolHandler(); |
| 798 } | 816 } |
| 799 | 817 |
| 800 void TabSpecificContentSettings::DidFinishNavigation( | 818 void TabSpecificContentSettings::DidFinishNavigation( |
| 801 content::NavigationHandle* navigation_handle) { | 819 content::NavigationHandle* navigation_handle) { |
| 802 if (!navigation_handle->IsInMainFrame() || | 820 if (!navigation_handle->IsInMainFrame() || |
| 803 !navigation_handle->HasCommitted() || | 821 !navigation_handle->HasCommitted() || |
| 804 navigation_handle->IsSamePage()) { | 822 navigation_handle->IsSamePage()) { |
| 805 return; | 823 return; |
| 806 } | 824 } |
| 807 | 825 |
| 808 // Clear "blocked" flags. | 826 // Clear "blocked" flags. |
| 809 ClearBlockedContentSettingsExceptForCookies(); | 827 ClearBlockedContentSettingsExceptForNavigationRelatedSettings(); |
| 810 blocked_plugin_names_.clear(); | 828 blocked_plugin_names_.clear(); |
| 811 GeolocationDidNavigate(navigation_handle); | 829 GeolocationDidNavigate(navigation_handle); |
| 812 MidiDidNavigate(navigation_handle); | 830 MidiDidNavigate(navigation_handle); |
| 813 | 831 |
| 814 if (web_contents()->GetVisibleURL().SchemeIsHTTPOrHTTPS()) { | 832 if (web_contents()->GetVisibleURL().SchemeIsHTTPOrHTTPS()) { |
| 815 content_settings::RecordPluginsAction( | 833 content_settings::RecordPluginsAction( |
| 816 content_settings::PLUGINS_ACTION_TOTAL_NAVIGATIONS); | 834 content_settings::PLUGINS_ACTION_TOTAL_NAVIGATIONS); |
| 817 } | 835 } |
| 818 } | 836 } |
| 819 | 837 |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 886 static_cast<MicrophoneCameraStateFlags>( | 904 static_cast<MicrophoneCameraStateFlags>( |
| 887 TabSpecificContentSettings::MICROPHONE_ACCESSED | | 905 TabSpecificContentSettings::MICROPHONE_ACCESSED | |
| 888 TabSpecificContentSettings::MICROPHONE_BLOCKED | | 906 TabSpecificContentSettings::MICROPHONE_BLOCKED | |
| 889 TabSpecificContentSettings::CAMERA_ACCESSED | | 907 TabSpecificContentSettings::CAMERA_ACCESSED | |
| 890 TabSpecificContentSettings::CAMERA_BLOCKED); | 908 TabSpecificContentSettings::CAMERA_BLOCKED); |
| 891 OnMediaStreamPermissionSet( | 909 OnMediaStreamPermissionSet( |
| 892 web_contents()->GetLastCommittedURL(), | 910 web_contents()->GetLastCommittedURL(), |
| 893 media_blocked, | 911 media_blocked, |
| 894 std::string(), std::string(), std::string(), std::string()); | 912 std::string(), std::string(), std::string(), std::string()); |
| 895 } | 913 } |
| OLD | NEW |