// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_ACCESSIBILITY_AX_OBJECT_CACHE_BASE_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_ACCESSIBILITY_AX_OBJECT_CACHE_BASE_H_

#include "third_party/blink/renderer/core/accessibility/ax_object_cache.h"
#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/platform/wtf/casting.h"

namespace blink {

class LayoutObject;
class Node;
class AXObject;

// AXObjectCacheBase is a temporary class that sits between AXObjectCache and
// AXObject and contains methods required by web/ that we don't want to be
// available in the public API (AXObjectCache).
// TODO(dmazzoni): Once all dependencies in web/ use this class instead of
// AXObjectCacheImpl, refactor usages to use AXObjectCache instead (introducing
// new public API methods or similar) and remove this class.
class CORE_EXPORT AXObjectCacheBase : public AXObjectCache {
 public:
  AXObjectCacheBase(const AXObjectCacheBase&) = delete;
  AXObjectCacheBase& operator=(const AXObjectCacheBase&) = delete;
  ~AXObjectCacheBase() override = default;

  virtual AXObject* Get(const Node*) = 0;
  virtual AXObject* GetOrCreate(LayoutObject*,
                                AXObject* parent_if_known = nullptr) = 0;

 protected:
  AXObjectCacheBase() = default;
};

template <>
struct DowncastTraits<AXObjectCacheBase> {
  // All concrete implementations of AXObjectCache are derived from
  // AXObjectCacheBase.
  static bool AllowFrom(const AXObjectCache& cache) { return true; }
};

}  // namespace blink

#endif
