--- a/dom/base/nsContentUtils.cpp
+++ b/dom/base/nsContentUtils.cpp
@@ -8829,18 +8829,17 @@ nsContentUtils::IsPreloadType(nsContentP
aType == nsIContentPolicy::TYPE_INTERNAL_STYLESHEET_PRELOAD);
}
/* static */
bool
nsContentUtils::IsUpgradableDisplayType(nsContentPolicyType aType)
{
MOZ_ASSERT(NS_IsMainThread());
- return sIsUpgradableDisplayContentPrefEnabled &&
- (aType == nsIContentPolicy::TYPE_IMAGE ||
+ return (aType == nsIContentPolicy::TYPE_IMAGE ||
aType == nsIContentPolicy::TYPE_MEDIA);
}
nsresult
nsContentUtils::SetFetchReferrerURIWithPolicy(nsIPrincipal* aPrincipal,
nsIDocument* aDoc,
nsIHttpChannel* aChannel,
mozilla::net::ReferrerPolicy aReferrerPolicy)
--- a/dom/security/nsMixedContentBlocker.cpp
+++ b/dom/security/nsMixedContentBlocker.cpp
@@ -50,19 +50,22 @@ enum nsMixedContentBlockerMessageType {
};
// Is mixed script blocking (fonts, plugin content, scripts, stylesheets,
// iframes, websockets, XHR) enabled?
bool nsMixedContentBlocker::sBlockMixedScript = false;
bool nsMixedContentBlocker::sBlockMixedObjectSubrequest = false;
-// Is mixed display content blocking (images, audio, video, <a ping>) enabled?
+// Is mixed display content blocking (images, audio, video) enabled?
bool nsMixedContentBlocker::sBlockMixedDisplay = false;
+// Is mixed display content upgrading (images, audio, video) enabled?
+bool nsMixedContentBlocker::sUpgradeMixedDisplay = false;
+
enum MixedContentHSTSState {
MCB_HSTS_PASSIVE_NO_HSTS = 0,
MCB_HSTS_PASSIVE_WITH_HSTS = 1,
MCB_HSTS_ACTIVE_NO_HSTS = 2,
MCB_HSTS_ACTIVE_WITH_HSTS = 3
};
// Fired at the document that attempted to load mixed content. The UI could
@@ -209,16 +212,20 @@ nsMixedContentBlocker::nsMixedContentBlo
"security.mixed_content.block_active_content");
Preferences::AddBoolVarCache(&sBlockMixedObjectSubrequest,
"security.mixed_content.block_object_subrequest");
// Cache the pref for mixed display blocking
Preferences::AddBoolVarCache(&sBlockMixedDisplay,
"security.mixed_content.block_display_content");
+
+ // Cache the pref for mixed display upgrading
+ Preferences::AddBoolVarCache(&sUpgradeMixedDisplay,
+ "security.mixed_content.upgrade_display_content");
}
nsMixedContentBlocker::~nsMixedContentBlocker()
{
}
NS_IMPL_ISUPPORTS(nsMixedContentBlocker, nsIContentPolicy, nsIChannelEventSink)
@@ -772,17 +779,17 @@ nsMixedContentBlocker::ShouldLoad(bool a
return NS_OK;
}
// Allow http: mixed content if we are choosing to upgrade them when the
// pref "security.mixed_content.upgrade_display_content" is true.
// This behaves like GetUpgradeInsecureRequests above in that the channel will
// be upgraded to https before fetching any data from the netwerk.
- bool isUpgradableDisplayType = nsContentUtils::IsUpgradableDisplayType(aContentType);
+ bool isUpgradableDisplayType = nsContentUtils::IsUpgradableDisplayType(aContentType) && ShouldUpgradeMixedDisplayContent();
if (isHttpScheme && isUpgradableDisplayType) {
*aDecision = ACCEPT;
return NS_OK;
}
// The page might have set the CSP directive 'block-all-mixed-content' which
// should block not only active mixed content loads but in fact all mixed content
// loads, see https://www.w3.org/TR/mixed-content/#strict-checking
@@ -1122,8 +1129,14 @@ nsMixedContentBlocker::AccumulateMixedCo
MCB_HSTS_ACTIVE_NO_HSTS);
}
else {
Telemetry::Accumulate(Telemetry::MIXED_CONTENT_HSTS,
MCB_HSTS_ACTIVE_WITH_HSTS);
}
}
}
+
+bool
+nsMixedContentBlocker::ShouldUpgradeMixedDisplayContent()
+{
+ return sUpgradeMixedDisplay;
+}
--- a/dom/security/nsMixedContentBlocker.h
+++ b/dom/security/nsMixedContentBlocker.h
@@ -67,14 +67,17 @@ public:
const nsACString& aMimeGuess,
nsISupports* aExtra,
nsIPrincipal* aRequestPrincipal,
int16_t* aDecision);
static void AccumulateMixedContentHSTS(nsIURI* aURI,
bool aActive,
const OriginAttributes& aOriginAttributes);
+ static bool ShouldUpgradeMixedDisplayContent();
+
static bool sBlockMixedScript;
static bool sBlockMixedObjectSubrequest;
static bool sBlockMixedDisplay;
+ static bool sUpgradeMixedDisplay;
};
#endif /* nsMixedContentBlocker_h___ */
--- a/ipc/glue/BackgroundUtils.cpp
+++ b/ipc/glue/BackgroundUtils.cpp
@@ -399,16 +399,17 @@ LoadInfoToLoadInfoArgs(nsILoadInfo *aLoa
principalToInheritInfo,
sandboxedLoadingPrincipalInfo,
optionalResultPrincipalURI,
aLoadInfo->GetSecurityFlags(),
aLoadInfo->InternalContentPolicyType(),
static_cast<uint32_t>(aLoadInfo->GetTainting()),
aLoadInfo->GetUpgradeInsecureRequests(),
aLoadInfo->GetBrowserUpgradeInsecureRequests(),
+ aLoadInfo->GetBrowserWouldUpgradeInsecureRequests(),
aLoadInfo->GetVerifySignedContent(),
aLoadInfo->GetEnforceSRI(),
aLoadInfo->GetAllowDocumentToBeAgnosticToCSP(),
aLoadInfo->GetForceAllowDataURI(),
aLoadInfo->GetAllowInsecureRedirectToDataURI(),
aLoadInfo->GetForceInheritPrincipalDropped(),
aLoadInfo->GetInnerWindowID(),
aLoadInfo->GetOuterWindowID(),
@@ -546,16 +547,17 @@ LoadInfoArgsToLoadInfo(const OptionalLoa
reservedClientInfo,
initialClientInfo,
controller,
loadInfoArgs.securityFlags(),
loadInfoArgs.contentPolicyType(),
static_cast<LoadTainting>(loadInfoArgs.tainting()),
loadInfoArgs.upgradeInsecureRequests(),
loadInfoArgs.browserUpgradeInsecureRequests(),
+ loadInfoArgs.browserWouldUpgradeInsecureRequests(),
loadInfoArgs.verifySignedContent(),
loadInfoArgs.enforceSRI(),
loadInfoArgs.allowDocumentToBeAgnosticToCSP(),
loadInfoArgs.forceAllowDataURI(),
loadInfoArgs.allowInsecureRedirectToDataURI(),
loadInfoArgs.forceInheritPrincipalDropped(),
loadInfoArgs.innerWindowID(),
loadInfoArgs.outerWindowID(),
--- a/netwerk/base/LoadInfo.cpp
+++ b/netwerk/base/LoadInfo.cpp
@@ -20,16 +20,17 @@
#include "nsIDOMDocument.h"
#include "nsIFrameLoader.h"
#include "nsIInterfaceRequestorUtils.h"
#include "nsISupportsImpl.h"
#include "nsISupportsUtils.h"
#include "nsContentUtils.h"
#include "nsDocShell.h"
#include "nsGlobalWindow.h"
+#include "nsMixedContentBlocker.h"
#include "NullPrincipal.h"
#include "nsRedirectHistoryEntry.h"
using namespace mozilla::dom;
namespace mozilla {
namespace net {
@@ -59,16 +60,17 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
, mController(aController)
, mLoadingContext(do_GetWeakReference(aLoadingContext))
, mContextForTopLevelLoad(nullptr)
, mSecurityFlags(aSecurityFlags)
, mInternalContentPolicyType(aContentPolicyType)
, mTainting(LoadTainting::Basic)
, mUpgradeInsecureRequests(false)
, mBrowserUpgradeInsecureRequests(false)
+ , mBrowserWouldUpgradeInsecureRequests(false)
, mVerifySignedContent(false)
, mEnforceSRI(false)
, mAllowDocumentToBeAgnosticToCSP(false)
, mForceAllowDataURI(false)
, mAllowInsecureRedirectToDataURI(false)
, mOriginalFrameSrcLoad(false)
, mForceInheritPrincipalDropped(false)
, mInnerWindowID(0)
@@ -189,17 +191,21 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
if (nsContentUtils::IsUpgradableDisplayType(externalType)) {
nsCOMPtr<nsIURI> uri;
mLoadingPrincipal->GetURI(getter_AddRefs(uri));
if (uri) {
// Checking https not secure context as http://localhost can't be upgraded
bool isHttpsScheme;
nsresult rv = uri->SchemeIs("https", &isHttpsScheme);
if (NS_SUCCEEDED(rv) && isHttpsScheme) {
- mBrowserUpgradeInsecureRequests = true;
+ if (nsMixedContentBlocker::ShouldUpgradeMixedDisplayContent()) {
+ mBrowserUpgradeInsecureRequests = true;
+ } else {
+ mBrowserWouldUpgradeInsecureRequests = true;
+ }
}
}
}
// if owner doc has content signature, we enforce SRI
nsCOMPtr<nsIChannel> channel = aLoadingContext->OwnerDoc()->GetChannel();
if (channel) {
nsCOMPtr<nsILoadInfo> loadInfo = channel->GetLoadInfo();
if (loadInfo) {
@@ -280,16 +286,17 @@ LoadInfo::LoadInfo(nsPIDOMWindowOuter* a
, mTriggeringPrincipal(aTriggeringPrincipal)
, mPrincipalToInherit(nullptr)
, mContextForTopLevelLoad(do_GetWeakReference(aContextForTopLevelLoad))
, mSecurityFlags(aSecurityFlags)
, mInternalContentPolicyType(nsIContentPolicy::TYPE_DOCUMENT)
, mTainting(LoadTainting::Basic)
, mUpgradeInsecureRequests(false)
, mBrowserUpgradeInsecureRequests(false)
+ , mBrowserWouldUpgradeInsecureRequests(false)
, mVerifySignedContent(false)
, mEnforceSRI(false)
, mAllowDocumentToBeAgnosticToCSP(false)
, mForceAllowDataURI(false)
, mAllowInsecureRedirectToDataURI(false)
, mOriginalFrameSrcLoad(false)
, mForceInheritPrincipalDropped(false)
, mInnerWindowID(0)
@@ -357,16 +364,17 @@ LoadInfo::LoadInfo(const LoadInfo& rhs)
, mPerformanceStorage(rhs.mPerformanceStorage)
, mLoadingContext(rhs.mLoadingContext)
, mContextForTopLevelLoad(rhs.mContextForTopLevelLoad)
, mSecurityFlags(rhs.mSecurityFlags)
, mInternalContentPolicyType(rhs.mInternalContentPolicyType)
, mTainting(rhs.mTainting)
, mUpgradeInsecureRequests(rhs.mUpgradeInsecureRequests)
, mBrowserUpgradeInsecureRequests(rhs.mBrowserUpgradeInsecureRequests)
+ , mBrowserWouldUpgradeInsecureRequests(rhs.mBrowserWouldUpgradeInsecureRequests)
, mVerifySignedContent(rhs.mVerifySignedContent)
, mEnforceSRI(rhs.mEnforceSRI)
, mAllowDocumentToBeAgnosticToCSP(rhs.mAllowDocumentToBeAgnosticToCSP)
, mForceAllowDataURI(rhs.mForceAllowDataURI)
, mAllowInsecureRedirectToDataURI(rhs.mAllowInsecureRedirectToDataURI)
, mOriginalFrameSrcLoad(rhs.mOriginalFrameSrcLoad)
, mForceInheritPrincipalDropped(rhs.mForceInheritPrincipalDropped)
, mInnerWindowID(rhs.mInnerWindowID)
@@ -401,16 +409,17 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
const Maybe<ClientInfo>& aReservedClientInfo,
const Maybe<ClientInfo>& aInitialClientInfo,
const Maybe<ServiceWorkerDescriptor>& aController,
nsSecurityFlags aSecurityFlags,
nsContentPolicyType aContentPolicyType,
LoadTainting aTainting,
bool aUpgradeInsecureRequests,
bool aBrowserUpgradeInsecureRequests,
+ bool aBrowserWouldUpgradeInsecureRequests,
bool aVerifySignedContent,
bool aEnforceSRI,
bool aAllowDocumentToBeAgnosticToCSP,
bool aForceAllowDataURI,
bool aAllowInsecureRedirectToDataURI,
bool aForceInheritPrincipalDropped,
uint64_t aInnerWindowID,
uint64_t aOuterWindowID,
@@ -439,16 +448,17 @@ LoadInfo::LoadInfo(nsIPrincipal* aLoadin
, mReservedClientInfo(aReservedClientInfo)
, mInitialClientInfo(aInitialClientInfo)
, mController(aController)
, mSecurityFlags(aSecurityFlags)
, mInternalContentPolicyType(aContentPolicyType)
, mTainting(aTainting)
, mUpgradeInsecureRequests(aUpgradeInsecureRequests)
, mBrowserUpgradeInsecureRequests(aBrowserUpgradeInsecureRequests)
+ , mBrowserWouldUpgradeInsecureRequests(aBrowserWouldUpgradeInsecureRequests)
, mVerifySignedContent(aVerifySignedContent)
, mEnforceSRI(aEnforceSRI)
, mAllowDocumentToBeAgnosticToCSP(aAllowDocumentToBeAgnosticToCSP)
, mForceAllowDataURI(aForceAllowDataURI)
, mAllowInsecureRedirectToDataURI(aAllowInsecureRedirectToDataURI)
, mOriginalFrameSrcLoad(false)
, mForceInheritPrincipalDropped(aForceInheritPrincipalDropped)
, mInnerWindowID(aInnerWindowID)
@@ -804,16 +814,23 @@ LoadInfo::GetUpgradeInsecureRequests(boo
NS_IMETHODIMP
LoadInfo::GetBrowserUpgradeInsecureRequests(bool* aResult)
{
*aResult = mBrowserUpgradeInsecureRequests;
return NS_OK;
}
NS_IMETHODIMP
+LoadInfo::GetBrowserWouldUpgradeInsecureRequests(bool* aResult)
+{
+ *aResult = mBrowserWouldUpgradeInsecureRequests;
+ return NS_OK;
+}
+
+NS_IMETHODIMP
LoadInfo::SetVerifySignedContent(bool aVerifySignedContent)
{
MOZ_ASSERT(mInternalContentPolicyType == nsIContentPolicy::TYPE_DOCUMENT,
"can only verify content for TYPE_DOCUMENT");
mVerifySignedContent = aVerifySignedContent;
return NS_OK;
}
@@ -1153,16 +1170,22 @@ LoadInfo::SetUpgradeInsecureRequests()
}
void
LoadInfo::SetBrowserUpgradeInsecureRequests()
{
mBrowserUpgradeInsecureRequests = true;
}
+void
+LoadInfo::SetBrowserWouldUpgradeInsecureRequests()
+{
+ mBrowserWouldUpgradeInsecureRequests = true;
+}
+
NS_IMETHODIMP
LoadInfo::GetIsPreflight(bool* aIsPreflight)
{
*aIsPreflight = mIsPreflight;
return NS_OK;
}
NS_IMETHODIMP
--- a/netwerk/base/LoadInfo.h
+++ b/netwerk/base/LoadInfo.h
@@ -89,16 +89,17 @@ public:
//
// NOTE: This should not be used outside of service worker code! Use
// nsILoadInfo::MaybeIncreaseTainting() instead.
void SynthesizeServiceWorkerTainting(LoadTainting aTainting);
void SetIsPreflight();
void SetUpgradeInsecureRequests();
void SetBrowserUpgradeInsecureRequests();
+ void SetBrowserWouldUpgradeInsecureRequests();
private:
// private constructor that is only allowed to be called from within
// HttpChannelParent and FTPChannelParent declared as friends undeneath.
// In e10s we can not serialize nsINode, hence we store the innerWindowID.
// Please note that aRedirectChain uses swapElements.
LoadInfo(nsIPrincipal* aLoadingPrincipal,
nsIPrincipal* aTriggeringPrincipal,
@@ -109,16 +110,17 @@ private:
const Maybe<mozilla::dom::ClientInfo>& aReservedClientInfo,
const Maybe<mozilla::dom::ClientInfo>& aInitialClientInfo,
const Maybe<mozilla::dom::ServiceWorkerDescriptor>& aController,
nsSecurityFlags aSecurityFlags,
nsContentPolicyType aContentPolicyType,
LoadTainting aTainting,
bool aUpgradeInsecureRequests,
bool aBrowserUpgradeInsecureRequests,
+ bool aBrowserWouldUpgradeInsecureRequests,
bool aVerifySignedContent,
bool aEnforceSRI,
bool aAllowDocumentToBeAgnosticToCSP,
bool aForceAllowDataURI,
bool aAllowInsecureRedirectToDataURI,
bool aForceInheritPrincipalDropped,
uint64_t aInnerWindowID,
uint64_t aOuterWindowID,
@@ -175,16 +177,17 @@ private:
nsWeakPtr mLoadingContext;
nsWeakPtr mContextForTopLevelLoad;
nsSecurityFlags mSecurityFlags;
nsContentPolicyType mInternalContentPolicyType;
LoadTainting mTainting;
bool mUpgradeInsecureRequests;
bool mBrowserUpgradeInsecureRequests;
+ bool mBrowserWouldUpgradeInsecureRequests;
bool mVerifySignedContent;
bool mEnforceSRI;
bool mAllowDocumentToBeAgnosticToCSP;
bool mForceAllowDataURI;
bool mAllowInsecureRedirectToDataURI;
bool mOriginalFrameSrcLoad;
bool mForceInheritPrincipalDropped;
uint64_t mInnerWindowID;
--- a/netwerk/base/nsILoadInfo.idl
+++ b/netwerk/base/nsILoadInfo.idl
@@ -510,16 +510,24 @@ interface nsILoadInfo : nsISupports
/**
* Returns true if the the page is https and the content is upgradable from http
* requires 'security.mixed_content.upgrade_display_content' pref to be true.
* Currently this only upgrades display content but might be expanded to other loads.
* This is very similar in implementation to upgradeInsecureRequests but browser set.
*/
[infallible] readonly attribute boolean browserUpgradeInsecureRequests;
+
+ /**
+ * Returns true if the the page is https and the content is upgradable from http
+ * requires 'security.mixed_content.upgrade_display_content' pref to be false.
+ * See browserUpgradeInsecureRequests for more details, this only happens
+ * when *not* upgrading purely for telemetry.
+ */
+ [infallible] readonly attribute boolean browserWouldUpgradeInsecureRequests;
/**
* If true, the content of the channel is queued up and checked
* if it matches a content signature. Note, setting this flag
* to true will negatively impact performance since the preloader
* can not start until all of the content is fetched from the
* netwerk.
*
* Only use that in combination with TYPE_DOCUMENT.
--- a/netwerk/ipc/NeckoChannelParams.ipdlh
+++ b/netwerk/ipc/NeckoChannelParams.ipdlh
@@ -43,16 +43,17 @@ struct LoadInfoArgs
OptionalPrincipalInfo principalToInheritInfo;
OptionalPrincipalInfo sandboxedLoadingPrincipalInfo;
OptionalURIParams resultPrincipalURI;
uint32_t securityFlags;
uint32_t contentPolicyType;
uint32_t tainting;
bool upgradeInsecureRequests;
bool browserUpgradeInsecureRequests;
+ bool browserWouldUpgradeInsecureRequests;
bool verifySignedContent;
bool enforceSRI;
bool allowDocumentToBeAgnosticToCSP;
bool forceAllowDataURI;
bool allowInsecureRedirectToDataURI;
bool forceInheritPrincipalDropped;
uint64_t innerWindowID;
uint64_t outerWindowID;
--- a/netwerk/protocol/http/nsHttpChannel.cpp
+++ b/netwerk/protocol/http/nsHttpChannel.cpp
@@ -7260,37 +7260,67 @@ nsHttpChannel::OnStopRequest(nsIRequest
kHttpNetEarlyFail = 3,
kHttpNetLateFail = 4,
kHttpsCanceled = 8,
kHttpsDisk = 9,
kHttpsNetOK = 10,
kHttpsNetEarlyFail = 11,
kHttpsNetLateFail = 12
} chanDisposition = kHttpCanceled;
+ // HTTP_CHANNEL_DISPOSITION_UPGRADE TELEMETRY
+ Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE upgradeChanDisposition = Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE::cancel;
// HTTP 0.9 is more likely to be an error than really 0.9, so count it that way
if (mCanceled) {
chanDisposition = kHttpCanceled;
+ upgradeChanDisposition = Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE::cancel;
} else if (!mUsedNetwork ||
(mRaceCacheWithNetwork &&
mFirstResponseSource == RESPONSE_FROM_CACHE)) {
chanDisposition = kHttpDisk;
+ upgradeChanDisposition = Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE::disk;
} else if (NS_SUCCEEDED(status) &&
mResponseHead &&
mResponseHead->Version() != NS_HTTP_VERSION_0_9) {
chanDisposition = kHttpNetOK;
+ upgradeChanDisposition = Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE::netOk;
} else if (!mTransferSize) {
chanDisposition = kHttpNetEarlyFail;
+ upgradeChanDisposition = Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE::netEarlyFail;
} else {
chanDisposition = kHttpNetLateFail;
- }
+ upgradeChanDisposition = Telemetry::LABELS_HTTP_CHANNEL_DISPOSITION_UPGRADE::netLateFail;
+ }
+ // Browser upgrading only happens on HTTPS pages for mixed passive content when upgrading is enabled.
+ nsCString upgradeKey;
if (IsHTTPS()) {
+ // Browser upgrading is disabled and the content is already HTTPS
+ upgradeKey = NS_LITERAL_CSTRING("disabledNoReason");
+ // Checks "security.mixed_content.upgrade_display_content" is true
+ if (nsMixedContentBlocker::ShouldUpgradeMixedDisplayContent()) {
+ if (mLoadInfo && mLoadInfo->GetBrowserUpgradeInsecureRequests()) {
+ // HTTP content the browser has upgraded to HTTPS
+ upgradeKey = NS_LITERAL_CSTRING("enabledUpgrade");
+ } else {
+ // Content wasn't upgraded but is already HTTPS
+ upgradeKey = NS_LITERAL_CSTRING("enabledNoReason");
+ }
+ }
// shift http to https disposition enums
chanDisposition = static_cast<ChannelDisposition>(chanDisposition + kHttpsCanceled);
- }
+ } else if (mLoadInfo->GetBrowserWouldUpgradeInsecureRequests()) {
+ // HTTP content the browser would upgrade to HTTPS if upgrading was enabled
+ upgradeKey = NS_LITERAL_CSTRING("disabledUpgrade");
+ } else {
+ // HTTP content that wouldn't upgrade
+ upgradeKey = nsMixedContentBlocker::ShouldUpgradeMixedDisplayContent() ?
+ NS_LITERAL_CSTRING("enabledWont") :
+ NS_LITERAL_CSTRING("disabledWont");
+ }
+ Telemetry::AccumulateCategoricalKeyed(upgradeKey, upgradeChanDisposition);
LOG((" nsHttpChannel::OnStopRequest ChannelDisposition %d\n", chanDisposition));
Telemetry::Accumulate(Telemetry::HTTP_CHANNEL_DISPOSITION, chanDisposition);
// if needed, check cache entry has all data we expect
if (mCacheEntry && mCachePump &&
mConcurrentCacheAccess && contentComplete) {
int64_t size, contentLength;
nsresult rv = CheckPartial(mCacheEntry, &size, &contentLength);
--- a/toolkit/components/telemetry/Histograms.json
+++ b/toolkit/components/telemetry/Histograms.json
@@ -2625,16 +2625,27 @@
"alert_emails": ["necko@mozilla.com"],
"bug_numbers": [1341128],
"expires_in_version": "never",
"kind": "enumerated",
"n_values": 16,
"releaseChannelCollection": "opt-out",
"description": "Channel Disposition: 0=Cancel, 1=Disk, 2=NetOK, 3=NetEarlyFail, 4=NetlateFail, +8 for HTTPS"
},
+ "HTTP_CHANNEL_DISPOSITION_UPGRADE" : {
+ "record_in_processes": ["main"],
+ "alert_emails": ["necko@mozilla.com", "seceng-telemetry@mozilla.com", "jkt@mozilla.com"],
+ "bug_numbers": [1440701],
+ "expires_in_version": "70",
+ "kind": "categorical",
+ "keyed": true,
+ "releaseChannelCollection": "opt-out",
+ "description": "Upgrading display content Channel Disposition",
+ "labels": ["cancel", "disk", "netOk", "netEarlyFail", "netLateFail"]
+ },
"HTTP_CONNECTION_ENTRY_CACHE_HIT_1" : {
"record_in_processes": ["main", "content"],
"expires_in_version": "never",
"kind": "boolean",
"description": "Fraction of sockets that used a nsConnectionEntry with history - size 300."
},
"HTTP_CACHE_DISPOSITION_2_V2": {
"record_in_processes": ["main", "content"],