Home | History | Annotate | Download | only in extensions
      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