blob: f1695110c99a698eae8873c4360fd83f8162a7fd [file] [log] [blame]
// Copyright 2016 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_PUBLIC_COMMON_INPUT_WEB_COALESCED_INPUT_EVENT_H_
#define THIRD_PARTY_BLINK_PUBLIC_COMMON_INPUT_WEB_COALESCED_INPUT_EVENT_H_
#include <memory>
#include <vector>
#include "third_party/blink/public/common/common_export.h"
#include "third_party/blink/public/common/input/web_input_event.h"
#include "third_party/blink/public/common/input/web_pointer_event.h"
#include "ui/latency/latency_info.h"
namespace blink {
// This class represents a polymorphic WebInputEvent structure with its
// coalesced events. The event could be any event defined in web_input_event.h,
// including those that cannot be coalesced.
class BLINK_COMMON_EXPORT WebCoalescedInputEvent {
public:
WebCoalescedInputEvent(const WebInputEvent&, const ui::LatencyInfo&);
WebCoalescedInputEvent(std::unique_ptr<WebInputEvent>,
const ui::LatencyInfo&);
WebCoalescedInputEvent(std::unique_ptr<WebInputEvent>,
std::vector<std::unique_ptr<WebInputEvent>>,
std::vector<std::unique_ptr<WebInputEvent>>,
const ui::LatencyInfo&);
// Copy constructor to deep copy the event.
WebCoalescedInputEvent(const WebCoalescedInputEvent&);
~WebCoalescedInputEvent();
WebInputEvent* EventPointer();
void AddCoalescedEvent(const blink::WebInputEvent&);
const WebInputEvent& Event() const;
size_t CoalescedEventSize() const;
const WebInputEvent& CoalescedEvent(size_t index) const;
const std::vector<std::unique_ptr<WebInputEvent>>&
GetCoalescedEventsPointers() const;
void AddPredictedEvent(const blink::WebInputEvent&);
size_t PredictedEventSize() const;
const WebInputEvent& PredictedEvent(size_t index) const;
const std::vector<std::unique_ptr<WebInputEvent>>&
GetPredictedEventsPointers() const;
const ui::LatencyInfo& latency_info() const { return latency_; }
ui::LatencyInfo& latency_info() { return latency_; }
bool CanCoalesceWith(const WebCoalescedInputEvent& other) const
WARN_UNUSED_RESULT;
// Coalesce with the |newer_event|. This object will be updated to take into
// account |newer_event|'s fields.
void CoalesceWith(const WebCoalescedInputEvent& newer_event);
private:
std::unique_ptr<WebInputEvent> event_;
std::vector<std::unique_ptr<WebInputEvent>> coalesced_events_;
std::vector<std::unique_ptr<WebInputEvent>> predicted_events_;
ui::LatencyInfo latency_;
};
} // namespace blink
#endif