// Copyright 2018 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_CSS_DOCUMENT_STYLE_ENVIRONMENT_VARIABLES_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_CSS_DOCUMENT_STYLE_ENVIRONMENT_VARIABLES_H_

#include "third_party/blink/renderer/core/core_export.h"
#include "third_party/blink/renderer/core/css/style_environment_variables.h"
#include "third_party/blink/renderer/platform/heap/persistent.h"

namespace blink {

class Document;

// DocumentStyleEnvironmentVariables is bound 1:1 to a document and provides
// document level invalidation logic.
class CORE_EXPORT DocumentStyleEnvironmentVariables
    : public StyleEnvironmentVariables {
 public:
  // Generate a hash from the provided name.
  static unsigned GenerateHashFromName(const AtomicString&);

  // Create an instance bound to |parent| that will invalidate |document|'s
  // style when a variable is changed.
  static scoped_refptr<DocumentStyleEnvironmentVariables> Create(
      StyleEnvironmentVariables& parent,
      Document& document);

  // Resolve the variable |name| and return the data. This will also cause
  // future changes to this variable to invalidate the associated document's
  // style. If |record_metrics| is true we will record UseCounter metrics when
  // this function is called.
  CSSVariableData* ResolveVariable(const AtomicString& name,
                                   bool record_metrics);

  // Resolve the variable |name| and return the data. This will also cause
  // future changes to this variable to invalidate the associated document's
  // style. UseCounter metrics will be recorded when this function is used.
  CSSVariableData* ResolveVariable(const AtomicString& name) override;

 protected:
  // Called when variable |name| is changed. This will notify any children that
  // this variable has changed.
  void InvalidateVariable(const AtomicString& name) override;

 private:
  DocumentStyleEnvironmentVariables(Document& document);

  // Record variable usage using |UseCounter|.
  void RecordVariableUsage(unsigned id);

  HashSet<unsigned> seen_variables_;
  Persistent<Document> document_;
};

}  // namespace blink

#endif  // THIRD_PARTY_BLINK_RENDERER_CORE_CSS_DOCUMENT_STYLE_ENVIRONMENT_VARIABLES_H_
