| // 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_FAKE_PLUGIN_VM_FEATURES_H_ |
| #define CHROME_BROWSER_ASH_PLUGIN_VM_FAKE_PLUGIN_VM_FEATURES_H_ |
| |
| #include <optional> |
| |
| #include "base/memory/raw_ptr.h" |
| #include "chrome/browser/ash/plugin_vm/plugin_vm_features.h" |
| |
| class Profile; |
| |
| namespace plugin_vm { |
| |
| // FakePluginVmFeatures implements a fake version of PluginVmFeatures which can |
| // be used for testing. It captures the current global PluginVmFeatures object |
| // and replaces it for the scope of this object. It overrides only the |
| // features that you set and uses the previous object for other features. |
| class FakePluginVmFeatures : public PluginVmFeatures { |
| public: |
| FakePluginVmFeatures(); |
| ~FakePluginVmFeatures() override; |
| |
| // PluginVmFeatures: |
| bool IsAllowed(const Profile* profile, std::string* reason) override; |
| bool IsConfigured(const Profile* profile) override; |
| bool IsEnabled(const Profile* profile) override; |
| |
| void set_allowed(bool allowed, const std::string& reason) { |
| allowed_ = allowed; |
| disallowed_reason_ = reason; |
| } |
| void set_configured(bool configured) { configured_ = configured; } |
| void set_enabled(bool enabled) { enabled_ = enabled; } |
| |
| private: |
| // Original global static when this instance is created. It is captured when |
| // FakePluginVmFeatures is created and replaced at destruction. |
| raw_ptr<PluginVmFeatures> original_features_; |
| |
| std::optional<bool> allowed_; |
| std::string disallowed_reason_; |
| std::optional<bool> configured_; |
| std::optional<bool> enabled_; |
| }; |
| |
| } // namespace plugin_vm |
| |
| #endif // CHROME_BROWSER_ASH_PLUGIN_VM_FAKE_PLUGIN_VM_FEATURES_H_ |