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

Side by Side Diff: chrome/browser/chrome_content_browser_client.cc

Issue 990303002: Implement PermissionService::GetNextPermissionChange. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@permission_impl
Patch Set: cosmetic changes Created 5 years, 9 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 (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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698