Commit cd4f27c8 authored by Carlos IL's avatar Carlos IL Committed by Commit Bot

Added UKM metrics for mixed content subresource upgrades

Bug: 896865
Change-Id: Ide1f9ae86533d5f2c6296da8b77e35c08d8a264e
Reviewed-on: https://chromium-review.googlesource.com/c/1289675
Commit-Queue: Carlos IL <carlosil@chromium.org>
Reviewed-by: default avatarMike West <mkwst@chromium.org>
Reviewed-by: default avatarSteven Holte <holte@chromium.org>
Cr-Commit-Position: refs/heads/master@{#604754}
parent 3d71e5cc
......@@ -1715,6 +1715,10 @@ void FrameLoader::UpgradeInsecureRequest(ResourceRequest& resource_request,
MixedContentChecker::ShouldAutoupgrade(
origin_context->Url(),
WebMixedContent::ContextTypeFromRequestContext(context, false))) {
if (origin_context->IsDocument()) {
Document* document = static_cast<Document*>(origin_context);
resource_request.SetUkmSourceId(document->UkmSourceID());
}
resource_request.SetIsAutomaticUpgrade(true);
} else {
return;
......
......@@ -9,6 +9,7 @@ include_rules = [
"+base/metrics/field_trial_params.h", # for fetch/ResourceLoadScheduler.cpp
"+base/strings/string_number_conversions.h", # for fetch/ResourceLoadScheduler.cpp
"+components/link_header_util", # for LinkHeader.cpp
"+services/metrics/public", # for UKM API
"+services/network/public", # for Fetch API and CORS
"+third_party/blink/renderer/platform/bindings/parkable_string.h",
"+third_party/blink/renderer/platform/bindings/script_forbidden_scope.h",
......
......@@ -31,6 +31,9 @@
#include "base/metrics/histogram_functions.h"
#include "base/metrics/histogram_macros.h"
#include "base/optional.h"
#include "services/metrics/public/cpp/mojo_ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/network/public/mojom/fetch_api.mojom-blink.h"
#include "third_party/blink/public/mojom/blob/blob_registry.mojom-blink.h"
#include "third_party/blink/public/platform/code_cache_loader.h"
......@@ -79,14 +82,20 @@ bool IsThrottlableRequestContext(mojom::RequestContextType context) {
context != mojom::RequestContextType::AUDIO;
}
void LogMixedAutoupgradeStatus(blink::MixedContentAutoupgradeStatus status) {
void LogMixedAutoupgradeMetrics(blink::MixedContentAutoupgradeStatus status,
base::Optional<int> response_or_error_code,
ukm::SourceId source_id,
ukm::UkmRecorder* recorder) {
UMA_HISTOGRAM_ENUMERATION("MixedAutoupgrade.ResourceRequest.Status", status);
}
void LogMixedAutoupgradeResponseOrError(int response_or_error_code) {
base::UmaHistogramSparse(
"MixedAutoupgrade.ResourceRequest.ErrorOrResponseCode",
response_or_error_code);
ukm::builders::MixedContentAutoupgrade_ResourceRequest builder(source_id);
builder.SetStatus(static_cast<int64_t>(status));
if (response_or_error_code.has_value()) {
base::UmaHistogramSparse(
"MixedAutoupgrade.ResourceRequest.ErrorOrResponseCode",
response_or_error_code.value());
builder.SetCode(response_or_error_code.value());
}
builder.Record(recorder);
}
} // namespace
......@@ -390,7 +399,11 @@ void ResourceLoader::Start() {
}
if (request.IsAutomaticUpgrade()) {
LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kStarted);
auto recorder =
ukm::MojoUkmRecorder::Create(Platform::Current()->GetConnector());
LogMixedAutoupgradeMetrics(MixedContentAutoupgradeStatus::kStarted,
base::nullopt, request.GetUkmSourceId(),
recorder.get());
}
if (resource_->GetResourceRequest().IsDownloadToNetworkCacheOnly()) {
// The download-to-cache requests are throttled in net/, they are fire-and
......@@ -762,9 +775,14 @@ void ResourceLoader::DidReceiveResponse(
std::unique_ptr<WebDataConsumerHandle> handle) {
DCHECK(!web_url_response.IsNull());
if (resource_->GetResourceRequest().IsAutomaticUpgrade()) {
LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kResponseReceived);
LogMixedAutoupgradeResponseOrError(web_url_response.HttpStatusCode());
const ResourceRequest& request = resource_->GetResourceRequest();
if (request.IsAutomaticUpgrade()) {
auto recorder =
ukm::MojoUkmRecorder::Create(Platform::Current()->GetConnector());
LogMixedAutoupgradeMetrics(MixedContentAutoupgradeStatus::kResponseReceived,
web_url_response.HttpStatusCode(),
request.GetUkmSourceId(), recorder.get());
}
if (Context().IsDetached()) {
......@@ -990,9 +1008,14 @@ void ResourceLoader::DidFail(const WebURLError& error,
int64_t encoded_data_length,
int64_t encoded_body_length,
int64_t decoded_body_length) {
if (resource_->GetResourceRequest().IsAutomaticUpgrade()) {
LogMixedAutoupgradeStatus(MixedContentAutoupgradeStatus::kFailed);
LogMixedAutoupgradeResponseOrError(error.reason());
const ResourceRequest& request = resource_->GetResourceRequest();
if (request.IsAutomaticUpgrade()) {
auto recorder =
ukm::MojoUkmRecorder::Create(Platform::Current()->GetConnector());
LogMixedAutoupgradeMetrics(MixedContentAutoupgradeStatus::kFailed,
error.reason(), request.GetUkmSourceId(),
recorder.get());
}
resource_->SetEncodedDataLength(encoded_data_length);
resource_->SetEncodedBodyLength(encoded_body_length);
......
......@@ -130,6 +130,7 @@ std::unique_ptr<ResourceRequest> ResourceRequest::CreateRedirectRequest(
request->SetUpgradeIfInsecure(UpgradeIfInsecure());
request->SetIsAutomaticUpgrade(IsAutomaticUpgrade());
request->SetRequestedWith(GetRequestedWith());
request->SetUkmSourceId(GetUkmSourceId());
return request;
}
......
......@@ -398,6 +398,9 @@ class PLATFORM_EXPORT ResourceRequest final {
void SetRequestedWith(const String& value) { requested_with_ = value; }
const String& GetRequestedWith() const { return requested_with_; }
void SetUkmSourceId(int64_t ukm_source_id) { ukm_source_id_ = ukm_source_id; }
int64_t GetUkmSourceId() const { return ukm_source_id_; }
private:
using SharableExtraData =
base::RefCountedData<std::unique_ptr<WebURLRequest::ExtraData>>;
......@@ -471,6 +474,8 @@ class PLATFORM_EXPORT ResourceRequest final {
base::Optional<base::UnguessableToken> devtools_token_;
String origin_policy_;
String requested_with_;
int64_t ukm_source_id_;
};
} // namespace blink
......
......@@ -5452,4 +5452,23 @@ be describing additional metrics about the same event.
</metric>
</event>
<event name="MixedContentAutoupgrade.ResourceRequest">
<owner>carlosil@chromium.org</owner>
<summary>
Status and Network error or HTTP response code for a resource request that
was autoupgraded to HTTPS as part of the mixed content autoupgrade
experiment.
</summary>
<metric name="Code">
<summary>
The HTTP response or network error code for an autoupgraded request.
</summary>
</metric>
<metric name="Status">
<summary>
An enum with 0 representing started, 1 failed, and 2 response received.
</summary>
</metric>
</event>
</ukm-configuration>
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment