| 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 ebe0c124f60d94d265035f5025fc78b9bed2f52f..fdf4e6d701d93372d6bb449e7bbf3a952ecc0cc0 100644
|
| --- a/extensions/browser/api/web_request/web_request_api.cc
|
| +++ b/extensions/browser/api/web_request/web_request_api.cc
|
| @@ -85,7 +85,23 @@ 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_REQUEST_COOKIES = 3,
|
| + MODIFY_RESPONSE_HEADERS = 4,
|
| + MODIFY_RESPONSE_COOKIES = 5,
|
| + SET_AUTH_CREDENTIALS = 6,
|
| + MAX
|
| +};
|
| +
|
| const char kWebRequestEventPrefix[] = "webRequest.";
|
| +const char kWebRequestActionUMA[] = "Extensions.WebRequestAction";
|
|
|
| // List of all the webRequest events.
|
| const char* const kWebRequestEvents[] = {
|
| @@ -1814,20 +1830,38 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas(
|
| blocked_request.net_log);
|
| } else if (blocked_request.event == kOnBeforeSendHeaders) {
|
| CHECK(!blocked_request.callback.is_null());
|
| + bool request_headers_modified = false;
|
| + bool request_cookies_modified = false;
|
| 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,
|
| + &request_cookies_modified);
|
| + if (request_headers_modified)
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
|
| + RequestAction::MODIFY_REQUEST_HEADERS,
|
| + RequestAction::MAX);
|
| + if (request_cookies_modified)
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
|
| + RequestAction::MODIFY_REQUEST_COOKIES,
|
| + RequestAction::MAX);
|
| } else if (blocked_request.event == kOnHeadersReceived) {
|
| CHECK(!blocked_request.callback.is_null());
|
| + bool response_headers_modified = false;
|
| + bool response_cookies_modified = false;
|
| helpers::MergeOnHeadersReceivedResponses(
|
| blocked_request.response_deltas,
|
| blocked_request.original_response_headers.get(),
|
| - blocked_request.override_response_headers,
|
| - blocked_request.new_url,
|
| - &warnings,
|
| - blocked_request.net_log);
|
| + blocked_request.override_response_headers, blocked_request.new_url,
|
| + &warnings, blocked_request.net_log, &response_headers_modified,
|
| + &response_cookies_modified);
|
| + if (response_headers_modified)
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
|
| + RequestAction::MODIFY_RESPONSE_HEADERS,
|
| + RequestAction::MAX);
|
| + if (response_cookies_modified)
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
|
| + RequestAction::MODIFY_RESPONSE_COOKIES,
|
| + RequestAction::MAX);
|
| } else if (blocked_request.event == kOnAuthRequired) {
|
| CHECK(blocked_request.callback.is_null());
|
| CHECK(!blocked_request.auth_callback.is_null());
|
| @@ -1852,9 +1886,16 @@ int ExtensionWebRequestEventRouter::ExecuteDeltas(
|
|
|
| if (canceled) {
|
| request_time_tracker_->SetRequestCanceled(request_id);
|
| - } else if (blocked_request.new_url &&
|
| - !blocked_request.new_url->is_empty()) {
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, RequestAction::CANCEL,
|
| + RequestAction::MAX);
|
| + } else if (blocked_request.new_url && !blocked_request.new_url->is_empty()) {
|
| request_time_tracker_->SetRequestRedirected(request_id);
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, RequestAction::REDIRECT,
|
| + RequestAction::MAX);
|
| + } else if (credentials_set) {
|
| + UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
|
| + RequestAction::SET_AUTH_CREDENTIALS,
|
| + RequestAction::MAX);
|
| }
|
|
|
| // This triggers onErrorOccurred if canceled is true.
|
|
|