// 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_EDITING_SPELLCHECK_COLD_MODE_SPELL_CHECK_REQUESTER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_SPELLCHECK_COLD_MODE_SPELL_CHECK_REQUESTER_H_

#include "third_party/blink/renderer/core/editing/forward.h"
#include "third_party/blink/renderer/core/editing/position.h"
#include "third_party/blink/renderer/platform/heap/handle.h"

namespace blink {

class Element;
class LocalDOMWindow;
class IdleDeadline;
class SpellCheckRequester;

// This class is only supposed to be used by IdleSpellCheckController in cold
// mode invocation. Not to be confused with SpellCheckRequester. The class
// iteratively checks the editing host currently focused when the document is
// idle.
// See design doc for details: https://goo.gl/zONC3v
class ColdModeSpellCheckRequester
    : public GarbageCollected<ColdModeSpellCheckRequester> {
 public:
  explicit ColdModeSpellCheckRequester(LocalDOMWindow&);

  void SetNeedsMoreInvocationForTesting() {
    needs_more_invocation_for_testing_ = true;
  }

  void Invoke(IdleDeadline*);

  void ClearProgress();
  bool FullyChecked() const;

  void Trace(Visitor*) const;

 private:
  SpellCheckRequester& GetSpellCheckRequester() const;

  const Element* CurrentFocusedEditable() const;

  void RequestCheckingForNextChunk();
  void SetHasFullyChecked();

  // The window this cold mode checker belongs to.
  const Member<LocalDOMWindow> window_;

  // The root editable element checked in the last invocation. |nullptr| if not
  // invoked yet or didn't find any root editable element to check.
  Member<const Element> root_editable_;

  // If |root_editable_| is non-null and hasn't been fully checked, the id of
  // the last checked chunk and the remaining range to check;
  // Otherwise, |kInvalidChunkIndex| and null.
  int last_chunk_index_;
  Member<Range> remaining_check_range_;

  // A test-only flag for forcing lifecycle advancing.
  mutable bool needs_more_invocation_for_testing_;

  DISALLOW_COPY_AND_ASSIGN(ColdModeSpellCheckRequester);
};
}

#endif
