From 331960ee2d33937f4ec665fe5a53a654d927770c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 17 Sep 2019 13:15:32 -0700 Subject: [PATCH 01/15] waypoint --- ci/licenses_golden/licenses_flutter | 4 +- shell/platform/fuchsia/flutter/BUILD.gn | 32 +- .../flutter/accessibility_bridge_unittest.cc | 264 +++++++++++++ .../fuchsia/flutter/flutter_runner_fakes.h | 146 +++++++ .../fuchsia/flutter/platform_view_unittest.cc | 356 ++++++++++++++++++ .../fuchsia/flutter/sample_unittests.cc | 15 - 6 files changed, 800 insertions(+), 17 deletions(-) create mode 100644 shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc create mode 100644 shell/platform/fuchsia/flutter/flutter_runner_fakes.h create mode 100644 shell/platform/fuchsia/flutter/platform_view_unittest.cc delete mode 100644 shell/platform/fuchsia/flutter/sample_unittests.cc diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index dbb8643280c0d..11c50eb6b98bb 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -914,6 +914,7 @@ FILE: ../../../flutter/shell/platform/fuchsia/dart_runner/vmservice/empty.dart FILE: ../../../flutter/shell/platform/fuchsia/dart_runner/vmservice/meta/vmservice.cmx FILE: ../../../flutter/shell/platform/fuchsia/flutter/accessibility_bridge.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/accessibility_bridge.h +FILE: ../../../flutter/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/collect_traces.dart FILE: ../../../flutter/shell/platform/fuchsia/flutter/component.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/component.h @@ -921,6 +922,7 @@ FILE: ../../../flutter/shell/platform/fuchsia/flutter/compositor_context.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/compositor_context.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/engine.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/engine.h +FILE: ../../../flutter/shell/platform/fuchsia/flutter/flutter_runner_fakes.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/isolate_configurator.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/isolate_configurator.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/kernel/extract_far.dart @@ -941,11 +943,11 @@ FILE: ../../../flutter/shell/platform/fuchsia/flutter/meta/jit_product_runtime FILE: ../../../flutter/shell/platform/fuchsia/flutter/meta/jit_runtime FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view.h +FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view_unittests.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner_context.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner_context.h -FILE: ../../../flutter/shell/platform/fuchsia/flutter/sample_unittests.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/service_provider_dir.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/service_provider_dir.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/session_connection.cc diff --git a/shell/platform/fuchsia/flutter/BUILD.gn b/shell/platform/fuchsia/flutter/BUILD.gn index b5aaa5c999804..7a5d12a74328d 100644 --- a/shell/platform/fuchsia/flutter/BUILD.gn +++ b/shell/platform/fuchsia/flutter/BUILD.gn @@ -247,14 +247,44 @@ executable("flutter_runner_unittests") { output_name = "flutter_runner_tests" sources = [ - "sample_unittests.cc", + "accessibility_bridge.cc", + "accessibility_bridge.h", + "accessibility_bridge_unittest.cc", + "flutter_runner_fakes.h", + "logging.h", + "platform_view.cc", + "platform_view.h", + "platform_view_unittest.cc", + "surface.cc", + "surface.h", + "vsync_recorder.cc", + "vsync_recorder.h", + "vsync_waiter.cc", + "vsync_waiter.h", ] # This is needed for //third_party/googletest for linking zircon symbols. libs = [ "//fuchsia/sdk/$host_os/arch/$target_cpu/sysroot/lib/libzircon.so" ] deps = [ + ":jit", "//flutter/testing", + "//flutter/lib/ui", + "//flutter/shell/common", + "//build/fuchsia/fidl:fuchsia.accessibility.semantics", + "//build/fuchsia/fidl:fuchsia.modular", + "//build/fuchsia/fidl:fuchsia.sys", + "//build/fuchsia/fidl:fuchsia.ui.scenic", + "//build/fuchsia/pkg:async-loop-cpp", + "//build/fuchsia/pkg:sys_cpp", + "//build/fuchsia/pkg:sys_cpp_testing", + "//build/fuchsia/pkg:scenic_cpp", + "//build/fuchsia/pkg:zx", + "//third_party/dart/runtime:libdart_jit", + "//third_party/dart/runtime/platform:libdart_platform_jit", + "//third_party/googletest:gtest_main", + "//third_party/icu", + "//third_party/skia", ] } diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc new file mode 100644 index 0000000000000..9f2a937732a4e --- /dev/null +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -0,0 +1,264 @@ +// Copyright 2013 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "flutter/shell/platform/fuchsia/flutter/accessibility_bridge.h" + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "flutter/lib/ui/semantics/semantics_node.h" +#include "flutter/shell/platform/fuchsia/flutter/flutter_runner_fakes.h" + +namespace flutter_runner_test { +class AccessibilityBridgeTest : public gtest::RealLoopFixture { + public: + AccessibilityBridgeTest() : services_provider_(dispatcher()) { + services_provider_.AddService(semantics_manager_.GetHandler(dispatcher()), + SemanticsManager::Name_); + } + + protected: + void SetUp() override { + zx::eventpair a, b; + zx::eventpair::create(/* flags */ 0u, &a, &b); + auto view_ref = fuchsia::ui::views::ViewRef({ + .reference = std::move(a), + }); + accessibility_bridge_ = + std::make_unique( + services_provider_.service_directory(), std::move(view_ref)); + RunLoopUntilIdle(); + } + + void TearDown() override { semantics_manager_.ResetTree(); } + + sys::testing::ServiceDirectoryProvider services_provider_; + MockSemanticsManager semantics_manager_; + std::unique_ptr accessibility_bridge_; +}; + +TEST_F(AccessibilityBridgeTest, RegistersViewRef) { + EXPECT_TRUE(semantics_manager_.RegisterViewCalled()); +} + +TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) { + // Test that when a node is deleted, so are its transitive children. + flutter::SemanticsNode node2; + node2.id = 2; + + flutter::SemanticsNode node1; + node1.id = 1; + node1.childrenInTraversalOrder = {2}; + + flutter::SemanticsNode node0; + node0.id = 0; + node0.childrenInTraversalOrder = {1}; + + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + {1, node1}, + {2, node2}, + }); + RunLoopUntilIdle(); + + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(1, semantics_manager_.UpdateCount()); + EXPECT_EQ(1, semantics_manager_.CommitCount()); + EXPECT_EQ(3U, semantics_manager_.LastUpdatedNodes().size()); + EXPECT_EQ(0U, semantics_manager_.LastDeletedNodeIds().size()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); + + // Remove the children + node0.childrenInTraversalOrder.clear(); + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + }); + RunLoopUntilIdle(); + + EXPECT_EQ(1, semantics_manager_.DeleteCount()); + EXPECT_EQ(2, semantics_manager_.UpdateCount()); + EXPECT_EQ(2, semantics_manager_.CommitCount()); + EXPECT_EQ(1U, semantics_manager_.LastUpdatedNodes().size()); + ASSERT_EQ(std::vector({1, 2}), + semantics_manager_.LastDeletedNodeIds()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); +} + +TEST_F(AccessibilityBridgeTest, TruncatesLargeLabel) { + // Test that labels which are too long are truncated. + flutter::SemanticsNode node0; + node0.id = 0; + + flutter::SemanticsNode node1; + node1.id = 1; + + flutter::SemanticsNode bad_node; + bad_node.id = 2; + bad_node.label = + std::string(fuchsia::accessibility::semantics::MAX_LABEL_SIZE + 1, '2'); + + node0.childrenInTraversalOrder = {1, 2}; + + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + {1, node1}, + {2, bad_node}, + }); + RunLoopUntilIdle(); + + // Nothing to delete, but we should have broken + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(1, semantics_manager_.UpdateCount()); + EXPECT_EQ(1, semantics_manager_.CommitCount()); + EXPECT_EQ(3U, semantics_manager_.LastUpdatedNodes().size()); + auto trimmed_node = + std::find_if(semantics_manager_.LastUpdatedNodes().begin(), + semantics_manager_.LastUpdatedNodes().end(), + [id = static_cast(bad_node.id)]( + fuchsia::accessibility::semantics::Node const& node) { + return node.node_id() == id; + }); + ASSERT_NE(trimmed_node, semantics_manager_.LastUpdatedNodes().end()); + ASSERT_TRUE(trimmed_node->has_attributes()); + EXPECT_EQ( + trimmed_node->attributes().label(), + std::string(fuchsia::accessibility::semantics::MAX_LABEL_SIZE, '2')); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); +} + +TEST_F(AccessibilityBridgeTest, SplitsLargeUpdates) { + // Test that labels which are too long are truncated. + flutter::SemanticsNode node0; + node0.id = 0; + + flutter::SemanticsNode node1; + node1.id = 1; + node1.label = + std::string(fuchsia::accessibility::semantics::MAX_LABEL_SIZE, '1'); + + flutter::SemanticsNode node2; + node2.id = 2; + node2.label = "2"; + + flutter::SemanticsNode node3; + node3.id = 3; + node3.label = "3"; + + flutter::SemanticsNode node4; + node4.id = 4; + node4.label = + std::string(fuchsia::accessibility::semantics::MAX_LABEL_SIZE, '4'); + + node0.childrenInTraversalOrder = {1, 2}; + node1.childrenInTraversalOrder = {3, 4}; + + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + {1, node1}, + {2, node2}, + {3, node3}, + {4, node4}, + }); + RunLoopUntilIdle(); + + // Nothing to delete, but we should have broken into groups (4, 3, 2), (1, 0) + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(2, semantics_manager_.UpdateCount()); + EXPECT_EQ(1, semantics_manager_.CommitCount()); + EXPECT_EQ(2U, semantics_manager_.LastUpdatedNodes().size()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); +} + +TEST_F(AccessibilityBridgeTest, HandlesCycles) { + // Test that cycles don't cause fatal error. + flutter::SemanticsNode node0; + node0.id = 0; + node0.childrenInTraversalOrder.push_back(0); + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + }); + RunLoopUntilIdle(); + + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(1, semantics_manager_.UpdateCount()); + EXPECT_EQ(1, semantics_manager_.CommitCount()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); + + node0.childrenInTraversalOrder = {0, 1}; + flutter::SemanticsNode node1; + node1.id = 1; + node1.childrenInTraversalOrder = {0}; + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + {1, node1}, + }); + RunLoopUntilIdle(); + + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(2, semantics_manager_.UpdateCount()); + EXPECT_EQ(2, semantics_manager_.CommitCount()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); +} + +TEST_F(AccessibilityBridgeTest, BatchesLargeMessages) { + // Tests that messages get batched appropriately. + flutter::SemanticsNode node0; + node0.id = 0; + + flutter::SemanticsNodeUpdates update; + + const int32_t child_nodes = fuchsia::accessibility::semantics::MAX_FAN_OUT; + const int32_t leaf_nodes = fuchsia::accessibility::semantics::MAX_FAN_OUT; + for (int32_t i = 1; i < child_nodes + 1; i++) { + flutter::SemanticsNode node; + node.id = i; + node0.childrenInTraversalOrder.push_back(i); + for (int32_t j = 0; j < leaf_nodes; j++) { + flutter::SemanticsNode leaf_node; + int id = (i * child_nodes) + ((j + 1) * leaf_nodes); + leaf_node.id = id; + leaf_node.label = "A relatively simple label"; + node.childrenInTraversalOrder.push_back(id); + update.insert(std::make_pair(id, std::move(leaf_node))); + } + update.insert(std::make_pair(i, std::move(node))); + } + + update.insert(std::make_pair(0, std::move(node0))); + accessibility_bridge_->AddSemanticsNodeUpdate(update); + RunLoopUntilIdle(); + + EXPECT_EQ(0, semantics_manager_.DeleteCount()); + EXPECT_EQ(13, semantics_manager_.UpdateCount()); + EXPECT_EQ(1, semantics_manager_.CommitCount()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); + + // Remove the children + node0.childrenInTraversalOrder.clear(); + accessibility_bridge_->AddSemanticsNodeUpdate({ + {0, node0}, + }); + RunLoopUntilIdle(); + + EXPECT_EQ(1, semantics_manager_.DeleteCount()); + EXPECT_EQ(14, semantics_manager_.UpdateCount()); + EXPECT_EQ(2, semantics_manager_.CommitCount()); + EXPECT_FALSE(semantics_manager_.DeleteOverflowed()); + EXPECT_FALSE(semantics_manager_.UpdateOverflowed()); +} +} // namespace flutter_runner_test diff --git a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h new file mode 100644 index 0000000000000..ec46d143d8b03 --- /dev/null +++ b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h @@ -0,0 +1,146 @@ +// Copyright 2013 The Flutter 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 TOPAZ_RUNTIME_FLUTTER_RUNNER_PLATFORM_VIEW_FAKES_H_ +#define TOPAZ_RUNTIME_FLUTTER_RUNNER_PLATFORM_VIEW_FAKES_H_ + +#include +#include + +namespace flutter_runner_test { +using fuchsia::accessibility::semantics::SemanticsManager; +using AccessibilitySettingsManager = fuchsia::accessibility::SettingsManager; +using AccessibilitySettingsWatcher = fuchsia::accessibility::SettingsWatcher; +using AccessibilitySettingsProvider = fuchsia::accessibility::SettingsProvider; + +class MockSemanticsManager + : public SemanticsManager, + public fuchsia::accessibility::semantics::SemanticTree { + public: + MockSemanticsManager() : tree_binding_(this) {} + + // |fuchsia::accessibility::semantics::SemanticsManager|: + void RegisterView( + fuchsia::ui::views::ViewRef view_ref, + fidl::InterfaceHandle< + fuchsia::accessibility::semantics::SemanticActionListener> + handle, + fidl::InterfaceRequest + semantic_tree) override { + tree_binding_.Bind(std::move(semantic_tree)); + has_view_ref_ = true; + } + + fidl::InterfaceRequestHandler GetHandler( + async_dispatcher_t* dispatcher) { + return bindings_.GetHandler(this, dispatcher); + } + + bool RegisterViewCalled() { return has_view_ref_; } + + void ResetTree() { + update_count_ = 0; + delete_count_ = 0; + commit_count_ = 0; + last_updated_nodes_.clear(); + last_deleted_node_ids_.clear(); + delete_overflowed_ = false; + update_overflowed_ = false; + } + + void UpdateSemanticNodes( + std::vector nodes) override { + update_count_++; + if (!update_overflowed_) { + size_t size = 0; + for (const auto& node : nodes) { + size += sizeof(node); + size += sizeof(node.attributes().label().size()); + } + update_overflowed_ = size > ZX_CHANNEL_MAX_MSG_BYTES; + } + last_updated_nodes_ = std::move(nodes); + } + + void DeleteSemanticNodes(std::vector node_ids) override { + delete_count_++; + if (!delete_overflowed_) { + size_t size = + sizeof(node_ids) + + (node_ids.size() * flutter_runner::AccessibilityBridge::kNodeIdSize); + delete_overflowed_ = size > ZX_CHANNEL_MAX_MSG_BYTES; + } + last_deleted_node_ids_ = std::move(node_ids); + } + + const std::vector& LastDeletedNodeIds() const { + return last_deleted_node_ids_; + } + + int DeleteCount() const { return delete_count_; } + bool DeleteOverflowed() const { return delete_overflowed_; } + + int UpdateCount() const { return update_count_; } + bool UpdateOverflowed() const { return update_overflowed_; } + + int CommitCount() const { return commit_count_; } + + const std::vector& LastUpdatedNodes() + const { + return last_updated_nodes_; + } + + void Commit() override { commit_count_++; } + + private: + bool has_view_ref_ = false; + fidl::BindingSet bindings_; + fidl::Binding tree_binding_; + + std::vector last_updated_nodes_; + bool update_overflowed_; + int update_count_; + int delete_count_; + bool delete_overflowed_; + std::vector last_deleted_node_ids_; + int commit_count_; +}; + +class MockAccessibilitySettingsManager : public AccessibilitySettingsManager { + public: + MockAccessibilitySettingsManager(fuchsia::accessibility::Settings settings) + : settings_(std::move(settings)) {} + ~MockAccessibilitySettingsManager() = default; + + // |fuchsia::accessibility::SettingsManager| + void RegisterSettingProvider( + fidl::InterfaceRequest + settings_provider_request) override {} + + // |fuchsia::accessibility::SettingsManager| + void Watch( + fidl::InterfaceHandle watcher) override { + watch_called_ = true; + auto proxy = watcher.Bind(); + EXPECT_TRUE(proxy); + fuchsia::accessibility::Settings settings = fidl::Clone(settings_); + proxy->OnSettingsChange(std::move(settings)); + } + + fidl::InterfaceRequestHandler GetHandler( + async_dispatcher_t* dispatcher) { + return bindings_.GetHandler(this, dispatcher); + } + + bool WatchCalled() { return watch_called_; } + + private: + bool watch_called_ = false; + fuchsia::accessibility::Settings settings_; + fidl::BindingSet bindings_; +}; + +} // namespace flutter_runner_test + +#endif // TOPAZ_RUNTIME_FLUTTER_RUNNER_PLATFORM_VIEW_FAKES_H_ diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc new file mode 100644 index 0000000000000..c98bbaba3d9c9 --- /dev/null +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -0,0 +1,356 @@ +// Copyright 2019 The Flutter Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "flutter/shell/platform/fuchsia/flutter/platform_view.h" + +#include +#include +#include +#include +#include +#include + +#include +#include + +#include "flutter/lib/ui/window/platform_message.h" +#include "flutter/lib/ui/window/window.h" +#include "flutter/shell/platform/fuchsia/flutter/flutter_runner_fakes.h" +#include "fuchsia/ui/views/cpp/fidl.h" +#include "googletest/googletest/include/gtest/gtest.h" + +namespace flutter_runner_test::flutter_runner_a11y_test { +using PlatformViewTests = gtest::RealLoopFixture; + +class MockPlatformViewDelegate : public flutter::PlatformView::Delegate { + public: + // |flutter::PlatformView::Delegate| + void OnPlatformViewCreated(std::unique_ptr surface) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewDestroyed() {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewSetNextFrameCallback(fml::closure closure) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewSetViewportMetrics( + const flutter::ViewportMetrics& metrics) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewDispatchPlatformMessage( + fml::RefPtr message) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewDispatchPointerDataPacket( + std::unique_ptr packet) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewDispatchSemanticsAction(int32_t id, + flutter::SemanticsAction action, + std::vector args) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewSetSemanticsEnabled(bool enabled) { + semantics_enabled_ = enabled; + } + // |flutter::PlatformView::Delegate| + void OnPlatformViewSetAccessibilityFeatures(int32_t flags) { + semantics_features_ = flags; + } + // |flutter::PlatformView::Delegate| + void OnPlatformViewRegisterTexture( + std::shared_ptr texture) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewUnregisterTexture(int64_t texture_id) {} + // |flutter::PlatformView::Delegate| + void OnPlatformViewMarkTextureFrameAvailable(int64_t texture_id) {} + + bool SemanticsEnabled() const { return semantics_enabled_; } + int32_t SemanticsFeatures() const { return semantics_features_; } + + private: + bool semantics_enabled_ = false; + int32_t semantics_features_ = 0; +}; +TEST_F(PlatformViewTests, SurvivesWhenSettingsManagerNotAvailable) { + sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); + MockPlatformViewDelegate delegate; + zx::eventpair a, b; + zx::eventpair::create(/* flags */ 0u, &a, &b); + auto view_ref = fuchsia::ui::views::ViewRef({ + .reference = std::move(a), + }); + auto view_ref_control = fuchsia::ui::views::ViewRefControl({ + .reference = std::move(b), + }); + flutter::TaskRunners task_runners = + flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); + + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), 0); + + auto platform_view = flutter_runner::PlatformView( + delegate, // delegate + "test_platform_view", // label + std::move(view_ref_control), // view_ref_control + std::move(view_ref), // view_ref + std::move(task_runners), // task_runners + services_provider.service_directory(), // runner_services + nullptr, // parent_environment_service_provider_handle + nullptr, // session_listener_request + nullptr, // on_session_listener_error_callback + nullptr, // session_metrics_did_change_callback + nullptr, // session_size_change_hint_callback + nullptr, // on_enable_wireframe_callback, + 0u // vsync_event_handle + ); + + RunLoopUntilIdle(); + + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), 0); +} + +TEST_F(PlatformViewTests, RegistersWatcherAndEnablesSemantics) { + fuchsia::accessibility::Settings settings; + settings.set_screen_reader_enabled(true); + settings.set_color_inversion_enabled(true); + MockAccessibilitySettingsManager settings_manager = + MockAccessibilitySettingsManager(std::move(settings)); + MockSemanticsManager semantics_manager = MockSemanticsManager(); + sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); + services_provider.AddService(settings_manager.GetHandler(dispatcher()), + AccessibilitySettingsManager::Name_); + services_provider.AddService(semantics_manager.GetHandler(dispatcher()), + SemanticsManager::Name_); + + MockPlatformViewDelegate delegate; + zx::eventpair a, b; + zx::eventpair::create(/* flags */ 0u, &a, &b); + auto view_ref = fuchsia::ui::views::ViewRef({ + .reference = std::move(a), + }); + auto view_ref_control = fuchsia::ui::views::ViewRefControl({ + .reference = std::move(b), + }); + flutter::TaskRunners task_runners = + flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); + + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), 0); + + auto platform_view = flutter_runner::PlatformView( + delegate, // delegate + "test_platform_view", // label + std::move(view_ref_control), // view_ref_control + std::move(view_ref), // view_ref + std::move(task_runners), // task_runners + services_provider.service_directory(), // runner_services + nullptr, // parent_environment_service_provider_handle + nullptr, // session_listener_request + nullptr, // on_session_listener_error_callback + nullptr, // session_metrics_did_change_callback + nullptr, // session_size_change_hint_callback + nullptr, // wireframe_enabled_callback + 0u // vsync_event_handle + ); + + RunLoopUntilIdle(); + + EXPECT_TRUE(settings_manager.WatchCalled()); + EXPECT_TRUE(delegate.SemanticsEnabled()); + EXPECT_EQ( + delegate.SemanticsFeatures(), + static_cast(flutter::AccessibilityFeatureFlag::kInvertColors) | + static_cast( + flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); +} + +TEST_F(PlatformViewTests, ChangesSettings) { + fuchsia::accessibility::Settings settings; + settings.set_screen_reader_enabled(true); + settings.set_color_inversion_enabled(true); + MockAccessibilitySettingsManager settings_manager = + MockAccessibilitySettingsManager(std::move(settings)); + MockSemanticsManager semantics_manager = MockSemanticsManager(); + sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); + services_provider.AddService(settings_manager.GetHandler(dispatcher()), + AccessibilitySettingsManager::Name_); + services_provider.AddService(semantics_manager.GetHandler(dispatcher()), + SemanticsManager::Name_); + + MockPlatformViewDelegate delegate; + zx::eventpair a, b; + zx::eventpair::create(/* flags */ 0u, &a, &b); + auto view_ref = fuchsia::ui::views::ViewRef({ + .reference = std::move(a), + }); + auto view_ref_control = fuchsia::ui::views::ViewRefControl({ + .reference = std::move(b), + }); + flutter::TaskRunners task_runners = + flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); + + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), 0); + + auto platform_view = flutter_runner::PlatformView( + delegate, // delegate + "test_platform_view", // label + std::move(view_ref_control), // view_ref_control + std::move(view_ref), // view_ref + std::move(task_runners), // task_runners + services_provider.service_directory(), // runner_services + nullptr, // parent_environment_service_provider_handle + nullptr, // session_listener_request + nullptr, // on_session_listener_error_callback + nullptr, // session_metrics_did_change_callback + nullptr, // session_size_change_hint_callback + nullptr, // wireframe_enabled_callback + 0u // vsync_event_handle + ); + + RunLoopUntilIdle(); + + EXPECT_TRUE(settings_manager.WatchCalled()); + EXPECT_TRUE(delegate.SemanticsEnabled()); + EXPECT_EQ( + delegate.SemanticsFeatures(), + static_cast(flutter::AccessibilityFeatureFlag::kInvertColors) | + static_cast( + flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); + + fuchsia::accessibility::Settings screen_no_color_inversion; + screen_no_color_inversion.set_screen_reader_enabled(true); + screen_no_color_inversion.set_color_inversion_enabled(false); + + platform_view.OnSettingsChange(std::move(screen_no_color_inversion)); + EXPECT_TRUE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), + static_cast( + flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); + + fuchsia::accessibility::Settings disabled_settings; + disabled_settings.set_screen_reader_enabled(false); + disabled_settings.set_color_inversion_enabled(false); + + platform_view.OnSettingsChange(std::move(disabled_settings)); + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), 0); +} + +TEST_F(PlatformViewTests, RegistersWatcherAndSetsFeaturesWhenNoScreenReader) { + fuchsia::accessibility::Settings settings; + settings.set_color_inversion_enabled(true); + MockAccessibilitySettingsManager settings_manager = + MockAccessibilitySettingsManager(std::move(settings)); + MockSemanticsManager semantics_manager = MockSemanticsManager(); + sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); + services_provider.AddService(settings_manager.GetHandler(dispatcher()), + AccessibilitySettingsManager::Name_); + services_provider.AddService(semantics_manager.GetHandler(dispatcher()), + SemanticsManager::Name_); + + MockPlatformViewDelegate delegate; + zx::eventpair a, b; + zx::eventpair::create(/* flags */ 0u, &a, &b); + auto view_ref = fuchsia::ui::views::ViewRef({ + .reference = std::move(a), + }); + auto view_ref_control = fuchsia::ui::views::ViewRefControl({ + .reference = std::move(b), + }); + flutter::TaskRunners task_runners = + flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); + + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ(delegate.SemanticsFeatures(), 0); + + auto platform_view = flutter_runner::PlatformView( + delegate, // delegate + "test_platform_view", // label + std::move(view_ref_control), // view_ref_control + std::move(view_ref), // view_ref + std::move(task_runners), // task_runners + services_provider.service_directory(), // runner_services + nullptr, // parent_environment_service_provider_handle + nullptr, // session_listener_request + nullptr, // on_session_listener_error_callback + nullptr, // session_metrics_did_change_callback + nullptr, // session_size_change_hint_callback + nullptr, // wireframe_enabled_callback + 0u // vsync_event_handle + ); + + RunLoopUntilIdle(); + + EXPECT_TRUE(settings_manager.WatchCalled()); + EXPECT_FALSE(delegate.SemanticsEnabled()); + EXPECT_EQ( + delegate.SemanticsFeatures(), + static_cast(flutter::AccessibilityFeatureFlag::kInvertColors)); +} + +// Test to make sure that PlatformView correctly registers messages sent on +// the "flutter/platform_views" channel, correctly parses the JSON it receives +// and calls the EnableWireframeCallback with the appropriate args. +TEST_F(PlatformViewTests, EnableWireframeTest) { + sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); + MockPlatformViewDelegate delegate; + zx::eventpair a, b; + zx::eventpair::create(/* flags */ 0u, &a, &b); + auto view_ref = fuchsia::ui::views::ViewRef({ + .reference = std::move(a), + }); + auto view_ref_control = fuchsia::ui::views::ViewRefControl({ + .reference = std::move(b), + }); + flutter::TaskRunners task_runners = + flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); + + // Test wireframe callback function. If the message sent to the platform view + // was properly handled and parsed, this function should be called, setting + // |wireframe_enabled| to true. + bool wireframe_enabled = false; + auto EnableWireframeCallback = [&wireframe_enabled](bool should_enable) { + wireframe_enabled = should_enable; + }; + + auto platform_view = flutter_runner::PlatformView( + delegate, // delegate + "test_platform_view", // label + std::move(view_ref_control), // view_ref_control + std::move(view_ref), // view_refs + std::move(task_runners), // task_runners + services_provider.service_directory(), // runner_services + nullptr, // parent_environment_service_provider_handle + nullptr, // session_listener_request + nullptr, // on_session_listener_error_callback + nullptr, // session_metrics_did_change_callback + nullptr, // session_size_change_hint_callback + EnableWireframeCallback, // on_enable_wireframe_callback, + 0u // vsync_event_handle + ); + + // Cast platform_view to its base view so we can have access to the public + // "HandlePlatformMessage" function. + auto base_view = dynamic_cast(&platform_view); + EXPECT_TRUE(base_view); + + // JSON for the message to be passed into the PlatformView. + const uint8_t txt[] = + "{" + " \"method\":\"View.enableWireframe\"," + " \"args\": {" + " \"enable\":true" + " }" + "}"; + + fml::RefPtr message = + fml::MakeRefCounted( + "flutter/platform_views", + std::vector(txt, txt + sizeof(txt)), + fml::RefPtr()); + base_view->HandlePlatformMessage(message); + + RunLoopUntilIdle(); + + EXPECT_TRUE(wireframe_enabled); +} + +} // namespace flutter_runner_test::flutter_runner_a11y_test diff --git a/shell/platform/fuchsia/flutter/sample_unittests.cc b/shell/platform/fuchsia/flutter/sample_unittests.cc deleted file mode 100644 index fd796edb3b804..0000000000000 --- a/shell/platform/fuchsia/flutter/sample_unittests.cc +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "gtest/gtest.h" - -namespace flutter { -namespace testing { - -TEST(FlutterRunnerSampleTest, Sample) { - ASSERT_TRUE(true); -} - -} // namespace testing -} // namespace flutter From f6f329620d41d7c89c6827a14f19a2281b50f32c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 17 Sep 2019 14:39:03 -0700 Subject: [PATCH 02/15] waypoint 2 --- shell/platform/fuchsia/flutter/BUILD.gn | 3 +- .../flutter/accessibility_bridge_unittest.cc | 20 ++++++--- .../fuchsia/flutter/flutter_runner_fakes.h | 8 ++-- .../fuchsia/flutter/platform_view_unittest.cc | 42 +++++++++---------- 4 files changed, 39 insertions(+), 34 deletions(-) diff --git a/shell/platform/fuchsia/flutter/BUILD.gn b/shell/platform/fuchsia/flutter/BUILD.gn index 7a5d12a74328d..20299d097e0f5 100644 --- a/shell/platform/fuchsia/flutter/BUILD.gn +++ b/shell/platform/fuchsia/flutter/BUILD.gn @@ -271,15 +271,16 @@ executable("flutter_runner_unittests") { "//flutter/testing", "//flutter/lib/ui", "//flutter/shell/common", + "//flutter/shell/platform/fuchsia/dart-pkg/zircon:zircon", "//build/fuchsia/fidl:fuchsia.accessibility.semantics", "//build/fuchsia/fidl:fuchsia.modular", "//build/fuchsia/fidl:fuchsia.sys", "//build/fuchsia/fidl:fuchsia.ui.scenic", "//build/fuchsia/pkg:async-loop-cpp", + "//build/fuchsia/pkg:async-loop-default", "//build/fuchsia/pkg:sys_cpp", "//build/fuchsia/pkg:sys_cpp_testing", "//build/fuchsia/pkg:scenic_cpp", - "//build/fuchsia/pkg:zx", "//third_party/dart/runtime:libdart_jit", "//third_party/dart/runtime/platform:libdart_platform_jit", "//third_party/googletest:gtest_main", diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index 9f2a937732a4e..f637406a0a230 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -5,10 +5,10 @@ #include "flutter/shell/platform/fuchsia/flutter/accessibility_bridge.h" #include +#include #include #include #include -#include #include #include @@ -18,11 +18,19 @@ #include "flutter/shell/platform/fuchsia/flutter/flutter_runner_fakes.h" namespace flutter_runner_test { -class AccessibilityBridgeTest : public gtest::RealLoopFixture { +class AccessibilityBridgeTest : public test::Test { public: - AccessibilityBridgeTest() : services_provider_(dispatcher()) { - services_provider_.AddService(semantics_manager_.GetHandler(dispatcher()), - SemanticsManager::Name_); + AccessibilityBridgeTest() + : loop_(&kAsyncLoopConfigAttachToCurrentThread), + services_provider_(loop_.dispatcher()) { + services_provider_.AddService( + semantics_manager_.GetHandler(loop_.dispatcher()), + SemanticsManager::Name_); + } + + void RunLoopUntilIdle() { + loop_.RunUntilIdle(); + loop_.ResetQuit(); } protected: @@ -40,6 +48,8 @@ class AccessibilityBridgeTest : public gtest::RealLoopFixture { void TearDown() override { semantics_manager_.ResetTree(); } + private: + async::Loop loop_; sys::testing::ServiceDirectoryProvider services_provider_; MockSemanticsManager semantics_manager_; std::unique_ptr accessibility_bridge_; diff --git a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h index ec46d143d8b03..84085053138b2 100644 --- a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h +++ b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h @@ -5,7 +5,6 @@ #ifndef TOPAZ_RUNTIME_FLUTTER_RUNNER_PLATFORM_VIEW_FAKES_H_ #define TOPAZ_RUNTIME_FLUTTER_RUNNER_PLATFORM_VIEW_FAKES_H_ -#include #include namespace flutter_runner_test { @@ -21,11 +20,10 @@ class MockSemanticsManager MockSemanticsManager() : tree_binding_(this) {} // |fuchsia::accessibility::semantics::SemanticsManager|: - void RegisterView( + void RegisterViewForSemantics( fuchsia::ui::views::ViewRef view_ref, fidl::InterfaceHandle< - fuchsia::accessibility::semantics::SemanticActionListener> - handle, + fuchsia::accessibility::semantics::SemanticListener> handle, fidl::InterfaceRequest semantic_tree) override { tree_binding_.Bind(std::move(semantic_tree)); @@ -91,7 +89,7 @@ class MockSemanticsManager return last_updated_nodes_; } - void Commit() override { commit_count_++; } + void CommitUpdates(CommitUpdatesCallback callback) override { commit_count_++; } private: bool has_view_ref_ = false; diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index c98bbaba3d9c9..4abe42acabccd 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -5,10 +5,10 @@ #include "flutter/shell/platform/fuchsia/flutter/platform_view.h" #include +#include #include #include #include -#include #include #include @@ -21,7 +21,23 @@ #include "googletest/googletest/include/gtest/gtest.h" namespace flutter_runner_test::flutter_runner_a11y_test { -using PlatformViewTests = gtest::RealLoopFixture; + +class PlatformViewTests : public testing::Test { + protected: + PlatformViewTests() : loop_(&kAsyncLoopConfigAttachToCurrentThread) {} + + async_dispatcher_t* dispatcher() { return loop_.dispatcher(); } + + void RunLoopUntilIdle() { + loop_.RunUntilIdle(); + loop_.ResetQuit(); + } + + private: + async::Loop loop_; + + FML_DISALLOW_COPY_AND_ASSIGN(PlatformViewTests); +}; class MockPlatformViewDelegate : public flutter::PlatformView::Delegate { public: @@ -67,6 +83,7 @@ class MockPlatformViewDelegate : public flutter::PlatformView::Delegate { bool semantics_enabled_ = false; int32_t semantics_features_ = 0; }; + TEST_F(PlatformViewTests, SurvivesWhenSettingsManagerNotAvailable) { sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); MockPlatformViewDelegate delegate; @@ -107,15 +124,8 @@ TEST_F(PlatformViewTests, SurvivesWhenSettingsManagerNotAvailable) { } TEST_F(PlatformViewTests, RegistersWatcherAndEnablesSemantics) { - fuchsia::accessibility::Settings settings; - settings.set_screen_reader_enabled(true); - settings.set_color_inversion_enabled(true); - MockAccessibilitySettingsManager settings_manager = - MockAccessibilitySettingsManager(std::move(settings)); MockSemanticsManager semantics_manager = MockSemanticsManager(); sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); - services_provider.AddService(settings_manager.GetHandler(dispatcher()), - AccessibilitySettingsManager::Name_); services_provider.AddService(semantics_manager.GetHandler(dispatcher()), SemanticsManager::Name_); @@ -152,25 +162,16 @@ TEST_F(PlatformViewTests, RegistersWatcherAndEnablesSemantics) { RunLoopUntilIdle(); - EXPECT_TRUE(settings_manager.WatchCalled()); EXPECT_TRUE(delegate.SemanticsEnabled()); EXPECT_EQ( delegate.SemanticsFeatures(), - static_cast(flutter::AccessibilityFeatureFlag::kInvertColors) | static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); } TEST_F(PlatformViewTests, ChangesSettings) { - fuchsia::accessibility::Settings settings; - settings.set_screen_reader_enabled(true); - settings.set_color_inversion_enabled(true); - MockAccessibilitySettingsManager settings_manager = - MockAccessibilitySettingsManager(std::move(settings)); MockSemanticsManager semantics_manager = MockSemanticsManager(); sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); - services_provider.AddService(settings_manager.GetHandler(dispatcher()), - AccessibilitySettingsManager::Name_); services_provider.AddService(semantics_manager.GetHandler(dispatcher()), SemanticsManager::Name_); @@ -207,11 +208,9 @@ TEST_F(PlatformViewTests, ChangesSettings) { RunLoopUntilIdle(); - EXPECT_TRUE(settings_manager.WatchCalled()); EXPECT_TRUE(delegate.SemanticsEnabled()); EXPECT_EQ( delegate.SemanticsFeatures(), - static_cast(flutter::AccessibilityFeatureFlag::kInvertColors) | static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); @@ -225,9 +224,6 @@ TEST_F(PlatformViewTests, ChangesSettings) { static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); - fuchsia::accessibility::Settings disabled_settings; - disabled_settings.set_screen_reader_enabled(false); - disabled_settings.set_color_inversion_enabled(false); platform_view.OnSettingsChange(std::move(disabled_settings)); EXPECT_FALSE(delegate.SemanticsEnabled()); From 362f9e8bb28678e50bf057a4fdbbf1a0b0c2e0ac Mon Sep 17 00:00:00 2001 From: Dan Field Date: Tue, 17 Sep 2019 21:32:28 -0700 Subject: [PATCH 03/15] ??? --- ci/licenses_golden/licenses_flutter | 2 - shell/platform/fuchsia/flutter/BUILD.gn | 19 ++--- .../fuchsia/flutter/accessibility_bridge.cc | 10 ++- .../fuchsia/flutter/accessibility_bridge.h | 16 +++- .../flutter/accessibility_bridge_unittest.cc | 22 ++++-- shell/platform/fuchsia/flutter/component.cc | 10 +-- .../fuchsia/flutter/engine_flutter_runner.gni | 6 +- .../fuchsia/flutter/flutter_runner_fakes.h | 37 ---------- .../platform/fuchsia/flutter/platform_view.cc | 17 +++-- .../platform/fuchsia/flutter/platform_view.h | 8 +- .../fuchsia/flutter/platform_view_unittest.cc | 57 --------------- .../fuchsia/flutter/service_provider_dir.cc | 69 ------------------ .../fuchsia/flutter/service_provider_dir.h | 73 ------------------- 13 files changed, 64 insertions(+), 282 deletions(-) delete mode 100644 shell/platform/fuchsia/flutter/service_provider_dir.cc delete mode 100644 shell/platform/fuchsia/flutter/service_provider_dir.h diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index c831bde03dc46..d182219b85ecb 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -960,8 +960,6 @@ FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner_context.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner_context.h -FILE: ../../../flutter/shell/platform/fuchsia/flutter/service_provider_dir.cc -FILE: ../../../flutter/shell/platform/fuchsia/flutter/service_provider_dir.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/session_connection.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/session_connection.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/surface.cc diff --git a/shell/platform/fuchsia/flutter/BUILD.gn b/shell/platform/fuchsia/flutter/BUILD.gn index 20299d097e0f5..ca392b8383ad6 100644 --- a/shell/platform/fuchsia/flutter/BUILD.gn +++ b/shell/platform/fuchsia/flutter/BUILD.gn @@ -268,24 +268,15 @@ executable("flutter_runner_unittests") { deps = [ ":jit", - "//flutter/testing", - "//flutter/lib/ui", - "//flutter/shell/common", - "//flutter/shell/platform/fuchsia/dart-pkg/zircon:zircon", "//build/fuchsia/fidl:fuchsia.accessibility.semantics", - "//build/fuchsia/fidl:fuchsia.modular", - "//build/fuchsia/fidl:fuchsia.sys", - "//build/fuchsia/fidl:fuchsia.ui.scenic", "//build/fuchsia/pkg:async-loop-cpp", "//build/fuchsia/pkg:async-loop-default", - "//build/fuchsia/pkg:sys_cpp", - "//build/fuchsia/pkg:sys_cpp_testing", "//build/fuchsia/pkg:scenic_cpp", - "//third_party/dart/runtime:libdart_jit", - "//third_party/dart/runtime/platform:libdart_platform_jit", - "//third_party/googletest:gtest_main", - "//third_party/icu", - "//third_party/skia", + "//build/fuchsia/pkg:sys_cpp_testing", + "//flutter/lib/ui", + "//flutter/shell/common", + "//flutter/shell/platform/fuchsia/runtime/dart/utils", + "//flutter/testing", ] } diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.cc b/shell/platform/fuchsia/flutter/accessibility_bridge.cc index 2e0c338c35afb..8f3e28104964a 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.cc @@ -14,9 +14,10 @@ namespace flutter_runner { AccessibilityBridge::AccessibilityBridge( + Delegate& delegate, const std::shared_ptr services, fuchsia::ui::views::ViewRef view_ref) - : binding_(this) { + : delegate_(delegate), binding_(this) { services->Connect(fuchsia::accessibility::semantics::SemanticsManager::Name_, fuchsia_semantics_manager_.NewRequest().TakeChannel()); fuchsia_semantics_manager_.set_error_handler([](zx_status_t status) { @@ -240,4 +241,11 @@ void AccessibilityBridge::HitTest( fuchsia::accessibility::semantics::SemanticListener::HitTestCallback callback) {} +// |fuchsia::accessibility::semantics::SemanticListener| +void AccessibilityBridge::OnSemanticsModeChanged( + bool enabled, + OnSemanticsModeChangedCallback callback) { + delegate_.SetSemanticsEnabled(enabled); +} + } // namespace flutter_runner diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge.h b/shell/platform/fuchsia/flutter/accessibility_bridge.h index 14303fde2d151..4bc673b0e8a6a 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge.h +++ b/shell/platform/fuchsia/flutter/accessibility_bridge.h @@ -36,6 +36,12 @@ namespace flutter_runner { class AccessibilityBridge : public fuchsia::accessibility::semantics::SemanticListener { public: + // A delegate to call when semantics are enabled or disabled. + class Delegate { + public: + virtual void SetSemanticsEnabled(bool enabled) = 0; + }; + // TODO(MI4-2531, FIDL-718): Remove this. We shouldn't be worried about // batching messages at this level. // FIDL may encode a C++ struct as larger than the sizeof the C++ struct. @@ -55,7 +61,8 @@ class AccessibilityBridge "flutter::SemanticsNode::id and " "fuchsia::accessibility::semantics::Node::node_id differ in size."); - AccessibilityBridge(const std::shared_ptr services, + AccessibilityBridge(Delegate& delegate, + const std::shared_ptr services, fuchsia::ui::views::ViewRef view_ref); // Returns true if accessible navigation is enabled. @@ -75,6 +82,8 @@ class AccessibilityBridge zx_status_t OnHoverMove(double x, double y); private: + AccessibilityBridge::Delegate& delegate_; + static constexpr int32_t kRootNodeId = 0; fidl::Binding binding_; fuchsia::accessibility::semantics::SemanticsManagerPtr @@ -128,9 +137,8 @@ class AccessibilityBridge callback) override; // |fuchsia::accessibility::semantics::SemanticListener| - void OnSemanticsModeChanged( - bool enabled, - OnSemanticsModeChangedCallback callback) override {} + void OnSemanticsModeChanged(bool enabled, + OnSemanticsModeChangedCallback callback) override; FML_DISALLOW_COPY_AND_ASSIGN(AccessibilityBridge); }; diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index f637406a0a230..1f366353d35b1 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -5,8 +5,8 @@ #include "flutter/shell/platform/fuchsia/flutter/accessibility_bridge.h" #include -#include #include +#include #include #include #include @@ -18,7 +18,15 @@ #include "flutter/shell/platform/fuchsia/flutter/flutter_runner_fakes.h" namespace flutter_runner_test { -class AccessibilityBridgeTest : public test::Test { + +class AccessibilityBridgeTestDelegate + : public flutter_runner::AccessibilityBridge::Delegate { + public: + void SetSemanticsEnabled(bool enabled) override { enabled_ = enabled; } + bool enabled_; +}; + +class AccessibilityBridgeTest : public testing::Test { public: AccessibilityBridgeTest() : loop_(&kAsyncLoopConfigAttachToCurrentThread), @@ -40,19 +48,23 @@ class AccessibilityBridgeTest : public test::Test { auto view_ref = fuchsia::ui::views::ViewRef({ .reference = std::move(a), }); + AccessibilityBridgeTestDelegate accessibility_delegate; + accessibility_bridge_ = std::make_unique( - services_provider_.service_directory(), std::move(view_ref)); + accessibility_delegate, services_provider_.service_directory(), + std::move(view_ref)); RunLoopUntilIdle(); } void TearDown() override { semantics_manager_.ResetTree(); } + MockSemanticsManager semantics_manager_; + std::unique_ptr accessibility_bridge_; + private: async::Loop loop_; sys::testing::ServiceDirectoryProvider services_provider_; - MockSemanticsManager semantics_manager_; - std::unique_ptr accessibility_bridge_; }; TEST_F(AccessibilityBridgeTest, RegistersViewRef) { diff --git a/shell/platform/fuchsia/flutter/component.cc b/shell/platform/fuchsia/flutter/component.cc index cda44979dc9e5..89dc024467046 100644 --- a/shell/platform/fuchsia/flutter/component.cc +++ b/shell/platform/fuchsia/flutter/component.cc @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -27,7 +28,6 @@ #include "runtime/dart/utils/tempfs.h" #include "runtime/dart/utils/vmo.h" -#include "service_provider_dir.h" #include "task_observers.h" #include "task_runner_adapter.h" #include "thread.h" @@ -163,8 +163,8 @@ Application::Application( fdio_service_connect_at(directory_ptr_.channel().get(), "svc", request.release()); - auto service_provider_dir = std::make_unique(); - service_provider_dir->set_fallback(std::move(flutter_public_dir)); + auto composed_service_dir = std::make_unique(); + composed_service_dir->set_fallback(std::move(flutter_public_dir)); // Clone and check if client is servicing the directory. directory_ptr_->Clone(fuchsia::io::OPEN_FLAG_DESCRIBE | @@ -201,7 +201,7 @@ Application::Application( // All launch arguments have been read. Perform service binding and // final settings configuration. The next call will be to create a view // for this application. - service_provider_dir->AddService( + composed_service_dir->AddService( fuchsia::ui::app::ViewProvider::Name_, std::make_unique( [this](zx::channel channel, async_dispatcher_t* dispatcher) { @@ -210,7 +210,7 @@ Application::Application( std::move(channel))); })); - outgoing_dir_->AddEntry("svc", std::move(service_provider_dir)); + outgoing_dir_->AddEntry("svc", std::move(composed_service_dir)); // Setup the application controller binding. if (application_controller_request) { diff --git a/shell/platform/fuchsia/flutter/engine_flutter_runner.gni b/shell/platform/fuchsia/flutter/engine_flutter_runner.gni index 9b9aeeb568e9e..862db5ad770f8 100644 --- a/shell/platform/fuchsia/flutter/engine_flutter_runner.gni +++ b/shell/platform/fuchsia/flutter/engine_flutter_runner.gni @@ -62,8 +62,6 @@ template("flutter_runner") { "runner.h", "runner_context.cc", "runner_context.h", - "service_provider_dir.cc", - "service_provider_dir.h", "session_connection.cc", "session_connection.h", "surface.cc", @@ -126,13 +124,13 @@ template("flutter_runner") { "$fuchsia_sdk_root/pkg:fdio", "$fuchsia_sdk_root/pkg:fidl_cpp", "$fuchsia_sdk_root/pkg:scenic_cpp", + "$fuchsia_sdk_root/pkg:sys_cpp", "$fuchsia_sdk_root/pkg:syslog", "$fuchsia_sdk_root/pkg:trace", "$fuchsia_sdk_root/pkg:trace-engine", "$fuchsia_sdk_root/pkg:trace-provider-so", + "$fuchsia_sdk_root/pkg:vfs_cpp", "$fuchsia_sdk_root/pkg:zx", - "$fuchsia_sdk_root/pkg/lib/sys/cpp", - "$fuchsia_sdk_root/pkg/lib/vfs/cpp", "//third_party/skia", "//third_party/tonic", ] + fuchsia_deps + flutter_deps + extra_deps diff --git a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h index 84085053138b2..aad0dfbc58934 100644 --- a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h +++ b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h @@ -9,9 +9,6 @@ namespace flutter_runner_test { using fuchsia::accessibility::semantics::SemanticsManager; -using AccessibilitySettingsManager = fuchsia::accessibility::SettingsManager; -using AccessibilitySettingsWatcher = fuchsia::accessibility::SettingsWatcher; -using AccessibilitySettingsProvider = fuchsia::accessibility::SettingsProvider; class MockSemanticsManager : public SemanticsManager, @@ -105,40 +102,6 @@ class MockSemanticsManager int commit_count_; }; -class MockAccessibilitySettingsManager : public AccessibilitySettingsManager { - public: - MockAccessibilitySettingsManager(fuchsia::accessibility::Settings settings) - : settings_(std::move(settings)) {} - ~MockAccessibilitySettingsManager() = default; - - // |fuchsia::accessibility::SettingsManager| - void RegisterSettingProvider( - fidl::InterfaceRequest - settings_provider_request) override {} - - // |fuchsia::accessibility::SettingsManager| - void Watch( - fidl::InterfaceHandle watcher) override { - watch_called_ = true; - auto proxy = watcher.Bind(); - EXPECT_TRUE(proxy); - fuchsia::accessibility::Settings settings = fidl::Clone(settings_); - proxy->OnSettingsChange(std::move(settings)); - } - - fidl::InterfaceRequestHandler GetHandler( - async_dispatcher_t* dispatcher) { - return bindings_.GetHandler(this, dispatcher); - } - - bool WatchCalled() { return watch_called_; } - - private: - bool watch_called_ = false; - fuchsia::accessibility::Settings settings_; - fidl::BindingSet bindings_; -}; - } // namespace flutter_runner_test #endif // TOPAZ_RUNTIME_FLUTTER_RUNNER_PLATFORM_VIEW_FAKES_H_ diff --git a/shell/platform/fuchsia/flutter/platform_view.cc b/shell/platform/fuchsia/flutter/platform_view.cc index 9646ba3d709a4..3961ac8d4132b 100644 --- a/shell/platform/fuchsia/flutter/platform_view.cc +++ b/shell/platform/fuchsia/flutter/platform_view.cc @@ -77,7 +77,7 @@ void SetInterfaceErrorHandler(fidl::Binding& binding, std::string name) { } PlatformView::PlatformView( - PlatformView::Delegate& delegate, + flutter::PlatformView::Delegate& delegate, std::string debug_label, fuchsia::ui::views::ViewRefControl view_ref_control, fuchsia::ui::views::ViewRef view_ref, @@ -129,12 +129,7 @@ PlatformView::PlatformView( fuchsia::ui::views::ViewRef accessibility_view_ref; view_ref_.Clone(&accessibility_view_ref); accessibility_bridge_ = std::make_unique( - runner_services, std::move(accessibility_view_ref)); - - // TODO(SCN-975): Re-enable. Likely that Engine should clone the ViewToken - // and pass the clone in here. - // view_->GetToken(std::bind(&PlatformView::ConnectSemanticsProvider, this, - // std::placeholders::_1)); + *this, runner_services, std::move(accessibility_view_ref)); } PlatformView::~PlatformView() = default; @@ -601,9 +596,15 @@ void PlatformView::HandlePlatformMessage( } // |flutter::PlatformView| +// |flutter_runner::AccessibilityBridge::Delegate| void PlatformView::SetSemanticsEnabled(bool enabled) { - accessibility_bridge_->SetSemanticsEnabled(enabled); flutter::PlatformView::SetSemanticsEnabled(enabled); + if (enabled) { + SetAccessibilityFeatures(static_cast( + flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); + } else { + SetAccessibilityFeatures(0); + } } // |flutter::PlatformView| diff --git a/shell/platform/fuchsia/flutter/platform_view.h b/shell/platform/fuchsia/flutter/platform_view.h index d142d6682dd6d..777a806d874a3 100644 --- a/shell/platform/fuchsia/flutter/platform_view.h +++ b/shell/platform/fuchsia/flutter/platform_view.h @@ -38,9 +38,10 @@ using OnEnableWireframe = fit::function; // thread. class PlatformView final : public flutter::PlatformView, private fuchsia::ui::scenic::SessionListener, - public fuchsia::ui::input::InputMethodEditorClient { + public fuchsia::ui::input::InputMethodEditorClient, + public AccessibilityBridge::Delegate { public: - PlatformView(PlatformView::Delegate& delegate, + PlatformView(flutter::PlatformView::Delegate& delegate, std::string debug_label, fuchsia::ui::views::ViewRefControl view_ref_control, fuchsia::ui::views::ViewRef view_ref, @@ -55,7 +56,7 @@ class PlatformView final : public flutter::PlatformView, OnSizeChangeHint session_size_change_hint_callback, OnEnableWireframe wireframe_enabled_callback, zx_handle_t vsync_event_handle); - PlatformView(PlatformView::Delegate& delegate, + PlatformView(flutter::PlatformView::Delegate& delegate, std::string debug_label, flutter::TaskRunners task_runners, fidl::InterfaceHandle @@ -154,6 +155,7 @@ class PlatformView final : public flutter::PlatformView, fml::RefPtr message) override; // |flutter::PlatformView| + // |flutter_runner::AccessibilityBridge::Delegate| void SetSemanticsEnabled(bool enabled) override; // |flutter::PlatformView| diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index 4abe42acabccd..cdb1e27ae0603 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -214,74 +214,17 @@ TEST_F(PlatformViewTests, ChangesSettings) { static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); - fuchsia::accessibility::Settings screen_no_color_inversion; - screen_no_color_inversion.set_screen_reader_enabled(true); - screen_no_color_inversion.set_color_inversion_enabled(false); - platform_view.OnSettingsChange(std::move(screen_no_color_inversion)); EXPECT_TRUE(delegate.SemanticsEnabled()); EXPECT_EQ(delegate.SemanticsFeatures(), static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); - platform_view.OnSettingsChange(std::move(disabled_settings)); EXPECT_FALSE(delegate.SemanticsEnabled()); EXPECT_EQ(delegate.SemanticsFeatures(), 0); } -TEST_F(PlatformViewTests, RegistersWatcherAndSetsFeaturesWhenNoScreenReader) { - fuchsia::accessibility::Settings settings; - settings.set_color_inversion_enabled(true); - MockAccessibilitySettingsManager settings_manager = - MockAccessibilitySettingsManager(std::move(settings)); - MockSemanticsManager semantics_manager = MockSemanticsManager(); - sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); - services_provider.AddService(settings_manager.GetHandler(dispatcher()), - AccessibilitySettingsManager::Name_); - services_provider.AddService(semantics_manager.GetHandler(dispatcher()), - SemanticsManager::Name_); - - MockPlatformViewDelegate delegate; - zx::eventpair a, b; - zx::eventpair::create(/* flags */ 0u, &a, &b); - auto view_ref = fuchsia::ui::views::ViewRef({ - .reference = std::move(a), - }); - auto view_ref_control = fuchsia::ui::views::ViewRefControl({ - .reference = std::move(b), - }); - flutter::TaskRunners task_runners = - flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); - - EXPECT_FALSE(delegate.SemanticsEnabled()); - EXPECT_EQ(delegate.SemanticsFeatures(), 0); - - auto platform_view = flutter_runner::PlatformView( - delegate, // delegate - "test_platform_view", // label - std::move(view_ref_control), // view_ref_control - std::move(view_ref), // view_ref - std::move(task_runners), // task_runners - services_provider.service_directory(), // runner_services - nullptr, // parent_environment_service_provider_handle - nullptr, // session_listener_request - nullptr, // on_session_listener_error_callback - nullptr, // session_metrics_did_change_callback - nullptr, // session_size_change_hint_callback - nullptr, // wireframe_enabled_callback - 0u // vsync_event_handle - ); - - RunLoopUntilIdle(); - - EXPECT_TRUE(settings_manager.WatchCalled()); - EXPECT_FALSE(delegate.SemanticsEnabled()); - EXPECT_EQ( - delegate.SemanticsFeatures(), - static_cast(flutter::AccessibilityFeatureFlag::kInvertColors)); -} - // Test to make sure that PlatformView correctly registers messages sent on // the "flutter/platform_views" channel, correctly parses the JSON it receives // and calls the EnableWireframeCallback with the appropriate args. diff --git a/shell/platform/fuchsia/flutter/service_provider_dir.cc b/shell/platform/fuchsia/flutter/service_provider_dir.cc deleted file mode 100644 index c671a04ecef31..0000000000000 --- a/shell/platform/fuchsia/flutter/service_provider_dir.cc +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright 2013 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "service_provider_dir.h" - -#include -#include -#include - -namespace flutter_runner { - -ServiceProviderDir::ServiceProviderDir() : root_(new vfs::PseudoDir()) {} - -ServiceProviderDir::~ServiceProviderDir() {} - -void ServiceProviderDir::set_fallback( - fidl::InterfaceHandle fallback_dir) { - fallback_dir_ = fallback_dir.TakeChannel(); -} - -void ServiceProviderDir::AddService(const std::string& service_name, - std::unique_ptr service) { - root_->AddEntry(service_name, std::move(service)); -} - -zx_status_t ServiceProviderDir::GetAttr( - fuchsia::io::NodeAttributes* out_attributes) const { - return root_->GetAttr(out_attributes); -} - -zx_status_t ServiceProviderDir::Readdir(uint64_t offset, - void* data, - uint64_t len, - uint64_t* out_offset, - uint64_t* out_actual) { - // TODO(anmittal): enumerate fallback_dir_ in future once we have simple - // implementation of fuchsia.io.Directory. - return root_->Readdir(offset, data, len, out_offset, out_actual); -} - -zx_status_t ServiceProviderDir::Lookup(const std::string& name, - vfs::Node** out) const { - zx_status_t status = root_->Lookup(name, out); - if (status == ZX_OK) { - return status; - } - if (fallback_dir_) { - auto entry = fallback_services_.find(name); - if (entry != fallback_services_.end()) { - *out = entry->second.get(); - } else { - auto service = std::make_unique( - [name = std::string(name.data(), name.length()), - dir = &fallback_dir_](zx::channel request, - async_dispatcher_t* dispatcher) { - fdio_service_connect_at(dir->get(), name.c_str(), - request.release()); - }); - *out = service.get(); - fallback_services_[name] = std::move(service); - } - } else { - return ZX_ERR_NOT_FOUND; - } - return ZX_OK; -} - -} // namespace flutter_runner diff --git a/shell/platform/fuchsia/flutter/service_provider_dir.h b/shell/platform/fuchsia/flutter/service_provider_dir.h deleted file mode 100644 index 0e26e6d165c98..0000000000000 --- a/shell/platform/fuchsia/flutter/service_provider_dir.h +++ /dev/null @@ -1,73 +0,0 @@ -// Copyright 2013 The Flutter 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 FLUTTER_SHELL_PLATFORM_FUCHSIA_SERVICE_PROVIDER_DIR_H_ -#define FLUTTER_SHELL_PLATFORM_FUCHSIA_SERVICE_PROVIDER_DIR_H_ - -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include "lib/fidl/cpp/binding_set.h" - -namespace flutter_runner { - -// A directory-like object which dynamically creates Service nodes -// for any file lookup. It also exposes service provider interface. -// -// It supports enumeration for only first level of services. -class ServiceProviderDir : public vfs::Directory { - public: - ServiceProviderDir(); - ~ServiceProviderDir() override; - - void set_fallback(fidl::InterfaceHandle fallback_dir); - - void AddService(const std::string& service_name, - std::unique_ptr service); - - // - // Overridden from |vfs::Node|: - // - - zx_status_t Lookup(const std::string& name, vfs::Node** out_node) const final; - - zx_status_t GetAttr(fuchsia::io::NodeAttributes* out_attributes) const final; - - zx_status_t Readdir(uint64_t offset, - void* data, - uint64_t len, - uint64_t* out_offset, - uint64_t* out_actual) final; - - private: - // |root_| has all services offered by this provider (including those - // inherited from the parent, if any). - std::unique_ptr root_; - zx::channel fallback_dir_; - // The collection of services that have been looked up on the fallback - // directory. These services are just passthrough in the sense that they - // forward connection requests to the fallback directory. Since there is no - // good way in the present context to know whether these service entries - // actually match an existing service, and since the present object must own - // these entries, we keep them around until the present object gets deleted. - // Needs to be marked mutable so that it can be altered by the Lookup method. - mutable std::map> - fallback_services_; - - // Disallow copy and assignment. - ServiceProviderDir(const ServiceProviderDir&) = delete; - ServiceProviderDir& operator=(const ServiceProviderDir&) = delete; -}; - -} // namespace flutter_runner - -#endif // FLUTTER_SHELL_PLATFORM_FUCHSIA_SERVICE_PROVIDER_DIR_H_ From 1d05c8c299a00f6a9dcb45323243bc4bae41d2b2 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 18 Sep 2019 22:58:57 -0700 Subject: [PATCH 04/15] missing deps --- shell/platform/fuchsia/flutter/BUILD.gn | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/shell/platform/fuchsia/flutter/BUILD.gn b/shell/platform/fuchsia/flutter/BUILD.gn index 970b494569e81..601dbdc4184c5 100644 --- a/shell/platform/fuchsia/flutter/BUILD.gn +++ b/shell/platform/fuchsia/flutter/BUILD.gn @@ -267,8 +267,9 @@ executable("flutter_runner_unittests") { libs = [ "//fuchsia/sdk/$host_os/arch/$target_cpu/sysroot/lib/libzircon.so" ] deps = [ - ":jit", + ":aot", "//build/fuchsia/fidl:fuchsia.accessibility.semantics", + "//build/fuchsia/fidl:fuchsia.modular", "//build/fuchsia/pkg:async-loop-cpp", "//build/fuchsia/pkg:async-loop-default", "//build/fuchsia/pkg:scenic_cpp", @@ -277,6 +278,8 @@ executable("flutter_runner_unittests") { "//flutter/shell/common", "//flutter/shell/platform/fuchsia/runtime/dart/utils", "//flutter/testing", + "//third_party/dart/runtime:libdart_jit", + "//third_party/dart/runtime/platform:libdart_platform_jit", ] } From 3c562c71ba89f7bcfb481488fa53ec2fed0b4a7d Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 20 Sep 2019 15:41:48 -0700 Subject: [PATCH 05/15] tests that make sense --- .../flutter/accessibility_bridge_unittest.cc | 15 ++- .../flutter/meta/flutter_runner_tests.cmx | 1 - .../platform/fuchsia/flutter/platform_view.cc | 1 + .../fuchsia/flutter/platform_view_unittest.cc | 95 +------------------ 4 files changed, 18 insertions(+), 94 deletions(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index 1f366353d35b1..4760e8108b316 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -23,6 +23,9 @@ class AccessibilityBridgeTestDelegate : public flutter_runner::AccessibilityBridge::Delegate { public: void SetSemanticsEnabled(bool enabled) override { enabled_ = enabled; } + bool enabled() { return enabled_; } + + private: bool enabled_; }; @@ -48,11 +51,10 @@ class AccessibilityBridgeTest : public testing::Test { auto view_ref = fuchsia::ui::views::ViewRef({ .reference = std::move(a), }); - AccessibilityBridgeTestDelegate accessibility_delegate; accessibility_bridge_ = std::make_unique( - accessibility_delegate, services_provider_.service_directory(), + accessibility_delegate_, services_provider_.service_directory(), std::move(view_ref)); RunLoopUntilIdle(); } @@ -60,6 +62,7 @@ class AccessibilityBridgeTest : public testing::Test { void TearDown() override { semantics_manager_.ResetTree(); } MockSemanticsManager semantics_manager_; + AccessibilityBridgeTestDelegate accessibility_delegate_; std::unique_ptr accessibility_bridge_; private: @@ -71,6 +74,14 @@ TEST_F(AccessibilityBridgeTest, RegistersViewRef) { EXPECT_TRUE(semantics_manager_.RegisterViewCalled()); } +TEST_F(AccessibilityBridgeTest, EnableDisable) { + EXPECT_FALSE(accessibility_delegate_.enabled()); + std::unique_ptr listener( + accessibility_bridge_.release()); + listener->OnSemanticsModeChanged(true, nullptr); + EXPECT_TRUE(accessibility_delegate_.enabled()); +} + TEST_F(AccessibilityBridgeTest, DeletesChildrenTransitively) { // Test that when a node is deleted, so are its transitive children. flutter::SemanticsNode node2; diff --git a/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx b/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx index e34607d563f5c..d9b627c31a673 100644 --- a/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx +++ b/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx @@ -8,7 +8,6 @@ "deprecated-ambient-replace-as-executable" ], "services": [ - "fuchsia.accessibility.SettingsManager", "fuchsia.accessibility.semantics.SemanticsManager", "fuchsia.sys.Launcher" ] diff --git a/shell/platform/fuchsia/flutter/platform_view.cc b/shell/platform/fuchsia/flutter/platform_view.cc index 3961ac8d4132b..38832a539ab28 100644 --- a/shell/platform/fuchsia/flutter/platform_view.cc +++ b/shell/platform/fuchsia/flutter/platform_view.cc @@ -11,6 +11,7 @@ #include "flutter/fml/logging.h" #include "flutter/lib/ui/compositing/scene_host.h" #include "flutter/lib/ui/window/pointer_data.h" +#include "flutter/lib/ui/window/window.h" #include "logging.h" #include "rapidjson/document.h" #include "rapidjson/stringbuffer.h" diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index cdb1e27ae0603..47262dfd80b60 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -84,91 +84,6 @@ class MockPlatformViewDelegate : public flutter::PlatformView::Delegate { int32_t semantics_features_ = 0; }; -TEST_F(PlatformViewTests, SurvivesWhenSettingsManagerNotAvailable) { - sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); - MockPlatformViewDelegate delegate; - zx::eventpair a, b; - zx::eventpair::create(/* flags */ 0u, &a, &b); - auto view_ref = fuchsia::ui::views::ViewRef({ - .reference = std::move(a), - }); - auto view_ref_control = fuchsia::ui::views::ViewRefControl({ - .reference = std::move(b), - }); - flutter::TaskRunners task_runners = - flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); - - EXPECT_FALSE(delegate.SemanticsEnabled()); - EXPECT_EQ(delegate.SemanticsFeatures(), 0); - - auto platform_view = flutter_runner::PlatformView( - delegate, // delegate - "test_platform_view", // label - std::move(view_ref_control), // view_ref_control - std::move(view_ref), // view_ref - std::move(task_runners), // task_runners - services_provider.service_directory(), // runner_services - nullptr, // parent_environment_service_provider_handle - nullptr, // session_listener_request - nullptr, // on_session_listener_error_callback - nullptr, // session_metrics_did_change_callback - nullptr, // session_size_change_hint_callback - nullptr, // on_enable_wireframe_callback, - 0u // vsync_event_handle - ); - - RunLoopUntilIdle(); - - EXPECT_FALSE(delegate.SemanticsEnabled()); - EXPECT_EQ(delegate.SemanticsFeatures(), 0); -} - -TEST_F(PlatformViewTests, RegistersWatcherAndEnablesSemantics) { - MockSemanticsManager semantics_manager = MockSemanticsManager(); - sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); - services_provider.AddService(semantics_manager.GetHandler(dispatcher()), - SemanticsManager::Name_); - - MockPlatformViewDelegate delegate; - zx::eventpair a, b; - zx::eventpair::create(/* flags */ 0u, &a, &b); - auto view_ref = fuchsia::ui::views::ViewRef({ - .reference = std::move(a), - }); - auto view_ref_control = fuchsia::ui::views::ViewRefControl({ - .reference = std::move(b), - }); - flutter::TaskRunners task_runners = - flutter::TaskRunners("test_runners", nullptr, nullptr, nullptr, nullptr); - - EXPECT_FALSE(delegate.SemanticsEnabled()); - EXPECT_EQ(delegate.SemanticsFeatures(), 0); - - auto platform_view = flutter_runner::PlatformView( - delegate, // delegate - "test_platform_view", // label - std::move(view_ref_control), // view_ref_control - std::move(view_ref), // view_ref - std::move(task_runners), // task_runners - services_provider.service_directory(), // runner_services - nullptr, // parent_environment_service_provider_handle - nullptr, // session_listener_request - nullptr, // on_session_listener_error_callback - nullptr, // session_metrics_did_change_callback - nullptr, // session_size_change_hint_callback - nullptr, // wireframe_enabled_callback - 0u // vsync_event_handle - ); - - RunLoopUntilIdle(); - - EXPECT_TRUE(delegate.SemanticsEnabled()); - EXPECT_EQ( - delegate.SemanticsFeatures(), - static_cast( - flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); -} - TEST_F(PlatformViewTests, ChangesSettings) { MockSemanticsManager semantics_manager = MockSemanticsManager(); sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); @@ -208,18 +123,16 @@ TEST_F(PlatformViewTests, ChangesSettings) { RunLoopUntilIdle(); + std::unique_ptr flutter_platform_view(&platform_view); + flutter_platform_view->SetSemanticsEnabled(true); + EXPECT_TRUE(delegate.SemanticsEnabled()); EXPECT_EQ( delegate.SemanticsFeatures(), static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); - - EXPECT_TRUE(delegate.SemanticsEnabled()); - EXPECT_EQ(delegate.SemanticsFeatures(), - static_cast( - flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); - + flutter_platform_view->SetSemanticsEnabled(false); EXPECT_FALSE(delegate.SemanticsEnabled()); EXPECT_EQ(delegate.SemanticsFeatures(), 0); From 1b20e1e2ae87ca63dc8700401e797baab61a89d3 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 20 Sep 2019 16:03:25 -0700 Subject: [PATCH 06/15] format --- shell/platform/fuchsia/flutter/flutter_runner_fakes.h | 8 +++++--- shell/platform/fuchsia/flutter/platform_view_unittest.cc | 9 ++++----- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h index aad0dfbc58934..4516d00f26c15 100644 --- a/shell/platform/fuchsia/flutter/flutter_runner_fakes.h +++ b/shell/platform/fuchsia/flutter/flutter_runner_fakes.h @@ -19,8 +19,8 @@ class MockSemanticsManager // |fuchsia::accessibility::semantics::SemanticsManager|: void RegisterViewForSemantics( fuchsia::ui::views::ViewRef view_ref, - fidl::InterfaceHandle< - fuchsia::accessibility::semantics::SemanticListener> handle, + fidl::InterfaceHandle + handle, fidl::InterfaceRequest semantic_tree) override { tree_binding_.Bind(std::move(semantic_tree)); @@ -86,7 +86,9 @@ class MockSemanticsManager return last_updated_nodes_; } - void CommitUpdates(CommitUpdatesCallback callback) override { commit_count_++; } + void CommitUpdates(CommitUpdatesCallback callback) override { + commit_count_++; + } private: bool has_view_ref_ = false; diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index 47262dfd80b60..6bc90663235b0 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -5,8 +5,8 @@ #include "flutter/shell/platform/fuchsia/flutter/platform_view.h" #include -#include #include +#include #include #include #include @@ -127,10 +127,9 @@ TEST_F(PlatformViewTests, ChangesSettings) { flutter_platform_view->SetSemanticsEnabled(true); EXPECT_TRUE(delegate.SemanticsEnabled()); - EXPECT_EQ( - delegate.SemanticsFeatures(), - static_cast( - flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); + EXPECT_EQ(delegate.SemanticsFeatures(), + static_cast( + flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); flutter_platform_view->SetSemanticsEnabled(false); From 59d3ec4c3c3be7c4a90e7d2b196bb1b3a7108de3 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 20 Sep 2019 16:11:44 -0700 Subject: [PATCH 07/15] copyright --- shell/platform/fuchsia/flutter/platform_view_unittest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index 6bc90663235b0..d762e9e9647a2 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -1,4 +1,4 @@ -// Copyright 2019 The Flutter Authors. All rights reserved. +// Copyright 2013 The Flutter Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. From 1dd65234574c60fd19b839453a11331d8f07376c Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 20 Sep 2019 16:17:33 -0700 Subject: [PATCH 08/15] .. --- ci/licenses_golden/licenses_flutter | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/licenses_golden/licenses_flutter b/ci/licenses_golden/licenses_flutter index 5e0e742ff0bed..8fbff80265f6e 100644 --- a/ci/licenses_golden/licenses_flutter +++ b/ci/licenses_golden/licenses_flutter @@ -952,7 +952,7 @@ FILE: ../../../flutter/shell/platform/fuchsia/flutter/meta/jit_product_runtime FILE: ../../../flutter/shell/platform/fuchsia/flutter/meta/jit_runtime FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view.h -FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view_unittests.cc +FILE: ../../../flutter/shell/platform/fuchsia/flutter/platform_view_unittest.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner.cc FILE: ../../../flutter/shell/platform/fuchsia/flutter/runner.h FILE: ../../../flutter/shell/platform/fuchsia/flutter/session_connection.cc From f142c7922a4826c4403629e5e199874f4dda0d7f Mon Sep 17 00:00:00 2001 From: Dan Field Date: Mon, 30 Sep 2019 10:35:01 -0700 Subject: [PATCH 09/15] make script more flexible --- ci/build_flutter_runner_tests.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/ci/build_flutter_runner_tests.sh b/ci/build_flutter_runner_tests.sh index eaf098dd0dbcf..18e19381ebade 100755 --- a/ci/build_flutter_runner_tests.sh +++ b/ci/build_flutter_runner_tests.sh @@ -1,17 +1,21 @@ #!/bin/bash set -ex +build_mode=${1:-debug} +build_arch=${2:-x64} +build_variant="fuchsia_${build_mode}_${build_arch}" + PATH="$HOME/depot_tools:$PATH" cd .. # Build the flutter runner tests far directory -flutter/tools/gn --fuchsia --no-lto --runtime-mode debug -ninja -C out/fuchsia_debug_x64 flutter/shell/platform/fuchsia/flutter:flutter_runner_tests +flutter/tools/gn --fuchsia --no-lto --runtime-mode $build_mode --fuchsia-cpu $build_arch +ninja -C out/${build_variant} flutter/shell/platform/fuchsia/flutter:flutter_runner_tests # Generate the far package -flutter/tools/fuchsia/gen_package.py\ - --pm-bin $PWD/fuchsia/sdk/linux/tools/pm\ - --package-dir $PWD/out/fuchsia_debug_x64/flutter_runner_tests_far\ - --signing-key $PWD/flutter/tools/fuchsia/development.key\ +flutter/tools/fuchsia/gen_package.py \ +--pm-bin $PWD/fuchsia/sdk/linux/tools/pm \ + --package-dir $PWD/out/${build_variant}/flutter_runner_tests_far \ + --signing-key $PWD/flutter/tools/fuchsia/development.key \ --far-name flutter_runner_tests From 2b21516a1f05aae74a80fead337132f459ad5bf8 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Wed, 2 Oct 2019 20:25:52 -0700 Subject: [PATCH 10/15] fix test --- ci/build_flutter_runner_tests.sh | 15 +++++++++------ shell/platform/fuchsia/flutter/platform_view.h | 8 ++++---- .../fuchsia/flutter/platform_view_unittest.cc | 13 ++++--------- 3 files changed, 17 insertions(+), 19 deletions(-) diff --git a/ci/build_flutter_runner_tests.sh b/ci/build_flutter_runner_tests.sh index 18e19381ebade..244e7d68497bd 100755 --- a/ci/build_flutter_runner_tests.sh +++ b/ci/build_flutter_runner_tests.sh @@ -6,16 +6,19 @@ build_arch=${2:-x64} build_variant="fuchsia_${build_mode}_${build_arch}" PATH="$HOME/depot_tools:$PATH" -cd .. + +DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" +FLUTTER_DIR=$DIR/.. +SRC_DIR=$FLUTTER_DIR/.. # Build the flutter runner tests far directory -flutter/tools/gn --fuchsia --no-lto --runtime-mode $build_mode --fuchsia-cpu $build_arch +$FLUTTER_DIR/tools/gn --fuchsia --no-lto --runtime-mode $build_mode --fuchsia-cpu $build_arch ninja -C out/${build_variant} flutter/shell/platform/fuchsia/flutter:flutter_runner_tests # Generate the far package -flutter/tools/fuchsia/gen_package.py \ ---pm-bin $PWD/fuchsia/sdk/linux/tools/pm \ - --package-dir $PWD/out/${build_variant}/flutter_runner_tests_far \ - --signing-key $PWD/flutter/tools/fuchsia/development.key \ +$FLUTTER_DIR/tools/fuchsia/gen_package.py \ + --pm-bin $SRC_DIR/fuchsia/sdk/linux/tools/pm \ + --package-dir $SRC_DIR/out/${build_variant}/flutter_runner_tests_far \ + --signing-key $FLUTTER_DIR/tools/fuchsia/development.key \ --far-name flutter_runner_tests diff --git a/shell/platform/fuchsia/flutter/platform_view.h b/shell/platform/fuchsia/flutter/platform_view.h index 777a806d874a3..6317c75c48f1f 100644 --- a/shell/platform/fuchsia/flutter/platform_view.h +++ b/shell/platform/fuchsia/flutter/platform_view.h @@ -67,6 +67,10 @@ class PlatformView final : public flutter::PlatformView, void UpdateViewportMetrics(const fuchsia::ui::gfx::Metrics& metrics); + // |flutter::PlatformView| + // |flutter_runner::AccessibilityBridge::Delegate| + void SetSemanticsEnabled(bool enabled) override; + private: const std::string debug_label_; // TODO(MI4-2490): remove once ViewRefControl is passed to Scenic and kept @@ -154,10 +158,6 @@ class PlatformView final : public flutter::PlatformView, void HandlePlatformMessage( fml::RefPtr message) override; - // |flutter::PlatformView| - // |flutter_runner::AccessibilityBridge::Delegate| - void SetSemanticsEnabled(bool enabled) override; - // |flutter::PlatformView| void UpdateSemantics( flutter::SemanticsNodeUpdates update, diff --git a/shell/platform/fuchsia/flutter/platform_view_unittest.cc b/shell/platform/fuchsia/flutter/platform_view_unittest.cc index d762e9e9647a2..5bbca9e4718ff 100644 --- a/shell/platform/fuchsia/flutter/platform_view_unittest.cc +++ b/shell/platform/fuchsia/flutter/platform_view_unittest.cc @@ -16,7 +16,6 @@ #include "flutter/lib/ui/window/platform_message.h" #include "flutter/lib/ui/window/window.h" -#include "flutter/shell/platform/fuchsia/flutter/flutter_runner_fakes.h" #include "fuchsia/ui/views/cpp/fidl.h" #include "googletest/googletest/include/gtest/gtest.h" @@ -84,11 +83,8 @@ class MockPlatformViewDelegate : public flutter::PlatformView::Delegate { int32_t semantics_features_ = 0; }; -TEST_F(PlatformViewTests, ChangesSettings) { - MockSemanticsManager semantics_manager = MockSemanticsManager(); +TEST_F(PlatformViewTests, ChangesAccessibilitySettings) { sys::testing::ServiceDirectoryProvider services_provider(dispatcher()); - services_provider.AddService(semantics_manager.GetHandler(dispatcher()), - SemanticsManager::Name_); MockPlatformViewDelegate delegate; zx::eventpair a, b; @@ -117,21 +113,20 @@ TEST_F(PlatformViewTests, ChangesSettings) { nullptr, // on_session_listener_error_callback nullptr, // session_metrics_did_change_callback nullptr, // session_size_change_hint_callback - nullptr, // wireframe_enabled_callback + nullptr, // on_enable_wireframe_callback, 0u // vsync_event_handle ); RunLoopUntilIdle(); - std::unique_ptr flutter_platform_view(&platform_view); - flutter_platform_view->SetSemanticsEnabled(true); + platform_view.SetSemanticsEnabled(true); EXPECT_TRUE(delegate.SemanticsEnabled()); EXPECT_EQ(delegate.SemanticsFeatures(), static_cast( flutter::AccessibilityFeatureFlag::kAccessibleNavigation)); - flutter_platform_view->SetSemanticsEnabled(false); + platform_view.SetSemanticsEnabled(false); EXPECT_FALSE(delegate.SemanticsEnabled()); EXPECT_EQ(delegate.SemanticsFeatures(), 0); From decd2ac527255fabf46ec3b23f291a4075256671 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Thu, 3 Oct 2019 00:18:22 -0700 Subject: [PATCH 11/15] revert changes to file that is about to be deleted anyway --- ci/build_flutter_runner_tests.sh | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/ci/build_flutter_runner_tests.sh b/ci/build_flutter_runner_tests.sh index 244e7d68497bd..eaf098dd0dbcf 100755 --- a/ci/build_flutter_runner_tests.sh +++ b/ci/build_flutter_runner_tests.sh @@ -1,24 +1,17 @@ #!/bin/bash set -ex -build_mode=${1:-debug} -build_arch=${2:-x64} -build_variant="fuchsia_${build_mode}_${build_arch}" - PATH="$HOME/depot_tools:$PATH" - -DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" -FLUTTER_DIR=$DIR/.. -SRC_DIR=$FLUTTER_DIR/.. +cd .. # Build the flutter runner tests far directory -$FLUTTER_DIR/tools/gn --fuchsia --no-lto --runtime-mode $build_mode --fuchsia-cpu $build_arch -ninja -C out/${build_variant} flutter/shell/platform/fuchsia/flutter:flutter_runner_tests +flutter/tools/gn --fuchsia --no-lto --runtime-mode debug +ninja -C out/fuchsia_debug_x64 flutter/shell/platform/fuchsia/flutter:flutter_runner_tests # Generate the far package -$FLUTTER_DIR/tools/fuchsia/gen_package.py \ - --pm-bin $SRC_DIR/fuchsia/sdk/linux/tools/pm \ - --package-dir $SRC_DIR/out/${build_variant}/flutter_runner_tests_far \ - --signing-key $FLUTTER_DIR/tools/fuchsia/development.key \ +flutter/tools/fuchsia/gen_package.py\ + --pm-bin $PWD/fuchsia/sdk/linux/tools/pm\ + --package-dir $PWD/out/fuchsia_debug_x64/flutter_runner_tests_far\ + --signing-key $PWD/flutter/tools/fuchsia/development.key\ --far-name flutter_runner_tests From 4eca82a0964160f78fe1dd098bff2431d5df47bb Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 4 Oct 2019 09:39:41 -0700 Subject: [PATCH 12/15] hold ref --- .../fuchsia/flutter/accessibility_bridge_unittest.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index 4760e8108b316..26bd17e999bf8 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -46,11 +46,9 @@ class AccessibilityBridgeTest : public testing::Test { protected: void SetUp() override { - zx::eventpair a, b; - zx::eventpair::create(/* flags */ 0u, &a, &b); - auto view_ref = fuchsia::ui::views::ViewRef({ - .reference = std::move(a), - }); + zx_status_t status = zx::eventpair::create( + /*flags*/ 0u, &view_ref_control_.reference, &view_ref_.reference); + EXPECT_EQ(status, ZX_OK); accessibility_bridge_ = std::make_unique( @@ -61,6 +59,8 @@ class AccessibilityBridgeTest : public testing::Test { void TearDown() override { semantics_manager_.ResetTree(); } + fuchsia::ui::views::ViewRefControl view_ref_control_; + fuchsia::ui::views::ViewRef view_ref_; MockSemanticsManager semantics_manager_; AccessibilityBridgeTestDelegate accessibility_delegate_; std::unique_ptr accessibility_bridge_; From 3ff56724684cd9685de527149b5285ed78777bf3 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 4 Oct 2019 09:47:55 -0700 Subject: [PATCH 13/15] format --- shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index 26bd17e999bf8..fe5e0e57e4f9d 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -47,7 +47,7 @@ class AccessibilityBridgeTest : public testing::Test { protected: void SetUp() override { zx_status_t status = zx::eventpair::create( - /*flags*/ 0u, &view_ref_control_.reference, &view_ref_.reference); + /*flags*/ 0u, &view_ref_control_.reference, &view_ref_.reference); EXPECT_EQ(status, ZX_OK); accessibility_bridge_ = From 7677406436f7baf66324288ecd68fdcd2bf8be42 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 4 Oct 2019 10:02:04 -0700 Subject: [PATCH 14/15] ... --- shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc index fe5e0e57e4f9d..d432acc7ddaed 100644 --- a/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc +++ b/shell/platform/fuchsia/flutter/accessibility_bridge_unittest.cc @@ -53,7 +53,7 @@ class AccessibilityBridgeTest : public testing::Test { accessibility_bridge_ = std::make_unique( accessibility_delegate_, services_provider_.service_directory(), - std::move(view_ref)); + std::move(view_ref_)); RunLoopUntilIdle(); } From 93c2fbd3df6918df750b1dfd9e8a4525a4969800 Mon Sep 17 00:00:00 2001 From: Dan Field Date: Fri, 4 Oct 2019 12:47:23 -0700 Subject: [PATCH 15/15] ... --- .../flutter/meta/flutter_runner_tests.cmx | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx b/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx index d9b627c31a673..fedcb77867acb 100644 --- a/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx +++ b/shell/platform/fuchsia/flutter/meta/flutter_runner_tests.cmx @@ -1,15 +1,15 @@ { - "program": { - "binary": "bin/app" - }, - "sandbox": { - "features": [ - "vulkan", - "deprecated-ambient-replace-as-executable" - ], - "services": [ - "fuchsia.accessibility.semantics.SemanticsManager", - "fuchsia.sys.Launcher" - ] - } + "program": { + "binary": "bin/app" + }, + "sandbox": { + "features": [ + "vulkan", + "deprecated-ambient-replace-as-executable" + ], + "services": [ + "fuchsia.accessibility.semantics.SemanticsManager", + "fuchsia.sys.Launcher" + ] + } }