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/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
6 | 6 |
7 #include <set> | 7 #include <set> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 11 matching lines...) Expand all Loading... |
22 #include "chrome/browser/browser_about_handler.h" | 22 #include "chrome/browser/browser_about_handler.h" |
23 #include "chrome/browser/browser_process.h" | 23 #include "chrome/browser/browser_process.h" |
24 #include "chrome/browser/browser_shutdown.h" | 24 #include "chrome/browser/browser_shutdown.h" |
25 #include "chrome/browser/browsing_data/browsing_data_helper.h" | 25 #include "chrome/browser/browsing_data/browsing_data_helper.h" |
26 #include "chrome/browser/browsing_data/browsing_data_remover.h" | 26 #include "chrome/browser/browsing_data/browsing_data_remover.h" |
27 #include "chrome/browser/character_encoding.h" | 27 #include "chrome/browser/character_encoding.h" |
28 #include "chrome/browser/chrome_content_browser_client_parts.h" | 28 #include "chrome/browser/chrome_content_browser_client_parts.h" |
29 #include "chrome/browser/chrome_net_benchmarking_message_filter.h" | 29 #include "chrome/browser/chrome_net_benchmarking_message_filter.h" |
30 #include "chrome/browser/chrome_quota_permission_context.h" | 30 #include "chrome/browser/chrome_quota_permission_context.h" |
31 #include "chrome/browser/content_settings/cookie_settings.h" | 31 #include "chrome/browser/content_settings/cookie_settings.h" |
| 32 #include "chrome/browser/content_settings/permission_context.h" |
| 33 #include "chrome/browser/content_settings/permission_observer.h" |
| 34 #include "chrome/browser/content_settings/permission_observer_factory.h" |
32 #include "chrome/browser/content_settings/tab_specific_content_settings.h" | 35 #include "chrome/browser/content_settings/tab_specific_content_settings.h" |
33 #include "chrome/browser/defaults.h" | 36 #include "chrome/browser/defaults.h" |
34 #include "chrome/browser/download/download_prefs.h" | 37 #include "chrome/browser/download/download_prefs.h" |
35 #include "chrome/browser/font_family_cache.h" | 38 #include "chrome/browser/font_family_cache.h" |
36 #include "chrome/browser/geolocation/chrome_access_token_store.h" | 39 #include "chrome/browser/geolocation/chrome_access_token_store.h" |
37 #include "chrome/browser/geolocation/geolocation_permission_context.h" | 40 #include "chrome/browser/geolocation/geolocation_permission_context.h" |
38 #include "chrome/browser/geolocation/geolocation_permission_context_factory.h" | |
39 #include "chrome/browser/media/media_capture_devices_dispatcher.h" | 41 #include "chrome/browser/media/media_capture_devices_dispatcher.h" |
40 #include "chrome/browser/media/midi_permission_context.h" | 42 #include "chrome/browser/media/midi_permission_context.h" |
41 #include "chrome/browser/media/midi_permission_context_factory.h" | |
42 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" | 43 #include "chrome/browser/metrics/chrome_browser_main_extra_parts_metrics.h" |
43 #include "chrome/browser/metrics/rappor/sampling.h" | 44 #include "chrome/browser/metrics/rappor/sampling.h" |
44 #include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" | 45 #include "chrome/browser/nacl_host/nacl_browser_delegate_impl.h" |
45 #include "chrome/browser/net/chrome_net_log.h" | 46 #include "chrome/browser/net/chrome_net_log.h" |
46 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" | 47 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings.h" |
47 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact
ory.h" | 48 #include "chrome/browser/net/spdyproxy/data_reduction_proxy_chrome_settings_fact
ory.h" |
48 #include "chrome/browser/notifications/desktop_notification_service.h" | 49 #include "chrome/browser/notifications/desktop_notification_service.h" |
49 #include "chrome/browser/notifications/desktop_notification_service_factory.h" | |
50 #include "chrome/browser/notifications/platform_notification_service_impl.h" | 50 #include "chrome/browser/notifications/platform_notification_service_impl.h" |
51 #include "chrome/browser/platform_util.h" | 51 #include "chrome/browser/platform_util.h" |
52 #include "chrome/browser/prerender/prerender_final_status.h" | 52 #include "chrome/browser/prerender/prerender_final_status.h" |
53 #include "chrome/browser/prerender/prerender_manager.h" | 53 #include "chrome/browser/prerender/prerender_manager.h" |
54 #include "chrome/browser/prerender/prerender_manager_factory.h" | 54 #include "chrome/browser/prerender/prerender_manager_factory.h" |
55 #include "chrome/browser/prerender/prerender_message_filter.h" | 55 #include "chrome/browser/prerender/prerender_message_filter.h" |
56 #include "chrome/browser/printing/printing_message_filter.h" | 56 #include "chrome/browser/printing/printing_message_filter.h" |
57 #include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" | 57 #include "chrome/browser/profiles/chrome_browser_main_extra_parts_profiles.h" |
58 #include "chrome/browser/profiles/profile.h" | 58 #include "chrome/browser/profiles/profile.h" |
59 #include "chrome/browser/profiles/profile_io_data.h" | 59 #include "chrome/browser/profiles/profile_io_data.h" |
60 #include "chrome/browser/push_messaging/push_messaging_permission_context.h" | 60 #include "chrome/browser/push_messaging/push_messaging_permission_context.h" |
61 #include "chrome/browser/push_messaging/push_messaging_permission_context_factor
y.h" | |
62 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" | 61 #include "chrome/browser/renderer_host/chrome_render_message_filter.h" |
63 #include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory
.h" | 62 #include "chrome/browser/renderer_host/pepper/chrome_browser_pepper_host_factory
.h" |
64 #include "chrome/browser/search/instant_service.h" | 63 #include "chrome/browser/search/instant_service.h" |
65 #include "chrome/browser/search/instant_service_factory.h" | 64 #include "chrome/browser/search/instant_service_factory.h" |
66 #include "chrome/browser/search/search.h" | 65 #include "chrome/browser/search/search.h" |
67 #include "chrome/browser/search_engines/search_provider_install_state_message_fi
lter.h" | 66 #include "chrome/browser/search_engines/search_provider_install_state_message_fi
lter.h" |
68 #include "chrome/browser/signin/principals_message_filter.h" | 67 #include "chrome/browser/signin/principals_message_filter.h" |
69 #include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" | 68 #include "chrome/browser/speech/chrome_speech_recognition_manager_delegate.h" |
70 #include "chrome/browser/speech/tts_controller.h" | 69 #include "chrome/browser/speech/tts_controller.h" |
71 #include "chrome/browser/speech/tts_message_filter.h" | 70 #include "chrome/browser/speech/tts_message_filter.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 #include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" | 164 #include "chrome/browser/android/webapps/single_tab_mode_tab_helper.h" |
166 #include "chrome/browser/chrome_browser_main_android.h" | 165 #include "chrome/browser/chrome_browser_main_android.h" |
167 #include "chrome/common/descriptors_android.h" | 166 #include "chrome/common/descriptors_android.h" |
168 #include "components/crash/browser/crash_dump_manager_android.h" | 167 #include "components/crash/browser/crash_dump_manager_android.h" |
169 #elif defined(OS_POSIX) | 168 #elif defined(OS_POSIX) |
170 #include "chrome/browser/chrome_browser_main_posix.h" | 169 #include "chrome/browser/chrome_browser_main_posix.h" |
171 #endif | 170 #endif |
172 | 171 |
173 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) | 172 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
174 #include "chrome/browser/media/protected_media_identifier_permission_context.h" | 173 #include "chrome/browser/media/protected_media_identifier_permission_context.h" |
175 #include "chrome/browser/media/protected_media_identifier_permission_context_fac
tory.h" | |
176 #endif | 174 #endif |
177 | 175 |
178 #if defined(OS_POSIX) && !defined(OS_MACOSX) | 176 #if defined(OS_POSIX) && !defined(OS_MACOSX) |
179 #include "base/debug/leak_annotations.h" | 177 #include "base/debug/leak_annotations.h" |
180 #include "components/crash/app/breakpad_linux.h" | 178 #include "components/crash/app/breakpad_linux.h" |
181 #include "components/crash/browser/crash_handler_host_linux.h" | 179 #include "components/crash/browser/crash_handler_host_linux.h" |
182 #endif | 180 #endif |
183 | 181 |
184 #if defined(OS_ANDROID) | 182 #if defined(OS_ANDROID) |
185 #include "ui/base/ui_base_paths.h" | 183 #include "ui/base/ui_base_paths.h" |
(...skipping 436 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
622 return content::PERMISSION_STATUS_ASK; | 620 return content::PERMISSION_STATUS_ASK; |
623 case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT: | 621 case CONTENT_SETTING_DETECT_IMPORTANT_CONTENT: |
624 case CONTENT_SETTING_DEFAULT: | 622 case CONTENT_SETTING_DEFAULT: |
625 case CONTENT_SETTING_NUM_SETTINGS: | 623 case CONTENT_SETTING_NUM_SETTINGS: |
626 break; | 624 break; |
627 } | 625 } |
628 NOTREACHED(); | 626 NOTREACHED(); |
629 return content::PERMISSION_STATUS_DENIED; | 627 return content::PERMISSION_STATUS_DENIED; |
630 } | 628 } |
631 | 629 |
632 PermissionContextBase* GetPermissionContext(Profile* profile, | |
633 content::PermissionType permission) { | |
634 switch (permission) { | |
635 case content::PERMISSION_MIDI_SYSEX: | |
636 return MidiPermissionContextFactory::GetForProfile(profile); | |
637 case content::PERMISSION_NOTIFICATIONS: | |
638 #if defined(ENABLE_NOTIFICATIONS) | |
639 return DesktopNotificationServiceFactory::GetForProfile(profile); | |
640 #else | |
641 NOTIMPLEMENTED(); | |
642 break; | |
643 #endif | |
644 case content::PERMISSION_GEOLOCATION: | |
645 return GeolocationPermissionContextFactory::GetForProfile(profile); | |
646 case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: | |
647 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) | |
648 return ProtectedMediaIdentifierPermissionContextFactory::GetForProfile( | |
649 profile); | |
650 #else | |
651 NOTIMPLEMENTED(); | |
652 break; | |
653 #endif | |
654 case content::PERMISSION_PUSH_MESSAGING: | |
655 return PushMessagingPermissionContextFactory::GetForProfile(profile); | |
656 case content::PERMISSION_NUM: | |
657 NOTREACHED() << "Invalid RequestPermission for " << permission; | |
658 break; | |
659 } | |
660 return nullptr; | |
661 } | |
662 | |
663 // Helper method to translate from Permissions to ContentSettings | 630 // Helper method to translate from Permissions to ContentSettings |
664 ContentSettingsType PermissionToContentSetting( | 631 ContentSettingsType PermissionToContentSetting( |
665 content::PermissionType permission) { | 632 content::PermissionType permission) { |
666 switch (permission) { | 633 switch (permission) { |
667 case content::PERMISSION_MIDI_SYSEX: | 634 case content::PERMISSION_MIDI_SYSEX: |
668 return CONTENT_SETTINGS_TYPE_MIDI_SYSEX; | 635 return CONTENT_SETTINGS_TYPE_MIDI_SYSEX; |
669 case content::PERMISSION_PUSH_MESSAGING: | 636 case content::PERMISSION_PUSH_MESSAGING: |
670 return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING; | 637 return CONTENT_SETTINGS_TYPE_PUSH_MESSAGING; |
671 case content::PERMISSION_NOTIFICATIONS: | 638 case content::PERMISSION_NOTIFICATIONS: |
672 return CONTENT_SETTINGS_TYPE_NOTIFICATIONS; | 639 return CONTENT_SETTINGS_TYPE_NOTIFICATIONS; |
673 case content::PERMISSION_GEOLOCATION: | 640 case content::PERMISSION_GEOLOCATION: |
674 return CONTENT_SETTINGS_TYPE_GEOLOCATION; | 641 return CONTENT_SETTINGS_TYPE_GEOLOCATION; |
675 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) | 642 #if defined(OS_ANDROID) || defined(OS_CHROMEOS) |
676 case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: | 643 case content::PERMISSION_PROTECTED_MEDIA_IDENTIFIER: |
677 return CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER; | 644 return CONTENT_SETTINGS_TYPE_PROTECTED_MEDIA_IDENTIFIER; |
678 #endif | 645 #endif |
679 default: | 646 default: |
680 NOTREACHED() << "Unknown content setting for permission " << permission; | 647 NOTREACHED() << "Unknown content setting for permission " << permission; |
681 return CONTENT_SETTINGS_TYPE_DEFAULT; | 648 return CONTENT_SETTINGS_TYPE_DEFAULT; |
682 } | 649 } |
683 } | 650 } |
684 | 651 |
685 void OnRequestPermission( | 652 void PermissionStatusCallbackWrapper( |
686 const base::Callback<void(content::PermissionStatus)>& callback, | 653 const base::Callback<void(content::PermissionStatus)>& callback, |
687 ContentSetting content_setting) { | 654 ContentSetting content_setting) { |
688 callback.Run(ContentSettingToPermissionStatus(content_setting)); | 655 callback.Run(ContentSettingToPermissionStatus(content_setting)); |
689 } | 656 } |
690 | 657 |
691 } // namespace | 658 } // namespace |
692 | 659 |
693 namespace chrome { | 660 namespace chrome { |
694 | 661 |
695 ChromeContentBrowserClient::ChromeContentBrowserClient() | 662 ChromeContentBrowserClient::ChromeContentBrowserClient() |
(...skipping 1246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1942 bool user_gesture, | 1909 bool user_gesture, |
1943 const base::Callback<void(content::PermissionStatus)>& result_callback) { | 1910 const base::Callback<void(content::PermissionStatus)>& result_callback) { |
1944 int render_process_id = web_contents->GetRenderProcessHost()->GetID(); | 1911 int render_process_id = web_contents->GetRenderProcessHost()->GetID(); |
1945 int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); | 1912 int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
1946 const PermissionRequestID request_id(render_process_id, | 1913 const PermissionRequestID request_id(render_process_id, |
1947 render_view_id, | 1914 render_view_id, |
1948 bridge_id, | 1915 bridge_id, |
1949 requesting_frame); | 1916 requesting_frame); |
1950 Profile* profile = | 1917 Profile* profile = |
1951 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 1918 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
1952 PermissionContextBase* context = GetPermissionContext(profile, permission); | 1919 PermissionContextBase* context = |
| 1920 PermissionContext::Get(profile, PermissionToContentSetting(permission)); |
1953 | 1921 |
1954 if (!context) | 1922 if (!context) |
1955 return; | 1923 return; |
1956 | 1924 |
1957 context->RequestPermission(web_contents, request_id, requesting_frame, | 1925 context->RequestPermission(web_contents, request_id, requesting_frame, |
1958 user_gesture, | 1926 user_gesture, |
1959 base::Bind(&OnRequestPermission, result_callback)); | 1927 base::Bind(&PermissionStatusCallbackWrapper, |
| 1928 result_callback)); |
1960 } | 1929 } |
1961 | 1930 |
1962 content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus( | 1931 content::PermissionStatus ChromeContentBrowserClient::GetPermissionStatus( |
1963 content::PermissionType permission, | 1932 content::PermissionType permission, |
1964 content::BrowserContext* browser_context, | 1933 content::BrowserContext* browser_context, |
1965 const GURL& requesting_origin, | 1934 const GURL& requesting_origin, |
1966 const GURL& embedding_origin) { | 1935 const GURL& embedding_origin) { |
1967 DCHECK(browser_context); | 1936 DCHECK(browser_context); |
1968 Profile* profile = Profile::FromBrowserContext(browser_context); | 1937 Profile* profile = Profile::FromBrowserContext(browser_context); |
1969 PermissionContextBase* context = GetPermissionContext(profile, permission); | 1938 PermissionContextBase* context = |
| 1939 PermissionContext::Get(profile, PermissionToContentSetting(permission)); |
1970 | 1940 |
1971 if (!context) | 1941 if (!context) |
1972 return content::PERMISSION_STATUS_ASK; | 1942 return content::PERMISSION_STATUS_ASK; |
1973 | 1943 |
1974 return ContentSettingToPermissionStatus( | 1944 return ContentSettingToPermissionStatus( |
1975 context->GetPermissionStatus(requesting_origin.GetOrigin(), | 1945 context->GetPermissionStatus(requesting_origin.GetOrigin(), |
1976 embedding_origin.GetOrigin())); | 1946 embedding_origin.GetOrigin())); |
1977 } | 1947 } |
1978 | 1948 |
| 1949 int ChromeContentBrowserClient::SubscribePermissionStatusChange( |
| 1950 content::PermissionType permission, |
| 1951 content::BrowserContext* browser_context, |
| 1952 const GURL& requesting_origin, |
| 1953 const GURL& embedding_origin, |
| 1954 const base::Callback<void(content::PermissionStatus)>& callback) { |
| 1955 return PermissionObserverFactory::GetForProfile( |
| 1956 Profile::FromBrowserContext(browser_context)) |
| 1957 ->Subscribe(PermissionToContentSetting(permission), |
| 1958 requesting_origin, |
| 1959 embedding_origin, |
| 1960 base::Bind(&PermissionStatusCallbackWrapper, |
| 1961 callback)); |
| 1962 } |
| 1963 |
| 1964 void ChromeContentBrowserClient::UnsubscribePermissionStatusChange( |
| 1965 content::BrowserContext* browser_context, |
| 1966 int subscription_id) { |
| 1967 PermissionObserverFactory::GetForProfile( |
| 1968 Profile::FromBrowserContext(browser_context)) |
| 1969 ->Unsubscribe(subscription_id); |
| 1970 } |
| 1971 |
1979 void ChromeContentBrowserClient::ResetPermission( | 1972 void ChromeContentBrowserClient::ResetPermission( |
1980 content::PermissionType permission, | 1973 content::PermissionType permission, |
1981 content::BrowserContext* browser_context, | 1974 content::BrowserContext* browser_context, |
1982 const GURL& requesting_origin, | 1975 const GURL& requesting_origin, |
1983 const GURL& embedding_origin) { | 1976 const GURL& embedding_origin) { |
1984 DCHECK(browser_context); | 1977 DCHECK(browser_context); |
1985 Profile* profile = Profile::FromBrowserContext(browser_context); | 1978 Profile* profile = Profile::FromBrowserContext(browser_context); |
1986 PermissionContextBase* context = GetPermissionContext(profile, permission); | 1979 PermissionContextBase* context = |
| 1980 PermissionContext::Get(profile, PermissionToContentSetting(permission)); |
1987 | 1981 |
1988 if (!context) | 1982 if (!context) |
1989 return; | 1983 return; |
1990 | 1984 |
1991 context->ResetPermission(requesting_origin.GetOrigin(), | 1985 context->ResetPermission(requesting_origin.GetOrigin(), |
1992 embedding_origin.GetOrigin()); | 1986 embedding_origin.GetOrigin()); |
1993 } | 1987 } |
1994 | 1988 |
1995 void ChromeContentBrowserClient::CancelPermissionRequest( | 1989 void ChromeContentBrowserClient::CancelPermissionRequest( |
1996 content::PermissionType permission, | 1990 content::PermissionType permission, |
1997 content::WebContents* web_contents, | 1991 content::WebContents* web_contents, |
1998 int bridge_id, | 1992 int bridge_id, |
1999 const GURL& requesting_frame) { | 1993 const GURL& requesting_frame) { |
2000 int render_process_id = web_contents->GetRenderProcessHost()->GetID(); | 1994 int render_process_id = web_contents->GetRenderProcessHost()->GetID(); |
2001 int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); | 1995 int render_view_id = web_contents->GetRenderViewHost()->GetRoutingID(); |
2002 const PermissionRequestID request_id(render_process_id, | 1996 const PermissionRequestID request_id(render_process_id, |
2003 render_view_id, | 1997 render_view_id, |
2004 bridge_id, | 1998 bridge_id, |
2005 requesting_frame); | 1999 requesting_frame); |
2006 Profile* profile = | 2000 Profile* profile = |
2007 Profile::FromBrowserContext(web_contents->GetBrowserContext()); | 2001 Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
2008 PermissionContextBase* context = GetPermissionContext(profile, permission); | 2002 PermissionContextBase* context = |
| 2003 PermissionContext::Get(profile, PermissionToContentSetting(permission)); |
2009 if (!context) | 2004 if (!context) |
2010 return; | 2005 return; |
2011 context->CancelPermissionRequest(web_contents, request_id); | 2006 context->CancelPermissionRequest(web_contents, request_id); |
2012 } | 2007 } |
2013 | 2008 |
2014 void ChromeContentBrowserClient::RegisterPermissionUsage( | 2009 void ChromeContentBrowserClient::RegisterPermissionUsage( |
2015 content::PermissionType permission, | 2010 content::PermissionType permission, |
2016 content::WebContents* web_contents, | 2011 content::WebContents* web_contents, |
2017 const GURL& frame_url, | 2012 const GURL& frame_url, |
2018 const GURL& main_frame_url) { | 2013 const GURL& main_frame_url) { |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2641 switches::kDisableWebRtcEncryption, | 2636 switches::kDisableWebRtcEncryption, |
2642 }; | 2637 }; |
2643 to_command_line->CopySwitchesFrom(from_command_line, | 2638 to_command_line->CopySwitchesFrom(from_command_line, |
2644 kWebRtcDevSwitchNames, | 2639 kWebRtcDevSwitchNames, |
2645 arraysize(kWebRtcDevSwitchNames)); | 2640 arraysize(kWebRtcDevSwitchNames)); |
2646 } | 2641 } |
2647 } | 2642 } |
2648 #endif // defined(ENABLE_WEBRTC) | 2643 #endif // defined(ENABLE_WEBRTC) |
2649 | 2644 |
2650 } // namespace chrome | 2645 } // namespace chrome |
OLD | NEW |