// Copyright 2014 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_BASE_MIXIN_BASED_IN_PROCESS_BROWSER_TEST_H_ #define CHROME_TEST_BASE_MIXIN_BASED_IN_PROCESS_BROWSER_TEST_H_ #include <memory> #include <vector> #include "base/memory/raw_ptr.h" #include "chrome/test/base/in_process_browser_test.h" // // InProcessBrowserTestMixin enables writing isolated test helpers which depend // on the standard test lifecycle but should not be test bases. // // A new mixin is created by deriving from InProcessBrowserTestMixin and // overriding methods as needed. // // class MyMixin : public InProcessBrowserTestMixin { // public: // explicit MyMixin(InProcessBrowserTestMixinHost* host) // : InProcessBrowserTestMixin(host) {} // MyMixin(const MyMixin&) = delete; // MyMixin& operator=(const MyMixin&) = delete; // ~MyMixin() override = default; // // // InProcessBrowserTestMixin: // void SetUpCommandLine(base::CommandLine* command_line) { /* ... */ } // // }; // // // To use the mixin, declare it as a member variable on the class and call the // constructor with the InProcessBrowserTestMixinHost also declared on the class // (or parent class). The mixin will register itself with the host and the host // will invoke all registered mixin methods. // // For example, here is how to use MixinBasedInProcessBrowserTest: // // class SimpleUsage : public MixinBasedInProcessBrowserTest { // public: // SimpleUsage() = default; // SimpleUsage(const SimpleUsage&) = delete; // SimpleUsage& operator=(const SimpleUsage&) = delete; // ~SimpleUsage() override = default; // // private: // MyMixin my_mixin_{&mixin_host_}; // SomeOtherMixin some_other_mixin_{&mixin_host_}; // }; // // // See WizardInProcessBrowserTest for an example of how to correctly embed a // mixin host. // class InProcessBrowserTestMixinHost; // Derive from this type to create a class which depends on the test lifecycle // without also becoming a test base. class InProcessBrowserTestMixin { … }; // The mixin host executes the callbacks on the mixin instances. class InProcessBrowserTestMixinHost final { … }; // An InProcessBrowserTest which supports mixins. class MixinBasedInProcessBrowserTest : public InProcessBrowserTest { … }; #endif // CHROME_TEST_BASE_MIXIN_BASED_IN_PROCESS_BROWSER_TEST_H_