[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:

committed by
Chromium LUCI CQ

parent
3d8a0c6a22
commit
c537ce7cc0
@ -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
|
||||
|
Reference in New Issue
Block a user