OLD | NEW |
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/chrome_content_browser_client.h" | 5 #include "chrome/browser/chrome_content_browser_client.h" |
6 | 6 |
7 #include "base/command_line.h" | 7 #include "base/command_line.h" |
8 #include "chrome/app/breakpad_mac.h" | 8 #include "chrome/app/breakpad_mac.h" |
9 #include "chrome/browser/browser_about_handler.h" | 9 #include "chrome/browser/browser_about_handler.h" |
10 #include "chrome/browser/browser_process.h" | 10 #include "chrome/browser/browser_process.h" |
(...skipping 744 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
755 Profile* profile = Profile::FromBrowserContext(process->browser_context()); | 755 Profile* profile = Profile::FromBrowserContext(process->browser_context()); |
756 DesktopNotificationService* service = | 756 DesktopNotificationService* service = |
757 DesktopNotificationServiceFactory::GetForProfile(profile); | 757 DesktopNotificationServiceFactory::GetForProfile(profile); |
758 service->RequestPermission( | 758 service->RequestPermission( |
759 source_origin, render_process_id, render_view_id, callback_context, | 759 source_origin, render_process_id, render_view_id, callback_context, |
760 tab_util::GetTabContentsByID(render_process_id, render_view_id)); | 760 tab_util::GetTabContentsByID(render_process_id, render_view_id)); |
761 } | 761 } |
762 | 762 |
763 WebKit::WebNotificationPresenter::Permission | 763 WebKit::WebNotificationPresenter::Permission |
764 ChromeContentBrowserClient::CheckDesktopNotificationPermission( | 764 ChromeContentBrowserClient::CheckDesktopNotificationPermission( |
765 const GURL& source_url, | 765 const GURL& source_origin, |
766 const content::ResourceContext& context) { | 766 const content::ResourceContext& context, |
| 767 int render_process_id) { |
767 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 768 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
768 ProfileIOData* io_data = | 769 ProfileIOData* io_data = |
769 reinterpret_cast<ProfileIOData*>(context.GetUserData(NULL)); | 770 reinterpret_cast<ProfileIOData*>(context.GetUserData(NULL)); |
770 | 771 |
771 const Extension* extension = | 772 if (io_data->GetExtensionInfoMap()->SecurityOriginHasAPIPermission( |
772 io_data->GetExtensionInfoMap()->extensions().GetByURL(source_url); | 773 source_origin, render_process_id, |
773 if (extension && | 774 ExtensionAPIPermission::kNotification)) |
774 extension->HasAPIPermission(ExtensionAPIPermission::kNotification)) { | |
775 return WebKit::WebNotificationPresenter::PermissionAllowed; | 775 return WebKit::WebNotificationPresenter::PermissionAllowed; |
776 } | |
777 | 776 |
778 // Fall back to the regular notification preferences, which works on an | 777 // Fall back to the regular notification preferences, which works on an |
779 // origin basis. | 778 // origin basis. |
| 779 // TODO(dcheng): Change to just source_origin once WebKit side is cleaned up. |
780 return io_data->GetNotificationService() ? | 780 return io_data->GetNotificationService() ? |
781 io_data->GetNotificationService()->HasPermission(source_url.GetOrigin()) : | 781 io_data->GetNotificationService()->HasPermission( |
| 782 source_origin.GetOrigin()) : |
782 WebKit::WebNotificationPresenter::PermissionNotAllowed; | 783 WebKit::WebNotificationPresenter::PermissionNotAllowed; |
783 } | 784 } |
784 | 785 |
785 void ChromeContentBrowserClient::ShowDesktopNotification( | 786 void ChromeContentBrowserClient::ShowDesktopNotification( |
786 const DesktopNotificationHostMsg_Show_Params& params, | 787 const DesktopNotificationHostMsg_Show_Params& params, |
787 int render_process_id, | 788 int render_process_id, |
788 int render_view_id, | 789 int render_view_id, |
789 bool worker) { | 790 bool worker) { |
790 RenderViewHost* rvh = RenderViewHost::FromID( | 791 RenderViewHost* rvh = RenderViewHost::FromID( |
791 render_process_id, render_view_id); | 792 render_process_id, render_view_id); |
(...skipping 25 matching lines...) Expand all Loading... |
817 | 818 |
818 RenderProcessHost* process = rvh->process(); | 819 RenderProcessHost* process = rvh->process(); |
819 Profile* profile = Profile::FromBrowserContext(process->browser_context()); | 820 Profile* profile = Profile::FromBrowserContext(process->browser_context()); |
820 DesktopNotificationService* service = | 821 DesktopNotificationService* service = |
821 DesktopNotificationServiceFactory::GetForProfile(profile); | 822 DesktopNotificationServiceFactory::GetForProfile(profile); |
822 service->CancelDesktopNotification( | 823 service->CancelDesktopNotification( |
823 render_process_id, render_view_id, notification_id); | 824 render_process_id, render_view_id, notification_id); |
824 } | 825 } |
825 | 826 |
826 bool ChromeContentBrowserClient::CanCreateWindow( | 827 bool ChromeContentBrowserClient::CanCreateWindow( |
827 const GURL& source_url, | 828 const GURL& source_origin, |
828 WindowContainerType container_type, | 829 WindowContainerType container_type, |
829 const content::ResourceContext& context) { | 830 const content::ResourceContext& context, |
| 831 int render_process_id) { |
830 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 832 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
831 // If the opener is trying to create a background window but doesn't have | 833 // If the opener is trying to create a background window but doesn't have |
832 // the appropriate permission, fail the attempt. | 834 // the appropriate permission, fail the attempt. |
833 if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { | 835 if (container_type == WINDOW_CONTAINER_TYPE_BACKGROUND) { |
834 ProfileIOData* io_data = | 836 ProfileIOData* io_data = |
835 reinterpret_cast<ProfileIOData*>(context.GetUserData(NULL)); | 837 reinterpret_cast<ProfileIOData*>(context.GetUserData(NULL)); |
836 const Extension* extension = | 838 return io_data->GetExtensionInfoMap()->SecurityOriginHasAPIPermission( |
837 io_data->GetExtensionInfoMap()->extensions().GetByURL(source_url); | 839 source_origin, render_process_id, ExtensionAPIPermission::kBackground); |
838 return (extension && | |
839 extension->HasAPIPermission(ExtensionAPIPermission::kBackground)); | |
840 } | 840 } |
841 return true; | 841 return true; |
842 } | 842 } |
843 | 843 |
844 std::string ChromeContentBrowserClient::GetWorkerProcessTitle( | 844 std::string ChromeContentBrowserClient::GetWorkerProcessTitle( |
845 const GURL& url, const content::ResourceContext& context) { | 845 const GURL& url, const content::ResourceContext& context) { |
846 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); | 846 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
847 // Check if it's an extension-created worker, in which case we want to use | 847 // Check if it's an extension-created worker, in which case we want to use |
848 // the name of the extension. | 848 // the name of the extension. |
849 ProfileIOData* io_data = | 849 ProfileIOData* io_data = |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
988 #if defined(USE_NSS) | 988 #if defined(USE_NSS) |
989 crypto::CryptoModuleBlockingPasswordDelegate* | 989 crypto::CryptoModuleBlockingPasswordDelegate* |
990 ChromeContentBrowserClient::GetCryptoPasswordDelegate( | 990 ChromeContentBrowserClient::GetCryptoPasswordDelegate( |
991 const GURL& url) { | 991 const GURL& url) { |
992 return browser::NewCryptoModuleBlockingDialogDelegate( | 992 return browser::NewCryptoModuleBlockingDialogDelegate( |
993 browser::kCryptoModulePasswordKeygen, url.host()); | 993 browser::kCryptoModulePasswordKeygen, url.host()); |
994 } | 994 } |
995 #endif | 995 #endif |
996 | 996 |
997 } // namespace chrome | 997 } // namespace chrome |
OLD | NEW |