Flutter Engine Uber Docs
Docs for the entire Flutter Engine repo.
 
Loading...
Searching...
No Matches
platform_view_embedder_unittests.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
6
9
10#include "gmock/gmock.h"
11#include "gtest/gtest.h"
12
13#include <cstring>
14
15namespace flutter {
16namespace testing {
17namespace {
18class MockDelegate : public PlatformView::Delegate {
19 MOCK_METHOD(void,
20 OnPlatformViewCreated,
21 (std::unique_ptr<Surface>),
22 (override));
23 MOCK_METHOD(void, OnPlatformViewDestroyed, (), (override));
24 MOCK_METHOD(void, OnPlatformViewScheduleFrame, (), (override));
25 MOCK_METHOD(void,
26 OnPlatformViewAddView,
27 (int64_t view_id,
28 const ViewportMetrics& viewport_metrics,
29 AddViewCallback callback),
30 (override));
31 MOCK_METHOD(void,
32 OnPlatformViewRemoveView,
33 (int64_t view_id, RemoveViewCallback callback),
34 (override));
35 MOCK_METHOD(void,
36 OnPlatformViewSendViewFocusEvent,
37 (const ViewFocusEvent& event),
38 (override));
39 MOCK_METHOD(void,
40 OnPlatformViewSetNextFrameCallback,
41 (const fml::closure& closure),
42 (override));
43 MOCK_METHOD(void,
44 OnPlatformViewSetViewportMetrics,
45 (int64_t view_id, const ViewportMetrics& metrics),
46 (override));
47 MOCK_METHOD(void,
48 OnPlatformViewDispatchPlatformMessage,
49 (std::unique_ptr<PlatformMessage> message),
50 (override));
51 MOCK_METHOD(void,
52 OnPlatformViewDispatchPointerDataPacket,
53 (std::unique_ptr<PointerDataPacket> packet),
54 (override));
55 MOCK_METHOD(HitTestResponse,
56 OnPlatformViewHitTest,
57 (int64_t view_id, const flutter::PointData offset),
58 (override));
59 MOCK_METHOD(void,
60 OnPlatformViewDispatchSemanticsAction,
61 (int64_t view_id,
62 int32_t node_id,
65 (override));
66 MOCK_METHOD(void,
67 OnPlatformViewSetSemanticsEnabled,
68 (bool enabled),
69 (override));
70 MOCK_METHOD(void,
71 OnPlatformViewSetAccessibilityFeatures,
72 (int32_t flags),
73 (override));
74 MOCK_METHOD(void,
75 OnPlatformViewRegisterTexture,
76 (std::shared_ptr<Texture> texture),
77 (override));
78 MOCK_METHOD(void,
79 OnPlatformViewUnregisterTexture,
80 (int64_t texture_id),
81 (override));
82 MOCK_METHOD(void,
83 OnPlatformViewMarkTextureFrameAvailable,
84 (int64_t texture_id),
85 (override));
86 MOCK_METHOD(void,
88 (intptr_t loading_unit_id,
89 std::unique_ptr<const fml::Mapping> snapshot_data,
90 std::unique_ptr<const fml::Mapping> snapshot_instructions),
91 (override));
92 MOCK_METHOD(void,
93 LoadDartDeferredLibraryError,
94 (intptr_t loading_unit_id,
95 const std::string error_message,
96 bool transient),
97 (override));
98 MOCK_METHOD(void,
99 UpdateAssetResolverByType,
100 (std::unique_ptr<AssetResolver> updated_asset_resolver,
102 (override));
103 MOCK_METHOD(const Settings&,
104 OnPlatformViewGetSettings,
105 (),
106 (const, override));
107 MOCK_METHOD(std::shared_ptr<fml::BasicTaskRunner>,
108 OnPlatformViewGetShutdownSafeIOTaskRunner,
109 (),
110 (const, override));
111};
112
113class MockResponse : public PlatformMessageResponse {
114 public:
115 MOCK_METHOD(void, Complete, (std::unique_ptr<fml::Mapping> data), (override));
116 MOCK_METHOD(void, CompleteEmpty, (), (override));
117};
118} // namespace
119
120TEST(PlatformViewEmbedderTest, HasPlatformMessageHandler) {
121 ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".",
124 "HasPlatformMessageHandler", thread_host.platform_thread->GetTaskRunner(),
125 nullptr, nullptr, nullptr);
127 task_runners.GetPlatformTaskRunner()->PostTask([&latch, task_runners] {
128 MockDelegate delegate;
130 PlatformViewEmbedder::PlatformDispatchTable platform_dispatch_table;
131 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder;
132 auto embedder = std::make_unique<PlatformViewEmbedder>(
133 delegate, task_runners, software_dispatch_table,
134 platform_dispatch_table, external_view_embedder);
135
136 ASSERT_TRUE(embedder->GetPlatformMessageHandler());
137 latch.Signal();
138 });
139 latch.Wait();
140}
141
142TEST(PlatformViewEmbedderTest, Dispatches) {
143 ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".",
146 "HasPlatformMessageHandler", thread_host.platform_thread->GetTaskRunner(),
147 nullptr, nullptr, nullptr);
148 bool did_call = false;
149 std::unique_ptr<PlatformViewEmbedder> embedder;
150 {
152 task_runners.GetPlatformTaskRunner()->PostTask([&latch, task_runners,
153 &did_call, &embedder] {
154 MockDelegate delegate;
156 PlatformViewEmbedder::PlatformDispatchTable platform_dispatch_table;
157 platform_dispatch_table.platform_message_response_callback =
158 [&did_call](std::unique_ptr<PlatformMessage> message) {
159 did_call = true;
160 };
161 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder;
162 embedder = std::make_unique<PlatformViewEmbedder>(
163 delegate, task_runners, software_dispatch_table,
164 platform_dispatch_table, external_view_embedder);
165 auto platform_message_handler = embedder->GetPlatformMessageHandler();
167 fml::MakeRefCounted<MockResponse>();
168 std::unique_ptr<PlatformMessage> message =
169 std::make_unique<PlatformMessage>("foo", response);
170 platform_message_handler->HandlePlatformMessage(std::move(message));
171 latch.Signal();
172 });
173 latch.Wait();
174 }
175 {
177 thread_host.platform_thread->GetTaskRunner()->PostTask([&latch, &embedder] {
178 embedder.reset();
179 latch.Signal();
180 });
181 latch.Wait();
182 }
183
184 EXPECT_TRUE(did_call);
185}
186
187TEST(PlatformViewEmbedderTest, DeletionDisabledDispatch) {
188 ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".",
191 "HasPlatformMessageHandler", thread_host.platform_thread->GetTaskRunner(),
192 nullptr, nullptr, nullptr);
193 bool did_call = false;
194 {
196 task_runners.GetPlatformTaskRunner()->PostTask([&latch, task_runners,
197 &did_call] {
198 MockDelegate delegate;
200 PlatformViewEmbedder::PlatformDispatchTable platform_dispatch_table;
201 platform_dispatch_table.platform_message_response_callback =
202 [&did_call](std::unique_ptr<PlatformMessage> message) {
203 did_call = true;
204 };
205 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder;
206 auto embedder = std::make_unique<PlatformViewEmbedder>(
207 delegate, task_runners, software_dispatch_table,
208 platform_dispatch_table, external_view_embedder);
209 auto platform_message_handler = embedder->GetPlatformMessageHandler();
211 fml::MakeRefCounted<MockResponse>();
212 std::unique_ptr<PlatformMessage> message =
213 std::make_unique<PlatformMessage>("foo", response);
214 platform_message_handler->HandlePlatformMessage(std::move(message));
215 embedder.reset();
216 latch.Signal();
217 });
218 latch.Wait();
219 }
220 {
222 thread_host.platform_thread->GetTaskRunner()->PostTask(
223 [&latch] { latch.Signal(); });
224 latch.Wait();
225 }
226
227 EXPECT_FALSE(did_call);
228}
229
230} // namespace testing
231} // namespace flutter
AssetResolverType
Identifies the type of AssetResolver an instance is.
fml::RefPtr< fml::TaskRunner > GetPlatformTaskRunner() const
A Mapping like NonOwnedMapping, but uses Free as its release proc.
Definition mapping.h:144
virtual void PostTask(const fml::closure &task) override
const char * message
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_BEGIN_DECLS FlutterViewId view_id
FlutterDesktopBinaryReply callback
FlTexture * texture
std::string GetCurrentTestName()
Gets the name of the currently running test. This is useful in generating logs or assets based on tes...
Definition testing.cc:14
TEST(NativeAssetsManagerTest, NoAvailableAssets)
static void LoadDartDeferredLibrary(JNIEnv *env, jobject obj, jlong shell_holder, jint jLoadingUnitId, jobjectArray jSearchPaths)
DEF_SWITCHES_START aot vmservice shared library Name of the *so containing AOT compiled Dart assets for launching the service isolate vm snapshot data
Definition switch_defs.h:36
std::function< void()> closure
Definition closure.h:14
impeller::ShaderType type
PlatformMessageResponseCallback platform_message_response_callback
The collection of all the threads used by the engine.
Definition thread_host.h:21
std::unique_ptr< fml::Thread > platform_thread
Definition thread_host.h:83
int64_t texture_id