blob: 19c8d734a4bfe8ff03fa0a3a1769c594d3be5d09 [file] [log] [blame]
// Copyright 2024 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/web_applications/navigation_capturing_log.h"
#include <optional>
#include <string_view>
#include "base/feature_list.h"
#include "base/logging.h"
#include "base/numerics/safe_conversions.h"
#include "base/values.h"
#include "chrome/common/chrome_features.h"
namespace web_app {
NavigationCapturingLog::NavigationCapturingLog() = default;
NavigationCapturingLog::~NavigationCapturingLog() = default;
void NavigationCapturingLog::LogData(
std::string_view source,
base::Value value,
std::optional<int64_t> navigation_handle_id) {
static const size_t kMaxLogLength =
base::FeatureList::IsEnabled(features::kRecordWebAppDebugInfo) ? 1000
: 20;
base::Value::Dict log_entry;
log_entry.Set("source", source);
log_entry.Set("navigation_id",
base::saturated_cast<int>(navigation_handle_id.value_or(-1)));
log_entry.Set("value", std::move(value));
DVLOG(1) << log_entry.DebugString();
debug_log_.emplace_front(std::move(log_entry));
if (debug_log_.size() > kMaxLogLength) {
debug_log_.resize(kMaxLogLength);
}
}
base::Value NavigationCapturingLog::GetLog() const {
base::Value::List log;
for (const auto& command_value : debug_log_) {
log.Append(command_value.Clone());
}
return base::Value(std::move(log));
}
} // namespace web_app