0

[fuchsia] Switch browsertests to Flatland

Switch Browsertests to run with the Flatland TestUiStack, and remove
scenic hardcoding in WebEngineTestLauncher. WebEngineBrowserMainParts
picks the appropriate Ozone platform based on
fuchsia.ui.scenic/Scenic.UseFlatland. Test configurations that cannot
use Scenic or Flatland should use Headless instead with
--ozone-platform=headless. See crrev.com/c/4001000 for example.

* web_engine_browsertests now runs with the Flatland TestUiStack.
* cast_runner_browsertests now runs with the same Flatland TestUiStack
  to detect Scenic.
* FrameImplTest.VisibilityState is migrated to CreateView2 because
  GraphicalPresenter no longer accepts GFX parameters.
* VirtualKeyboardTest and KeyboardInputTest are migrated to CreateView2
  because they assert the KOID of the ViewRef.
* VirtualKeyboardTest and KeyboardInputTest are skipped when ran with
  headless Ozone because keyboard events are ignored.

Tests can continue to use Frame.CreateView and
Frame.CreateViewWithViewRef for now, since GFX APIs are still present.
Future CLs will migrate these to CreateView2.


Bug: 1300993
Change-Id: I9655bf1ec5185cf6949e21b89db54490ef28e58a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4371128
Code-Coverage: Findit <findit-for-me@appspot.gserviceaccount.com>
Commit-Queue: David Song <wintermelons@google.com>
Reviewed-by: Sergey Ulanov <sergeyu@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1148204}
This commit is contained in:
David Song
2023-05-23 22:01:53 +00:00
committed by Chromium LUCI CQ
parent 3d8a0c6a22
commit c537ce7cc0
8 changed files with 54 additions and 41 deletions

@ -242,6 +242,7 @@ test("cast_runner_browsertests") {
additional_manifest_fragments = [
"//build/config/fuchsia/test/mark_vmo_executable.shard.test-cml",
"//build/config/fuchsia/test/network.shard.test-cml",
"//build/config/fuchsia/test/test_ui_stack.shard.test-cml",
"//third_party/fuchsia-sdk/sdk/pkg/vulkan/client.shard.cml",
]
}

