blob: 6796771d1ff97386f33f0b8c65543abced6d0c12 [file] [log] [blame]
Kevin Marshall017f4612019-12-10 01:03:351// Copyright 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
Kevin Marshallb11af76b52020-01-29 19:47:265#include "fuchsia/base/context_provider_test_connector.h"
Kevin Marshall017f4612019-12-10 01:03:356
7#include <unistd.h>
8
9#include <fuchsia/sys/cpp/fidl.h>
10#include <lib/fdio/directory.h>
11#include <lib/sys/cpp/component_context.h>
12#include <zircon/processargs.h>
13#include <utility>
14
Kevin Marshall017f4612019-12-10 01:03:3515#include "base/fuchsia/fuchsia_logging.h"
Sharon Yangb2ff20e2020-06-19 12:54:0116#include "base/fuchsia/process_context.h"
Kevin Marshall017f4612019-12-10 01:03:3517
Kevin Marshallb11af76b52020-01-29 19:47:2618namespace cr_fuchsia {
19
David Dorwin753eff82020-10-06 22:33:0120namespace {
21
22// |is_for_logging_test| should only be true when testing WebEngine's logging
23// behavior as it prevents WebEngine logs from being included in the test
24// output. When false, WebEngine logs are not included in the Fuchsia system
25// log.
26fidl::InterfaceHandle<fuchsia::io::Directory> StartWebEngineForTestsInternal(
Kevin Marshall017f4612019-12-10 01:03:3527 fidl::InterfaceRequest<fuchsia::sys::ComponentController>
28 component_controller_request,
David Dorwin753eff82020-10-06 22:33:0129 const base::CommandLine& command_line,
30 bool is_for_logging_test) {
Kevin Marshall017f4612019-12-10 01:03:3531 fuchsia::sys::LaunchInfo launch_info;
David Dorwin5df93ec2020-06-24 20:18:3632 launch_info.url =
33 "fuchsia-pkg://fuchsia.com/web_engine#meta/context_provider.cmx";
Kevin Marshall017f4612019-12-10 01:03:3534 launch_info.arguments = command_line.argv();
35
David Dorwin753eff82020-10-06 22:33:0136 if (!is_for_logging_test) {
37 // Clone stderr from the current process to WebEngine and ask it to
38 // redirects all logs to stderr.
39 launch_info.err = fuchsia::sys::FileDescriptor::New();
40 launch_info.err->type0 = PA_FD;
41 zx_status_t status = fdio_fd_clone(
42 STDERR_FILENO, launch_info.err->handle0.reset_and_get_address());
43 ZX_CHECK(status == ZX_OK, status);
44 launch_info.arguments->push_back("--enable-logging=stderr");
45 }
Kevin Marshall017f4612019-12-10 01:03:3546
47 fidl::InterfaceHandle<fuchsia::io::Directory> web_engine_services_dir;
48 launch_info.directory_request =
49 web_engine_services_dir.NewRequest().TakeChannel();
50
51 fuchsia::sys::LauncherPtr launcher;
Sharon Yangb2ff20e2020-06-19 12:54:0152 base::ComponentContextForProcess()->svc()->Connect(launcher.NewRequest());
Kevin Marshall017f4612019-12-10 01:03:3553 launcher->CreateComponent(std::move(launch_info),
54 std::move(component_controller_request));
55
Sergey Ulanovf1d9f13c2020-04-09 22:46:4556 return web_engine_services_dir;
57}
Kevin Marshall017f4612019-12-10 01:03:3558
David Dorwin753eff82020-10-06 22:33:0159} // namespace
60
61fidl::InterfaceHandle<fuchsia::io::Directory> StartWebEngineForTests(
62 fidl::InterfaceRequest<fuchsia::sys::ComponentController>
63 component_controller_request,
64 const base::CommandLine& command_line) {
65 return StartWebEngineForTestsInternal(std::move(component_controller_request),
66 command_line, false);
67}
68
Sergey Ulanovf1d9f13c2020-04-09 22:46:4569fuchsia::web::ContextProviderPtr ConnectContextProvider(
70 fidl::InterfaceRequest<fuchsia::sys::ComponentController>
71 component_controller_request,
72 const base::CommandLine& command_line) {
David Dorwin753eff82020-10-06 22:33:0173 sys::ServiceDirectory web_engine_service_dir(StartWebEngineForTestsInternal(
74 std::move(component_controller_request), command_line, false));
Sergey Ulanovf1d9f13c2020-04-09 22:46:4575 return web_engine_service_dir.Connect<fuchsia::web::ContextProvider>();
Kevin Marshall017f4612019-12-10 01:03:3576}
Kevin Marshallb11af76b52020-01-29 19:47:2677
David Dorwin753eff82020-10-06 22:33:0178fuchsia::web::ContextProviderPtr ConnectContextProviderForLoggingTest(
79 fidl::InterfaceRequest<fuchsia::sys::ComponentController>
80 component_controller_request,
81 const base::CommandLine& command_line) {
82 sys::ServiceDirectory web_engine_service_dir(StartWebEngineForTestsInternal(
83 std::move(component_controller_request), command_line, true));
84 return web_engine_service_dir.Connect<fuchsia::web::ContextProvider>();
85}
Kevin Marshallb11af76b52020-01-29 19:47:2686} // namespace cr_fuchsia