blob: edd3bed1405fa40a528d038cd43ea87bf78e7c36 [file] [log] [blame]
// 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/extensions/api/app/app_api.h"
#include "chrome/browser/extensions/api/browsing_data/browsing_data_api.h"
#include "chrome/browser/extensions/api/cloud_print_private/cloud_print_private_api.h"
#include "chrome/browser/extensions/api/content_settings/content_settings_api.h"
#include "chrome/browser/extensions/api/context_menu/context_menu_api.h"
#include "chrome/browser/extensions/api/cookies/cookies_api.h"
#include "chrome/browser/extensions/api/debugger/debugger_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/extension_action/extension_script_badge_api.h"
#include "chrome/browser/extensions/api/font_settings/font_settings_api.h"
#include "chrome/browser/extensions/api/identity/identity_api.h"
#include "chrome/browser/extensions/api/i18n/i18n_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/management/management_api.h"
#include "chrome/browser/extensions/api/metrics/metrics.h"
#include "chrome/browser/extensions/api/offscreen_tabs/offscreen_tabs_api.h"
#include "chrome/browser/extensions/api/omnibox/omnibox_api.h"
#include "chrome/browser/extensions/api/page_capture/page_capture_api.h"
#include "chrome/browser/extensions/api/permissions/permissions_api.h"
#include "chrome/browser/extensions/api/preference/preference_api.h"
#include "chrome/browser/extensions/api/processes/processes_api.h"
#include "chrome/browser/extensions/api/record/record_api.h"
#include "chrome/browser/extensions/api/runtime/runtime_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/tabs/execute_code_in_tab_function.h"
#include "chrome/browser/extensions/api/tabs/tabs.h"
#include "chrome/browser/extensions/api/test/test_api.h"
#include "chrome/browser/extensions/api/web_navigation/web_navigation_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/extension_module.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/extension_api/tts_engine_extension_api.h"
#include "chrome/browser/speech/extension_api/tts_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)
#include "chrome/browser/chromeos/extensions/echo_private_api.h"
#include "chrome/browser/chromeos/extensions/file_browser_handler_api.h"
#include "chrome/browser/chromeos/extensions/file_browser_private_api.h"
#include "chrome/browser/chromeos/extensions/info_private_api.h"
#include "chrome/browser/chromeos/extensions/power/power_api.h"
#include "chrome/browser/chromeos/extensions/wallpaper_private_api.h"
#include "chrome/browser/chromeos/media/media_player_extension_api.h"
#include "chrome/browser/extensions/api/input_ime/input_ime_api.h"
#include "chrome/browser/extensions/api/terminal/terminal_private_api.h"
#include "chrome/browser/extensions/extension_input_method_api.h"
#endif
// static
ExtensionFunctionRegistry* ExtensionFunctionRegistry::GetInstance() {
return Singleton<ExtensionFunctionRegistry>::get();
}
ExtensionFunctionRegistry::ExtensionFunctionRegistry() {
ResetFunctions();
}
ExtensionFunctionRegistry::~ExtensionFunctionRegistry() {
}
void ExtensionFunctionRegistry::ResetFunctions() {
#if defined(ENABLE_EXTENSIONS)
// Register all functions here.
// Windows
RegisterFunction<GetWindowFunction>();
RegisterFunction<GetCurrentWindowFunction>();
RegisterFunction<GetLastFocusedWindowFunction>();
RegisterFunction<GetAllWindowsFunction>();
RegisterFunction<CreateWindowFunction>();
RegisterFunction<UpdateWindowFunction>();
RegisterFunction<RemoveWindowFunction>();
// Tabs
RegisterFunction<CaptureVisibleTabFunction>();
RegisterFunction<CreateTabFunction>();
RegisterFunction<DetectTabLanguageFunction>();
RegisterFunction<DuplicateTabFunction>();
RegisterFunction<GetAllTabsInWindowFunction>();
RegisterFunction<GetCurrentTabFunction>();
RegisterFunction<GetSelectedTabFunction>();
RegisterFunction<GetTabFunction>();
RegisterFunction<HighlightTabsFunction>();
RegisterFunction<MoveTabsFunction>();
RegisterFunction<QueryTabsFunction>();
RegisterFunction<ReloadTabFunction>();
RegisterFunction<RemoveTabsFunction>();
RegisterFunction<TabsExecuteScriptFunction>();
RegisterFunction<TabsInsertCSSFunction>();
RegisterFunction<UpdateTabFunction>();
// Page Actions.
RegisterFunction<EnablePageActionsFunction>();
RegisterFunction<DisablePageActionsFunction>();
RegisterFunction<PageActionShowFunction>();
RegisterFunction<PageActionHideFunction>();
RegisterFunction<PageActionSetIconFunction>();
RegisterFunction<PageActionSetTitleFunction>();
RegisterFunction<PageActionSetPopupFunction>();
RegisterFunction<PageActionGetTitleFunction>();
RegisterFunction<PageActionGetPopupFunction>();
// Browser Actions.
RegisterFunction<BrowserActionSetIconFunction>();
RegisterFunction<BrowserActionSetTitleFunction>();
RegisterFunction<BrowserActionSetBadgeTextFunction>();
RegisterFunction<BrowserActionSetBadgeBackgroundColorFunction>();
RegisterFunction<BrowserActionSetPopupFunction>();
RegisterFunction<BrowserActionGetTitleFunction>();
RegisterFunction<BrowserActionGetBadgeTextFunction>();
RegisterFunction<BrowserActionGetBadgeBackgroundColorFunction>();
RegisterFunction<BrowserActionGetPopupFunction>();
RegisterFunction<BrowserActionEnableFunction>();
RegisterFunction<BrowserActionDisableFunction>();
// Script Badges.
RegisterFunction<ScriptBadgeGetAttentionFunction>();
RegisterFunction<ScriptBadgeGetPopupFunction>();
RegisterFunction<ScriptBadgeSetPopupFunction>();
// Browsing Data.
RegisterFunction<RemoveBrowsingDataFunction>();
RegisterFunction<RemoveAppCacheFunction>();
RegisterFunction<RemoveCacheFunction>();
RegisterFunction<RemoveCookiesFunction>();
RegisterFunction<RemoveDownloadsFunction>();
RegisterFunction<RemoveFileSystemsFunction>();
RegisterFunction<RemoveFormDataFunction>();
RegisterFunction<RemoveHistoryFunction>();
RegisterFunction<RemoveIndexedDBFunction>();
RegisterFunction<RemoveLocalStorageFunction>();
RegisterFunction<RemoveServerBoundCertsFunction>();
RegisterFunction<RemovePluginDataFunction>();
RegisterFunction<RemovePasswordsFunction>();
RegisterFunction<RemoveWebSQLFunction>();
// Bookmarks.
RegisterFunction<GetBookmarksFunction>();
RegisterFunction<GetBookmarkChildrenFunction>();
RegisterFunction<GetBookmarkRecentFunction>();
RegisterFunction<GetBookmarkTreeFunction>();
RegisterFunction<GetBookmarkSubTreeFunction>();
RegisterFunction<SearchBookmarksFunction>();
RegisterFunction<RemoveBookmarkFunction>();
RegisterFunction<RemoveTreeBookmarkFunction>();
RegisterFunction<CreateBookmarkFunction>();
RegisterFunction<MoveBookmarkFunction>();
RegisterFunction<UpdateBookmarkFunction>();
// Infobars.
RegisterFunction<ShowInfoBarFunction>();
// BookmarkManager
RegisterFunction<CopyBookmarkManagerFunction>();
RegisterFunction<CutBookmarkManagerFunction>();
RegisterFunction<PasteBookmarkManagerFunction>();
RegisterFunction<CanPasteBookmarkManagerFunction>();
RegisterFunction<ImportBookmarksFunction>();
RegisterFunction<ExportBookmarksFunction>();
RegisterFunction<SortChildrenBookmarkManagerFunction>();
RegisterFunction<BookmarkManagerGetStringsFunction>();
RegisterFunction<StartDragBookmarkManagerFunction>();
RegisterFunction<DropBookmarkManagerFunction>();
RegisterFunction<GetSubtreeBookmarkManagerFunction>();
RegisterFunction<CanEditBookmarkManagerFunction>();
RegisterFunction<CanOpenNewWindowsBookmarkFunction>();
// History
RegisterFunction<AddUrlHistoryFunction>();
RegisterFunction<DeleteAllHistoryFunction>();
RegisterFunction<DeleteRangeHistoryFunction>();
RegisterFunction<DeleteUrlHistoryFunction>();
RegisterFunction<GetVisitsHistoryFunction>();
RegisterFunction<SearchHistoryFunction>();
// Idle
RegisterFunction<extensions::ExtensionIdleQueryStateFunction>();
// I18N.
RegisterFunction<GetAcceptLanguagesFunction>();
// Processes.
RegisterFunction<extensions::GetProcessIdForTabFunction>();
RegisterFunction<extensions::TerminateFunction>();
RegisterFunction<extensions::GetProcessInfoFunction>();
// Metrics.
RegisterFunction<extensions::MetricsRecordUserActionFunction>();
RegisterFunction<extensions::MetricsRecordValueFunction>();
RegisterFunction<extensions::MetricsRecordPercentageFunction>();
RegisterFunction<extensions::MetricsRecordCountFunction>();
RegisterFunction<extensions::MetricsRecordSmallCountFunction>();
RegisterFunction<extensions::MetricsRecordMediumCountFunction>();
RegisterFunction<extensions::MetricsRecordTimeFunction>();
RegisterFunction<extensions::MetricsRecordMediumTimeFunction>();
RegisterFunction<extensions::MetricsRecordLongTimeFunction>();
// RLZ.
#if defined(OS_WIN) || defined(OS_MACOSX)
RegisterFunction<RlzRecordProductEventFunction>();
RegisterFunction<RlzGetAccessPointRlzFunction>();
RegisterFunction<RlzSendFinancialPingFunction>();
RegisterFunction<RlzClearProductStateFunction>();
#endif
// Cookies.
RegisterFunction<extensions::GetCookieFunction>();
RegisterFunction<extensions::GetAllCookiesFunction>();
RegisterFunction<extensions::SetCookieFunction>();
RegisterFunction<extensions::RemoveCookieFunction>();
RegisterFunction<extensions::GetAllCookieStoresFunction>();
// Test.
RegisterFunction<extensions::TestNotifyPassFunction>();
RegisterFunction<extensions::TestFailFunction>();
RegisterFunction<extensions::TestLogFunction>();
RegisterFunction<extensions::TestResetQuotaFunction>();
RegisterFunction<extensions::TestCreateIncognitoTabFunction>();
RegisterFunction<extensions::TestSendMessageFunction>();
RegisterFunction<extensions::TestGetConfigFunction>();
// Record.
RegisterFunction<extensions::CaptureURLsFunction>();
RegisterFunction<extensions::ReplayURLsFunction>();
// Accessibility.
RegisterFunction<GetFocusedControlFunction>();
RegisterFunction<SetAccessibilityEnabledFunction>();
RegisterFunction<GetAlertsForTabFunction>();
// Text-to-speech.
RegisterFunction<ExtensionTtsEngineSendTtsEventFunction>();
RegisterFunction<ExtensionTtsGetVoicesFunction>();
RegisterFunction<ExtensionTtsIsSpeakingFunction>();
RegisterFunction<ExtensionTtsSpeakFunction>();
RegisterFunction<ExtensionTtsStopSpeakingFunction>();
// Context Menus.
RegisterFunction<extensions::CreateContextMenuFunction>();
RegisterFunction<extensions::UpdateContextMenuFunction>();
RegisterFunction<extensions::RemoveContextMenuFunction>();
RegisterFunction<extensions::RemoveAllContextMenusFunction>();
// Omnibox.
RegisterFunction<extensions::OmniboxSendSuggestionsFunction>();
RegisterFunction<extensions::OmniboxSetDefaultSuggestionFunction>();
#if defined(ENABLE_INPUT_SPEECH)
// Speech input.
RegisterFunction<StartSpeechInputFunction>();
RegisterFunction<StopSpeechInputFunction>();
RegisterFunction<IsRecordingSpeechInputFunction>();
#endif
#if defined(TOOLKIT_VIEWS)
// Input.
RegisterFunction<SendKeyboardEventInputFunction>();
#endif
#if defined(OS_CHROMEOS)
// IME
RegisterFunction<extensions::SetCompositionFunction>();
RegisterFunction<extensions::ClearCompositionFunction>();
RegisterFunction<extensions::CommitTextFunction>();
RegisterFunction<extensions::SetCandidateWindowPropertiesFunction>();
RegisterFunction<extensions::SetCandidatesFunction>();
RegisterFunction<extensions::SetCursorPositionFunction>();
RegisterFunction<extensions::SetMenuItemsFunction>();
RegisterFunction<extensions::UpdateMenuItemsFunction>();
RegisterFunction<extensions::InputEventHandled>();
// Power
RegisterFunction<extensions::power::RequestKeepAwakeFunction>();
RegisterFunction<extensions::power::ReleaseKeepAwakeFunction>();
#endif
// Managed mode.
RegisterFunction<extensions::GetManagedModeFunction>();
RegisterFunction<extensions::EnterManagedModeFunction>();
RegisterFunction<extensions::GetPolicyFunction>();
RegisterFunction<extensions::SetPolicyFunction>();
// Management.
RegisterFunction<GetAllExtensionsFunction>();
RegisterFunction<GetExtensionByIdFunction>();
RegisterFunction<GetPermissionWarningsByIdFunction>();
RegisterFunction<GetPermissionWarningsByManifestFunction>();
RegisterFunction<LaunchAppFunction>();
RegisterFunction<SetEnabledFunction>();
RegisterFunction<UninstallFunction>();
// Extension module.
RegisterFunction<SetUpdateUrlDataFunction>();
RegisterFunction<IsAllowedIncognitoAccessFunction>();
RegisterFunction<IsAllowedFileSchemeAccessFunction>();
// WebstorePrivate.
RegisterFunction<extensions::GetBrowserLoginFunction>();
RegisterFunction<extensions::GetStoreLoginFunction>();
RegisterFunction<extensions::SetStoreLoginFunction>();
RegisterFunction<extensions::InstallBundleFunction>();
RegisterFunction<extensions::BeginInstallWithManifestFunction>();
RegisterFunction<extensions::CompleteInstallFunction>();
RegisterFunction<extensions::GetWebGLStatusFunction>();
// WebNavigation.
RegisterFunction<extensions::GetFrameFunction>();
RegisterFunction<extensions::GetAllFramesFunction>();
// WebRequest.
RegisterFunction<WebRequestAddEventListener>();
RegisterFunction<WebRequestEventHandled>();
RegisterFunction<WebRequestHandlerBehaviorChanged>();
// Preferences.
RegisterFunction<extensions::GetPreferenceFunction>();
RegisterFunction<extensions::SetPreferenceFunction>();
RegisterFunction<extensions::ClearPreferenceFunction>();
// ChromeOS-specific part of the API.
#if defined(OS_CHROMEOS)
// Device Customization.
RegisterFunction<extensions::GetChromeosInfoFunction>();
// 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<CancelFileDialogFunction>();
RegisterFunction<ExecuteTasksFileBrowserFunction>();
RegisterFunction<SetDefaultTaskFileBrowserFunction>();
RegisterFunction<FileDialogStringsFunction>();
RegisterFunction<GetFileTasksFileBrowserFunction>();
RegisterFunction<GetVolumeMetadataFunction>();
RegisterFunction<RequestLocalFileSystemFunction>();
RegisterFunction<AddFileWatchBrowserFunction>();
RegisterFunction<RemoveFileWatchBrowserFunction>();
RegisterFunction<SelectFileFunction>();
RegisterFunction<SelectFilesFunction>();
RegisterFunction<AddMountFunction>();
RegisterFunction<RemoveMountFunction>();
RegisterFunction<GetMountPointsFunction>();
RegisterFunction<GetSizeStatsFunction>();
RegisterFunction<FormatDeviceFunction>();
RegisterFunction<ViewFilesFunction>();
RegisterFunction<ToggleFullscreenFunction>();
RegisterFunction<IsFullscreenFunction>();
RegisterFunction<GetDriveFilePropertiesFunction>();
RegisterFunction<PinDriveFileFunction>();
RegisterFunction<GetFileLocationsFunction>();
RegisterFunction<GetDriveFilesFunction>();
RegisterFunction<GetFileTransfersFunction>();
RegisterFunction<CancelFileTransfersFunction>();
RegisterFunction<TransferFileFunction>();
RegisterFunction<GetDrivePreferencesFunction>();
RegisterFunction<SetDrivePreferencesFunction>();
RegisterFunction<SearchDriveFunction>();
RegisterFunction<ClearDriveCacheFunction>();
RegisterFunction<GetNetworkConnectionStateFunction>();
RegisterFunction<RequestDirectoryRefreshFunction>();
// FileBrowserHandler.
RegisterFunction<FileHandlerSelectFileFunction>();
// Mediaplayer
RegisterFunction<PlayMediaplayerFunction>();
RegisterFunction<GetPlaylistMediaplayerFunction>();
RegisterFunction<SetWindowHeightMediaplayerFunction>();
RegisterFunction<CloseWindowMediaplayerFunction>();
// WallpaperManagerPrivate functions.
RegisterFunction<WallpaperStringsFunction>();
RegisterFunction<WallpaperSetWallpaperFunction>();
RegisterFunction<WallpaperSetCustomWallpaperFunction>();
// InputMethod
RegisterFunction<GetInputMethodFunction>();
// Echo
RegisterFunction<GetRegistrationCodeFunction>();
// Terminal
RegisterFunction<OpenTerminalProcessFunction>();
RegisterFunction<SendInputToTerminalProcessFunction>();
RegisterFunction<CloseTerminalProcessFunction>();
RegisterFunction<OnTerminalResizeFunction>();
#endif
// Websocket to TCP proxy. Currently noop on anything other than ChromeOS.
RegisterFunction<
extensions::WebSocketProxyPrivateGetPassportForTCPFunction>();
RegisterFunction<extensions::WebSocketProxyPrivateGetURLForTCPFunction>();
// Debugger
RegisterFunction<AttachDebuggerFunction>();
RegisterFunction<DetachDebuggerFunction>();
RegisterFunction<SendCommandDebuggerFunction>();
// Settings
RegisterFunction<extensions::GetSettingsFunction>();
RegisterFunction<extensions::SetSettingsFunction>();
RegisterFunction<extensions::RemoveSettingsFunction>();
RegisterFunction<extensions::ClearSettingsFunction>();
RegisterFunction<extensions::GetBytesInUseSettingsFunction>();
// Content settings.
RegisterFunction<extensions::GetResourceIdentifiersFunction>();
RegisterFunction<extensions::ClearContentSettingsFunction>();
RegisterFunction<extensions::GetContentSettingFunction>();
RegisterFunction<extensions::SetContentSettingFunction>();
// Font settings.
RegisterFunction<extensions::GetFontListFunction>();
RegisterFunction<extensions::ClearFontFunction>();
RegisterFunction<extensions::GetFontFunction>();
RegisterFunction<extensions::SetFontFunction>();
RegisterFunction<extensions::ClearDefaultFontSizeFunction>();
RegisterFunction<extensions::GetDefaultFontSizeFunction>();
RegisterFunction<extensions::SetDefaultFontSizeFunction>();
RegisterFunction<extensions::ClearDefaultFixedFontSizeFunction>();
RegisterFunction<extensions::GetDefaultFixedFontSizeFunction>();
RegisterFunction<extensions::SetDefaultFixedFontSizeFunction>();
RegisterFunction<extensions::ClearMinimumFontSizeFunction>();
RegisterFunction<extensions::GetMinimumFontSizeFunction>();
RegisterFunction<extensions::SetMinimumFontSizeFunction>();
// CloudPrint settings.
RegisterFunction<extensions::CloudPrintSetCredentialsFunction>();
// Experimental App API.
RegisterFunction<extensions::AppNotifyFunction>();
RegisterFunction<extensions::AppClearAllNotificationsFunction>();
// Permissions
RegisterFunction<ContainsPermissionsFunction>();
RegisterFunction<GetAllPermissionsFunction>();
RegisterFunction<RemovePermissionsFunction>();
RegisterFunction<RequestPermissionsFunction>();
// PageCapture
RegisterFunction<extensions::PageCaptureSaveAsMHTMLFunction>();
// TopSites
RegisterFunction<GetTopSitesFunction>();
// Serial
RegisterFunction<extensions::SerialOpenFunction>();
RegisterFunction<extensions::SerialCloseFunction>();
RegisterFunction<extensions::SerialReadFunction>();
RegisterFunction<extensions::SerialWriteFunction>();
// Sockets
RegisterFunction<extensions::SocketCreateFunction>();
RegisterFunction<extensions::SocketDestroyFunction>();
RegisterFunction<extensions::SocketConnectFunction>();
RegisterFunction<extensions::SocketDisconnectFunction>();
RegisterFunction<extensions::SocketReadFunction>();
RegisterFunction<extensions::SocketWriteFunction>();
// System
RegisterFunction<extensions::GetIncognitoModeAvailabilityFunction>();
RegisterFunction<extensions::GetUpdateStatusFunction>();
// Net
RegisterFunction<extensions::AddRulesFunction>();
RegisterFunction<extensions::RemoveRulesFunction>();
RegisterFunction<extensions::GetRulesFunction>();
// Experimental Offscreen Tabs
RegisterFunction<CreateOffscreenTabFunction>();
RegisterFunction<GetOffscreenTabFunction>();
RegisterFunction<GetAllOffscreenTabFunction>();
RegisterFunction<RemoveOffscreenTabFunction>();
RegisterFunction<SendKeyboardEventOffscreenTabFunction>();
RegisterFunction<SendMouseEventOffscreenTabFunction>();
RegisterFunction<ToDataUrlOffscreenTabFunction>();
RegisterFunction<UpdateOffscreenTabFunction>();
// Runtime
RegisterFunction<extensions::RuntimeGetBackgroundPageFunction>();
// Generated APIs
extensions::api::GeneratedFunctionRegistry::RegisterAll(this);
#endif // defined(ENABLE_EXTENSIONS)
}
void ExtensionFunctionRegistry::GetAllNames(std::vector<std::string>* 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;
}