blob: f55a918bc29aa84d96ea3be1d1642662a5c4e5ad [file] [log] [blame]
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chrome/browser/dips/dips_utils.h"
#include "base/cxx17_backports.h"
#include "base/strings/string_piece.h"
#include "base/time/time.h"
#include "net/base/registry_controlled_domains/registry_controlled_domain.h"
#include "url/gurl.h"
bool TimestampRange::Update(base::Time time) {
bool modified = false;
if (!first.has_value() || time < first.value()) {
first = time;
modified = true;
}
if (!last.has_value() || time > last.value()) {
last = time;
modified = true;
}
return modified;
}
// CookieAccessType:
base::StringPiece CookieAccessTypeToString(CookieAccessType type) {
switch (type) {
case CookieAccessType::kUnknown:
return "Unknown";
case CookieAccessType::kNone:
return "None";
case CookieAccessType::kRead:
return "Read";
case CookieAccessType::kWrite:
return "Write";
case CookieAccessType::kReadWrite:
return "ReadWrite";
}
}
// DIPSCookieMode:
DIPSCookieMode GetDIPSCookieMode(bool is_otr, bool block_third_party_cookies) {
if (is_otr) {
if (block_third_party_cookies) {
return DIPSCookieMode::kOffTheRecord_Block3PC;
}
return DIPSCookieMode::kOffTheRecord;
}
if (block_third_party_cookies) {
return DIPSCookieMode::kBlock3PC;
}
return DIPSCookieMode::kStandard;
}
base::StringPiece GetHistogramSuffix(DIPSCookieMode mode) {
// Any changes here need to be reflected in DIPSCookieMode in
// tools/metrics/histograms/metadata/others/histograms.xml
switch (mode) {
case DIPSCookieMode::kStandard:
return ".Standard";
case DIPSCookieMode::kOffTheRecord:
return ".OffTheRecord";
case DIPSCookieMode::kBlock3PC:
return ".Block3PC";
case DIPSCookieMode::kOffTheRecord_Block3PC:
return ".OffTheRecord_Block3PC";
}
DCHECK(false) << "Invalid DIPSCookieMode";
return base::StringPiece();
}
const char* DIPSCookieModeToString(DIPSCookieMode mode) {
switch (mode) {
case DIPSCookieMode::kStandard:
return "Standard";
case DIPSCookieMode::kOffTheRecord:
return "OffTheRecord";
case DIPSCookieMode::kBlock3PC:
return "Block3PC";
case DIPSCookieMode::kOffTheRecord_Block3PC:
return "OffTheRecord_Block3PC";
}
}
std::ostream& operator<<(std::ostream& os, DIPSCookieMode mode) {
return os << DIPSCookieModeToString(mode);
}
// DIPSRedirectType:
base::StringPiece GetHistogramPiece(DIPSRedirectType type) {
// Any changes here need to be reflected in
// tools/metrics/histograms/metadata/privacy/histograms.xml
switch (type) {
case DIPSRedirectType::kClient:
return "Client";
case DIPSRedirectType::kServer:
return "Server";
}
DCHECK(false) << "Invalid DIPSRedirectType";
return base::StringPiece();
}
const char* DIPSRedirectTypeToString(DIPSRedirectType type) {
switch (type) {
case DIPSRedirectType::kClient:
return "Client";
case DIPSRedirectType::kServer:
return "Server";
}
}
std::ostream& operator<<(std::ostream& os, DIPSRedirectType type) {
return os << DIPSRedirectTypeToString(type);
}
int64_t BucketizeBounceDelay(base::TimeDelta delta) {
return base::clamp(delta.InSeconds(), INT64_C(0), INT64_C(10));
}
std::string GetSiteForDIPS(const GURL& url) {
const auto domain = net::registry_controlled_domains::GetDomainAndRegistry(
url, net::registry_controlled_domains::INCLUDE_PRIVATE_REGISTRIES);
return domain.empty() ? url.host() : domain;
}