Bug 1375277 - Move Safe Browsing UI events to a separate telemetry probe. r=francois

MozReview-Commit-ID: KDAklsznekw

--HG--
extra : rebase_source : 20d81369b18b12d9b5f6670d92bf3c7215c8c9a9
extra : intermediate-source : a2d99a6b07bb015f0bdc5c1687e250086ed09a5c
extra : source : 5460dbfebee4f99580b306a9b0ec754b890f5959
This commit is contained in:
Henry Chang 2017-08-02 14:01:44 +08:00
parent af3b11c151
commit a93f3d2ba4
7 changed files with 108 additions and 39 deletions

View File

@ -3146,9 +3146,12 @@ var BrowserOnClick = {
} else if (reason === "unwanted") {
sendTelemetry = true;
bucketName = "WARNING_UNWANTED_PAGE_";
} else if (reason === "harmful") {
sendTelemetry = true;
bucketName = "WARNING_HARMFUL_PAGE_";
}
let secHistogram = Services.telemetry.getHistogramById("SECURITY_UI");
let nsISecTel = Ci.nsISecurityUITelemetry;
let secHistogram = Services.telemetry.getHistogramById("URLCLASSIFIER_UI_EVENTS");
let nsISecTel = Ci.IUrlClassifierUITelemetry;
bucketName += isTopFrame ? "TOP_" : "FRAME_";
switch (elementId) {
case "getMeOutButton":

View File

@ -220,6 +220,7 @@
#include "mozilla/dom/PerformanceNavigation.h"
#include "mozilla/dom/ScriptSettings.h"
#include "mozilla/Encoding.h"
#include "IUrlClassifierUITelemetry.h"
#ifdef MOZ_TOOLKIT_SEARCH
#include "nsIBrowserSearchService.h"
@ -5144,25 +5145,27 @@ nsDocShell::DisplayLoadError(nsresult aError, nsIURI* aURI,
if (NS_ERROR_PHISHING_URI == aError) {
sendTelemetry = true;
error = "deceptiveBlocked";
bucketId = IsFrame() ? nsISecurityUITelemetry::WARNING_PHISHING_PAGE_FRAME
: nsISecurityUITelemetry::WARNING_PHISHING_PAGE_TOP;
bucketId = IsFrame() ? IUrlClassifierUITelemetry::WARNING_PHISHING_PAGE_FRAME
: IUrlClassifierUITelemetry::WARNING_PHISHING_PAGE_TOP;
} else if (NS_ERROR_MALWARE_URI == aError) {
sendTelemetry = true;
error = "malwareBlocked";
bucketId = IsFrame() ? nsISecurityUITelemetry::WARNING_MALWARE_PAGE_FRAME
: nsISecurityUITelemetry::WARNING_MALWARE_PAGE_TOP;
bucketId = IsFrame() ? IUrlClassifierUITelemetry::WARNING_MALWARE_PAGE_FRAME
: IUrlClassifierUITelemetry::WARNING_MALWARE_PAGE_TOP;
} else if (NS_ERROR_UNWANTED_URI == aError) {
sendTelemetry = true;
error = "unwantedBlocked";
bucketId = IsFrame() ? nsISecurityUITelemetry::WARNING_UNWANTED_PAGE_FRAME
: nsISecurityUITelemetry::WARNING_UNWANTED_PAGE_TOP;
bucketId = IsFrame() ? IUrlClassifierUITelemetry::WARNING_UNWANTED_PAGE_FRAME
: IUrlClassifierUITelemetry::WARNING_UNWANTED_PAGE_TOP;
} else if (NS_ERROR_HARMFUL_URI == aError) {
sendTelemetry = true;
error = "harmfulBlocked";
// telemetry will be added in the next patch.
bucketId = IsFrame() ? IUrlClassifierUITelemetry::WARNING_HARMFUL_PAGE_FRAME
: IUrlClassifierUITelemetry::WARNING_HARMFUL_PAGE_TOP;
}
if (sendTelemetry && errorPage.EqualsIgnoreCase("blocked")) {
Telemetry::Accumulate(Telemetry::SECURITY_UI, bucketId);
Telemetry::Accumulate(Telemetry::URLCLASSIFIER_UI_EVENTS, bucketId);
}
cssClass.AssignLiteral("blacklist");

View File

@ -4850,6 +4850,7 @@ var ErrorPageEventHandler = {
// First check whether it's malware, phishing or unwanted, so that we
// can use the right strings/links
let bucketName = "";
const probe = "URLCLASSIFIER_UI_EVENTS";
let sendTelemetry = false;
if (errorDoc.documentURI.includes("e=malwareBlocked")) {
sendTelemetry = true;
@ -4860,6 +4861,9 @@ var ErrorPageEventHandler = {
} else if (errorDoc.documentURI.includes("e=unwantedBlocked")) {
sendTelemetry = true;
bucketName = "WARNING_UNWANTED_PAGE_";
} else if (errorDoc.documentURI.includes("e=harmfulBlocked")) {
sendTelemetry = true;
bucketName = "WARNING_HARMFUL_PAGE_";
}
let nsISecTel = Ci.nsISecurityUITelemetry;
let isIframe = (errorDoc.defaultView.parent === errorDoc.defaultView);
@ -4869,14 +4873,14 @@ var ErrorPageEventHandler = {
if (target == errorDoc.getElementById("getMeOutButton")) {
if (sendTelemetry) {
Telemetry.addData("SECURITY_UI", nsISecTel[bucketName + "GET_ME_OUT_OF_HERE"]);
Telemetry.addData(probe, nsISecTel[bucketName + "GET_ME_OUT_OF_HERE"]);
}
errorDoc.location = "about:home";
} else if (target == errorDoc.getElementById("reportButton")) {
// We log even if malware/phishing info URL couldn't be found:
// the measurement is for how many users clicked the WHY BLOCKED button
if (sendTelemetry) {
Telemetry.addData("SECURITY_UI", nsISecTel[bucketName + "WHY_BLOCKED"]);
Telemetry.addData(probe, nsISecTel[bucketName + "WHY_BLOCKED"]);
}
// This is the "Why is this site blocked" button. We redirect
@ -4886,7 +4890,7 @@ var ErrorPageEventHandler = {
} else if (target == errorDoc.getElementById("ignoreWarningButton") &&
Services.prefs.getBoolPref("browser.safebrowsing.allowOverride")) {
if (sendTelemetry) {
Telemetry.addData("SECURITY_UI", nsISecTel[bucketName + "IGNORE_WARNING"]);
Telemetry.addData(probe, nsISecTel[bucketName + "IGNORE_WARNING"]);
}
// Allow users to override and continue through to the site,

View File

@ -96,25 +96,25 @@ const uint32_t WARNING_GEOLOCATION_REQUEST_NEVER_SHARE = 49;
// It would be nice to measure the two cases of user clicking
// "not now", and user closing the popup. This is currently not implemented.
const uint32_t WARNING_MALWARE_PAGE_TOP = 52;
const uint32_t WARNING_MALWARE_PAGE_TOP_WHY_BLOCKED = 53;
const uint32_t WARNING_MALWARE_PAGE_TOP_GET_ME_OUT_OF_HERE = 54;
const uint32_t WARNING_MALWARE_PAGE_TOP_IGNORE_WARNING = 55;
// const uint32_t WARNING_MALWARE_PAGE_TOP = 52;
// const uint32_t WARNING_MALWARE_PAGE_TOP_WHY_BLOCKED = 53;
// const uint32_t WARNING_MALWARE_PAGE_TOP_GET_ME_OUT_OF_HERE = 54;
// const uint32_t WARNING_MALWARE_PAGE_TOP_IGNORE_WARNING = 55;
const uint32_t WARNING_PHISHING_PAGE_TOP = 56;
const uint32_t WARNING_PHISHING_PAGE_TOP_WHY_BLOCKED = 57;
const uint32_t WARNING_PHISHING_PAGE_TOP_GET_ME_OUT_OF_HERE = 58;
const uint32_t WARNING_PHISHING_PAGE_TOP_IGNORE_WARNING = 59;
// const uint32_t WARNING_PHISHING_PAGE_TOP = 56;
// const uint32_t WARNING_PHISHING_PAGE_TOP_WHY_BLOCKED = 57;
// const uint32_t WARNING_PHISHING_PAGE_TOP_GET_ME_OUT_OF_HERE = 58;
// const uint32_t WARNING_PHISHING_PAGE_TOP_IGNORE_WARNING = 59;
const uint32_t WARNING_MALWARE_PAGE_FRAME = 60;
const uint32_t WARNING_MALWARE_PAGE_FRAME_WHY_BLOCKED = 61;
const uint32_t WARNING_MALWARE_PAGE_FRAME_GET_ME_OUT_OF_HERE = 62;
const uint32_t WARNING_MALWARE_PAGE_FRAME_IGNORE_WARNING = 63;
// const uint32_t WARNING_MALWARE_PAGE_FRAME = 60;
// const uint32_t WARNING_MALWARE_PAGE_FRAME_WHY_BLOCKED = 61;
// const uint32_t WARNING_MALWARE_PAGE_FRAME_GET_ME_OUT_OF_HERE = 62;
// const uint32_t WARNING_MALWARE_PAGE_FRAME_IGNORE_WARNING = 63;
const uint32_t WARNING_PHISHING_PAGE_FRAME = 64;
const uint32_t WARNING_PHISHING_PAGE_FRAME_WHY_BLOCKED = 65;
const uint32_t WARNING_PHISHING_PAGE_FRAME_GET_ME_OUT_OF_HERE = 66;
const uint32_t WARNING_PHISHING_PAGE_FRAME_IGNORE_WARNING = 67;
// const uint32_t WARNING_PHISHING_PAGE_FRAME = 64;
// const uint32_t WARNING_PHISHING_PAGE_FRAME_WHY_BLOCKED = 65;
// const uint32_t WARNING_PHISHING_PAGE_FRAME_GET_ME_OUT_OF_HERE = 66;
// const uint32_t WARNING_PHISHING_PAGE_FRAME_IGNORE_WARNING = 67;
const uint32_t WARNING_BAD_CERT_TOP = 68;
const uint32_t WARNING_BAD_CERT_TOP_STS = 69;
@ -136,15 +136,15 @@ const uint32_t WARNING_BAD_CERT_TOP_CONFIRM_ADD_EXCEPTION_FLAG_DOMAIN = 2;
const uint32_t WARNING_BAD_CERT_TOP_CONFIRM_ADD_EXCEPTION_FLAG_TIME = 4;
// Another Safe Browsing list (like malware & phishing above)
const uint32_t WARNING_UNWANTED_PAGE_TOP = 92;
const uint32_t WARNING_UNWANTED_PAGE_TOP_WHY_BLOCKED = 93;
const uint32_t WARNING_UNWANTED_PAGE_TOP_GET_ME_OUT_OF_HERE = 94;
const uint32_t WARNING_UNWANTED_PAGE_TOP_IGNORE_WARNING = 95;
const uint32_t WARNING_UNWANTED_PAGE_FRAME = 96;
const uint32_t WARNING_UNWANTED_PAGE_FRAME_WHY_BLOCKED = 97;
const uint32_t WARNING_UNWANTED_PAGE_FRAME_GET_ME_OUT_OF_HERE = 98;
const uint32_t WARNING_UNWANTED_PAGE_FRAME_IGNORE_WARNING = 99;
// const uint32_t WARNING_UNWANTED_PAGE_TOP = 92;
// const uint32_t WARNING_UNWANTED_PAGE_TOP_WHY_BLOCKED = 93;
// const uint32_t WARNING_UNWANTED_PAGE_TOP_GET_ME_OUT_OF_HERE = 94;
// const uint32_t WARNING_UNWANTED_PAGE_TOP_IGNORE_WARNING = 95;
// const uint32_t WARNING_UNWANTED_PAGE_FRAME = 96;
// const uint32_t WARNING_UNWANTED_PAGE_FRAME_WHY_BLOCKED = 97;
// const uint32_t WARNING_UNWANTED_PAGE_FRAME_GET_ME_OUT_OF_HERE = 98;
// const uint32_t WARNING_UNWANTED_PAGE_FRAME_IGNORE_WARNING = 99;
// This uses up buckets till 99 (including)
// We only have buckets up to 100.
// All the buckets are used so the safebrowsing-related buckets were
// moved under URLCLASSIFIER_UI_EVENTS probe. See bug 1375277 for more information.
};

View File

@ -13682,5 +13682,14 @@
"n_buckets": 100,
"releaseChannelCollection": "opt-out",
"description": "The amount of time spend(ms) for users who view VR content in OpenVR."
},
"URLCLASSIFIER_UI_EVENTS": {
"record_in_processes": ["main", "content"],
"alert_emails": ["seceng-telemetry@mozilla.com", "francois@mozilla.com"],
"bug_numbers": [1375277],
"expires_in_version": "never",
"kind": "enumerated",
"n_values": 64,
"description": "URL CLassifier-related (aka Safe Browsing) UI events. See nsIUrlClassifierUITelemetry.idl for the specific values."
}
}

View File

@ -0,0 +1,49 @@
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsISupports.idl"
[scriptable, uuid(a6c62ce5-3a95-41bb-b0f1-8cd4f4ca00e3)]
interface IUrlClassifierUITelemetry : nsISupports {
const uint32_t WARNING_MALWARE_PAGE_TOP = 1;
const uint32_t WARNING_MALWARE_PAGE_TOP_WHY_BLOCKED = 2;
const uint32_t WARNING_MALWARE_PAGE_TOP_GET_ME_OUT_OF_HERE = 3;
const uint32_t WARNING_MALWARE_PAGE_TOP_IGNORE_WARNING = 4;
const uint32_t WARNING_MALWARE_PAGE_FRAME = 5;
const uint32_t WARNING_MALWARE_PAGE_FRAME_WHY_BLOCKED = 6;
const uint32_t WARNING_MALWARE_PAGE_FRAME_GET_ME_OUT_OF_HERE = 7;
const uint32_t WARNING_MALWARE_PAGE_FRAME_IGNORE_WARNING = 8;
const uint32_t WARNING_PHISHING_PAGE_TOP = 9;
const uint32_t WARNING_PHISHING_PAGE_TOP_WHY_BLOCKED = 10;
const uint32_t WARNING_PHISHING_PAGE_TOP_GET_ME_OUT_OF_HERE = 11;
const uint32_t WARNING_PHISHING_PAGE_TOP_IGNORE_WARNING = 12;
const uint32_t WARNING_PHISHING_PAGE_FRAME = 13;
const uint32_t WARNING_PHISHING_PAGE_FRAME_WHY_BLOCKED = 14;
const uint32_t WARNING_PHISHING_PAGE_FRAME_GET_ME_OUT_OF_HERE = 15;
const uint32_t WARNING_PHISHING_PAGE_FRAME_IGNORE_WARNING = 16;
const uint32_t WARNING_UNWANTED_PAGE_TOP = 17;
const uint32_t WARNING_UNWANTED_PAGE_TOP_WHY_BLOCKED = 18;
const uint32_t WARNING_UNWANTED_PAGE_TOP_GET_ME_OUT_OF_HERE = 19;
const uint32_t WARNING_UNWANTED_PAGE_TOP_IGNORE_WARNING = 20;
const uint32_t WARNING_UNWANTED_PAGE_FRAME = 21;
const uint32_t WARNING_UNWANTED_PAGE_FRAME_WHY_BLOCKED = 22;
const uint32_t WARNING_UNWANTED_PAGE_FRAME_GET_ME_OUT_OF_HERE = 23;
const uint32_t WARNING_UNWANTED_PAGE_FRAME_IGNORE_WARNING = 24;
const uint32_t WARNING_HARMFUL_PAGE_TOP = 25;
const uint32_t WARNING_HARMFUL_PAGE_TOP_WHY_BLOCKED = 26;
const uint32_t WARNING_HARMFUL_PAGE_TOP_GET_ME_OUT_OF_HERE = 27;
const uint32_t WARNING_HARMFUL_PAGE_TOP_IGNORE_WARNING = 28;
const uint32_t WARNING_HARMFUL_PAGE_FRAME = 29;
const uint32_t WARNING_HARMFUL_PAGE_FRAME_WHY_BLOCKED = 30;
const uint32_t WARNING_HARMFUL_PAGE_FRAME_GET_ME_OUT_OF_HERE = 31;
const uint32_t WARNING_HARMFUL_PAGE_FRAME_IGNORE_WARNING = 32;
};

View File

@ -10,6 +10,7 @@ with Files('**'):
TEST_DIRS += ['tests']
XPIDL_SOURCES += [
'IUrlClassifierUITelemetry.idl',
'nsIUrlClassifierDBService.idl',
'nsIUrlClassifierHashCompleter.idl',
'nsIUrlClassifierInfo.idl',