Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
sxychenjing
engine
提交
66092d5b
E
engine
项目概览
sxychenjing
/
engine
与 Fork 源项目一致
从无法访问的项目Fork
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
engine
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
66092d5b
编写于
7月 16, 2019
作者:
P
Pierre Champion
提交者:
Chinmay Garde
7月 16, 2019
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
SendPlatformMessage allow null message value (#9781)
上级
69cacb5f
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
94 addition
and
8 deletion
+94
-8
shell/platform/embedder/embedder.cc
shell/platform/embedder/embedder.cc
+18
-8
shell/platform/embedder/fixtures/main.dart
shell/platform/embedder/fixtures/main.dart
+11
-0
shell/platform/embedder/tests/embedder_unittests.cc
shell/platform/embedder/tests/embedder_unittests.cc
+65
-0
未找到文件。
shell/platform/embedder/embedder.cc
浏览文件 @
66092d5b
...
...
@@ -814,8 +814,14 @@ FlutterEngineResult FlutterEngineSendPlatformMessage(
return
LOG_EMBEDDER_ERROR
(
kInvalidArguments
);
}
if
(
SAFE_ACCESS
(
flutter_message
,
channel
,
nullptr
)
==
nullptr
||
SAFE_ACCESS
(
flutter_message
,
message
,
nullptr
)
==
nullptr
)
{
if
(
SAFE_ACCESS
(
flutter_message
,
channel
,
nullptr
)
==
nullptr
)
{
return
LOG_EMBEDDER_ERROR
(
kInvalidArguments
);
}
size_t
message_size
=
SAFE_ACCESS
(
flutter_message
,
message_size
,
0
);
const
uint8_t
*
message_data
=
SAFE_ACCESS
(
flutter_message
,
message
,
nullptr
);
if
(
message_size
!=
0
&&
message_data
==
nullptr
)
{
return
LOG_EMBEDDER_ERROR
(
kInvalidArguments
);
}
...
...
@@ -827,12 +833,16 @@ FlutterEngineResult FlutterEngineSendPlatformMessage(
response
=
response_handle
->
message
->
response
();
}
auto
message
=
fml
::
MakeRefCounted
<
flutter
::
PlatformMessage
>
(
flutter_message
->
channel
,
std
::
vector
<
uint8_t
>
(
flutter_message
->
message
,
flutter_message
->
message
+
flutter_message
->
message_size
),
response
);
fml
::
RefPtr
<
flutter
::
PlatformMessage
>
message
;
if
(
message_size
==
0
)
{
message
=
fml
::
MakeRefCounted
<
flutter
::
PlatformMessage
>
(
flutter_message
->
channel
,
response
);
}
else
{
message
=
fml
::
MakeRefCounted
<
flutter
::
PlatformMessage
>
(
flutter_message
->
channel
,
std
::
vector
<
uint8_t
>
(
message_data
,
message_data
+
message_size
),
response
);
}
return
reinterpret_cast
<
flutter
::
EmbedderEngine
*>
(
engine
)
->
SendPlatformMessage
(
std
::
move
(
message
))
...
...
shell/platform/embedder/fixtures/main.dart
浏览文件 @
66092d5b
...
...
@@ -167,3 +167,14 @@ void platform_messages_no_response() {
};
signalNativeTest
();
}
@pragma
(
'vm:entry-point'
)
void
null_platform_messages
(
)
{
window
.
onPlatformMessage
=
(
String
name
,
ByteData
data
,
PlatformMessageResponseCallback
callback
)
{
// This checks if the platform_message null data is converted to Flutter null.
signalNativeMessage
((
null
==
data
).
toString
());
callback
(
data
);
};
signalNativeTest
();
}
shell/platform/embedder/tests/embedder_unittests.cc
浏览文件 @
66092d5b
...
...
@@ -400,5 +400,70 @@ TEST_F(EmbedderTest, PlatformMessagesCanBeSentWithoutResponseHandles) {
message
.
Wait
();
}
//------------------------------------------------------------------------------
/// Tests that a null platform message can be sent.
///
TEST_F
(
EmbedderTest
,
NullPlatformMessagesCanBeSent
)
{
auto
&
context
=
GetEmbedderContext
();
EmbedderConfigBuilder
builder
(
context
);
builder
.
SetDartEntrypoint
(
"null_platform_messages"
);
fml
::
AutoResetWaitableEvent
ready
,
message
;
context
.
AddNativeCallback
(
"SignalNativeTest"
,
CREATE_NATIVE_ENTRY
(
[
&
ready
](
Dart_NativeArguments
args
)
{
ready
.
Signal
();
}));
context
.
AddNativeCallback
(
"SignalNativeMessage"
,
CREATE_NATIVE_ENTRY
(([
&
message
](
Dart_NativeArguments
args
)
{
auto
received_message
=
tonic
::
DartConverter
<
std
::
string
>::
FromDart
(
Dart_GetNativeArgument
(
args
,
0
));
ASSERT_EQ
(
"true"
,
received_message
);
message
.
Signal
();
})));
auto
engine
=
builder
.
LaunchEngine
();
ASSERT_TRUE
(
engine
.
is_valid
());
ready
.
Wait
();
FlutterPlatformMessage
platform_message
=
{};
platform_message
.
struct_size
=
sizeof
(
FlutterPlatformMessage
);
platform_message
.
channel
=
"test_channel"
;
platform_message
.
message
=
nullptr
;
platform_message
.
message_size
=
0
;
platform_message
.
response_handle
=
nullptr
;
// No response needed.
auto
result
=
FlutterEngineSendPlatformMessage
(
engine
.
get
(),
&
platform_message
);
ASSERT_EQ
(
result
,
kSuccess
);
message
.
Wait
();
}
//------------------------------------------------------------------------------
/// Tests that a null platform message cannot be send if the message_size
/// isn't equals to 0.
///
TEST_F
(
EmbedderTest
,
InvalidPlatformMessages
)
{
auto
&
context
=
GetEmbedderContext
();
EmbedderConfigBuilder
builder
(
context
);
auto
engine
=
builder
.
LaunchEngine
();
ASSERT_TRUE
(
engine
.
is_valid
());
FlutterPlatformMessage
platform_message
=
{};
platform_message
.
struct_size
=
sizeof
(
FlutterPlatformMessage
);
platform_message
.
channel
=
"test_channel"
;
platform_message
.
message
=
nullptr
;
platform_message
.
message_size
=
1
;
platform_message
.
response_handle
=
nullptr
;
// No response needed.
auto
result
=
FlutterEngineSendPlatformMessage
(
engine
.
get
(),
&
platform_message
);
ASSERT_EQ
(
result
,
kInvalidArguments
);
}
}
// namespace testing
}
// namespace flutter
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录