File: service_environment.h

package info (click to toggle)
chromium 138.0.7204.183-1
  • links: PTS, VCS
  • area: main
  • in suites: trixie
  • size: 6,071,908 kB
  • sloc: cpp: 34,937,088; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,953; asm: 946,768; xml: 739,971; pascal: 187,324; sh: 89,623; perl: 88,663; objc: 79,944; sql: 50,304; cs: 41,786; fortran: 24,137; makefile: 21,806; php: 13,980; tcl: 13,166; yacc: 8,925; ruby: 7,485; awk: 3,720; lisp: 3,096; lex: 1,327; ada: 727; jsp: 228; sed: 36
file content (48 lines) | stat: -rw-r--r-- 2,196 bytes parent folder | download | duplicates (5)
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
// Copyright 2024 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_WINDOWS_SERVICES_SERVICE_PROGRAM_TEST_SUPPORT_SERVICE_ENVIRONMENT_H_
#define CHROME_WINDOWS_SERVICES_SERVICE_PROGRAM_TEST_SUPPORT_SERVICE_ENVIRONMENT_H_

#include <optional>
#include <string_view>

#include "base/files/file_path.h"
#include "base/win/windows_types.h"
#include "chrome/windows_services/service_program/test_support/scoped_install_service.h"
#include "chrome/windows_services/service_program/test_support/scoped_log_grabber.h"

// Installs a test service for its lifetime.
class ServiceEnvironment {
 public:
  // Installs the service named `display_name`; stripping spaces from this to
  // make its actual service name. `service_exe_name` is the basename of the
  // executable hosting the service. It must be in the same directory as the
  // executable under test (e.g., the build output directory). `testing_switch`,
  // if not empty, will be added to the service's command line. `clsid` and
  // `iid` identify the COM class and interface exposed by the service.
  ServiceEnvironment(std::wstring_view display_name,
                     base::FilePath::StringViewType service_exe_name,
                     std::string_view testing_switch,
                     const CLSID& clsid,
                     const IID& iid);
  ServiceEnvironment(const ServiceEnvironment&) = delete;
  ServiceEnvironment& operator=(const ServiceEnvironment&) = delete;
  ~ServiceEnvironment();

  bool is_valid() const { return service_.has_value(); }

  // Sets a callback to be run for each message received from a service process.
  // The callback is run with the process ID of the service and the log message.
  // The message is not emitted to the test process's stderr if the callback
  // returns true.
  using LogMessageCallback = ScopedLogGrabber::LogMessageCallback;
  void SetLogMessageCallback(ScopedLogGrabber::LogMessageCallback callback);

 private:
  ScopedLogGrabber log_grabber_;
  std::optional<ScopedInstallService> service_;
};

#endif  // CHROME_WINDOWS_SERVICES_SERVICE_PROGRAM_TEST_SUPPORT_SERVICE_ENVIRONMENT_H_