1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_TEST_CHROMEDRIVER_NET_PIPE_BUILDER_H_
#define CHROME_TEST_CHROMEDRIVER_NET_PIPE_BUILDER_H_
#include <memory>
#include "base/command_line.h"
#include "base/files/file.h"
#include "base/files/scoped_file.h"
#include "base/process/launch.h"
#include "chrome/test/chromedriver/chrome/status.h"
#include "chrome/test/chromedriver/net/pipe_connection.h"
#include "chrome/test/chromedriver/net/sync_websocket.h"
// Builder of a PipeConnection object
class PipeBuilder {
public:
static const char kAsciizProtocolMode[];
static const char kCborProtocolMode[];
PipeBuilder();
virtual ~PipeBuilder();
// Return true if PipeConnection is implemented for the current platform.
static bool PlatformIsSupported();
PipeBuilder(const PipeBuilder&) = delete;
PipeBuilder& operator=(const PipeBuilder&) = delete;
// Set protocol mode.
// Supported values:
// * PipeBuilder::kAsciizProtocolMode,
// * PipeBuilder::kCborProtocolMode,
// * empty string resolving to PipeBuilder::kAsciizProtocolMode.
void SetProtocolMode(std::string mode);
// Return the underlying pipe connection object.
// The ownership is transferred to the caller.
// Prerequisties:
// * Protocol mode must be set with SetProtocolMode.
// * PipeConnection must be constructed with BuildSocket.
std::unique_ptr<SyncWebSocket> TakeSocket();
// Build the underlying pipe connection object.
Status BuildSocket();
// Close the endpoints intended for the child process.
// This method is intended to be called after starting the child process.
// If called earlier the child process will not be able to use its endpoints.
Status CloseChildEndpoints();
// Save the remote endpoints to the launch options and command line.
// This information needs to be passed to base::LaunchProcess function.
Status SetUpPipes(base::LaunchOptions* options, base::CommandLine* command);
private:
std::string protocol_mode_;
base::ScopedPlatformFile read_file_;
base::ScopedPlatformFile write_file_;
base::ScopedPlatformFile child_ends_[2];
std::unique_ptr<PipeConnection> connection_;
};
#endif // CHROME_TEST_CHROMEDRIVER_NET_PIPE_BUILDER_H_
|