blob: fbfb24587540910e9c6e4411faaa379615ced58c [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.
#ifndef CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_LOGGING_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_LOGGING_H_
#include <memory>
#include <string>
#include "base/values.h"
#include "chrome/browser/web_applications/web_app_constants.h"
#include "chrome/browser/web_applications/web_app_install_info.h"
#include "chrome/browser/web_applications/web_app_install_utils.h"
#include "components/webapps/browser/installable/installable_metrics.h"
#include "components/webapps/common/web_app_id.h"
namespace webapps {
enum class WebAppUrlLoaderResult;
}
namespace web_app {
// This class is used to accumulate a single log entry
class InstallErrorLogEntry {
public:
explicit InstallErrorLogEntry(bool background_installation,
webapps::WebappInstallSource install_surface);
~InstallErrorLogEntry();
// The InstallWebAppTask determines this after construction, so a setter is
// required.
void set_background_installation(bool background_installation) {
background_installation_ = background_installation;
}
bool HasErrorDict() const { return !!error_dict_; }
// Collects install errors (unbounded) if the |kRecordWebAppDebugInfo|
// flag is enabled to be used by: chrome://web-app-internals
base::Value::Dict TakeErrorDict();
void LogUrlLoaderError(const char* stage,
const std::string& url,
webapps::WebAppUrlLoaderResult result);
void LogExpectedAppIdError(const char* stage,
const std::string& url,
const webapps::AppId& app_id,
const webapps::AppId& expected_app_id);
void LogDownloadedIconsErrors(
const WebAppInstallInfo& web_app_info,
IconsDownloadedResult icons_downloaded_result,
const IconsMap& icons_map,
const DownloadedIconsHttpResults& icons_http_results);
private:
void LogHeaderIfLogEmpty(const std::string& url);
void LogErrorObject(const char* stage,
const std::string& url,
base::Value::Dict object);
std::unique_ptr<base::Value::Dict> error_dict_;
bool background_installation_;
webapps::WebappInstallSource install_surface_;
};
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_WEB_APP_LOGGING_H_