Chromium Code Reviews| 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/extensions/api/web_request/web_request_api.h" | 5 #include "chrome/browser/extensions/api/web_request/web_request_api.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/bind_helpers.h" | 10 #include "base/bind_helpers.h" |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 73 using extensions::Feature; | 73 using extensions::Feature; |
| 74 using extensions::web_navigation_api_helpers::GetFrameId; | 74 using extensions::web_navigation_api_helpers::GetFrameId; |
| 75 | 75 |
| 76 namespace helpers = extension_web_request_api_helpers; | 76 namespace helpers = extension_web_request_api_helpers; |
| 77 namespace keys = extension_web_request_api_constants; | 77 namespace keys = extension_web_request_api_constants; |
| 78 namespace web_request = extensions::api::web_request; | 78 namespace web_request = extensions::api::web_request; |
| 79 namespace declarative_keys = extensions::declarative_webrequest_constants; | 79 namespace declarative_keys = extensions::declarative_webrequest_constants; |
| 80 | 80 |
| 81 namespace { | 81 namespace { |
| 82 | 82 |
| 83 const char kWebRequest[] = "webRequest"; | |
| 84 const char kWebView[] = "webview"; | |
| 85 | |
| 83 // List of all the webRequest events. | 86 // List of all the webRequest events. |
| 84 const char* const kWebRequestEvents[] = { | 87 const char* const kWebRequestEvents[] = { |
| 85 keys::kOnBeforeRedirectEvent, | 88 keys::kOnBeforeRedirectEvent, |
| 86 keys::kOnBeforeRequestEvent, | 89 keys::kOnBeforeRequestEvent, |
| 87 keys::kOnBeforeSendHeadersEvent, | 90 keys::kOnBeforeSendHeadersEvent, |
| 88 keys::kOnCompletedEvent, | 91 keys::kOnCompletedEvent, |
| 89 keys::kOnErrorOccurredEvent, | 92 keys::kOnErrorOccurredEvent, |
| 90 keys::kOnSendHeadersEvent, | 93 keys::kOnSendHeadersEvent, |
| 91 keys::kOnAuthRequiredEvent, | 94 keys::kOnAuthRequiredEvent, |
| 92 keys::kOnResponseStartedEvent, | 95 keys::kOnResponseStartedEvent, |
| (...skipping 24 matching lines...) Expand all Loading... | |
| 117 case ExtensionWebRequestEventRouter::kOnErrorOccurred: | 120 case ExtensionWebRequestEventRouter::kOnErrorOccurred: |
| 118 return keys::kOnErrorOccurred; | 121 return keys::kOnErrorOccurred; |
| 119 case ExtensionWebRequestEventRouter::kOnCompleted: | 122 case ExtensionWebRequestEventRouter::kOnCompleted: |
| 120 return keys::kOnCompleted; | 123 return keys::kOnCompleted; |
| 121 } | 124 } |
| 122 NOTREACHED(); | 125 NOTREACHED(); |
| 123 return "Not reached"; | 126 return "Not reached"; |
| 124 } | 127 } |
| 125 | 128 |
| 126 bool IsWebRequestEvent(const std::string& event_name) { | 129 bool IsWebRequestEvent(const std::string& event_name) { |
| 130 std::string web_request_event_name(event_name); | |
| 131 if (web_request_event_name.find(kWebView) != std::string::npos) | |
| 132 web_request_event_name.replace(0, sizeof(kWebView) - 1, kWebRequest); | |
| 127 return std::find(kWebRequestEvents, ARRAYEND(kWebRequestEvents), | 133 return std::find(kWebRequestEvents, ARRAYEND(kWebRequestEvents), |
| 128 event_name) != ARRAYEND(kWebRequestEvents); | 134 web_request_event_name) != ARRAYEND(kWebRequestEvents); |
| 129 } | 135 } |
| 130 | 136 |
| 131 // Returns whether |request| has been triggered by an extension in | 137 // Returns whether |request| has been triggered by an extension in |
| 132 // |extension_info_map|. | 138 // |extension_info_map|. |
| 133 bool IsRequestFromExtension(const net::URLRequest* request, | 139 bool IsRequestFromExtension(const net::URLRequest* request, |
| 134 const ExtensionInfoMap* extension_info_map) { | 140 const ExtensionInfoMap* extension_info_map) { |
| 135 // |extension_info_map| is NULL for system-level requests. | 141 // |extension_info_map| is NULL for system-level requests. |
| 136 if (!extension_info_map) | 142 if (!extension_info_map) |
| 137 return false; | 143 return false; |
| 138 | 144 |
| (...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 368 | 374 |
| 369 // Represents a single unique listener to an event, along with whatever filter | 375 // Represents a single unique listener to an event, along with whatever filter |
| 370 // parameters and extra_info_spec were specified at the time the listener was | 376 // parameters and extra_info_spec were specified at the time the listener was |
| 371 // added. | 377 // added. |
| 372 struct ExtensionWebRequestEventRouter::EventListener { | 378 struct ExtensionWebRequestEventRouter::EventListener { |
| 373 std::string extension_id; | 379 std::string extension_id; |
| 374 std::string extension_name; | 380 std::string extension_name; |
| 375 std::string sub_event_name; | 381 std::string sub_event_name; |
| 376 RequestFilter filter; | 382 RequestFilter filter; |
| 377 int extra_info_spec; | 383 int extra_info_spec; |
| 378 int target_process_id; | 384 int caller_process_id; |
|
Matt Perry
2013/02/06 22:40:24
nit: embedder_process_id
Fady Samuel
2013/05/15 21:58:53
Done.
| |
| 379 int target_route_id; | 385 int caller_routing_id; |
| 386 int web_view_instance_id; | |
| 380 base::WeakPtr<IPC::Sender> ipc_sender; | 387 base::WeakPtr<IPC::Sender> ipc_sender; |
| 381 mutable std::set<uint64> blocked_requests; | 388 mutable std::set<uint64> blocked_requests; |
| 382 | 389 |
| 383 // Comparator to work with std::set. | 390 // Comparator to work with std::set. |
| 384 bool operator<(const EventListener& that) const { | 391 bool operator<(const EventListener& that) const { |
| 385 if (extension_id < that.extension_id) | 392 if (extension_id < that.extension_id) |
| 386 return true; | 393 return true; |
| 387 if (extension_id == that.extension_id && | 394 if (extension_id == that.extension_id && |
| 388 sub_event_name < that.sub_event_name) | 395 sub_event_name < that.sub_event_name) |
| 389 return true; | 396 return true; |
| (...skipping 740 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1130 } | 1137 } |
| 1131 | 1138 |
| 1132 bool ExtensionWebRequestEventRouter::AddEventListener( | 1139 bool ExtensionWebRequestEventRouter::AddEventListener( |
| 1133 void* profile, | 1140 void* profile, |
| 1134 const std::string& extension_id, | 1141 const std::string& extension_id, |
| 1135 const std::string& extension_name, | 1142 const std::string& extension_name, |
| 1136 const std::string& event_name, | 1143 const std::string& event_name, |
| 1137 const std::string& sub_event_name, | 1144 const std::string& sub_event_name, |
| 1138 const RequestFilter& filter, | 1145 const RequestFilter& filter, |
| 1139 int extra_info_spec, | 1146 int extra_info_spec, |
| 1140 int target_process_id, | 1147 int caller_process_id, |
| 1141 int target_route_id, | 1148 int caller_routing_id, |
| 1149 int web_view_instance_id, | |
| 1142 base::WeakPtr<IPC::Sender> ipc_sender) { | 1150 base::WeakPtr<IPC::Sender> ipc_sender) { |
| 1151 | |
| 1143 if (!IsWebRequestEvent(event_name)) | 1152 if (!IsWebRequestEvent(event_name)) |
| 1144 return false; | 1153 return false; |
| 1145 | 1154 |
| 1146 EventListener listener; | 1155 EventListener listener; |
| 1147 listener.extension_id = extension_id; | 1156 listener.extension_id = extension_id; |
| 1148 listener.extension_name = extension_name; | 1157 listener.extension_name = extension_name; |
| 1149 listener.sub_event_name = sub_event_name; | 1158 listener.sub_event_name = sub_event_name; |
| 1150 listener.filter = filter; | 1159 listener.filter = filter; |
| 1151 listener.extra_info_spec = extra_info_spec; | 1160 listener.extra_info_spec = extra_info_spec; |
| 1152 listener.ipc_sender = ipc_sender; | 1161 listener.ipc_sender = ipc_sender; |
| 1153 listener.target_process_id = target_process_id; | 1162 listener.caller_process_id = caller_process_id; |
| 1154 listener.target_route_id = target_route_id; | 1163 listener.caller_routing_id = caller_routing_id; |
| 1164 listener.web_view_instance_id = web_view_instance_id; | |
| 1155 | 1165 |
| 1156 if (listeners_[profile][event_name].count(listener) != 0u) { | 1166 if (listeners_[profile][event_name].count(listener) != 0u) { |
| 1157 // This is likely an abuse of the API by a malicious extension. | 1167 // This is likely an abuse of the API by a malicious extension. |
| 1158 return false; | 1168 return false; |
| 1159 } | 1169 } |
| 1160 listeners_[profile][event_name].insert(listener); | 1170 listeners_[profile][event_name].insert(listener); |
| 1161 return true; | 1171 return true; |
| 1162 } | 1172 } |
| 1163 | 1173 |
| 1164 void ExtensionWebRequestEventRouter::RemoveEventListener( | 1174 void ExtensionWebRequestEventRouter::RemoveEventListener( |
| (...skipping 25 matching lines...) Expand all Loading... | |
| 1190 for (std::set<uint64>::iterator it = found->blocked_requests.begin(); | 1200 for (std::set<uint64>::iterator it = found->blocked_requests.begin(); |
| 1191 it != found->blocked_requests.end(); ++it) { | 1201 it != found->blocked_requests.end(); ++it) { |
| 1192 DecrementBlockCount(profile, extension_id, event_name, *it, NULL); | 1202 DecrementBlockCount(profile, extension_id, event_name, *it, NULL); |
| 1193 } | 1203 } |
| 1194 | 1204 |
| 1195 listeners_[profile][event_name].erase(listener); | 1205 listeners_[profile][event_name].erase(listener); |
| 1196 | 1206 |
| 1197 helpers::ClearCacheOnNavigation(); | 1207 helpers::ClearCacheOnNavigation(); |
| 1198 } | 1208 } |
| 1199 | 1209 |
| 1210 void ExtensionWebRequestEventRouter::RemoveWebViewEventListeners( | |
|
Matt Perry
2013/02/06 22:40:24
Are you sure this is necessary? When a context goe
Fady Samuel
2013/05/15 21:58:53
Yes, this is necessary because the listeners a <we
Matt Perry
2013/05/16 21:16:38
I don't understand what you mean.
To clarify my c
| |
| 1211 void* profile, | |
| 1212 const std::string& extension_id, | |
| 1213 int embedder_process_id, | |
| 1214 int embedder_routing_id, | |
| 1215 int web_view_instance_id) { | |
| 1216 // Iterate over all listeners of all WebRequest events to delete | |
| 1217 // any listeners that belong to the provided <webview>. | |
| 1218 bool found_listeners = false; | |
| 1219 ListenerMapForProfile& map_for_profile = listeners_[profile]; | |
| 1220 for (ListenerMapForProfile::iterator event_iter = map_for_profile.begin(); | |
| 1221 event_iter != map_for_profile.end(); ++event_iter) { | |
| 1222 std::vector<EventListener> listeners_to_delete; | |
| 1223 const std::string& event_name = event_iter->first; | |
| 1224 std::set<EventListener>& listeners = event_iter->second; | |
| 1225 for (std::set<EventListener>::iterator listener_iter = listeners.begin(); | |
| 1226 listener_iter != listeners.end(); ++listener_iter) { | |
| 1227 const EventListener& listener = *listener_iter; | |
| 1228 if (listener.caller_process_id == embedder_process_id && | |
| 1229 listener.caller_routing_id == embedder_routing_id && | |
| 1230 listener.web_view_instance_id == web_view_instance_id) | |
| 1231 listeners_to_delete.push_back(listener); | |
| 1232 } | |
| 1233 for (size_t i = 0; i < listeners_to_delete.size(); ++i) { | |
| 1234 found_listeners = true; | |
| 1235 EventListener& listener = listeners_to_delete[i]; | |
| 1236 listeners.erase(listeners_to_delete[i]); | |
| 1237 // Unblock any request that this event listener may have been blocking. | |
| 1238 for (std::set<uint64>::iterator it = listener.blocked_requests.begin(); | |
| 1239 it != listener.blocked_requests.end(); ++it) { | |
| 1240 DecrementBlockCount(profile, extension_id, event_name, *it, NULL); | |
| 1241 } | |
| 1242 } | |
| 1243 } | |
| 1244 if (found_listeners) | |
| 1245 helpers::ClearCacheOnNavigation(); | |
| 1246 } | |
| 1247 | |
| 1200 void ExtensionWebRequestEventRouter::OnOTRProfileCreated( | 1248 void ExtensionWebRequestEventRouter::OnOTRProfileCreated( |
| 1201 void* original_profile, void* otr_profile) { | 1249 void* original_profile, void* otr_profile) { |
| 1202 cross_profile_map_[original_profile] = otr_profile; | 1250 cross_profile_map_[original_profile] = otr_profile; |
| 1203 cross_profile_map_[otr_profile] = original_profile; | 1251 cross_profile_map_[otr_profile] = original_profile; |
| 1204 } | 1252 } |
| 1205 | 1253 |
| 1206 void ExtensionWebRequestEventRouter::OnOTRProfileDestroyed( | 1254 void ExtensionWebRequestEventRouter::OnOTRProfileDestroyed( |
| 1207 void* original_profile, void* otr_profile) { | 1255 void* original_profile, void* otr_profile) { |
| 1208 cross_profile_map_.erase(otr_profile); | 1256 cross_profile_map_.erase(otr_profile); |
| 1209 cross_profile_map_.erase(original_profile); | 1257 cross_profile_map_.erase(original_profile); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1267 int tab_id, | 1315 int tab_id, |
| 1268 int window_id, | 1316 int window_id, |
| 1269 int render_process_host_id, | 1317 int render_process_host_id, |
| 1270 int routing_id, | 1318 int routing_id, |
| 1271 ResourceType::Type resource_type, | 1319 ResourceType::Type resource_type, |
| 1272 bool is_async_request, | 1320 bool is_async_request, |
| 1273 bool is_request_from_extension, | 1321 bool is_request_from_extension, |
| 1274 int* extra_info_spec, | 1322 int* extra_info_spec, |
| 1275 std::vector<const ExtensionWebRequestEventRouter::EventListener*>* | 1323 std::vector<const ExtensionWebRequestEventRouter::EventListener*>* |
| 1276 matching_listeners) { | 1324 matching_listeners) { |
| 1325 std::string web_request_event_name(event_name); | |
| 1277 ExtensionRendererState::WebViewInfo web_view_info; | 1326 ExtensionRendererState::WebViewInfo web_view_info; |
| 1278 bool is_guest = ExtensionRendererState::GetInstance()-> | 1327 bool is_guest = ExtensionRendererState::GetInstance()-> |
| 1279 GetWebViewInfo(render_process_host_id, routing_id, &web_view_info); | 1328 GetWebViewInfo(render_process_host_id, routing_id, &web_view_info); |
| 1280 std::set<EventListener>& listeners = listeners_[profile][event_name]; | 1329 if (is_guest) |
| 1330 web_request_event_name.replace(0, sizeof(kWebRequest) - 1, kWebView); | |
| 1331 | |
| 1332 std::set<EventListener>& listeners = | |
| 1333 listeners_[profile][web_request_event_name]; | |
| 1281 for (std::set<EventListener>::iterator it = listeners.begin(); | 1334 for (std::set<EventListener>::iterator it = listeners.begin(); |
| 1282 it != listeners.end(); ++it) { | 1335 it != listeners.end(); ++it) { |
| 1283 if (!it->ipc_sender.get()) { | 1336 if (!it->ipc_sender.get()) { |
| 1284 // The IPC sender has been deleted. This listener will be removed soon | 1337 // The IPC sender has been deleted. This listener will be removed soon |
| 1285 // via a call to RemoveEventListener. For now, just skip it. | 1338 // via a call to RemoveEventListener. For now, just skip it. |
| 1286 continue; | 1339 continue; |
| 1287 } | 1340 } |
| 1288 | 1341 |
| 1289 if (is_guest && (it->target_process_id != render_process_host_id|| | 1342 if (is_guest && |
| 1290 it->target_route_id != routing_id)) | 1343 (it->caller_process_id != web_view_info.embedder_process_id || |
| 1344 it->caller_routing_id != web_view_info.embedder_routing_id || | |
| 1345 it->web_view_instance_id != web_view_info.web_view_instance_id)) | |
| 1291 continue; | 1346 continue; |
| 1292 | 1347 |
| 1293 if (!it->filter.urls.is_empty() && !it->filter.urls.MatchesURL(url)) | 1348 if (!it->filter.urls.is_empty() && !it->filter.urls.MatchesURL(url)) |
| 1294 continue; | 1349 continue; |
| 1295 if (it->filter.tab_id != -1 && tab_id != it->filter.tab_id) | 1350 if (it->filter.tab_id != -1 && tab_id != it->filter.tab_id) |
| 1296 continue; | 1351 continue; |
| 1297 if (it->filter.window_id != -1 && window_id != it->filter.window_id) | 1352 if (it->filter.window_id != -1 && window_id != it->filter.window_id) |
| 1298 continue; | 1353 continue; |
| 1299 if (!it->filter.types.empty() && | 1354 if (!it->filter.types.empty() && |
| 1300 std::find(it->filter.types.begin(), it->filter.types.end(), | 1355 std::find(it->filter.types.begin(), it->filter.types.end(), |
| 1301 resource_type) == it->filter.types.end()) | 1356 resource_type) == it->filter.types.end()) |
| 1302 continue; | 1357 continue; |
| 1303 | 1358 |
| 1304 if (!WebRequestPermissions::CanExtensionAccessURL( | 1359 if (!is_guest && !WebRequestPermissions::CanExtensionAccessURL( |
| 1305 extension_info_map, it->extension_id, url, crosses_incognito, true)) | 1360 extension_info_map, it->extension_id, url, crosses_incognito, true)) |
| 1306 continue; | 1361 continue; |
| 1307 | 1362 |
| 1308 bool blocking_listener = | 1363 bool blocking_listener = |
| 1309 (it->extra_info_spec & | 1364 (it->extra_info_spec & |
| 1310 (ExtraInfoSpec::BLOCKING | ExtraInfoSpec::ASYNC_BLOCKING)) != 0; | 1365 (ExtraInfoSpec::BLOCKING | ExtraInfoSpec::ASYNC_BLOCKING)) != 0; |
| 1311 | 1366 |
| 1312 // We do not want to notify extensions about XHR requests that are | 1367 // We do not want to notify extensions about XHR requests that are |
| 1313 // triggered by themselves. This is a workaround to prevent deadlocks | 1368 // triggered by themselves. This is a workaround to prevent deadlocks |
| 1314 // in case of synchronous XHR requests that block the extension renderer | 1369 // in case of synchronous XHR requests that block the extension renderer |
| (...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1819 ExtensionWebRequestEventRouter::ExtraInfoSpec::InitFromValue( | 1874 ExtensionWebRequestEventRouter::ExtraInfoSpec::InitFromValue( |
| 1820 *value, &extra_info_spec)); | 1875 *value, &extra_info_spec)); |
| 1821 } | 1876 } |
| 1822 | 1877 |
| 1823 std::string event_name; | 1878 std::string event_name; |
| 1824 EXTENSION_FUNCTION_VALIDATE(args_->GetString(3, &event_name)); | 1879 EXTENSION_FUNCTION_VALIDATE(args_->GetString(3, &event_name)); |
| 1825 | 1880 |
| 1826 std::string sub_event_name; | 1881 std::string sub_event_name; |
| 1827 EXTENSION_FUNCTION_VALIDATE(args_->GetString(4, &sub_event_name)); | 1882 EXTENSION_FUNCTION_VALIDATE(args_->GetString(4, &sub_event_name)); |
| 1828 | 1883 |
| 1884 int web_view_instance_id = 0; | |
| 1885 EXTENSION_FUNCTION_VALIDATE(args_->GetInteger(5, &web_view_instance_id)); | |
| 1886 | |
| 1887 int caller_process_id = ipc_sender()->render_process_id(); | |
| 1888 int caller_routing_id = routing_id(); | |
| 1889 | |
| 1829 const Extension* extension = | 1890 const Extension* extension = |
| 1830 extension_info_map()->extensions().GetByID(extension_id()); | 1891 extension_info_map()->extensions().GetByID(extension_id()); |
| 1831 std::string extension_name = extension ? extension->name() : extension_id(); | 1892 std::string extension_name = extension ? extension->name() : extension_id(); |
| 1832 | 1893 |
| 1894 bool is_guest = web_view_instance_id != 0; | |
| 1833 // We check automatically whether the extension has the 'webRequest' | 1895 // We check automatically whether the extension has the 'webRequest' |
| 1834 // permission. For blocking calls we require the additional permission | 1896 // permission. For blocking calls we require the additional permission |
| 1835 // 'webRequestBlocking'. | 1897 // 'webRequestBlocking'. |
| 1836 if ((extra_info_spec & | 1898 if ((!is_guest && extra_info_spec & |
| 1837 (ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING | | 1899 (ExtensionWebRequestEventRouter::ExtraInfoSpec::BLOCKING | |
| 1838 ExtensionWebRequestEventRouter::ExtraInfoSpec::ASYNC_BLOCKING)) && | 1900 ExtensionWebRequestEventRouter::ExtraInfoSpec::ASYNC_BLOCKING)) && |
| 1839 !extension->HasAPIPermission( | 1901 !extension->HasAPIPermission( |
| 1840 extensions::APIPermission::kWebRequestBlocking)) { | 1902 extensions::APIPermission::kWebRequestBlocking)) { |
| 1841 error_ = keys::kBlockingPermissionRequired; | 1903 error_ = keys::kBlockingPermissionRequired; |
| 1842 return false; | 1904 return false; |
| 1843 } | 1905 } |
| 1844 | 1906 |
| 1845 // We allow to subscribe to patterns that are broader than the host | 1907 // We allow to subscribe to patterns that are broader than the host |
| 1846 // permissions. E.g., we could subscribe to http://www.example.com/* | 1908 // permissions. E.g., we could subscribe to http://www.example.com/* |
| 1847 // while having host permissions for http://www.example.com/foo/* and | 1909 // while having host permissions for http://www.example.com/foo/* and |
| 1848 // http://www.example.com/bar/*. | 1910 // http://www.example.com/bar/*. |
| 1849 // For this reason we do only a coarse check here to warn the extension | 1911 // For this reason we do only a coarse check here to warn the extension |
| 1850 // developer if he does something obviously wrong. | 1912 // developer if he does something obviously wrong. |
| 1851 if (extension->GetEffectiveHostPermissions().is_empty()) { | 1913 if (!is_guest && extension->GetEffectiveHostPermissions().is_empty()) { |
| 1852 error_ = keys::kHostPermissionsRequired; | 1914 error_ = keys::kHostPermissionsRequired; |
| 1853 return false; | 1915 return false; |
| 1854 } | 1916 } |
| 1855 | 1917 |
| 1856 bool success = | 1918 bool success = |
| 1857 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( | 1919 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( |
| 1858 profile_id(), extension_id(), extension_name, | 1920 profile_id(), extension_id(), extension_name, |
| 1859 event_name, sub_event_name, filter, | 1921 event_name, sub_event_name, filter, extra_info_spec, |
| 1860 extra_info_spec, -1, -1, ipc_sender_weak()); | 1922 caller_process_id, caller_routing_id, web_view_instance_id, |
| 1923 ipc_sender_weak()); | |
| 1861 EXTENSION_FUNCTION_VALIDATE(success); | 1924 EXTENSION_FUNCTION_VALIDATE(success); |
| 1862 | 1925 |
| 1863 helpers::ClearCacheOnNavigation(); | 1926 helpers::ClearCacheOnNavigation(); |
| 1864 | 1927 |
| 1865 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( | 1928 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, base::Bind( |
| 1866 &NotifyWebRequestAPIUsed, | 1929 &NotifyWebRequestAPIUsed, |
| 1867 profile_id(), make_scoped_refptr(GetExtension()))); | 1930 profile_id(), make_scoped_refptr(GetExtension()))); |
| 1868 | 1931 |
| 1869 return true; | 1932 return true; |
| 1870 } | 1933 } |
| (...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 2030 } else if ((*it)->name().find("AdBlock") != std::string::npos) { | 2093 } else if ((*it)->name().find("AdBlock") != std::string::npos) { |
| 2031 adblock = true; | 2094 adblock = true; |
| 2032 } else { | 2095 } else { |
| 2033 other = true; | 2096 other = true; |
| 2034 } | 2097 } |
| 2035 } | 2098 } |
| 2036 } | 2099 } |
| 2037 | 2100 |
| 2038 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); | 2101 host->Send(new ExtensionMsg_UsingWebRequestAPI(adblock, adblock_plus, other)); |
| 2039 } | 2102 } |
| OLD | NEW |