blob: be508dec74bebba5bf0410b4fb0fb2b553e647ba [file] [log] [blame]
// Copyright 2025 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_ACTOR_UI_DOM_NODE_GEOMETRY_H_
#define CHROME_BROWSER_ACTOR_UI_DOM_NODE_GEOMETRY_H_
#include "base/types/expected.h"
#include "chrome/browser/actor/shared_types.h"
#include "chrome/browser/actor/ui/dom_node_geometry_types.h"
#include "components/optimization_guide/proto/features/common_quality_data.pb.h"
#include "third_party/abseil-cpp/absl/container/flat_hash_map.h"
#include "ui/gfx/geometry/point.h"
namespace actor::ui {
class DomNodeGeometry {
public:
using NodeGeomMap =
absl::flat_hash_map<DomNode,
optimization_guide::proto::ContentAttributes>;
~DomNodeGeometry();
static std::unique_ptr<DomNodeGeometry> InitFromApc(
const optimization_guide::proto::AnnotatedPageContent& apc);
// Resolves a DomNode to its center point coordinates. GetDomNodeResult will
// indicate an error. Errors during construction are returned persistently
// from GetDomNode().
base::expected<gfx::Point, GetDomNodeResult> GetDomNode(
const DomNode& node) const;
private:
base::expected<gfx::Point, GetDomNodeResult> InternalGetDomNode(
const DomNode& node) const;
explicit DomNodeGeometry(NodeGeomMap map);
explicit DomNodeGeometry(GetDomNodeResult construction_error);
std::optional<GetDomNodeResult> init_error_; // Errors during initialization
const NodeGeomMap node_map_;
};
} // namespace actor::ui
#endif // CHROME_BROWSER_ACTOR_UI_DOM_NODE_GEOMETRY_H_