| // 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 TESTING_LIBFUZZER_RENDERER_FUZZING_RENDERER_FUZZING_H_ | |
| #define TESTING_LIBFUZZER_RENDERER_FUZZING_RENDERER_FUZZING_H_ | |
| #include <unordered_map> | |
| #include "base/memory/raw_ptr.h" | |
| #include "third_party/blink/public/common/associated_interfaces/associated_interface_provider.h" | |
| #include "third_party/blink/public/common/thread_safe_browser_interface_broker_proxy.h" | |
| #include "third_party/blink/public/platform/browser_interface_broker_proxy.h" | |
| class RendererFuzzerBase { | |
| public: | |
| virtual void Run( | |
| const blink::BrowserInterfaceBrokerProxy* context_interface_broker_proxy, | |
| blink::ThreadSafeBrowserInterfaceBrokerProxy* | |
| process_interface_broker_proxy, | |
| blink::AssociatedInterfaceProvider* associated_interface_provider, | |
| std::vector<uint8_t>&& input, | |
| base::OnceClosure done_closure) = 0; | |
| virtual const char* Id() = 0; | |
| }; | |
| class RendererFuzzing { | |
| private: | |
| std::unordered_map<std::string, raw_ptr<RendererFuzzerBase, CtnExperimental>> | |
| fuzzers_; | |
| public: | |
| bool RegisterFuzzer(RendererFuzzerBase* fuzzer) { | |
| fuzzers_[fuzzer->Id()] = fuzzer; | |
| return true; | |
| } | |
| static void Run( | |
| const blink::BrowserInterfaceBrokerProxy* context_interface_broker_proxy, | |
| blink::ThreadSafeBrowserInterfaceBrokerProxy* | |
| process_interface_broker_proxy, | |
| blink::AssociatedInterfaceProvider* associated_interface_provider, | |
| const std::string& fuzzer_id, | |
| std::vector<uint8_t>&& input, | |
| base::OnceClosure done_closure); | |
| static RendererFuzzing* GetInstance(); | |
| }; | |
| #define REGISTER_RENDERER_FUZZER(klass) \ | |
| static bool RegisterFuzzerForClass_##T = \ | |
| RendererFuzzing::GetInstance()->RegisterFuzzer(new klass) | |
| #endif // TESTING_LIBFUZZER_RENDERER_FUZZING_RENDERER_FUZZING_H_ |