File: plugin_vm_features.h

package info (click to toggle)
chromium 138.0.7204.183-1~deb12u1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm-proposed-updates
  • size: 6,080,960 kB
  • sloc: cpp: 34,937,079; ansic: 7,176,967; javascript: 4,110,704; python: 1,419,954; 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,811; 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 (87 lines) | stat: -rw-r--r-- 2,608 bytes parent folder | download | duplicates (7)
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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
// Copyright 2020 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_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_FEATURES_H_
#define CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_FEATURES_H_

#include <string>

#include "base/functional/callback.h"

class Profile;

namespace plugin_vm {

// PluginVmFeatures provides an interface for querying which parts of Plugin VM
// are enabled or allowed.
class PluginVmFeatures {
 public:
  static PluginVmFeatures* Get();

  enum class ProfileSupported {
    kOk,
    kErrorNonPrimary,
    kErrorChildAccount,
    kErrorOffTheRecord,
    kErrorEphemeral,
    // This is for all the other cases where the profile is not supported.
    kErrorNotSupported,
  };

  enum class PolicyConfigured {
    kOk,
    kErrorUnableToCheckPolicy,
    kErrorNotEnterpriseEnrolled,
    kErrorUserNotAffiliated,
    kErrorUnableToCheckDevicePolicy,
    kErrorNotAllowedByDevicePolicy,
    kErrorNotAllowedByUserPolicy,
    kErrorLicenseNotSetUp,
    kErrorVirtualMachinesNotAllowed,
  };

  // Remember to update `plugin_vm::GetDiagnostics()` when this struct or the
  // members change.
  struct IsAllowedDiagnostics {
    bool device_supported;
    ProfileSupported profile_supported;
    PolicyConfigured policy_configured;

    bool IsOk() const;
    // An empty string is returned if there is no error (i.e. `IsOk()`
    // returns true).
    std::string GetTopError() const;
  };

  // Check if Plugin VM is allowed for the current profile and return
  // diagnostics.
  virtual IsAllowedDiagnostics GetIsAllowedDiagnostics(const Profile* profile);

  // Checks if Plugin VM is allowed for the current profile and provides
  // a reason if it is not allowed. The reason string is to only be used
  // in crosh/vmc error messages.
  virtual bool IsAllowed(const Profile* profile, std::string* reason = nullptr);

  // Returns whether Plugin VM is installed. Using vmc may cause this to return
  // an incorrect value, e.g. by renaming or deleting VMs.
  virtual bool IsConfigured(const Profile* profile);

  // Returns true if Plugin VM is allowed and configured for the current
  // profile.
  virtual bool IsEnabled(const Profile* profile);

 protected:
  static void SetForTesting(PluginVmFeatures* features);

  PluginVmFeatures();
  virtual ~PluginVmFeatures();

 private:
  PluginVmFeatures(PluginVmFeatures&& registration) = delete;
  PluginVmFeatures& operator=(PluginVmFeatures&& registration) = delete;
};

}  // namespace plugin_vm

#endif  // CHROME_BROWSER_ASH_PLUGIN_VM_PLUGIN_VM_FEATURES_H_