1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
|
// Copyright 2024 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef COMPONENTS_INPUT_ANDROID_INPUT_RECEIVER_DATA_H_
#define COMPONENTS_INPUT_ANDROID_INPUT_RECEIVER_DATA_H_
#include <memory>
#include "base/component_export.h"
#include "base/memory/weak_ptr.h"
#include "components/input/android/android_input_callback.h"
#include "components/input/android/scoped_input_receiver.h"
#include "components/input/android/scoped_input_receiver_callbacks.h"
#include "components/input/android/scoped_input_transfer_token.h"
#include "ui/gfx/android/android_surface_control_compat.h"
namespace input {
// Store all the obects that are required throughout input receiver lifecycle
class COMPONENT_EXPORT(INPUT) InputReceiverData
: public AndroidInputCallback::Observer {
public:
InputReceiverData(
scoped_refptr<gfx::SurfaceControl::Surface> parent_input_sc,
scoped_refptr<gfx::SurfaceControl::Surface> input_sc,
ScopedInputTransferToken browser_input_token,
std::unique_ptr<AndroidInputCallback> android_input_callback,
ScopedInputReceiverCallbacks callbacks,
ScopedInputReceiver receiver,
ScopedInputTransferToken viz_input_token);
~InputReceiverData() override;
// AndroidInputCallback::Observer:
void OnMotionEvent(
const base::android::ScopedInputEvent& input_event) override;
// `receiver` is only set for Android 16+, where the receiver could be either
// destroyed right away or waits for touch sequence to have finished before
// destroying receiver.
void OnDestroyedCompositorFrameSink(
std::unique_ptr<InputReceiverData> receiver);
const viz::FrameSinkId& root_frame_sink_id() {
return android_input_callback_->root_frame_sink_id();
}
// Attaches(reparents) the input surface control to a surface control linked
// to surface hierarchy(`parent_input_sc`) of root compositor. The "detach"
// happens when we receive OnDestroyedCompositorFrameSink notification for the
// attached root compositor frame sink.
void AttachToFrameSink(
const viz::FrameSinkId& root_frame_sink_id,
scoped_refptr<gfx::SurfaceControl::Surface> parent_input_sc);
const ScopedInputTransferToken& viz_input_token() const {
return viz_input_token_;
}
const ScopedInputTransferToken& browser_input_token() const {
return browser_input_token_;
}
private:
void DetachInputSurface();
void TryDestroySelf(std::unique_ptr<InputReceiverData> receiver_data);
scoped_refptr<gfx::SurfaceControl::Surface> parent_input_sc_;
scoped_refptr<gfx::SurfaceControl::Surface> input_sc_;
ScopedInputTransferToken browser_input_token_;
std::unique_ptr<AndroidInputCallback> android_input_callback_;
ScopedInputReceiverCallbacks callbacks_;
ScopedInputReceiver receiver_;
ScopedInputTransferToken viz_input_token_;
bool pending_destruction_ = false;
int last_motion_event_action_ = -1;
base::TimeTicks last_motion_event_ts_;
base::WeakPtrFactory<InputReceiverData> weak_ptr_factory_{this};
};
} // namespace input
#endif // COMPONENTS_INPUT_ANDROID_INPUT_RECEIVER_DATA_H_
|