@ -594,6 +594,7 @@ test("web_engine_browsertests") {
":browsertest_core",
":switches",
":web_engine_core",
"//components/fuchsia_component_support:annotations_manager",
"//components/policy/content:safe_sites_navigation_throttle",
"//components/safe_search_api:safe_search_api",
"//components/safe_search_api:test_support",
@ -622,7 +623,7 @@ test("web_engine_browsertests") {
"//build/config/fuchsia/test/fonts.shard.test-cml",
"//build/config/fuchsia/test/mark_vmo_executable.shard.test-cml",
"//build/config/fuchsia/test/network.shard.test-cml",
"//build/config/fuchsia/test/gfx_test_ui_stack.shard.test-cml",
"//build/config/fuchsia/test/test_ui_stack.shard.test-cml",
"//third_party/fuchsia-sdk/sdk/pkg/vulkan/client.shard.cml",
]

@ -3,6 +3,7 @@
// found in the LICENSE file.
#include <fuchsia/element/cpp/fidl.h>
#include <lib/ui/scenic/cpp/view_creation_tokens.h>
#include <lib/ui/scenic/cpp/view_token_pair.h>
#include <lib/zx/time.h>
@ -12,6 +13,7 @@
#include "base/test/test_future.h"
#include "base/test/test_timeouts.h"
#include "build/build_config.h"
#include "components/fuchsia_component_support/annotations_manager.h"
#include "content/public/browser/navigation_handle.h"
#include "content/public/test/browser_test.h"
#include "content/public/test/test_utils.h"
@ -131,9 +133,9 @@ class FrameImplTest : public FrameImplTestBase {
#define MAYBE_VisibilityState VisibilityState
#endif
IN_PROC_BROWSER_TEST_F(FrameImplTest, MAYBE_VisibilityState) {
// This test uses the `fuchsia.ui.gfx` variant of `Frame.CreateView*()`.
ASSERT_EQ(ui::OzonePlatform::GetInstance()->GetPlatformNameForTest(),
"scenic");
// This test uses the `fuchsia.ui.composition` variant of
// `Frame.CreateView*()`.
ASSERT_EQ(ui::OzonePlatform::GetPlatformNameForTest(), "flatland");
net::test_server::EmbeddedTestServerHandle test_server_handle;
ASSERT_TRUE(test_server_handle =
@ -158,16 +160,19 @@ IN_PROC_BROWSER_TEST_F(FrameImplTest, MAYBE_VisibilityState) {
// Query the document.visibilityState after creating the View, but without it
// actually "attached" to the view tree.
auto view_tokens = scenic::ViewTokenPair::New();
auto view_ref_pair = scenic::ViewRefPair::New();
frame->CreateViewWithViewRef(std::move(view_tokens.view_token),
std::move(view_ref_pair.control_ref),
CloneViewRef(view_ref_pair.view_ref));
scenic::ViewCreationTokenPair token_pair =
scenic::ViewCreationTokenPair::New();
fuchsia::web::CreateView2Args create_view_args;
create_view_args.set_view_creation_token(std::move(token_pair.view_token));
frame->CreateView2(std::move(create_view_args));
base::RunLoop().RunUntilIdle();
EXPECT_EQ(GetDocumentVisibilityState(frame.ptr().get()), "\"hidden\"");
// Attach the View to a Presenter, the page should be visible.
auto annotations_manager =
std::make_unique<fuchsia_component_support::AnnotationsManager>();
fuchsia::element::AnnotationControllerHandle annotation_controller;
annotations_manager->Connect(annotation_controller.NewRequest());
auto presenter = base::ComponentContextForProcess()
->svc()
->Connect<::fuchsia::element::GraphicalPresenter>();
@ -175,20 +180,22 @@ IN_PROC_BROWSER_TEST_F(FrameImplTest, MAYBE_VisibilityState) {
ZX_LOG(ERROR, status) << "GraphicalPresenter disconnected.";
ADD_FAILURE();
});
::fuchsia::element::ViewSpec view_spec;
view_spec.set_view_holder_token(std::move(view_tokens.view_holder_token));
view_spec.set_view_ref(std::move(view_ref_pair.view_ref));
::fuchsia::element::ViewControllerPtr view_controller;
presenter->PresentView(std::move(view_spec), nullptr,
fuchsia::element::ViewSpec view_spec;
view_spec.set_viewport_creation_token(std::move(token_pair.viewport_token));
view_spec.set_annotations({});
fuchsia::element::ViewControllerPtr view_controller;
presenter->PresentView(std::move(view_spec), std::move(annotation_controller),
view_controller.NewRequest(),
[](auto result) { EXPECT_FALSE(result.is_err()); });
frame.navigation_listener().RunUntilTitleEquals("visible");
// Detach the ViewController, causing the View to be detached.
// This is a regression test for crbug.com/1141093, verifying that the page
// receives a "not visible" event as a result.
view_controller->Dismiss();
frame.navigation_listener().RunUntilTitleEquals("hidden");
// TODO(fxbug.dev/114431): Flatland does not support dismissing a view through
// the ViewController.
// Detach the ViewController, causing the View to be
// detached. This is a regression test for crbug.com/1141093, verifying that
// the page receives a "not visible" event as a result.
// view_controller->Dismiss();
// frame.navigation_listener().RunUntilTitleEquals("hidden");
}
// Verifies that the browser will navigate and generate a navigation listener

@ -23,6 +23,7 @@
#include "fuchsia_web/webengine/test/test_data.h"
#include "fuchsia_web/webengine/test/web_engine_browser_test.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/ozone/public/ozone_platform.h"
using fuchsia_input::Key;
using fuchsia_ui_input3::KeyEvent;
@ -193,6 +194,10 @@ class KeyboardInputTest : public WebEngineBrowserTest {
}
void SetUp() override {
if (ui::OzonePlatform::GetPlatformNameForTest() == "headless") {
GTEST_SKIP() << "Keyboard inputs are ignored in headless mode.";
}
scoped_feature_list_.InitWithFeatures({features::kKeyboardInput}, {});
WebEngineBrowserTest::SetUp();
}

@ -27,6 +27,7 @@
#include "fuchsia_web/webengine/test/test_data.h"
#include "fuchsia_web/webengine/test/web_engine_browser_test.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/ozone/public/ozone_platform.h"
namespace virtualkeyboard = fuchsia_input_virtualkeyboard;
@ -53,6 +54,10 @@ class VirtualKeyboardTest : public WebEngineBrowserTest {
~VirtualKeyboardTest() override = default;
void SetUp() override {
if (ui::OzonePlatform::GetPlatformNameForTest() == "headless") {
GTEST_SKIP() << "Keyboard inputs are ignored in headless mode.";
}
scoped_feature_list_.InitWithFeatures(
{features::kVirtualKeyboard, features::kKeyboardInput}, {});
WebEngineBrowserTest::SetUp();

@ -4,8 +4,8 @@
#include "fuchsia_web/webengine/test/scenic_test_helper.h"
#include <lib/ui/scenic/cpp/view_ref_pair.h>
#include <lib/ui/scenic/cpp/view_token_pair.h>
#include <fuchsia/web/cpp/fidl.h>
#include <lib/ui/scenic/cpp/view_creation_tokens.h>
#include "base/fuchsia/fuchsia_logging.h"
#include "base/run_loop.h"
@ -19,7 +19,7 @@ namespace {
const gfx::Rect kBounds = {1000, 1000};
} // namespace
ScenicTestHelper::ScenicTestHelper() {}
ScenicTestHelper::ScenicTestHelper() = default;
ScenicTestHelper::~ScenicTestHelper() = default;
// Simulate the creation of a Scenic View, except bypassing the actual
@ -27,19 +27,17 @@ ScenicTestHelper::~ScenicTestHelper() = default;
// StubWindow.
void ScenicTestHelper::CreateScenicView(FrameImpl* frame_impl,
fuchsia::web::FramePtr& frame) {
scenic::ViewRefPair view_ref_pair = scenic::ViewRefPair::New();
view_ref_ = std::move(view_ref_pair.view_ref);
fuchsia::ui::views::ViewRef view_ref_dup;
zx_status_t status = view_ref_.reference.duplicate(ZX_RIGHT_SAME_RIGHTS,
&view_ref_dup.reference);
ZX_CHECK(status == ZX_OK, status) << "zx_object_duplicate";
DCHECK(frame_impl);
frame_impl_ = frame_impl;
scenic::ViewCreationTokenPair token_pair =
scenic::ViewCreationTokenPair::New();
fuchsia::web::CreateView2Args create_view_args;
create_view_args.set_view_creation_token(std::move(token_pair.view_token));
frame->CreateView2(std::move(create_view_args));
auto view_tokens = scenic::ViewTokenPair::New();
frame->CreateViewWithViewRef(std::move(view_tokens.view_token),
std::move(view_ref_pair.control_ref),
std::move(view_ref_dup));
base::RunLoop().RunUntilIdle();
frame_impl->window_tree_host_for_test()->Show();
frame_impl_->window_tree_host_for_test()->Show();
}
void ScenicTestHelper::SetUpViewForInteraction(
@ -52,9 +50,6 @@ void ScenicTestHelper::SetUpViewForInteraction(
}
fuchsia::ui::views::ViewRef ScenicTestHelper::CloneViewRef() {
fuchsia::ui::views::ViewRef dup;
zx_status_t status =
view_ref_.reference.duplicate(ZX_RIGHT_SAME_RIGHTS, &dup.reference);
ZX_CHECK(status == ZX_OK, status) << "zx_object_duplicate";
return dup;
DCHECK(frame_impl_);
return frame_impl_->window_tree_host_for_test()->CreateViewRef();
}

@ -29,7 +29,7 @@ class ScenicTestHelper {
fuchsia::ui::views::ViewRef CloneViewRef();
protected:
fuchsia::ui::views::ViewRef view_ref_;
FrameImpl* frame_impl_;
};
#endif // FUCHSIA_WEB_WEBENGINE_TEST_SCENIC_TEST_HELPER_H_

@ -45,7 +45,6 @@ class WebEngineTestLauncherDelegate : public content::TestLauncherDelegate {
int main(int argc, char** argv) {
base::CommandLine::Init(argc, argv);
auto* command_line = base::CommandLine::ForCurrentProcess();
command_line->AppendSwitchASCII(switches::kOzonePlatform, "scenic");
command_line->AppendSwitchASCII(switches::kEnableLogging, "stderr");
// Indicate to all processes that they are being run as part of a browser