Index: extensions/browser/api/web_request/web_request_api.cc |
diff --git a/extensions/browser/api/web_request/web_request_api.cc b/extensions/browser/api/web_request/web_request_api.cc |
index b81023248535d3064adaf563327f06568d444b64..0c3fb78717d20ac09b539d4cc93826101816c520 100644 |
--- a/extensions/browser/api/web_request/web_request_api.cc |
+++ b/extensions/browser/api/web_request/web_request_api.cc |
@@ -87,7 +87,21 @@ namespace web_request = api::web_request; |
namespace { |
+// Describes the action taken by the Web Request API for a given stage of a web |
+// request. |
+// These values are written to logs. New enum values can be added, but existing |
+// enum values must never be renumbered or deleted and reused. |
+enum RequestAction { |
+ CANCEL = 0, |
+ REDIRECT = 1, |
+ MODIFY_REQUEST_HEADERS = 2, |
+ MODIFY_RESPONSE_HEADERS = 3, |
+ SET_AUTH_CREDENTIALS = 4, |
+ MAX |
+}; |
+ |
const char kWebRequestEventPrefix[] = "webRequest."; |
+const char kWebRequestActionUMA[] = "Extensions.WebRequestAction"; |
// List of all the webRequest events. |
const char* const kWebRequestEvents[] = { |
@@ -1800,6 +1814,8 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas( |
base::Time::Now() - blocked_request.blocking_time; |
request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); |
+ bool request_headers_modified = false; |
+ bool response_headers_modified = false; |
bool credentials_set = false; |
deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); |
@@ -1817,17 +1833,15 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas( |
} else if (blocked_request.event == kOnBeforeSendHeaders) { |
CHECK(!blocked_request.callback.is_null()); |
helpers::MergeOnBeforeSendHeadersResponses( |
- blocked_request.response_deltas, |
- blocked_request.request_headers, |
- &warnings, |
- blocked_request.net_log); |
+ blocked_request.response_deltas, blocked_request.request_headers, |
+ &warnings, blocked_request.net_log, &request_headers_modified); |
} else if (blocked_request.event == kOnHeadersReceived) { |
CHECK(!blocked_request.callback.is_null()); |
helpers::MergeOnHeadersReceivedResponses( |
blocked_request.request->url(), blocked_request.response_deltas, |
blocked_request.original_response_headers.get(), |
blocked_request.override_response_headers, blocked_request.new_url, |
- &warnings, blocked_request.net_log); |
+ &warnings, blocked_request.net_log, &response_headers_modified); |
} else if (blocked_request.event == kOnAuthRequired) { |
CHECK(blocked_request.callback.is_null()); |
CHECK(!blocked_request.auth_callback.is_null()); |
@@ -1850,11 +1864,39 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas( |
browser_context, warnings)); |
} |
- if (canceled) { |
+ const bool redirected = |
+ blocked_request.new_url && !blocked_request.new_url->is_empty(); |
+ |
+ if (canceled) |
request_time_tracker_->SetRequestCanceled(request_id); |
- } else if (blocked_request.new_url && |
- !blocked_request.new_url->is_empty()) { |
+ else if (redirected) |
request_time_tracker_->SetRequestRedirected(request_id); |
+ |
+ // Log UMA metrics. Note: We are not necessarily concerned with the final |
+ // action taken. Instead we are interested in how frequently the different |
+ // actions are used by extensions. |
Devlin
2017/02/25 18:39:34
nit: Might be worth explicitly calling out that mu
karandeepb
2017/02/28 00:56:45
Done.
|
+ if (canceled) { |
+ UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, RequestAction::CANCEL, |
+ RequestAction::MAX); |
Ilya Sherman
2017/02/27 19:29:25
Please create a wrapper for emitting to this histo
karandeepb
2017/02/28 00:56:45
Done.
|
+ } |
+ if (redirected) { |
+ UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, RequestAction::REDIRECT, |
+ RequestAction::MAX); |
+ } |
+ if (request_headers_modified) { |
+ UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, |
+ RequestAction::MODIFY_REQUEST_HEADERS, |
+ RequestAction::MAX); |
+ } |
+ if (response_headers_modified) { |
+ UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, |
+ RequestAction::MODIFY_RESPONSE_HEADERS, |
+ RequestAction::MAX); |
+ } |
+ if (credentials_set) { |
+ UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, |
+ RequestAction::SET_AUTH_CREDENTIALS, |
+ RequestAction::MAX); |
} |
// This triggers onErrorOccurred if canceled is true. |