1 // Copyright (c) 2012 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 5 #include "chrome/browser/extensions/extension_function_registry.h" 6 7 #include "chrome/browser/extensions/api/preference/chrome_direct_setting.h" 8 #include "chrome/browser/extensions/api/preference/preference_api.h" 9 #include "chrome/browser/extensions/api/runtime/runtime_api.h" 10 #include "chrome/browser/extensions/api/web_request/web_request_api.h" 11 #include "chrome/common/extensions/api/generated_api.h" 12 13 // static 14 ExtensionFunctionRegistry* ExtensionFunctionRegistry::GetInstance() { 15 return Singleton<ExtensionFunctionRegistry>::get(); 16 } 17 18 ExtensionFunctionRegistry::ExtensionFunctionRegistry() { 19 ResetFunctions(); 20 } 21 22 ExtensionFunctionRegistry::~ExtensionFunctionRegistry() { 23 } 24 25 void ExtensionFunctionRegistry::ResetFunctions() { 26 #if defined(ENABLE_EXTENSIONS) 27 28 // Register all functions here. 29 30 // WebRequest. 31 RegisterFunction<WebRequestAddEventListener>(); 32 RegisterFunction<WebRequestEventHandled>(); 33 34 // Preferences. 35 RegisterFunction<extensions::GetPreferenceFunction>(); 36 RegisterFunction<extensions::SetPreferenceFunction>(); 37 RegisterFunction<extensions::ClearPreferenceFunction>(); 38 39 // Direct Preference Access for Component Extensions. 40 RegisterFunction<extensions::chromedirectsetting::GetDirectSettingFunction>(); 41 RegisterFunction<extensions::chromedirectsetting::SetDirectSettingFunction>(); 42 RegisterFunction< 43 extensions::chromedirectsetting::ClearDirectSettingFunction>(); 44 45 // Runtime 46 RegisterFunction<extensions::RuntimeGetBackgroundPageFunction>(); 47 RegisterFunction<extensions::RuntimeSetUninstallUrlFunction>(); 48 RegisterFunction<extensions::RuntimeReloadFunction>(); 49 RegisterFunction<extensions::RuntimeRequestUpdateCheckFunction>(); 50 RegisterFunction<extensions::RuntimeRestartFunction>(); 51 52 // Generated APIs 53 extensions::api::GeneratedFunctionRegistry::RegisterAll(this); 54 #endif // defined(ENABLE_EXTENSIONS) 55 } 56 57 void ExtensionFunctionRegistry::GetAllNames(std::vector<std::string>* names) { 58 for (FactoryMap::iterator iter = factories_.begin(); 59 iter != factories_.end(); ++iter) { 60 names->push_back(iter->first); 61 } 62 } 63 64 bool ExtensionFunctionRegistry::OverrideFunction( 65 const std::string& name, 66 ExtensionFunctionFactory factory) { 67 FactoryMap::iterator iter = factories_.find(name); 68 if (iter == factories_.end()) { 69 return false; 70 } else { 71 iter->second.factory_ = factory; 72 return true; 73 } 74 } 75 76 ExtensionFunction* ExtensionFunctionRegistry::NewFunction( 77 const std::string& name) { 78 FactoryMap::iterator iter = factories_.find(name); 79 if (iter == factories_.end()) { 80 return NULL; 81 } 82 ExtensionFunction* function = iter->second.factory_(); 83 function->set_name(name); 84 function->set_histogram_value(iter->second.histogram_value_); 85 return function; 86 } 87 88 ExtensionFunctionRegistry::FactoryEntry::FactoryEntry() 89 : factory_(0), histogram_value_(extensions::functions::UNKNOWN) { 90 } 91 92 ExtensionFunctionRegistry::FactoryEntry::FactoryEntry( 93 ExtensionFunctionFactory factory, 94 extensions::functions::HistogramValue histogram_value) 95 : factory_(factory), histogram_value_(histogram_value) { 96 } 97