summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/common/extensions/features/base_feature_provider.cc116
-rw-r--r--chrome_frame/test/net/fake_external_tab.cc5
2 files changed, 47 insertions, 74 deletions
diff --git a/chrome/common/extensions/features/base_feature_provider.cc b/chrome/common/extensions/features/base_feature_provider.cc
index c32ba5e..a74cd9c 100644
--- a/chrome/common/extensions/features/base_feature_provider.cc
+++ b/chrome/common/extensions/features/base_feature_provider.cc
@@ -26,89 +26,57 @@ SimpleFeature* CreateFeature() {
return new FeatureClass();
}
-class LazyFeatureProvider : public FeatureProvider {
- public:
- LazyFeatureProvider(const std::string& name,
- BaseFeatureProvider::FeatureFactory factory,
- int resource_id)
- : name_(name),
- factory_(factory),
- resource_id_(resource_id) {
+static BaseFeatureProvider* LoadProvider(
+ const std::string& name,
+ BaseFeatureProvider::FeatureFactory factory,
+ int resource_id) {
+ const std::string& features_file =
+ ResourceBundle::GetSharedInstance().GetRawDataResource(
+ resource_id).as_string();
+ int error_code = 0;
+ std::string error_message;
+ scoped_ptr<base::Value> value(base::JSONReader::ReadAndReturnError(
+ features_file, base::JSON_PARSE_RFC,
+ &error_code, &error_message));
+ DCHECK(value) << "Could not load features: " << name << " "
+ << error_message;
+ scoped_ptr<base::DictionaryValue> value_as_dict;
+ if (value) {
+ CHECK(value->IsType(base::Value::TYPE_DICTIONARY)) << name;
+ value_as_dict.reset(static_cast<base::DictionaryValue*>(value.release()));
+ } else {
+ // http://crbug.com/176381
+ value_as_dict.reset(new base::DictionaryValue());
}
-
- virtual Feature* GetFeature(const std::string& name) OVERRIDE {
- return GetBaseFeatureProvider()->GetFeature(name);
- }
-
- virtual Feature* GetParent(Feature* feature) OVERRIDE {
- return GetBaseFeatureProvider()->GetParent(feature);
- }
-
- virtual const std::vector<std::string>& GetAllFeatureNames() OVERRIDE {
- return GetBaseFeatureProvider()->GetAllFeatureNames();
- }
-
- private:
- BaseFeatureProvider* GetBaseFeatureProvider() {
- if (!features_)
- features_ = LoadProvider();
- return features_.get();
- }
-
- scoped_ptr<BaseFeatureProvider> LoadProvider() {
- const std::string& features_file =
- ResourceBundle::GetSharedInstance().GetRawDataResource(
- resource_id_).as_string();
- int error_code = 0;
- std::string error_message;
- scoped_ptr<base::Value> value(base::JSONReader::ReadAndReturnError(
- features_file, base::JSON_PARSE_RFC,
- &error_code, &error_message));
- DCHECK(value) << "Could not load features: " << name_ << " "
- << error_message;
- scoped_ptr<base::DictionaryValue> value_as_dict;
- if (value) {
- CHECK(value->IsType(base::Value::TYPE_DICTIONARY)) << name_;
- value_as_dict.reset(static_cast<base::DictionaryValue*>(value.release()));
- } else {
- // http://crbug.com/176381
- value_as_dict.reset(new base::DictionaryValue());
- }
- return make_scoped_ptr(new BaseFeatureProvider(*value_as_dict, factory_));
- }
-
- std::string name_;
- BaseFeatureProvider::FeatureFactory factory_;
- int resource_id_;
- scoped_ptr<BaseFeatureProvider> features_;
-};
+ return new BaseFeatureProvider(*value_as_dict, factory);
+}
struct Static {
Static() {
- lazy_feature_providers["api"] = make_linked_ptr(
- new LazyFeatureProvider("api",
- &CreateFeature<APIFeature>,
- IDR_EXTENSION_API_FEATURES));
- lazy_feature_providers["permission"] = make_linked_ptr(
- new LazyFeatureProvider("permission",
- &CreateFeature<PermissionFeature>,
- IDR_EXTENSION_PERMISSION_FEATURES));
- lazy_feature_providers["manifest"] = make_linked_ptr(
- new LazyFeatureProvider("manifest",
- &CreateFeature<ManifestFeature>,
- IDR_EXTENSION_MANIFEST_FEATURES));
+ feature_providers["api"] = make_linked_ptr(
+ LoadProvider("api",
+ &CreateFeature<APIFeature>,
+ IDR_EXTENSION_API_FEATURES));
+ feature_providers["permission"] = make_linked_ptr(
+ LoadProvider("permission",
+ &CreateFeature<PermissionFeature>,
+ IDR_EXTENSION_PERMISSION_FEATURES));
+ feature_providers["manifest"] = make_linked_ptr(
+ LoadProvider("manifest",
+ &CreateFeature<ManifestFeature>,
+ IDR_EXTENSION_MANIFEST_FEATURES));
}
- typedef std::map<std::string, linked_ptr<LazyFeatureProvider> >
- LazyFeatureProviderMap;
+ typedef std::map<std::string, linked_ptr<FeatureProvider> >
+ FeatureProviderMap;
- LazyFeatureProvider* LazyGetFeatures(const std::string& name) {
- LazyFeatureProviderMap::iterator it = lazy_feature_providers.find(name);
- CHECK(it != lazy_feature_providers.end());
+ FeatureProvider* GetFeatures(const std::string& name) const {
+ FeatureProviderMap::const_iterator it = feature_providers.find(name);
+ CHECK(it != feature_providers.end());
return it->second.get();
}
- LazyFeatureProviderMap lazy_feature_providers;
+ FeatureProviderMap feature_providers;
};
base::LazyInstance<Static> g_static = LAZY_INSTANCE_INITIALIZER;
@@ -217,7 +185,7 @@ BaseFeatureProvider::~BaseFeatureProvider() {
// static
FeatureProvider* BaseFeatureProvider::GetByName(
const std::string& name) {
- return g_static.Get().LazyGetFeatures(name);
+ return g_static.Get().GetFeatures(name);
}
const std::vector<std::string>& BaseFeatureProvider::GetAllFeatureNames() {
diff --git a/chrome_frame/test/net/fake_external_tab.cc b/chrome_frame/test/net/fake_external_tab.cc
index d28c3cf..b38e8c9 100644
--- a/chrome_frame/test/net/fake_external_tab.cc
+++ b/chrome_frame/test/net/fake_external_tab.cc
@@ -529,6 +529,11 @@ void FakeExternalTab::Initialize() {
ResourceBundle::InitSharedInstanceWithLocale("en-US", NULL);
+ base::FilePath resources_pack_path;
+ PathService::Get(chrome::FILE_RESOURCES_PACK, &resources_pack_path);
+ ResourceBundle::GetSharedInstance().AddDataPackFromPath(
+ resources_pack_path, ui::SCALE_FACTOR_NONE);
+
CommandLine* cmd = CommandLine::ForCurrentProcess();
// Disable Device Discovery with switch because this test does not respect
// BrowserContextKeyedBaseFactory::ServiceIsNULLWhileTesting.