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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82
|
// 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 "components/ukm/app_source_url_recorder.h"
#include "base/atomic_sequence_num.h"
#include "components/crx_file/id_util.h"
#include "services/metrics/public/cpp/delegating_ukm_recorder.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
#include "url/gurl.h"
namespace ukm {
SourceId AssignNewAppId() {
static base::AtomicSequenceNumber seq;
return ConvertToSourceId(seq.GetNext() + 1, SourceIdType::APP_ID);
}
GURL AppSourceUrlRecorder::GetURLForChromeApp(const std::string& app_id) {
return GURL("app://" + app_id);
}
SourceId AppSourceUrlRecorder::GetSourceIdForArcPackageName(
const std::string& package_name) {
DCHECK(!package_name.empty());
return GetSourceIdForUrl(GetURLForArcPackageName(package_name),
AppType::kArc);
}
GURL AppSourceUrlRecorder::GetURLForArcPackageName(
const std::string& package_name) {
return GURL("app://" + package_name);
}
SourceId AppSourceUrlRecorder::GetSourceIdForPWA(const GURL& url) {
return GetSourceIdForUrl(url, AppType::kPWA);
}
GURL AppSourceUrlRecorder::GetURLForPWA(const GURL& url) {
return url;
}
GURL AppSourceUrlRecorder::GetURLForBorealis(const std::string& app) {
return GURL("app://borealis/" + app);
}
GURL AppSourceUrlRecorder::GetURLForCrostini(const std::string& desktop_id,
const std::string& app_name) {
return GURL("app://" + desktop_id + "/" + app_name);
}
SourceId AppSourceUrlRecorder::GetSourceIdForUrl(const GURL& url,
AppType app_type) {
ukm::DelegatingUkmRecorder* const recorder =
ukm::DelegatingUkmRecorder::Get();
if (!recorder) {
return kInvalidSourceId;
}
const SourceId source_id = AssignNewAppId();
if (base::FeatureList::IsEnabled(kUkmAppLogging)) {
recorder->UpdateAppURL(source_id, url, app_type);
}
return source_id;
}
void AppSourceUrlRecorder::MarkSourceForDeletion(SourceId source_id) {
if (GetSourceIdType(source_id) != SourceIdType::APP_ID) {
DLOG(FATAL) << "AppSourceUrlRecorder::MarkSourceForDeletion invoked on "
<< "non-APP_ID type SourceId: " << source_id;
return;
}
ukm::DelegatingUkmRecorder* const recorder =
ukm::DelegatingUkmRecorder::Get();
if (recorder) {
recorder->MarkSourceForDeletion(source_id);
}
}
} // namespace ukm
|