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

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

Issue 2708923005: Extensions: Add metrics for Web Request API actions. (Closed)
Patch Set: -- Created 3 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
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 <stddef.h> 7 #include <stddef.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <memory> 10 #include <memory>
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
78 namespace helpers = extension_web_request_api_helpers; 78 namespace helpers = extension_web_request_api_helpers;
79 namespace keys = extension_web_request_api_constants; 79 namespace keys = extension_web_request_api_constants;
80 80
81 namespace extensions { 81 namespace extensions {
82 82
83 namespace declarative_keys = declarative_webrequest_constants; 83 namespace declarative_keys = declarative_webrequest_constants;
84 namespace web_request = api::web_request; 84 namespace web_request = api::web_request;
85 85
86 namespace { 86 namespace {
87 87
88 // Describes the action taken by the Web Request API for a given stage of a web
89 // request.
90 // These values are written to logs. New enum values can be added, but existing
91 // enum values must never be renumbered or deleted and reused.
92 enum RequestAction {
93 CANCEL = 0,
94 REDIRECT = 1,
95 MODIFY_REQUEST_HEADERS = 2,
96 MODIFY_REQUEST_COOKIES = 3,
97 MODIFY_RESPONSE_HEADERS = 4,
98 MODIFY_RESPONSE_COOKIES = 5,
99 SET_AUTH_CREDENTIALS = 6,
100 MAX
101 };
102
88 const char kWebRequestEventPrefix[] = "webRequest."; 103 const char kWebRequestEventPrefix[] = "webRequest.";
104 const char kWebRequestActionUMA[] = "Extensions.WebRequestAction";
89 105
90 // List of all the webRequest events. 106 // List of all the webRequest events.
91 const char* const kWebRequestEvents[] = { 107 const char* const kWebRequestEvents[] = {
92 keys::kOnBeforeRedirectEvent, 108 keys::kOnBeforeRedirectEvent,
93 web_request::OnBeforeRequest::kEventName, 109 web_request::OnBeforeRequest::kEventName,
94 keys::kOnBeforeSendHeadersEvent, 110 keys::kOnBeforeSendHeadersEvent,
95 keys::kOnCompletedEvent, 111 keys::kOnCompletedEvent,
96 web_request::OnErrorOccurred::kEventName, 112 web_request::OnErrorOccurred::kEventName,
97 keys::kOnSendHeadersEvent, 113 keys::kOnSendHeadersEvent,
98 keys::kOnAuthRequiredEvent, 114 keys::kOnAuthRequiredEvent,
(...skipping 1678 matching lines...) Expand 10 before | Expand all | Expand 10 after
1777 1793
1778 BrowserThread::PostTask( 1794 BrowserThread::PostTask(
1779 BrowserThread::UI, FROM_HERE, 1795 BrowserThread::UI, FROM_HERE,
1780 base::Bind(&SendOnMessageEventOnUI, browser_context, 1796 base::Bind(&SendOnMessageEventOnUI, browser_context,
1781 delta->extension_id, is_web_view_guest, 1797 delta->extension_id, is_web_view_guest,
1782 web_view_instance_id, base::Passed(&event_details))); 1798 web_view_instance_id, base::Passed(&event_details)));
1783 } 1799 }
1784 } 1800 }
1785 } 1801 }
1786 1802
1787 int ExtensionWebRequestEventRouter::ExecuteDeltas( 1803 int ExtensionWebRequestEventRouter::ExecuteDeltas(
karandeepb 2017/02/23 21:31:05 This will also include modifications done via the
1788 void* browser_context, 1804 void* browser_context,
1789 uint64_t request_id, 1805 uint64_t request_id,
1790 ExtensionNavigationUIData* navigation_ui_data, 1806 ExtensionNavigationUIData* navigation_ui_data,
1791 bool call_callback) { 1807 bool call_callback) {
1792 BlockedRequest& blocked_request = blocked_requests_[request_id]; 1808 BlockedRequest& blocked_request = blocked_requests_[request_id];
1793 CHECK_EQ(0, blocked_request.num_handlers_blocking); 1809 CHECK_EQ(0, blocked_request.num_handlers_blocking);
1794 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas; 1810 helpers::EventResponseDeltas& deltas = blocked_request.response_deltas;
1795 base::TimeDelta block_time = 1811 base::TimeDelta block_time =
1796 base::Time::Now() - blocked_request.blocking_time; 1812 base::Time::Now() - blocked_request.blocking_time;
1797 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time); 1813 request_time_tracker_->IncrementTotalBlockTime(request_id, block_time);
1798 1814
1799 bool credentials_set = false; 1815 bool credentials_set = false;
1800 1816
1801 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder); 1817 deltas.sort(&helpers::InDecreasingExtensionInstallationTimeOrder);
1802 1818
1803 bool canceled = false; 1819 bool canceled = false;
1804 helpers::MergeCancelOfResponses(blocked_request.response_deltas, &canceled, 1820 helpers::MergeCancelOfResponses(blocked_request.response_deltas, &canceled,
1805 blocked_request.net_log); 1821 blocked_request.net_log);
1806 1822
1807 WarningSet warnings; 1823 WarningSet warnings;
1808 if (blocked_request.event == kOnBeforeRequest) { 1824 if (blocked_request.event == kOnBeforeRequest) {
1809 CHECK(!blocked_request.callback.is_null()); 1825 CHECK(!blocked_request.callback.is_null());
1810 helpers::MergeOnBeforeRequestResponses( 1826 helpers::MergeOnBeforeRequestResponses(
1811 blocked_request.response_deltas, 1827 blocked_request.response_deltas,
1812 blocked_request.new_url, 1828 blocked_request.new_url,
1813 &warnings, 1829 &warnings,
1814 blocked_request.net_log); 1830 blocked_request.net_log);
1815 } else if (blocked_request.event == kOnBeforeSendHeaders) { 1831 } else if (blocked_request.event == kOnBeforeSendHeaders) {
1816 CHECK(!blocked_request.callback.is_null()); 1832 CHECK(!blocked_request.callback.is_null());
1833 bool request_headers_modified = false;
1834 bool request_cookies_modified = false;
1817 helpers::MergeOnBeforeSendHeadersResponses( 1835 helpers::MergeOnBeforeSendHeadersResponses(
1818 blocked_request.response_deltas, 1836 blocked_request.response_deltas, blocked_request.request_headers,
1819 blocked_request.request_headers, 1837 &warnings, blocked_request.net_log, &request_headers_modified,
1820 &warnings, 1838 &request_cookies_modified);
1821 blocked_request.net_log); 1839 if (request_headers_modified)
1840 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
1841 RequestAction::MODIFY_REQUEST_HEADERS,
1842 RequestAction::MAX);
1843 if (request_cookies_modified)
1844 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
1845 RequestAction::MODIFY_REQUEST_COOKIES,
1846 RequestAction::MAX);
1822 } else if (blocked_request.event == kOnHeadersReceived) { 1847 } else if (blocked_request.event == kOnHeadersReceived) {
1823 CHECK(!blocked_request.callback.is_null()); 1848 CHECK(!blocked_request.callback.is_null());
1849 bool response_headers_modified = false;
1850 bool response_cookies_modified = false;
1824 helpers::MergeOnHeadersReceivedResponses( 1851 helpers::MergeOnHeadersReceivedResponses(
1825 blocked_request.response_deltas, 1852 blocked_request.response_deltas,
1826 blocked_request.original_response_headers.get(), 1853 blocked_request.original_response_headers.get(),
1827 blocked_request.override_response_headers, 1854 blocked_request.override_response_headers, blocked_request.new_url,
1828 blocked_request.new_url, 1855 &warnings, blocked_request.net_log, &response_headers_modified,
1829 &warnings, 1856 &response_cookies_modified);
1830 blocked_request.net_log); 1857 if (response_headers_modified)
1858 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
1859 RequestAction::MODIFY_RESPONSE_HEADERS,
1860 RequestAction::MAX);
1861 if (response_cookies_modified)
1862 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
1863 RequestAction::MODIFY_RESPONSE_COOKIES,
1864 RequestAction::MAX);
1831 } else if (blocked_request.event == kOnAuthRequired) { 1865 } else if (blocked_request.event == kOnAuthRequired) {
1832 CHECK(blocked_request.callback.is_null()); 1866 CHECK(blocked_request.callback.is_null());
1833 CHECK(!blocked_request.auth_callback.is_null()); 1867 CHECK(!blocked_request.auth_callback.is_null());
1834 credentials_set = helpers::MergeOnAuthRequiredResponses( 1868 credentials_set = helpers::MergeOnAuthRequiredResponses(
1835 blocked_request.response_deltas, 1869 blocked_request.response_deltas,
1836 blocked_request.auth_credentials, 1870 blocked_request.auth_credentials,
1837 &warnings, 1871 &warnings,
1838 blocked_request.net_log); 1872 blocked_request.net_log);
1839 } else { 1873 } else {
1840 NOTREACHED(); 1874 NOTREACHED();
1841 } 1875 }
1842 1876
1843 SendMessages(browser_context, blocked_request, navigation_ui_data); 1877 SendMessages(browser_context, blocked_request, navigation_ui_data);
1844 1878
1845 if (!warnings.empty()) { 1879 if (!warnings.empty()) {
1846 BrowserThread::PostTask( 1880 BrowserThread::PostTask(
1847 BrowserThread::UI, 1881 BrowserThread::UI,
1848 FROM_HERE, 1882 FROM_HERE,
1849 base::Bind(&WarningService::NotifyWarningsOnUI, 1883 base::Bind(&WarningService::NotifyWarningsOnUI,
1850 browser_context, warnings)); 1884 browser_context, warnings));
1851 } 1885 }
1852 1886
1853 if (canceled) { 1887 if (canceled) {
1854 request_time_tracker_->SetRequestCanceled(request_id); 1888 request_time_tracker_->SetRequestCanceled(request_id);
1855 } else if (blocked_request.new_url && 1889 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, RequestAction::CANCEL,
1856 !blocked_request.new_url->is_empty()) { 1890 RequestAction::MAX);
1891 } else if (blocked_request.new_url && !blocked_request.new_url->is_empty()) {
1857 request_time_tracker_->SetRequestRedirected(request_id); 1892 request_time_tracker_->SetRequestRedirected(request_id);
1893 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA, RequestAction::REDIRECT,
1894 RequestAction::MAX);
1895 } else if (credentials_set) {
1896 UMA_HISTOGRAM_ENUMERATION(kWebRequestActionUMA,
1897 RequestAction::SET_AUTH_CREDENTIALS,
1898 RequestAction::MAX);
1858 } 1899 }
1859 1900
1860 // This triggers onErrorOccurred if canceled is true. 1901 // This triggers onErrorOccurred if canceled is true.
1861 int rv = canceled ? net::ERR_BLOCKED_BY_CLIENT : net::OK; 1902 int rv = canceled ? net::ERR_BLOCKED_BY_CLIENT : net::OK;
1862 1903
1863 if (!blocked_request.callback.is_null()) { 1904 if (!blocked_request.callback.is_null()) {
1864 net::CompletionCallback callback = blocked_request.callback; 1905 net::CompletionCallback callback = blocked_request.callback;
1865 // Ensure that request is removed before callback because the callback 1906 // Ensure that request is removed before callback because the callback
1866 // might trigger the next event. 1907 // might trigger the next event.
1867 blocked_requests_.erase(request_id); 1908 blocked_requests_.erase(request_id);
(...skipping 522 matching lines...) Expand 10 before | Expand all | Expand 10 after
2390 // Since EventListeners are segmented by browser_context, check that 2431 // Since EventListeners are segmented by browser_context, check that
2391 // last, as it is exceedingly unlikely to be different. 2432 // last, as it is exceedingly unlikely to be different.
2392 return extension_id == that.extension_id && 2433 return extension_id == that.extension_id &&
2393 sub_event_name == that.sub_event_name && 2434 sub_event_name == that.sub_event_name &&
2394 web_view_instance_id == that.web_view_instance_id && 2435 web_view_instance_id == that.web_view_instance_id &&
2395 embedder_process_id == that.embedder_process_id && 2436 embedder_process_id == that.embedder_process_id &&
2396 browser_context == that.browser_context; 2437 browser_context == that.browser_context;
2397 } 2438 }
2398 2439
2399 } // namespace extensions 2440 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698