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/renderer/extensions/extension_dispatcher.h" | 5 #include "chrome/renderer/extensions/extension_dispatcher.h" |
6 | 6 |
7 #include "base/callback.h" | 7 #include "base/callback.h" |
8 #include "base/command_line.h" | 8 #include "base/command_line.h" |
9 #include "base/memory/scoped_ptr.h" | 9 #include "base/memory/scoped_ptr.h" |
10 #include "base/string_piece.h" | 10 #include "base/string_piece.h" |
11 #include "chrome/common/child_process_logging.h" | 11 #include "chrome/common/child_process_logging.h" |
12 #include "chrome/common/chrome_switches.h" | 12 #include "chrome/common/chrome_switches.h" |
13 #include "chrome/common/chrome_version_info.h" | 13 #include "chrome/common/chrome_version_info.h" |
14 #include "chrome/common/extensions/api/extension_api.h" | 14 #include "chrome/common/extensions/api/extension_api.h" |
15 #include "chrome/common/extensions/extension.h" | 15 #include "chrome/common/extensions/extension.h" |
16 #include "chrome/common/extensions/extension_messages.h" | 16 #include "chrome/common/extensions/extension_messages.h" |
17 #include "chrome/common/extensions/extension_permission_set.h" | 17 #include "chrome/common/extensions/permissions/permission_set.h" |
18 #include "chrome/common/url_constants.h" | 18 #include "chrome/common/url_constants.h" |
19 #include "chrome/common/view_type.h" | 19 #include "chrome/common/view_type.h" |
20 #include "chrome/renderer/chrome_render_process_observer.h" | 20 #include "chrome/renderer/chrome_render_process_observer.h" |
21 #include "chrome/renderer/extensions/api_definitions_natives.h" | 21 #include "chrome/renderer/extensions/api_definitions_natives.h" |
22 #include "chrome/renderer/extensions/app_bindings.h" | 22 #include "chrome/renderer/extensions/app_bindings.h" |
23 #include "chrome/renderer/extensions/app_window_custom_bindings.h" | 23 #include "chrome/renderer/extensions/app_window_custom_bindings.h" |
24 #include "chrome/renderer/extensions/chrome_v8_context.h" | 24 #include "chrome/renderer/extensions/chrome_v8_context.h" |
25 #include "chrome/renderer/extensions/chrome_v8_extension.h" | 25 #include "chrome/renderer/extensions/chrome_v8_extension.h" |
26 #include "chrome/renderer/extensions/context_menus_custom_bindings.h" | 26 #include "chrome/renderer/extensions/context_menus_custom_bindings.h" |
27 #include "chrome/renderer/extensions/event_bindings.h" | 27 #include "chrome/renderer/extensions/event_bindings.h" |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
85 using extensions::ExtensionCustomBindings; | 85 using extensions::ExtensionCustomBindings; |
86 using extensions::Feature; | 86 using extensions::Feature; |
87 using extensions::FileBrowserHandlerCustomBindings; | 87 using extensions::FileBrowserHandlerCustomBindings; |
88 using extensions::FileBrowserPrivateCustomBindings; | 88 using extensions::FileBrowserPrivateCustomBindings; |
89 using extensions::FileSystemNatives; | 89 using extensions::FileSystemNatives; |
90 using extensions::I18NCustomBindings; | 90 using extensions::I18NCustomBindings; |
91 using extensions::MiscellaneousBindings; | 91 using extensions::MiscellaneousBindings; |
92 using extensions::MediaGalleryCustomBindings; | 92 using extensions::MediaGalleryCustomBindings; |
93 using extensions::PageActionsCustomBindings; | 93 using extensions::PageActionsCustomBindings; |
94 using extensions::PageCaptureCustomBindings; | 94 using extensions::PageCaptureCustomBindings; |
| 95 using extensions::PermissionSet; |
95 using extensions::SendRequestNatives; | 96 using extensions::SendRequestNatives; |
96 using extensions::SetIconNatives; | 97 using extensions::SetIconNatives; |
97 using extensions::TTSCustomBindings; | 98 using extensions::TTSCustomBindings; |
98 using extensions::TabFinder; | 99 using extensions::TabFinder; |
99 using extensions::TabsCustomBindings; | 100 using extensions::TabsCustomBindings; |
100 using extensions::UpdatedExtensionPermissionsInfo; | 101 using extensions::UpdatedExtensionPermissionsInfo; |
101 using extensions::WebRequestCustomBindings; | 102 using extensions::WebRequestCustomBindings; |
102 | 103 |
103 namespace { | 104 namespace { |
104 | 105 |
(...skipping 679 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
784 return; | 785 return; |
785 | 786 |
786 if (is_webkit_initialized_) | 787 if (is_webkit_initialized_) |
787 InitOriginPermissions(extension); | 788 InitOriginPermissions(extension); |
788 } | 789 } |
789 | 790 |
790 void ExtensionDispatcher::InitOriginPermissions(const Extension* extension) { | 791 void ExtensionDispatcher::InitOriginPermissions(const Extension* extension) { |
791 // TODO(jstritar): We should try to remove this special case. Also, these | 792 // TODO(jstritar): We should try to remove this special case. Also, these |
792 // whitelist entries need to be updated when the kManagement permission | 793 // whitelist entries need to be updated when the kManagement permission |
793 // changes. | 794 // changes. |
794 if (extension->HasAPIPermission(ExtensionAPIPermission::kManagement)) { | 795 if (extension->HasAPIPermission(APIPermission::kManagement)) { |
795 WebSecurityPolicy::addOriginAccessWhitelistEntry( | 796 WebSecurityPolicy::addOriginAccessWhitelistEntry( |
796 extension->url(), | 797 extension->url(), |
797 WebString::fromUTF8(chrome::kChromeUIScheme), | 798 WebString::fromUTF8(chrome::kChromeUIScheme), |
798 WebString::fromUTF8(chrome::kChromeUIExtensionIconHost), | 799 WebString::fromUTF8(chrome::kChromeUIExtensionIconHost), |
799 false); | 800 false); |
800 } | 801 } |
801 | 802 |
802 AddOrRemoveOriginPermissions( | 803 AddOrRemoveOriginPermissions( |
803 UpdatedExtensionPermissionsInfo::ADDED, | 804 UpdatedExtensionPermissionsInfo::ADDED, |
804 extension, | 805 extension, |
(...skipping 22 matching lines...) Expand all Loading... |
827 WebString::fromUTF8(i->host()), | 828 WebString::fromUTF8(i->host()), |
828 i->match_subdomains()); | 829 i->match_subdomains()); |
829 } | 830 } |
830 } | 831 } |
831 } | 832 } |
832 } | 833 } |
833 | 834 |
834 void ExtensionDispatcher::OnUpdatePermissions( | 835 void ExtensionDispatcher::OnUpdatePermissions( |
835 int reason_id, | 836 int reason_id, |
836 const std::string& extension_id, | 837 const std::string& extension_id, |
837 const ExtensionAPIPermissionSet& apis, | 838 const APIPermissionSet& apis, |
838 const URLPatternSet& explicit_hosts, | 839 const URLPatternSet& explicit_hosts, |
839 const URLPatternSet& scriptable_hosts) { | 840 const URLPatternSet& scriptable_hosts) { |
840 const Extension* extension = extensions_.GetByID(extension_id); | 841 const Extension* extension = extensions_.GetByID(extension_id); |
841 if (!extension) | 842 if (!extension) |
842 return; | 843 return; |
843 | 844 |
844 scoped_refptr<const ExtensionPermissionSet> delta = | 845 scoped_refptr<const PermissionSet> delta = |
845 new ExtensionPermissionSet(apis, explicit_hosts, scriptable_hosts); | 846 new PermissionSet(apis, explicit_hosts, scriptable_hosts); |
846 scoped_refptr<const ExtensionPermissionSet> old_active = | 847 scoped_refptr<const PermissionSet> old_active = |
847 extension->GetActivePermissions(); | 848 extension->GetActivePermissions(); |
848 UpdatedExtensionPermissionsInfo::Reason reason = | 849 UpdatedExtensionPermissionsInfo::Reason reason = |
849 static_cast<UpdatedExtensionPermissionsInfo::Reason>(reason_id); | 850 static_cast<UpdatedExtensionPermissionsInfo::Reason>(reason_id); |
850 | 851 |
851 const ExtensionPermissionSet* new_active = NULL; | 852 const PermissionSet* new_active = NULL; |
852 switch (reason) { | 853 switch (reason) { |
853 case UpdatedExtensionPermissionsInfo::ADDED: | 854 case UpdatedExtensionPermissionsInfo::ADDED: |
854 new_active = ExtensionPermissionSet::CreateUnion(old_active, delta); | 855 new_active = PermissionSet::CreateUnion(old_active, delta); |
855 break; | 856 break; |
856 case UpdatedExtensionPermissionsInfo::REMOVED: | 857 case UpdatedExtensionPermissionsInfo::REMOVED: |
857 new_active = ExtensionPermissionSet::CreateDifference(old_active, delta); | 858 new_active = PermissionSet::CreateDifference(old_active, delta); |
858 break; | 859 break; |
859 } | 860 } |
860 | 861 |
861 extension->SetActivePermissions(new_active); | 862 extension->SetActivePermissions(new_active); |
862 AddOrRemoveOriginPermissions(reason, extension, explicit_hosts); | 863 AddOrRemoveOriginPermissions(reason, extension, explicit_hosts); |
863 } | 864 } |
864 | 865 |
865 void ExtensionDispatcher::OnUpdateTabSpecificPermissions( | 866 void ExtensionDispatcher::OnUpdateTabSpecificPermissions( |
866 int page_id, | 867 int page_id, |
867 int tab_id, | 868 int tab_id, |
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1016 // APIs, they don't get extension bindings injected. If we end up here it | 1017 // APIs, they don't get extension bindings injected. If we end up here it |
1017 // means that a sandboxed page somehow managed to invoke an API anyway, so | 1018 // means that a sandboxed page somehow managed to invoke an API anyway, so |
1018 // we should abort. | 1019 // we should abort. |
1019 WebKit::WebFrame* frame = context->web_frame(); | 1020 WebKit::WebFrame* frame = context->web_frame(); |
1020 ExtensionURLInfo url_info(frame->document().securityOrigin(), | 1021 ExtensionURLInfo url_info(frame->document().securityOrigin(), |
1021 UserScriptSlave::GetDataSourceURLForFrame(frame)); | 1022 UserScriptSlave::GetDataSourceURLForFrame(frame)); |
1022 CHECK(!extensions_.IsSandboxedPage(url_info)); | 1023 CHECK(!extensions_.IsSandboxedPage(url_info)); |
1023 | 1024 |
1024 return true; | 1025 return true; |
1025 } | 1026 } |
OLD | NEW |