extension_function_registry.cc 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "extensions/browser/extension_function_registry.h"
  5. #include "base/no_destructor.h"
  6. #include "extensions/browser/extension_function.h"
  7. #include "extensions/browser/extensions_browser_client.h"
  8. // static
  9. ExtensionFunctionRegistry& ExtensionFunctionRegistry::GetInstance() {
  10. static base::NoDestructor<ExtensionFunctionRegistry> instance;
  11. return *instance;
  12. }
  13. ExtensionFunctionRegistry::ExtensionFunctionRegistry() {
  14. extensions::ExtensionsBrowserClient* client =
  15. extensions::ExtensionsBrowserClient::Get();
  16. if (client) {
  17. client->RegisterExtensionFunctions(this);
  18. }
  19. }
  20. ExtensionFunctionRegistry::~ExtensionFunctionRegistry() = default;
  21. bool ExtensionFunctionRegistry::OverrideFunctionForTesting(
  22. const std::string& name,
  23. ExtensionFunctionFactory factory) {
  24. auto iter = factories_.find(name);
  25. if (iter == factories_.end())
  26. return false;
  27. iter->second.factory_ = factory;
  28. return true;
  29. }
  30. scoped_refptr<ExtensionFunction> ExtensionFunctionRegistry::NewFunction(
  31. const std::string& name) {
  32. auto iter = factories_.find(name);
  33. if (iter == factories_.end()) {
  34. return nullptr;
  35. }
  36. scoped_refptr<ExtensionFunction> function = iter->second.factory_();
  37. function->SetName(iter->second.function_name_);
  38. function->set_histogram_value(iter->second.histogram_value_);
  39. return function;
  40. }
  41. void ExtensionFunctionRegistry::Register(const FactoryEntry& entry) {
  42. factories_[entry.function_name_] = entry;
  43. }
  44. ExtensionFunctionRegistry::FactoryEntry::FactoryEntry() = default;