blob: 307f0bd9d0f259b166532339d4ceba85f6dbb758 [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
Sergey Ulanovf1d9f13c2020-04-09 22:46:4520fidl::InterfaceHandle<fuchsia::io::Directory> StartWebEngineForTests(
Kevin Marshall017f4612019-12-10 01:03:3521 fidl::InterfaceRequest<fuchsia::sys::ComponentController>
22 component_controller_request,
23 const base::CommandLine& command_line) {
24 fuchsia::sys::LaunchInfo launch_info;
David Dorwin5df93ec2020-06-24 20:18:3625 launch_info.url =
26 "fuchsia-pkg://fuchsia.com/web_engine#meta/context_provider.cmx";
Kevin Marshall017f4612019-12-10 01:03:3527 launch_info.arguments = command_line.argv();
28
29 // Clone stderr from the current process to WebEngine and ask it to
30 // redirects all logs to stderr.
31 launch_info.err = fuchsia::sys::FileDescriptor::New();
32 launch_info.err->type0 = PA_FD;
33 zx_status_t status = fdio_fd_clone(
34 STDERR_FILENO, launch_info.err->handle0.reset_and_get_address());
35 ZX_CHECK(status == ZX_OK, status);
36 launch_info.arguments->push_back("--enable-logging=stderr");
37
38 fidl::InterfaceHandle<fuchsia::io::Directory> web_engine_services_dir;
39 launch_info.directory_request =
40 web_engine_services_dir.NewRequest().TakeChannel();
41
42 fuchsia::sys::LauncherPtr launcher;
Sharon Yangb2ff20e2020-06-19 12:54:0143 base::ComponentContextForProcess()->svc()->Connect(launcher.NewRequest());
Kevin Marshall017f4612019-12-10 01:03:3544 launcher->CreateComponent(std::move(launch_info),
45 std::move(component_controller_request));
46
Sergey Ulanovf1d9f13c2020-04-09 22:46:4547 return web_engine_services_dir;
48}
Kevin Marshall017f4612019-12-10 01:03:3549
Sergey Ulanovf1d9f13c2020-04-09 22:46:4550fuchsia::web::ContextProviderPtr ConnectContextProvider(
51 fidl::InterfaceRequest<fuchsia::sys::ComponentController>
52 component_controller_request,
53 const base::CommandLine& command_line) {
54 sys::ServiceDirectory web_engine_service_dir(StartWebEngineForTests(
55 std::move(component_controller_request), command_line));
56 return web_engine_service_dir.Connect<fuchsia::web::ContextProvider>();
Kevin Marshall017f4612019-12-10 01:03:3557}
Kevin Marshallb11af76b52020-01-29 19:47:2658
59} // namespace cr_fuchsia