Flutter Engine
 
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(void,
56 OnPlatformViewDispatchSemanticsAction,
57 (int64_t view_id,
58 int32_t node_id,
61 (override));
62 MOCK_METHOD(void,
63 OnPlatformViewSetSemanticsEnabled,
64 (bool enabled),
65 (override));
66 MOCK_METHOD(void,
67 OnPlatformViewSetAccessibilityFeatures,
68 (int32_t flags),
69 (override));
70 MOCK_METHOD(void,
71 OnPlatformViewRegisterTexture,
72 (std::shared_ptr<Texture> texture),
73 (override));
74 MOCK_METHOD(void,
75 OnPlatformViewUnregisterTexture,
76 (int64_t texture_id),
77 (override));
78 MOCK_METHOD(void,
79 OnPlatformViewMarkTextureFrameAvailable,
80 (int64_t texture_id),
81 (override));
82 MOCK_METHOD(void,
84 (intptr_t loading_unit_id,
85 std::unique_ptr<const fml::Mapping> snapshot_data,
86 std::unique_ptr<const fml::Mapping> snapshot_instructions),
87 (override));
88 MOCK_METHOD(void,
89 LoadDartDeferredLibraryError,
90 (intptr_t loading_unit_id,
91 const std::string error_message,
92 bool transient),
93 (override));
94 MOCK_METHOD(void,
95 UpdateAssetResolverByType,
96 (std::unique_ptr<AssetResolver> updated_asset_resolver,
98 (override));
99 MOCK_METHOD(const Settings&,
100 OnPlatformViewGetSettings,
101 (),
102 (const, override));
103};
104
105class MockResponse : public PlatformMessageResponse {
106 public:
107 MOCK_METHOD(void, Complete, (std::unique_ptr<fml::Mapping> data), (override));
108 MOCK_METHOD(void, CompleteEmpty, (), (override));
109};
110} // namespace
111
112TEST(PlatformViewEmbedderTest, HasPlatformMessageHandler) {
113 ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".",
116 "HasPlatformMessageHandler", thread_host.platform_thread->GetTaskRunner(),
117 nullptr, nullptr, nullptr);
119 task_runners.GetPlatformTaskRunner()->PostTask([&latch, task_runners] {
120 MockDelegate delegate;
122 PlatformViewEmbedder::PlatformDispatchTable platform_dispatch_table;
123 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder;
124 auto embedder = std::make_unique<PlatformViewEmbedder>(
125 delegate, task_runners, software_dispatch_table,
126 platform_dispatch_table, external_view_embedder);
127
128 ASSERT_TRUE(embedder->GetPlatformMessageHandler());
129 latch.Signal();
130 });
131 latch.Wait();
132}
133
134TEST(PlatformViewEmbedderTest, Dispatches) {
135 ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".",
138 "HasPlatformMessageHandler", thread_host.platform_thread->GetTaskRunner(),
139 nullptr, nullptr, nullptr);
140 bool did_call = false;
141 std::unique_ptr<PlatformViewEmbedder> embedder;
142 {
144 task_runners.GetPlatformTaskRunner()->PostTask([&latch, task_runners,
145 &did_call, &embedder] {
146 MockDelegate delegate;
148 PlatformViewEmbedder::PlatformDispatchTable platform_dispatch_table;
149 platform_dispatch_table.platform_message_response_callback =
150 [&did_call](std::unique_ptr<PlatformMessage> message) {
151 did_call = true;
152 };
153 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder;
154 embedder = std::make_unique<PlatformViewEmbedder>(
155 delegate, task_runners, software_dispatch_table,
156 platform_dispatch_table, external_view_embedder);
157 auto platform_message_handler = embedder->GetPlatformMessageHandler();
159 fml::MakeRefCounted<MockResponse>();
160 std::unique_ptr<PlatformMessage> message =
161 std::make_unique<PlatformMessage>("foo", response);
162 platform_message_handler->HandlePlatformMessage(std::move(message));
163 latch.Signal();
164 });
165 latch.Wait();
166 }
167 {
169 thread_host.platform_thread->GetTaskRunner()->PostTask([&latch, &embedder] {
170 embedder.reset();
171 latch.Signal();
172 });
173 latch.Wait();
174 }
175
176 EXPECT_TRUE(did_call);
177}
178
179TEST(PlatformViewEmbedderTest, DeletionDisabledDispatch) {
180 ThreadHost thread_host("io.flutter.test." + GetCurrentTestName() + ".",
183 "HasPlatformMessageHandler", thread_host.platform_thread->GetTaskRunner(),
184 nullptr, nullptr, nullptr);
185 bool did_call = false;
186 {
188 task_runners.GetPlatformTaskRunner()->PostTask([&latch, task_runners,
189 &did_call] {
190 MockDelegate delegate;
192 PlatformViewEmbedder::PlatformDispatchTable platform_dispatch_table;
193 platform_dispatch_table.platform_message_response_callback =
194 [&did_call](std::unique_ptr<PlatformMessage> message) {
195 did_call = true;
196 };
197 std::shared_ptr<EmbedderExternalViewEmbedder> external_view_embedder;
198 auto embedder = std::make_unique<PlatformViewEmbedder>(
199 delegate, task_runners, software_dispatch_table,
200 platform_dispatch_table, external_view_embedder);
201 auto platform_message_handler = embedder->GetPlatformMessageHandler();
203 fml::MakeRefCounted<MockResponse>();
204 std::unique_ptr<PlatformMessage> message =
205 std::make_unique<PlatformMessage>("foo", response);
206 platform_message_handler->HandlePlatformMessage(std::move(message));
207 embedder.reset();
208 latch.Signal();
209 });
210 latch.Wait();
211 }
212 {
214 thread_host.platform_thread->GetTaskRunner()->PostTask(
215 [&latch] { latch.Signal(); });
216 latch.Wait();
217 }
218
219 EXPECT_FALSE(did_call);
220}
221
222} // namespace testing
223} // namespace flutter
GLenum type
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
G_BEGIN_DECLS G_MODULE_EXPORT FlValue * args
G_BEGIN_DECLS GBytes * message
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
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