1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
content / browser / background_fetch / background_fetch_metrics.cc [blame]
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "content/browser/background_fetch/background_fetch_metrics.h"
#include "base/metrics/histogram_macros.h"
#include "content/browser/renderer_host/render_frame_host_impl.h"
#include "content/browser/web_contents/web_contents_impl.h"
#include "content/public/browser/browser_thread.h"
#include "services/metrics/public/cpp/metrics_utils.h"
#include "services/metrics/public/cpp/ukm_builders.h"
#include "services/metrics/public/cpp/ukm_recorder.h"
#include "third_party/blink/public/common/storage_key/storage_key.h"
namespace content {
namespace background_fetch {
// Exponential bucket spacing for UKM event data.
const double kUkmEventDataBucketSpacing = 2.0;
void RecordBackgroundFetchUkmEvent(
const blink::StorageKey& storage_key,
int requests_size,
blink::mojom::BackgroundFetchOptionsPtr options,
const SkBitmap& icon,
blink::mojom::BackgroundFetchUkmDataPtr ukm_data,
RenderFrameHostImpl* rfh,
BackgroundFetchPermission permission) {
DCHECK_CURRENTLY_ON(BrowserThread::UI);
// Only record UKM data if there's an active RenderFrameHost associated.
if (!rfh || !rfh->IsActive())
return;
// Only record UKM data if the origin of the last committed page is the same
// as the one the background fetch was started with.
// For a fenced frame, it should be treated as a sub frame for a UKM record.
auto last_committed_origin =
rfh->GetOutermostMainFrame()->GetLastCommittedOrigin();
if (!storage_key.origin().IsSameOriginWith(last_committed_origin))
return;
ukm::SourceId source_id = rfh->GetPageUkmSourceId();
ukm::builders::BackgroundFetch(source_id)
.SetHasTitle(!options->title.empty())
.SetNumIcons(options->icons.size())
.SetRatioOfIdealToChosenIconSize(ukm_data->ideal_to_chosen_icon_size)
.SetDownloadTotal(ukm::GetExponentialBucketMin(
options->download_total, kUkmEventDataBucketSpacing))
.SetNumRequestsInFetch(ukm::GetExponentialBucketMin(
requests_size, kUkmEventDataBucketSpacing))
.SetDeniedDueToPermissions(permission ==
BackgroundFetchPermission::BLOCKED)
.Record(ukm::UkmRecorder::Get());
}
} // namespace background_fetch
} // namespace content