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

Side by Side Diff: extensions/browser/api/web_request/web_request_api.cc

Issue 1272373003: Add extension event histogram values for messaging, webRequest, and webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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 "extensions/browser/api/web_request/web_request_api.h" 5 #include "extensions/browser/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"
11 #include "base/json/json_writer.h" 11 #include "base/json/json_writer.h"
12 #include "base/lazy_instance.h" 12 #include "base/lazy_instance.h"
13 #include "base/macros.h"
13 #include "base/metrics/histogram.h" 14 #include "base/metrics/histogram.h"
14 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
15 #include "base/strings/string_util.h" 16 #include "base/strings/string_util.h"
16 #include "base/strings/utf_string_conversions.h" 17 #include "base/strings/utf_string_conversions.h"
17 #include "base/time/time.h" 18 #include "base/time/time.h"
18 #include "base/values.h" 19 #include "base/values.h"
19 #include "content/public/browser/browser_message_filter.h" 20 #include "content/public/browser/browser_message_filter.h"
20 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
21 #include "content/public/browser/render_frame_host.h" 22 #include "content/public/browser/render_frame_host.h"
22 #include "content/public/browser/render_process_host.h" 23 #include "content/public/browser/render_process_host.h"
23 #include "content/public/browser/resource_request_info.h" 24 #include "content/public/browser/resource_request_info.h"
24 #include "content/public/browser/user_metrics.h" 25 #include "content/public/browser/user_metrics.h"
25 #include "extensions/browser/api/activity_log/web_request_constants.h" 26 #include "extensions/browser/api/activity_log/web_request_constants.h"
26 #include "extensions/browser/api/declarative/rules_registry_service.h" 27 #include "extensions/browser/api/declarative/rules_registry_service.h"
27 #include "extensions/browser/api/declarative_webrequest/request_stage.h" 28 #include "extensions/browser/api/declarative_webrequest/request_stage.h"
28 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h" 29 #include "extensions/browser/api/declarative_webrequest/webrequest_constants.h"
29 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr y.h" 30 #include "extensions/browser/api/declarative_webrequest/webrequest_rules_registr y.h"
30 #include "extensions/browser/api/extensions_api_client.h" 31 #include "extensions/browser/api/extensions_api_client.h"
31 #include "extensions/browser/api/web_request/upload_data_presenter.h" 32 #include "extensions/browser/api/web_request/upload_data_presenter.h"
32 #include "extensions/browser/api/web_request/web_request_api_constants.h" 33 #include "extensions/browser/api/web_request/web_request_api_constants.h"
33 #include "extensions/browser/api/web_request/web_request_api_helpers.h" 34 #include "extensions/browser/api/web_request/web_request_api_helpers.h"
34 #include "extensions/browser/api/web_request/web_request_event_router_delegate.h " 35 #include "extensions/browser/api/web_request/web_request_event_router_delegate.h "
35 #include "extensions/browser/api/web_request/web_request_time_tracker.h" 36 #include "extensions/browser/api/web_request/web_request_time_tracker.h"
36 #include "extensions/browser/event_router.h" 37 #include "extensions/browser/event_router.h"
37 #include "extensions/browser/extension_prefs.h" 38 #include "extensions/browser/extension_prefs.h"
38 #include "extensions/browser/extension_registry.h" 39 #include "extensions/browser/extension_registry.h"
39 #include "extensions/browser/extension_system.h" 40 #include "extensions/browser/extension_system.h"
40 #include "extensions/browser/extensions_browser_client.h" 41 #include "extensions/browser/extensions_browser_client.h"
42 #include "extensions/browser/guest_view/guest_view_events.h"
41 #include "extensions/browser/guest_view/web_view/web_view_constants.h" 43 #include "extensions/browser/guest_view/web_view/web_view_constants.h"
42 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h" 44 #include "extensions/browser/guest_view/web_view/web_view_renderer_state.h"
43 #include "extensions/browser/info_map.h" 45 #include "extensions/browser/info_map.h"
44 #include "extensions/browser/io_thread_extension_message_filter.h" 46 #include "extensions/browser/io_thread_extension_message_filter.h"
45 #include "extensions/browser/runtime_data.h" 47 #include "extensions/browser/runtime_data.h"
46 #include "extensions/browser/warning_service.h" 48 #include "extensions/browser/warning_service.h"
47 #include "extensions/browser/warning_set.h" 49 #include "extensions/browser/warning_set.h"
48 #include "extensions/common/api/web_request.h" 50 #include "extensions/common/api/web_request.h"
49 #include "extensions/common/error_utils.h" 51 #include "extensions/common/error_utils.h"
50 #include "extensions/common/event_filtering_info.h" 52 #include "extensions/common/event_filtering_info.h"
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
89 web_request::OnBeforeRequest::kEventName, 91 web_request::OnBeforeRequest::kEventName,
90 keys::kOnBeforeSendHeadersEvent, 92 keys::kOnBeforeSendHeadersEvent,
91 keys::kOnCompletedEvent, 93 keys::kOnCompletedEvent,
92 web_request::OnErrorOccurred::kEventName, 94 web_request::OnErrorOccurred::kEventName,
93 keys::kOnSendHeadersEvent, 95 keys::kOnSendHeadersEvent,
94 keys::kOnAuthRequiredEvent, 96 keys::kOnAuthRequiredEvent,
95 keys::kOnResponseStartedEvent, 97 keys::kOnResponseStartedEvent,
96 keys::kOnHeadersReceivedEvent, 98 keys::kOnHeadersReceivedEvent,
97 }; 99 };
98 100
99 const size_t kWebRequestEventsLength = arraysize(kWebRequestEvents);
100
101 const char* GetRequestStageAsString( 101 const char* GetRequestStageAsString(
102 ExtensionWebRequestEventRouter::EventTypes type) { 102 ExtensionWebRequestEventRouter::EventTypes type) {
103 switch (type) { 103 switch (type) {
104 case ExtensionWebRequestEventRouter::kInvalidEvent: 104 case ExtensionWebRequestEventRouter::kInvalidEvent:
105 return "Invalid"; 105 return "Invalid";
106 case ExtensionWebRequestEventRouter::kOnBeforeRequest: 106 case ExtensionWebRequestEventRouter::kOnBeforeRequest:
107 return keys::kOnBeforeRequest; 107 return keys::kOnBeforeRequest;
108 case ExtensionWebRequestEventRouter::kOnBeforeSendHeaders: 108 case ExtensionWebRequestEventRouter::kOnBeforeSendHeaders:
109 return keys::kOnBeforeSendHeaders; 109 return keys::kOnBeforeSendHeaders;
110 case ExtensionWebRequestEventRouter::kOnSendHeaders: 110 case ExtensionWebRequestEventRouter::kOnSendHeaders:
(...skipping 20 matching lines...) Expand all
131 } 131 }
132 132
133 bool IsWebRequestEvent(const std::string& event_name) { 133 bool IsWebRequestEvent(const std::string& event_name) {
134 std::string web_request_event_name(event_name); 134 std::string web_request_event_name(event_name);
135 if (base::StartsWith(web_request_event_name, 135 if (base::StartsWith(web_request_event_name,
136 webview::kWebViewEventPrefix, 136 webview::kWebViewEventPrefix,
137 base::CompareCase::SENSITIVE)) { 137 base::CompareCase::SENSITIVE)) {
138 web_request_event_name.replace( 138 web_request_event_name.replace(
139 0, strlen(webview::kWebViewEventPrefix), kWebRequestEventPrefix); 139 0, strlen(webview::kWebViewEventPrefix), kWebRequestEventPrefix);
140 } 140 }
141 return std::find( 141 auto web_request_events_end =
142 kWebRequestEvents, 142 kWebRequestEvents + arraysize(kWebRequestEvents);
143 kWebRequestEvents + kWebRequestEventsLength, 143 return std::find(kWebRequestEvents, web_request_events_end,
144 web_request_event_name) != (kWebRequestEvents + kWebRequestEventsLength); 144 web_request_event_name) != web_request_events_end;
145 } 145 }
146 146
147 // Returns whether |request| has been triggered by an extension in 147 // Returns whether |request| has been triggered by an extension in
148 // |extension_info_map|. 148 // |extension_info_map|.
149 bool IsRequestFromExtension(const net::URLRequest* request, 149 bool IsRequestFromExtension(const net::URLRequest* request,
150 const InfoMap* extension_info_map) { 150 const InfoMap* extension_info_map) {
151 // |extension_info_map| is NULL for system-level requests. 151 // |extension_info_map| is NULL for system-level requests.
152 if (!extension_info_map) 152 if (!extension_info_map)
153 return false; 153 return false;
154 154
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 const std::string& extension_id, 365 const std::string& extension_id,
366 const std::string& sub_event_name, 366 const std::string& sub_event_name,
367 int embedder_process_id, 367 int embedder_process_id,
368 int web_view_instance_id) { 368 int web_view_instance_id) {
369 DCHECK_CURRENTLY_ON(BrowserThread::IO); 369 DCHECK_CURRENTLY_ON(BrowserThread::IO);
370 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener( 370 ExtensionWebRequestEventRouter::GetInstance()->RemoveEventListener(
371 browser_context, extension_id, sub_event_name, 371 browser_context, extension_id, sub_event_name,
372 embedder_process_id, web_view_instance_id); 372 embedder_process_id, web_view_instance_id);
373 } 373 }
374 374
375 events::HistogramValue GetEventHistogramValue(const std::string& event_name) {
376 // Event names will either be webRequest events, or guest view (probably web
377 // view) events that map to webRequest events. Check webRequest first.
378 static struct ValueAndName {
379 events::HistogramValue histogram_value;
380 const char* event_name;
381 } values_and_names[] = {
382 {events::WEB_REQUEST_ON_BEFORE_REDIRECT, keys::kOnBeforeRedirectEvent},
383 {events::WEB_REQUEST_ON_BEFORE_REQUEST,
384 web_request::OnBeforeRequest::kEventName},
385 {events::WEB_REQUEST_ON_BEFORE_SEND_HEADERS,
386 keys::kOnBeforeSendHeadersEvent},
387 {events::WEB_REQUEST_ON_COMPLETED, keys::kOnCompletedEvent},
388 {events::WEB_REQUEST_ON_ERROR_OCCURRED,
389 web_request::OnErrorOccurred::kEventName},
390 {events::WEB_REQUEST_ON_SEND_HEADERS, keys::kOnSendHeadersEvent},
391 {events::WEB_REQUEST_ON_AUTH_REQUIRED, keys::kOnAuthRequiredEvent},
392 {events::WEB_REQUEST_ON_RESPONSE_STARTED, keys::kOnResponseStartedEvent},
393 {events::WEB_REQUEST_ON_HEADERS_RECEIVED, keys::kOnHeadersReceivedEvent}};
394 COMPILE_ASSERT(arraysize(kWebRequestEvents) == arraysize(values_and_names),
395 "kWebRequestEvents and values_and_names must be the same");
396 for (const ValueAndName& value_and_name : values_and_names) {
397 if (value_and_name.event_name == event_name)
398 return value_and_name.histogram_value;
399 }
400
401 // If there is no webRequest event, it might be a guest view webRequest event.
402 events::HistogramValue guest_view_histogram_value =
403 guest_view_events::GetEventHistogramValue(event_name);
404 if (guest_view_histogram_value != events::UNKNOWN)
405 return guest_view_histogram_value;
406
407 // There is no histogram value for this event name. It should be added to
408 // either the mapping here, or in guest_view_events.
409 NOTREACHED() << "Event " << event_name << " must have a histogram value";
410 return events::UNKNOWN;
411 };
412
375 } // namespace 413 } // namespace
376 414
377 WebRequestAPI::WebRequestAPI(content::BrowserContext* context) 415 WebRequestAPI::WebRequestAPI(content::BrowserContext* context)
378 : browser_context_(context) { 416 : browser_context_(context) {
379 EventRouter* event_router = EventRouter::Get(browser_context_); 417 EventRouter* event_router = EventRouter::Get(browser_context_);
380 for (size_t i = 0; i < arraysize(kWebRequestEvents); ++i) { 418 for (size_t i = 0; i < arraysize(kWebRequestEvents); ++i) {
381 // Observe the webRequest event. 419 // Observe the webRequest event.
382 std::string event_name = kWebRequestEvents[i]; 420 std::string event_name = kWebRequestEvents[i];
383 event_router->RegisterObserver(this, event_name); 421 event_router->RegisterObserver(this, event_name);
384 422
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
422 460
423 // Represents a single unique listener to an event, along with whatever filter 461 // Represents a single unique listener to an event, along with whatever filter
424 // parameters and extra_info_spec were specified at the time the listener was 462 // parameters and extra_info_spec were specified at the time the listener was
425 // added. 463 // added.
426 // NOTE(benjhayden) New APIs should not use this sub_event_name trick! It does 464 // NOTE(benjhayden) New APIs should not use this sub_event_name trick! It does
427 // not play well with event pages. See downloads.onDeterminingFilename and 465 // not play well with event pages. See downloads.onDeterminingFilename and
428 // ExtensionDownloadsEventRouter for an alternative approach. 466 // ExtensionDownloadsEventRouter for an alternative approach.
429 struct ExtensionWebRequestEventRouter::EventListener { 467 struct ExtensionWebRequestEventRouter::EventListener {
430 std::string extension_id; 468 std::string extension_id;
431 std::string extension_name; 469 std::string extension_name;
470 events::HistogramValue histogram_value;
432 std::string sub_event_name; 471 std::string sub_event_name;
433 RequestFilter filter; 472 RequestFilter filter;
434 int extra_info_spec; 473 int extra_info_spec;
435 int embedder_process_id; 474 int embedder_process_id;
436 int web_view_instance_id; 475 int web_view_instance_id;
437 base::WeakPtr<IPC::Sender> ipc_sender; 476 base::WeakPtr<IPC::Sender> ipc_sender;
438 mutable std::set<uint64> blocked_requests; 477 mutable std::set<uint64> blocked_requests;
439 478
440 // Comparator to work with std::set. 479 // Comparator to work with std::set.
441 bool operator<(const EventListener& that) const { 480 bool operator<(const EventListener& that) const {
442 if (extension_id != that.extension_id) 481 if (extension_id != that.extension_id)
443 return extension_id < that.extension_id; 482 return extension_id < that.extension_id;
444 483
445 if (sub_event_name != that.sub_event_name) 484 if (sub_event_name != that.sub_event_name)
446 return sub_event_name < that.sub_event_name; 485 return sub_event_name < that.sub_event_name;
447 486
448 if (embedder_process_id != that.embedder_process_id) 487 if (embedder_process_id != that.embedder_process_id)
449 return embedder_process_id < that.embedder_process_id; 488 return embedder_process_id < that.embedder_process_id;
450 489
451 if (web_view_instance_id != that.web_view_instance_id) 490 if (web_view_instance_id != that.web_view_instance_id)
452 return web_view_instance_id < that.web_view_instance_id; 491 return web_view_instance_id < that.web_view_instance_id;
453 492
454 return false; 493 return false;
455 } 494 }
456 495
457 EventListener() : 496 EventListener()
458 extra_info_spec(0), 497 : histogram_value(events::UNKNOWN),
459 embedder_process_id(0), 498 extra_info_spec(0),
460 web_view_instance_id(0) {} 499 embedder_process_id(0),
500 web_view_instance_id(0) {}
461 }; 501 };
462 502
463 // Contains info about requests that are blocked waiting for a response from 503 // Contains info about requests that are blocked waiting for a response from
464 // an extension. 504 // an extension.
465 struct ExtensionWebRequestEventRouter::BlockedRequest { 505 struct ExtensionWebRequestEventRouter::BlockedRequest {
466 // The request that is being blocked. 506 // The request that is being blocked.
467 net::URLRequest* request; 507 net::URLRequest* request;
468 508
469 // Whether the request originates from an incognito tab. 509 // Whether the request originates from an incognito tab.
470 bool is_incognito; 510 bool is_incognito;
(...skipping 707 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 } 1218 }
1179 1219
1180 bool ExtensionWebRequestEventRouter::DispatchEvent( 1220 bool ExtensionWebRequestEventRouter::DispatchEvent(
1181 void* browser_context, 1221 void* browser_context,
1182 net::URLRequest* request, 1222 net::URLRequest* request,
1183 const std::vector<const EventListener*>& listeners, 1223 const std::vector<const EventListener*>& listeners,
1184 const base::ListValue& args) { 1224 const base::ListValue& args) {
1185 // TODO(mpcomplete): Consider consolidating common (extension_id,json_args) 1225 // TODO(mpcomplete): Consider consolidating common (extension_id,json_args)
1186 // pairs into a single message sent to a list of sub_event_names. 1226 // pairs into a single message sent to a list of sub_event_names.
1187 int num_handlers_blocking = 0; 1227 int num_handlers_blocking = 0;
1188 for (std::vector<const EventListener*>::const_iterator it = listeners.begin(); 1228 for (const EventListener* listener : listeners) {
1189 it != listeners.end(); ++it) {
1190 // Filter out the optional keys that this listener didn't request. 1229 // Filter out the optional keys that this listener didn't request.
1191 scoped_ptr<base::ListValue> args_filtered(args.DeepCopy()); 1230 scoped_ptr<base::ListValue> args_filtered(args.DeepCopy());
1192 base::DictionaryValue* dict = NULL; 1231 base::DictionaryValue* dict = NULL;
1193 CHECK(args_filtered->GetDictionary(0, &dict) && dict); 1232 CHECK(args_filtered->GetDictionary(0, &dict) && dict);
1194 if (!((*it)->extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS)) 1233 if (!(listener->extra_info_spec & ExtraInfoSpec::REQUEST_HEADERS))
1195 dict->Remove(keys::kRequestHeadersKey, NULL); 1234 dict->Remove(keys::kRequestHeadersKey, NULL);
1196 if (!((*it)->extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS)) 1235 if (!(listener->extra_info_spec & ExtraInfoSpec::RESPONSE_HEADERS))
1197 dict->Remove(keys::kResponseHeadersKey, NULL); 1236 dict->Remove(keys::kResponseHeadersKey, NULL);
1198 1237
1199 EventRouter::DispatchEvent( 1238 EventRouter::DispatchEventToSender(
1200 (*it)->ipc_sender.get(), browser_context, (*it)->extension_id, 1239 listener->ipc_sender.get(), browser_context, GURL(),
1201 (*it)->sub_event_name, args_filtered.Pass(), 1240 listener->extension_id, listener->histogram_value,
1241 listener->sub_event_name, args_filtered.Pass(),
1202 EventRouter::USER_GESTURE_UNKNOWN, EventFilteringInfo()); 1242 EventRouter::USER_GESTURE_UNKNOWN, EventFilteringInfo());
1203 if ((*it)->extra_info_spec & 1243 if (listener->extra_info_spec &
1204 (ExtraInfoSpec::BLOCKING | ExtraInfoSpec::ASYNC_BLOCKING)) { 1244 (ExtraInfoSpec::BLOCKING | ExtraInfoSpec::ASYNC_BLOCKING)) {
1205 (*it)->blocked_requests.insert(request->identifier()); 1245 listener->blocked_requests.insert(request->identifier());
1206 // If this is the first delegate blocking the request, go ahead and log 1246 // If this is the first delegate blocking the request, go ahead and log
1207 // it. 1247 // it.
1208 if (num_handlers_blocking == 0) { 1248 if (num_handlers_blocking == 0) {
1209 std::string delegate_info = 1249 std::string delegate_info = l10n_util::GetStringFUTF8(
1210 l10n_util::GetStringFUTF8(IDS_LOAD_STATE_PARAMETER_EXTENSION, 1250 IDS_LOAD_STATE_PARAMETER_EXTENSION,
1211 base::UTF8ToUTF16((*it)->extension_name)); 1251 base::UTF8ToUTF16(listener->extension_name));
1212 // LobAndReport allows extensions that block requests to be displayed in 1252 // LobAndReport allows extensions that block requests to be displayed in
1213 // the load status bar. 1253 // the load status bar.
1214 request->LogAndReportBlockedBy(delegate_info.c_str()); 1254 request->LogAndReportBlockedBy(delegate_info.c_str());
1215 } 1255 }
1216 ++num_handlers_blocking; 1256 ++num_handlers_blocking;
1217 } 1257 }
1218 } 1258 }
1219 1259
1220 if (num_handlers_blocking > 0) { 1260 if (num_handlers_blocking > 0) {
1221 blocked_requests_[request->identifier()].request = request; 1261 blocked_requests_[request->identifier()].request = request;
(...skipping 28 matching lines...) Expand all
1250 found->blocked_requests.erase(request_id); 1290 found->blocked_requests.erase(request_id);
1251 1291
1252 DecrementBlockCount( 1292 DecrementBlockCount(
1253 browser_context, extension_id, event_name, request_id, response); 1293 browser_context, extension_id, event_name, request_id, response);
1254 } 1294 }
1255 1295
1256 bool ExtensionWebRequestEventRouter::AddEventListener( 1296 bool ExtensionWebRequestEventRouter::AddEventListener(
1257 void* browser_context, 1297 void* browser_context,
1258 const std::string& extension_id, 1298 const std::string& extension_id,
1259 const std::string& extension_name, 1299 const std::string& extension_name,
1300 events::HistogramValue histogram_value,
1260 const std::string& event_name, 1301 const std::string& event_name,
1261 const std::string& sub_event_name, 1302 const std::string& sub_event_name,
1262 const RequestFilter& filter, 1303 const RequestFilter& filter,
1263 int extra_info_spec, 1304 int extra_info_spec,
1264 int embedder_process_id, 1305 int embedder_process_id,
1265 int web_view_instance_id, 1306 int web_view_instance_id,
1266 base::WeakPtr<IPC::Sender> ipc_sender) { 1307 base::WeakPtr<IPC::Sender> ipc_sender) {
1267 if (!IsWebRequestEvent(event_name)) 1308 if (!IsWebRequestEvent(event_name))
1268 return false; 1309 return false;
1269 1310
1270 EventListener listener; 1311 EventListener listener;
1271 listener.extension_id = extension_id; 1312 listener.extension_id = extension_id;
1272 listener.extension_name = extension_name; 1313 listener.extension_name = extension_name;
1314 listener.histogram_value = histogram_value;
1273 listener.sub_event_name = sub_event_name; 1315 listener.sub_event_name = sub_event_name;
1274 listener.filter = filter; 1316 listener.filter = filter;
1275 listener.extra_info_spec = extra_info_spec; 1317 listener.extra_info_spec = extra_info_spec;
1276 listener.ipc_sender = ipc_sender; 1318 listener.ipc_sender = ipc_sender;
1277 listener.embedder_process_id = embedder_process_id; 1319 listener.embedder_process_id = embedder_process_id;
1278 listener.web_view_instance_id = web_view_instance_id; 1320 listener.web_view_instance_id = web_view_instance_id;
1279 if (listener.web_view_instance_id) { 1321 if (listener.web_view_instance_id) {
1280 content::RecordAction( 1322 content::RecordAction(
1281 base::UserMetricsAction("WebView.WebRequest.AddListener")); 1323 base::UserMetricsAction("WebView.WebRequest.AddListener"));
1282 } 1324 }
(...skipping 939 matching lines...) Expand 10 before | Expand all | Expand 10 after
2222 ->GetEffectiveHostPermissions() 2264 ->GetEffectiveHostPermissions()
2223 .is_empty()) { 2265 .is_empty()) {
2224 error_ = keys::kHostPermissionsRequired; 2266 error_ = keys::kHostPermissionsRequired;
2225 return false; 2267 return false;
2226 } 2268 }
2227 } 2269 }
2228 2270
2229 bool success = 2271 bool success =
2230 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener( 2272 ExtensionWebRequestEventRouter::GetInstance()->AddEventListener(
2231 profile_id(), extension_id_safe(), extension_name, 2273 profile_id(), extension_id_safe(), extension_name,
2232 event_name, sub_event_name, filter, extra_info_spec, 2274 GetEventHistogramValue(event_name), event_name, sub_event_name,
2233 embedder_process_id, web_view_instance_id, ipc_sender_weak()); 2275 filter, extra_info_spec, embedder_process_id, web_view_instance_id,
2276 ipc_sender_weak());
2234 EXTENSION_FUNCTION_VALIDATE(success); 2277 EXTENSION_FUNCTION_VALIDATE(success);
2235 2278
2236 helpers::ClearCacheOnNavigation(); 2279 helpers::ClearCacheOnNavigation();
2237 2280
2238 if (!extension_id_safe().empty()) { 2281 if (!extension_id_safe().empty()) {
2239 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE, 2282 BrowserThread::PostTask(BrowserThread::UI, FROM_HERE,
2240 base::Bind(&helpers::NotifyWebRequestAPIUsed, 2283 base::Bind(&helpers::NotifyWebRequestAPIUsed,
2241 profile_id(), extension_id_safe())); 2284 profile_id(), extension_id_safe()));
2242 } 2285 }
2243 2286
(...skipping 194 matching lines...) Expand 10 before | Expand all | Expand 10 after
2438 // Continue gracefully. 2481 // Continue gracefully.
2439 RunSync(); 2482 RunSync();
2440 } 2483 }
2441 2484
2442 bool WebRequestHandlerBehaviorChangedFunction::RunSync() { 2485 bool WebRequestHandlerBehaviorChangedFunction::RunSync() {
2443 helpers::ClearCacheOnNavigation(); 2486 helpers::ClearCacheOnNavigation();
2444 return true; 2487 return true;
2445 } 2488 }
2446 2489
2447 } // namespace extensions 2490 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698