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

Side by Side Diff: extensions/renderer/dispatcher.cc

Issue 890083002: [Extensions] Propagate activeTab hosts to extension background pages (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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
« no previous file with comments | « extensions/renderer/dispatcher.h ('k') | extensions/renderer/extension_helper.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "extensions/renderer/dispatcher.h" 5 #include "extensions/renderer/dispatcher.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/callback.h" 8 #include "base/callback.h"
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/debug/alias.h" 10 #include "base/debug/alias.h"
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 #include "extensions/renderer/render_view_observer_natives.h" 72 #include "extensions/renderer/render_view_observer_natives.h"
73 #include "extensions/renderer/request_sender.h" 73 #include "extensions/renderer/request_sender.h"
74 #include "extensions/renderer/runtime_custom_bindings.h" 74 #include "extensions/renderer/runtime_custom_bindings.h"
75 #include "extensions/renderer/safe_builtins.h" 75 #include "extensions/renderer/safe_builtins.h"
76 #include "extensions/renderer/script_context.h" 76 #include "extensions/renderer/script_context.h"
77 #include "extensions/renderer/script_context_set.h" 77 #include "extensions/renderer/script_context_set.h"
78 #include "extensions/renderer/script_injection.h" 78 #include "extensions/renderer/script_injection.h"
79 #include "extensions/renderer/script_injection_manager.h" 79 #include "extensions/renderer/script_injection_manager.h"
80 #include "extensions/renderer/send_request_natives.h" 80 #include "extensions/renderer/send_request_natives.h"
81 #include "extensions/renderer/set_icon_natives.h" 81 #include "extensions/renderer/set_icon_natives.h"
82 #include "extensions/renderer/tab_finder.h"
82 #include "extensions/renderer/test_features_native_handler.h" 83 #include "extensions/renderer/test_features_native_handler.h"
83 #include "extensions/renderer/user_gestures_native_handler.h" 84 #include "extensions/renderer/user_gestures_native_handler.h"
84 #include "extensions/renderer/utils_native_handler.h" 85 #include "extensions/renderer/utils_native_handler.h"
85 #include "extensions/renderer/v8_context_native_handler.h" 86 #include "extensions/renderer/v8_context_native_handler.h"
86 #include "grit/extensions_renderer_resources.h" 87 #include "grit/extensions_renderer_resources.h"
87 #include "third_party/WebKit/public/platform/WebString.h" 88 #include "third_party/WebKit/public/platform/WebString.h"
88 #include "third_party/WebKit/public/platform/WebURLRequest.h" 89 #include "third_party/WebKit/public/platform/WebURLRequest.h"
89 #include "third_party/WebKit/public/web/WebCustomElement.h" 90 #include "third_party/WebKit/public/web/WebCustomElement.h"
90 #include "third_party/WebKit/public/web/WebDataSource.h" 91 #include "third_party/WebKit/public/web/WebDataSource.h"
91 #include "third_party/WebKit/public/web/WebDocument.h" 92 #include "third_party/WebKit/public/web/WebDocument.h"
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
797 IPC_MESSAGE_HANDLER(ExtensionMsg_SetChannel, OnSetChannel) 798 IPC_MESSAGE_HANDLER(ExtensionMsg_SetChannel, OnSetChannel)
798 IPC_MESSAGE_HANDLER(ExtensionMsg_SetFunctionNames, OnSetFunctionNames) 799 IPC_MESSAGE_HANDLER(ExtensionMsg_SetFunctionNames, OnSetFunctionNames)
799 IPC_MESSAGE_HANDLER(ExtensionMsg_SetScriptingWhitelist, 800 IPC_MESSAGE_HANDLER(ExtensionMsg_SetScriptingWhitelist,
800 OnSetScriptingWhitelist) 801 OnSetScriptingWhitelist)
801 IPC_MESSAGE_HANDLER(ExtensionMsg_SetSystemFont, OnSetSystemFont) 802 IPC_MESSAGE_HANDLER(ExtensionMsg_SetSystemFont, OnSetSystemFont)
802 IPC_MESSAGE_HANDLER(ExtensionMsg_ShouldSuspend, OnShouldSuspend) 803 IPC_MESSAGE_HANDLER(ExtensionMsg_ShouldSuspend, OnShouldSuspend)
803 IPC_MESSAGE_HANDLER(ExtensionMsg_Suspend, OnSuspend) 804 IPC_MESSAGE_HANDLER(ExtensionMsg_Suspend, OnSuspend)
804 IPC_MESSAGE_HANDLER(ExtensionMsg_TransferBlobs, OnTransferBlobs) 805 IPC_MESSAGE_HANDLER(ExtensionMsg_TransferBlobs, OnTransferBlobs)
805 IPC_MESSAGE_HANDLER(ExtensionMsg_Unloaded, OnUnloaded) 806 IPC_MESSAGE_HANDLER(ExtensionMsg_Unloaded, OnUnloaded)
806 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdatePermissions, OnUpdatePermissions) 807 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdatePermissions, OnUpdatePermissions)
808 IPC_MESSAGE_HANDLER(ExtensionMsg_UpdateTabSpecificPermissions,
809 OnUpdateTabSpecificPermissions)
810 IPC_MESSAGE_HANDLER(ExtensionMsg_ClearTabSpecificPermissions,
811 OnClearTabSpecificPermissions)
807 IPC_MESSAGE_HANDLER(ExtensionMsg_UsingWebRequestAPI, OnUsingWebRequestAPI) 812 IPC_MESSAGE_HANDLER(ExtensionMsg_UsingWebRequestAPI, OnUsingWebRequestAPI)
808 IPC_MESSAGE_FORWARD(ExtensionMsg_WatchPages, 813 IPC_MESSAGE_FORWARD(ExtensionMsg_WatchPages,
809 content_watcher_.get(), 814 content_watcher_.get(),
810 ContentWatcher::OnWatchPages) 815 ContentWatcher::OnWatchPages)
811 IPC_MESSAGE_UNHANDLED(handled = false) 816 IPC_MESSAGE_UNHANDLED(handled = false)
812 IPC_END_MESSAGE_MAP() 817 IPC_END_MESSAGE_MAP()
813 818
814 return handled; 819 return handled;
815 } 820 }
816 821
(...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after
1058 if (!extension) 1063 if (!extension)
1059 return; 1064 return;
1060 1065
1061 scoped_refptr<const PermissionSet> active = 1066 scoped_refptr<const PermissionSet> active =
1062 params.active_permissions.ToPermissionSet(); 1067 params.active_permissions.ToPermissionSet();
1063 scoped_refptr<const PermissionSet> withheld = 1068 scoped_refptr<const PermissionSet> withheld =
1064 params.withheld_permissions.ToPermissionSet(); 1069 params.withheld_permissions.ToPermissionSet();
1065 1070
1066 if (is_webkit_initialized_) { 1071 if (is_webkit_initialized_) {
1067 UpdateOriginPermissions( 1072 UpdateOriginPermissions(
1068 extension, 1073 extension->url(),
1069 extension->permissions_data()->GetEffectiveHostPermissions(), 1074 extension->permissions_data()->GetEffectiveHostPermissions(),
1070 active->effective_hosts()); 1075 active->effective_hosts());
1071 } 1076 }
1072 1077
1073 extension->permissions_data()->SetPermissions(active, withheld); 1078 extension->permissions_data()->SetPermissions(active, withheld);
1074 UpdateBindings(extension->id()); 1079 UpdateBindings(extension->id());
1075 } 1080 }
1076 1081
1082 void Dispatcher::OnUpdateTabSpecificPermissions(const GURL& visible_url,
1083 const std::string& extension_id,
1084 const URLPatternSet& new_hosts,
1085 bool update_origin_whitelist,
1086 int tab_id) {
1087 // Check against the URL to avoid races. If we can't find the tab, it's
1088 // because this is an extension's background page (run in a different
1089 // process) - in this case, we can't perform the security check. However,
1090 // since activeTab is only granted via user action, this isn't a huge concern.
1091 content::RenderView* render_view = TabFinder::Find(tab_id);
1092 if (render_view &&
1093 render_view->GetWebView()->mainFrame()->document().url() != visible_url) {
1094 return;
1095 }
1096
1097 const Extension* extension = extensions_.GetByID(extension_id);
1098 if (!extension)
1099 return;
1100
1101 URLPatternSet old_effective =
1102 extension->permissions_data()->GetEffectiveHostPermissions();
1103 extension->permissions_data()->UpdateTabSpecificPermissions(
1104 tab_id,
1105 new extensions::PermissionSet(extensions::APIPermissionSet(),
1106 extensions::ManifestPermissionSet(),
1107 new_hosts,
1108 extensions::URLPatternSet()));
1109
1110 if (is_webkit_initialized_ && update_origin_whitelist) {
1111 UpdateOriginPermissions(
1112 extension->url(),
1113 old_effective,
1114 extension->permissions_data()->GetEffectiveHostPermissions());
1115 }
1116 }
1117
1118 void Dispatcher::OnClearTabSpecificPermissions(
1119 const std::vector<std::string>& extension_ids,
1120 bool update_origin_whitelist,
1121 int tab_id) {
1122 for (const std::string& id : extension_ids) {
1123 const Extension* extension = extensions_.GetByID(id);
1124 if (extension) {
1125 URLPatternSet old_effective =
1126 extension->permissions_data()->GetEffectiveHostPermissions();
1127 extension->permissions_data()->ClearTabSpecificPermissions(tab_id);
1128 if (is_webkit_initialized_ && update_origin_whitelist) {
1129 UpdateOriginPermissions(
1130 extension->url(),
1131 old_effective,
1132 extension->permissions_data()->GetEffectiveHostPermissions());
1133 }
1134 }
1135 }
1136 }
1137
1077 void Dispatcher::OnUsingWebRequestAPI(bool webrequest_used) { 1138 void Dispatcher::OnUsingWebRequestAPI(bool webrequest_used) {
1078 webrequest_used_ = webrequest_used; 1139 webrequest_used_ = webrequest_used;
1079 } 1140 }
1080 1141
1081 void Dispatcher::OnUserScriptsUpdated( 1142 void Dispatcher::OnUserScriptsUpdated(
1082 const std::set<std::string>& changed_extensions, 1143 const std::set<std::string>& changed_extensions,
1083 const std::vector<UserScript*>& scripts) { 1144 const std::vector<UserScript*>& scripts) {
1084 UpdateActiveExtensions(); 1145 UpdateActiveExtensions();
1085 } 1146 }
1086 1147
1087 void Dispatcher::UpdateActiveExtensions() { 1148 void Dispatcher::UpdateActiveExtensions() {
1088 std::set<std::string> active_extensions = active_extension_ids_; 1149 std::set<std::string> active_extensions = active_extension_ids_;
1089 user_script_set_manager_->GetAllActiveExtensionIds(&active_extensions); 1150 user_script_set_manager_->GetAllActiveExtensionIds(&active_extensions);
1090 delegate_->OnActiveExtensionsUpdated(active_extensions); 1151 delegate_->OnActiveExtensionsUpdated(active_extensions);
1091 } 1152 }
1092 1153
1093 void Dispatcher::InitOriginPermissions(const Extension* extension) { 1154 void Dispatcher::InitOriginPermissions(const Extension* extension) {
1094 delegate_->InitOriginPermissions(extension, 1155 delegate_->InitOriginPermissions(extension,
1095 IsExtensionActive(extension->id())); 1156 IsExtensionActive(extension->id()));
1096 UpdateOriginPermissions( 1157 UpdateOriginPermissions(
1097 extension, 1158 extension->url(),
1098 URLPatternSet(), // No old permissions. 1159 URLPatternSet(), // No old permissions.
1099 extension->permissions_data()->GetEffectiveHostPermissions()); 1160 extension->permissions_data()->GetEffectiveHostPermissions());
1100 } 1161 }
1101 1162
1102 void Dispatcher::UpdateOriginPermissions( 1163 void Dispatcher::UpdateOriginPermissions(const GURL& extension_url,
1103 const Extension* extension, 1164 const URLPatternSet& old_patterns,
1104 const URLPatternSet& old_patterns, 1165 const URLPatternSet& new_patterns) {
1105 const URLPatternSet& new_patterns) {
1106 static const char* kSchemes[] = { 1166 static const char* kSchemes[] = {
1107 url::kHttpScheme, 1167 url::kHttpScheme,
1108 url::kHttpsScheme, 1168 url::kHttpsScheme,
1109 url::kFileScheme, 1169 url::kFileScheme,
1110 content::kChromeUIScheme, 1170 content::kChromeUIScheme,
1111 url::kFtpScheme, 1171 url::kFtpScheme,
1112 }; 1172 };
1113 for (size_t i = 0; i < arraysize(kSchemes); ++i) { 1173 for (size_t i = 0; i < arraysize(kSchemes); ++i) {
1114 const char* scheme = kSchemes[i]; 1174 const char* scheme = kSchemes[i];
1115 // Remove all old patterns... 1175 // Remove all old patterns...
1116 for (URLPatternSet::const_iterator pattern = old_patterns.begin(); 1176 for (URLPatternSet::const_iterator pattern = old_patterns.begin();
1117 pattern != old_patterns.end(); ++pattern) { 1177 pattern != old_patterns.end(); ++pattern) {
1118 if (pattern->MatchesScheme(scheme)) { 1178 if (pattern->MatchesScheme(scheme)) {
1119 WebSecurityPolicy::removeOriginAccessWhitelistEntry( 1179 WebSecurityPolicy::removeOriginAccessWhitelistEntry(
1120 extension->url(), 1180 extension_url,
1121 WebString::fromUTF8(scheme), 1181 WebString::fromUTF8(scheme),
1122 WebString::fromUTF8(pattern->host()), 1182 WebString::fromUTF8(pattern->host()),
1123 pattern->match_subdomains()); 1183 pattern->match_subdomains());
1124 } 1184 }
1125 } 1185 }
1126 // ...And add the new ones. 1186 // ...And add the new ones.
1127 for (URLPatternSet::const_iterator pattern = new_patterns.begin(); 1187 for (URLPatternSet::const_iterator pattern = new_patterns.begin();
1128 pattern != new_patterns.end(); ++pattern) { 1188 pattern != new_patterns.end(); ++pattern) {
1129 if (pattern->MatchesScheme(scheme)) { 1189 if (pattern->MatchesScheme(scheme)) {
1130 WebSecurityPolicy::addOriginAccessWhitelistEntry( 1190 WebSecurityPolicy::addOriginAccessWhitelistEntry(
1131 extension->url(), 1191 extension_url,
1132 WebString::fromUTF8(scheme), 1192 WebString::fromUTF8(scheme),
1133 WebString::fromUTF8(pattern->host()), 1193 WebString::fromUTF8(pattern->host()),
1134 pattern->match_subdomains()); 1194 pattern->match_subdomains());
1135 } 1195 }
1136 } 1196 }
1137 } 1197 }
1138 } 1198 }
1139 1199
1140 void Dispatcher::EnableCustomElementWhiteList() { 1200 void Dispatcher::EnableCustomElementWhiteList() {
1141 blink::WebCustomElement::addEmbedderCustomElementName("appview"); 1201 blink::WebCustomElement::addEmbedderCustomElementName("appview");
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
1478 return v8::Handle<v8::Object>(); 1538 return v8::Handle<v8::Object>();
1479 1539
1480 if (bind_name) 1540 if (bind_name)
1481 *bind_name = split.back(); 1541 *bind_name = split.back();
1482 1542
1483 return bind_object.IsEmpty() ? AsObjectOrEmpty(GetOrCreateChrome(context)) 1543 return bind_object.IsEmpty() ? AsObjectOrEmpty(GetOrCreateChrome(context))
1484 : bind_object; 1544 : bind_object;
1485 } 1545 }
1486 1546
1487 } // namespace extensions 1547 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/renderer/dispatcher.h ('k') | extensions/renderer/extension_helper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698