// 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/bookmarks/bookmark_extension_api.h" #include "chrome/browser/bookmarks/bookmark_manager_extension_api.h" #include "chrome/browser/download/download_extension_api.h" #include "chrome/browser/extensions/api/app/app_api.h" #include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h" #include "chrome/browser/extensions/api/declarative/declarative_api.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/identity/identity_api.h" #include "chrome/browser/extensions/api/offscreen_tabs/offscreen_tabs_api.h" #include "chrome/browser/extensions/api/permissions/permissions_api.h" #include "chrome/browser/extensions/api/serial/serial_api.h" #include "chrome/browser/extensions/api/socket/socket_api.h" #include "chrome/browser/extensions/api/web_request/web_request_api.h" #include "chrome/browser/extensions/execute_code_in_tab_function.h" #include "chrome/browser/extensions/extension_chrome_auth_private_api.h" #include "chrome/browser/extensions/extension_content_settings_api.h" #include "chrome/browser/extensions/extension_context_menu_api.h" #include "chrome/browser/extensions/extension_cookies_api.h" #include "chrome/browser/extensions/extension_debugger_api.h" #include "chrome/browser/extensions/extension_font_settings_api.h" #include "chrome/browser/extensions/extension_i18n_api.h" #include "chrome/browser/extensions/extension_idle_api.h" #include "chrome/browser/extensions/extension_managed_mode_api.h" #include "chrome/browser/extensions/extension_management_api.h" #include "chrome/browser/extensions/extension_metrics_module.h" #include "chrome/browser/extensions/extension_module.h" #include "chrome/browser/extensions/extension_omnibox_api.h" #include "chrome/browser/extensions/extension_page_capture_api.h" #include "chrome/browser/extensions/extension_preference_api.h" #include "chrome/browser/extensions/extension_processes_api.h" #include "chrome/browser/extensions/extension_tabs_module.h" #include "chrome/browser/extensions/extension_test_api.h" #include "chrome/browser/extensions/extension_tts_api.h" #include "chrome/browser/extensions/extension_tts_engine_api.h" #include "chrome/browser/extensions/extension_web_socket_proxy_private_api.h" #include "chrome/browser/extensions/extension_webnavigation_api.h" #include "chrome/browser/extensions/extension_webstore_private_api.h" #include "chrome/browser/extensions/settings/settings_api.h" #include "chrome/browser/extensions/system/system_api.h" #include "chrome/browser/history/history_extension_api.h" #include "chrome/browser/history/top_sites_extension_api.h" #include "chrome/browser/infobars/infobar_extension_api.h" #include "chrome/browser/rlz/rlz_extension_api.h" #include "chrome/browser/speech/speech_input_extension_api.h" #include "chrome/common/extensions/api/generated_api.h" #if defined(TOOLKIT_VIEWS) #include "chrome/browser/extensions/extension_input_api.h" #endif #if defined(OS_CHROMEOS) && defined(USE_VIRTUAL_KEYBOARD) #include "chrome/browser/extensions/extension_input_ui_api.h" #endif #if defined(OS_CHROMEOS) #include "chrome/browser/chromeos/extensions/file_browser_private_api.h" #include "chrome/browser/chromeos/extensions/offers_private_api.h" #include "chrome/browser/chromeos/media/media_player_extension_api.h" #include "chrome/browser/extensions/api/terminal/terminal_private_api.h" #include "chrome/browser/extensions/extension_info_private_api_chromeos.h" #include "chrome/browser/extensions/extension_input_ime_api.h" #include "chrome/browser/extensions/extension_input_method_api.h" #endif // static ExtensionFunctionRegistry* ExtensionFunctionRegistry::GetInstance() { return Singleton::get(); } ExtensionFunctionRegistry::ExtensionFunctionRegistry() { ResetFunctions(); } ExtensionFunctionRegistry::~ExtensionFunctionRegistry() { } void ExtensionFunctionRegistry::ResetFunctions() { // Register all functions here. // Windows RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Tabs RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Page Actions. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Browser Actions. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Browsing Data. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Bookmarks. 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(); RegisterFunction(); // History RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Idle RegisterFunction(); // I18N. RegisterFunction(); // Processes. RegisterFunction(); // Metrics. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // RLZ. #if defined(OS_WIN) RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); #endif // Cookies. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Test. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Accessibility. RegisterFunction(); RegisterFunction(); RegisterFunction(); // Text-to-speech. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Context Menus. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Omnibox. RegisterFunction(); RegisterFunction(); // Speech input. RegisterFunction(); RegisterFunction(); RegisterFunction(); #if defined(TOOLKIT_VIEWS) // Input. RegisterFunction(); #endif #if defined(USE_VIRTUAL_KEYBOARD) RegisterFunction(); RegisterFunction(); #endif #if defined(OS_CHROMEOS) // IME RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); #if defined(USE_VIRTUAL_KEYBOARD) RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); #endif #endif // Managed mode. RegisterFunction(); RegisterFunction(); // Management. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Extension module. RegisterFunction(); RegisterFunction(); RegisterFunction(); // WebstorePrivate. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // WebNavigation. RegisterFunction(); RegisterFunction(); // WebRequest. RegisterFunction(); RegisterFunction(); RegisterFunction(); // Preferences. RegisterFunction(); RegisterFunction(); RegisterFunction(); // ChromeOS-specific part of the API. #if defined(OS_CHROMEOS) // Device Customization. RegisterFunction(); // FileBrowserPrivate functions. // TODO(jamescook): Expose these on non-ChromeOS platforms so we can use // the extension-based file picker on Aura. crbug.com/97424 RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Mediaplayer RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // InputMethod RegisterFunction(); // Offers RegisterFunction(); // Terminal RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); #if defined(USE_VIRTUAL_KEYBOARD) // Input RegisterFunction(); RegisterFunction(); #endif #endif // Websocket to TCP proxy. Currently noop on anything other than ChromeOS. RegisterFunction(); RegisterFunction(); // Debugger RegisterFunction(); RegisterFunction(); RegisterFunction(); // Settings RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Content settings. RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Font settings. RegisterFunction(); RegisterFunction(); RegisterFunction(); // ChromeAuth settings. RegisterFunction(); // Experimental App API. RegisterFunction(); RegisterFunction(); // Permissions RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Downloads RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // PageCapture RegisterFunction(); // TopSites RegisterFunction(); // Serial RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Sockets RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // System RegisterFunction(); RegisterFunction(); // Net RegisterFunction(); RegisterFunction(); RegisterFunction(); // Experimental Offscreen Tabs RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); RegisterFunction(); // Identity RegisterFunction(); // Generated APIs extensions::api::GeneratedFunctionRegistry::RegisterAll(this); } 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; return true; } } ExtensionFunction* ExtensionFunctionRegistry::NewFunction( const std::string& name) { FactoryMap::iterator iter = factories_.find(name); DCHECK(iter != factories_.end()); ExtensionFunction* function = iter->second(); function->set_name(name); return function; }