blob: 9a8bc48137a6d89c3ea9d54543b097a13763f504 [file] [log] [blame]
// Copyright 2021 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_FINDER_ASYNC_FIND_BUFFER_H_
#define THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_FINDER_ASYNC_FIND_BUFFER_H_
#include "base/callback.h"
#include "third_party/blink/renderer/core/editing/finder/find_buffer_runner.h"
#include "third_party/blink/renderer/core/editing/finder/find_options.h"
#include "third_party/blink/renderer/core/editing/forward.h"
#include "third_party/blink/renderer/core/editing/range_in_flat_tree.h"
#include "third_party/blink/renderer/platform/scheduler/public/post_cancellable_task.h"
namespace blink {
// This is used as an asynchronous wrapper around FindBuffer to provide a
// callback-based interface.
class AsyncFindBuffer final : public FindBufferRunner {
public:
explicit AsyncFindBuffer() = default;
~AsyncFindBuffer() = default;
void FindMatchInRange(RangeInFlatTree* search_range,
String search_text,
FindOptions options,
Callback completeCallback) override;
void Cancel() override;
bool IsActive() override { return pending_find_match_task_.IsActive(); }
private:
void Run(RangeInFlatTree* search_range,
String search_text,
FindOptions options,
Callback completeCallback);
void NextIteration(RangeInFlatTree* search_range,
String search_text,
FindOptions options,
Callback completeCallback);
TaskHandle pending_find_match_task_;
// Number of iterations it took to complete |FindMatchInRange| request. Used
// for recording UMA histograms.
int iterations_ = 0;
// |FindMatchInRange| start time. Used for recorsing UMA histograms.
base::TimeTicks search_start_time_;
};
} // namespace blink
#endif // THIRD_PARTY_BLINK_RENDERER_CORE_EDITING_FINDER_ASYNC_FIND_BUFFER_H_