// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/extensions/extension_function_registry.h" #include "chrome/browser/accessibility/accessibility_extension_api.h" #include "chrome/browser/extensions/api/app/app_api.h" #include "chrome/browser/extensions/api/bookmark_manager_private/bookmark_manager_private_api.h" #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h" #include "chrome/browser/extensions/api/commands/commands.h" #include "chrome/browser/extensions/api/extension_action/extension_browser_actions_api.h" #include "chrome/browser/extensions/api/extension_action/extension_page_actions_api.h" #include "chrome/browser/extensions/api/idle/idle_api.h" #include "chrome/browser/extensions/api/managed_mode/managed_mode_api.h" #include "chrome/browser/extensions/api/metrics/metrics.h" #include "chrome/browser/extensions/api/module/module.h" #include "chrome/browser/extensions/api/omnibox/omnibox_api.h" #include "chrome/browser/extensions/api/preference/preference_api.h" #include "chrome/browser/extensions/api/runtime/runtime_api.h" #include "chrome/browser/extensions/api/test/test_api.h" #include "chrome/browser/extensions/api/top_sites/top_sites_api.h" #include "chrome/browser/extensions/api/web_request/web_request_api.h" #include "chrome/browser/extensions/api/web_socket_proxy_private/web_socket_proxy_private_api.h" #include "chrome/browser/extensions/api/webstore_private/webstore_private_api.h" #include "chrome/browser/extensions/system/system_api.h" #include "chrome/browser/infobars/infobar_extension_api.h" #include "chrome/browser/rlz/rlz_extension_api.h" #include "chrome/common/extensions/api/generated_api.h" #if defined(TOOLKIT_VIEWS) #include "chrome/browser/extensions/api/input/input.h" #endif // defined(TOOLKIT_VIEWS) #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/extensions/echo_private_api.h" #include "chrome/browser/chromeos/extensions/info_private_api.h" #include "chrome/browser/chromeos/extensions/input_method_api.h" #include "chrome/browser/chromeos/extensions/media_player_api.h" #include "chrome/browser/chromeos/extensions/power/power_api.h" #include "chrome/browser/chromeos/extensions/wallpaper_private_api.h" #include "chrome/browser/extensions/api/terminal/terminal_private_api.h" #endif // defined(OS_CHROMEOS) // static ExtensionFunctionRegistry* ExtensionFunctionRegistry::GetInstance() { return Singleton::get(); } ExtensionFunctionRegistry::ExtensionFunctionRegistry() { ResetFunctions(); } ExtensionFunctionRegistry::~ExtensionFunctionRegistry() { } void ExtensionFunctionRegistry::ResetFunctions() { #if defined(ENABLE_EXTENSIONS) // Register all functions here. // Page Actions. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Browser Actions. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Browsing Data. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Infobars. RegisterFunction(); // BookmarkManager RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Idle RegisterFunction(); RegisterFunction(); // Metrics. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // RLZ (not supported on ChromeOS yet). #if defined(ENABLE_RLZ) && !defined(OS_CHROMEOS) RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); #endif // Test. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Accessibility. RegisterFunction(); RegisterFunction(); RegisterFunction(); // Commands. RegisterFunction(); // Omnibox. RegisterFunction(); RegisterFunction(); #if defined(TOOLKIT_VIEWS) // Input. RegisterFunction(); #endif #if defined(OS_CHROMEOS) // Power RegisterFunction(); RegisterFunction(); #endif // Managed mode. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Extension module. RegisterFunction(); RegisterFunction(); RegisterFunction(); // WebstorePrivate. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // WebRequest. RegisterFunction(); RegisterFunction(); // Preferences. RegisterFunction(); RegisterFunction(); RegisterFunction(); // ChromeOS-specific part of the API. #if defined(OS_CHROMEOS) // Device Customization. RegisterFunction(); // Mediaplayer RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // WallpaperManagerPrivate functions. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // InputMethod RegisterFunction(); // Echo RegisterFunction(); // Terminal RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); #endif // Websocket to TCP proxy. Currently noop on anything other than ChromeOS. RegisterFunction< extensions::WebSocketProxyPrivateGetPassportForTCPFunction>(); RegisterFunction(); // Experimental App API. RegisterFunction(); RegisterFunction(); // TopSites RegisterFunction(); // System RegisterFunction(); RegisterFunction(); // Runtime RegisterFunction(); RegisterFunction(); RegisterFunction(); // Generated APIs extensions::api::GeneratedFunctionRegistry::RegisterAll(this); #endif // defined(ENABLE_EXTENSIONS) } void ExtensionFunctionRegistry::GetAllNames(std::vector* names) { for (FactoryMap::iterator iter = factories_.begin(); iter != factories_.end(); ++iter) { names->push_back(iter->first); } } bool ExtensionFunctionRegistry::OverrideFunction( const std::string& name, ExtensionFunctionFactory factory) { FactoryMap::iterator iter = factories_.find(name); if (iter == factories_.end()) { return false; } else { iter->second.factory_ = factory; return true; } } ExtensionFunction* ExtensionFunctionRegistry::NewFunction( const std::string& name) { FactoryMap::iterator iter = factories_.find(name); DCHECK(iter != factories_.end()); ExtensionFunction* function = iter->second.factory_(); function->set_name(name); function->set_histogram_value(iter->second.histogram_value_); return function; } ExtensionFunctionRegistry::FactoryEntry::FactoryEntry() : factory_(0), histogram_value_(extensions::functions::UNKNOWN) { } ExtensionFunctionRegistry::FactoryEntry::FactoryEntry( ExtensionFunctionFactory factory, extensions::functions::HistogramValue histogram_value) : factory_(factory), histogram_value_(histogram_value) { }