Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(427)

Unified Diff: chrome/common/extensions/api/extension_api_unittest.cc

Issue 9978012: Revert 130697 - Reland r130462: Implement FeatureProvider for ExtensionAPI." (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/common/extensions/api/extension_api.cc ('k') | chrome/common/extensions/extension.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/common/extensions/api/extension_api_unittest.cc
===================================================================
--- chrome/common/extensions/api/extension_api_unittest.cc (revision 130700)
+++ chrome/common/extensions/api/extension_api_unittest.cc (working copy)
@@ -7,190 +7,62 @@
#include <string>
#include "base/file_path.h"
-#include "base/file_util.h"
-#include "base/json/json_writer.h"
-#include "base/message_loop.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
-#include "base/path_service.h"
#include "base/values.h"
-#include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/extension.h"
-#include "content/test/test_browser_thread.h"
#include "testing/gtest/include/gtest/gtest.h"
-using content::BrowserThread;
-
namespace extensions {
namespace {
-class TestFeatureProvider : public FeatureProvider {
- public:
- explicit TestFeatureProvider(Feature::Context context)
- : context_(context) {
- }
-
- virtual scoped_ptr<Feature> GetFeature(const std::string& name) OVERRIDE {
- scoped_ptr<Feature> result(new Feature());
- result->set_name(name);
- result->extension_types()->insert(Extension::TYPE_EXTENSION);
- result->contexts()->insert(context_);
- return result.Pass();
- }
-
- private:
- Feature::Context context_;
-};
-
-TEST(ExtensionAPI, Creation) {
- MessageLoop loop(MessageLoop::TYPE_DEFAULT);
- content::TestBrowserThread ui_thread(BrowserThread::UI, &loop);
-
- ExtensionAPI* shared_instance = ExtensionAPI::GetSharedInstance();
- EXPECT_EQ(shared_instance, ExtensionAPI::GetSharedInstance());
-
- scoped_ptr<ExtensionAPI> new_instance(
- ExtensionAPI::CreateWithDefaultConfiguration());
- EXPECT_NE(new_instance.get(),
- scoped_ptr<ExtensionAPI>(
- ExtensionAPI::CreateWithDefaultConfiguration()).get());
-
- ExtensionAPI empty_instance;
-
- struct {
- ExtensionAPI* api;
- bool expect_populated;
- } test_data[] = {
- { shared_instance, true },
- { new_instance.get(), true },
- { &empty_instance, false }
- };
-
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
- EXPECT_EQ(test_data[i].expect_populated,
- test_data[i].api->GetSchema("bookmarks.create") != NULL);
- }
-}
-
-TEST(ExtensionAPI, SplitDependencyName) {
- struct {
- std::string input;
- std::string expected_feature_type;
- std::string expected_feature_name;
- } test_data[] = {
- { "", "api", "" }, // assumes "api" when no type is present
- { "foo", "api", "foo" },
- { "foo:", "foo", "" },
- { ":foo", "", "foo" },
- { "foo:bar", "foo", "bar" },
- { "foo:bar.baz", "foo", "bar.baz" }
- };
-
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
- std::string feature_type;
- std::string feature_name;
- ExtensionAPI::SplitDependencyName(test_data[i].input, &feature_type,
- &feature_name);
- EXPECT_EQ(test_data[i].expected_feature_type, feature_type) << i;
- EXPECT_EQ(test_data[i].expected_feature_name, feature_name) << i;
- }
-}
-
TEST(ExtensionAPI, IsPrivileged) {
- scoped_ptr<ExtensionAPI> extension_api(
- ExtensionAPI::CreateWithDefaultConfiguration());
+ ExtensionAPI extension_api;
- EXPECT_FALSE(extension_api->IsPrivileged("extension.connect"));
- EXPECT_FALSE(extension_api->IsPrivileged("extension.onConnect"));
+ EXPECT_FALSE(extension_api.IsPrivileged("extension.connect"));
+ EXPECT_FALSE(extension_api.IsPrivileged("extension.onConnect"));
// Properties are not supported yet.
- EXPECT_TRUE(extension_api->IsPrivileged("extension.lastError"));
+ EXPECT_TRUE(extension_api.IsPrivileged("extension.lastError"));
// Default unknown names to privileged for paranoia's sake.
- EXPECT_TRUE(extension_api->IsPrivileged(""));
- EXPECT_TRUE(extension_api->IsPrivileged("<unknown-namespace>"));
- EXPECT_TRUE(extension_api->IsPrivileged("extension.<unknown-member>"));
+ EXPECT_TRUE(extension_api.IsPrivileged("<unknown-namespace>"));
+ EXPECT_TRUE(extension_api.IsPrivileged("extension.<unknown-member>"));
// Exists, but privileged.
- EXPECT_TRUE(extension_api->IsPrivileged("extension.getViews"));
- EXPECT_TRUE(extension_api->IsPrivileged("history.search"));
+ EXPECT_TRUE(extension_api.IsPrivileged("extension.getViews"));
+ EXPECT_TRUE(extension_api.IsPrivileged("history.search"));
// Whole APIs that are unprivileged.
- EXPECT_FALSE(extension_api->IsPrivileged("app.getDetails"));
- EXPECT_FALSE(extension_api->IsPrivileged("app.isInstalled"));
- EXPECT_FALSE(extension_api->IsPrivileged("storage.local"));
- EXPECT_FALSE(extension_api->IsPrivileged("storage.local.onChanged"));
- EXPECT_FALSE(extension_api->IsPrivileged("storage.local.set"));
- EXPECT_FALSE(extension_api->IsPrivileged("storage.local.MAX_ITEMS"));
- EXPECT_FALSE(extension_api->IsPrivileged("storage.set"));
+ EXPECT_FALSE(extension_api.IsPrivileged("app.getDetails"));
+ EXPECT_FALSE(extension_api.IsPrivileged("app.isInstalled"));
+ EXPECT_FALSE(extension_api.IsPrivileged("storage.local"));
+ EXPECT_FALSE(extension_api.IsPrivileged("storage.local.onChanged"));
+ EXPECT_FALSE(extension_api.IsPrivileged("storage.local.set"));
+ EXPECT_FALSE(extension_api.IsPrivileged("storage.local.MAX_ITEMS"));
+ EXPECT_FALSE(extension_api.IsPrivileged("storage.set"));
}
-TEST(ExtensionAPI, IsPrivilegedFeatures) {
- struct {
- std::string filename;
- std::string api_full_name;
- bool expect_is_privilged;
- Feature::Context test2_contexts;
- } test_data[] = {
- { "is_privileged_features_1.json", "test", false,
- Feature::UNSPECIFIED_CONTEXT },
- { "is_privileged_features_2.json", "test", true,
- Feature::UNSPECIFIED_CONTEXT },
- { "is_privileged_features_3.json", "test", false,
- Feature::UNSPECIFIED_CONTEXT },
- { "is_privileged_features_4.json", "test.bar", false,
- Feature::UNSPECIFIED_CONTEXT },
- { "is_privileged_features_5.json", "test.bar", true,
- Feature::BLESSED_EXTENSION_CONTEXT },
- { "is_privileged_features_5.json", "test.bar", false,
- Feature::UNBLESSED_EXTENSION_CONTEXT }
- };
-
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
- FilePath manifest_path;
- PathService::Get(chrome::DIR_TEST_DATA, &manifest_path);
- manifest_path = manifest_path.AppendASCII("extensions")
- .AppendASCII("extension_api_unittest")
- .AppendASCII(test_data[i].filename);
-
- std::string manifest_str;
- ASSERT_TRUE(file_util::ReadFileToString(manifest_path, &manifest_str))
- << test_data[i].filename;
-
- ExtensionAPI api;
- api.RegisterSchema("test", manifest_str);
-
- TestFeatureProvider test2_provider(test_data[i].test2_contexts);
- if (test_data[i].test2_contexts != Feature::UNSPECIFIED_CONTEXT) {
- api.RegisterDependencyProvider("test2", &test2_provider);
- }
-
- api.LoadAllSchemas();
- EXPECT_EQ(test_data[i].expect_is_privilged,
- api.IsPrivileged(test_data[i].api_full_name)) << i;
- }
-}
-
TEST(ExtensionAPI, LazyGetSchema) {
- scoped_ptr<ExtensionAPI> apis(ExtensionAPI::CreateWithDefaultConfiguration());
+ ExtensionAPI apis;
- EXPECT_EQ(NULL, apis->GetSchema(""));
- EXPECT_EQ(NULL, apis->GetSchema(""));
- EXPECT_EQ(NULL, apis->GetSchema("experimental"));
- EXPECT_EQ(NULL, apis->GetSchema("experimental"));
- EXPECT_EQ(NULL, apis->GetSchema("foo"));
- EXPECT_EQ(NULL, apis->GetSchema("foo"));
+ EXPECT_EQ(NULL, apis.GetSchema(""));
+ EXPECT_EQ(NULL, apis.GetSchema(""));
+ EXPECT_EQ(NULL, apis.GetSchema("experimental"));
+ EXPECT_EQ(NULL, apis.GetSchema("experimental"));
+ EXPECT_EQ(NULL, apis.GetSchema("foo"));
+ EXPECT_EQ(NULL, apis.GetSchema("foo"));
- EXPECT_TRUE(apis->GetSchema("experimental.dns"));
- EXPECT_TRUE(apis->GetSchema("experimental.dns"));
- EXPECT_TRUE(apis->GetSchema("experimental.infobars"));
- EXPECT_TRUE(apis->GetSchema("experimental.infobars"));
- EXPECT_TRUE(apis->GetSchema("extension"));
- EXPECT_TRUE(apis->GetSchema("extension"));
- EXPECT_TRUE(apis->GetSchema("omnibox"));
- EXPECT_TRUE(apis->GetSchema("omnibox"));
- EXPECT_TRUE(apis->GetSchema("storage"));
- EXPECT_TRUE(apis->GetSchema("storage"));
+ EXPECT_TRUE(apis.GetSchema("experimental.dns"));
+ EXPECT_TRUE(apis.GetSchema("experimental.dns"));
+ EXPECT_TRUE(apis.GetSchema("experimental.infobars"));
+ EXPECT_TRUE(apis.GetSchema("experimental.infobars"));
+ EXPECT_TRUE(apis.GetSchema("extension"));
+ EXPECT_TRUE(apis.GetSchema("extension"));
+ EXPECT_TRUE(apis.GetSchema("omnibox"));
+ EXPECT_TRUE(apis.GetSchema("omnibox"));
+ EXPECT_TRUE(apis.GetSchema("storage"));
+ EXPECT_TRUE(apis.GetSchema("storage"));
}
scoped_refptr<Extension> CreateExtensionWithPermissions(
@@ -233,19 +105,18 @@
extension = CreateExtensionWithPermissions(permissions);
}
- scoped_ptr<ExtensionAPI> extension_api(
- ExtensionAPI::CreateWithDefaultConfiguration());
+ ExtensionAPI extension_api;
scoped_ptr<std::set<std::string> > privileged_apis =
- extension_api->GetAPIsForContext(
+ extension_api.GetAPIsForContext(
Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
scoped_ptr<std::set<std::string> > unprivileged_apis =
- extension_api->GetAPIsForContext(
+ extension_api.GetAPIsForContext(
Feature::UNBLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
scoped_ptr<std::set<std::string> > content_script_apis =
- extension_api->GetAPIsForContext(
+ extension_api.GetAPIsForContext(
Feature::CONTENT_SCRIPT_CONTEXT, extension.get(), GURL());
// "storage" is completely unprivileged.
@@ -270,10 +141,9 @@
{
scoped_refptr<Extension> extension =
CreateExtensionWithPermission("ttsEngine");
- scoped_ptr<ExtensionAPI> api(
- ExtensionAPI::CreateWithDefaultConfiguration());
- scoped_ptr<std::set<std::string> > apis = api->GetAPIsForContext(
- Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
+ scoped_ptr<std::set<std::string> > apis =
+ ExtensionAPI().GetAPIsForContext(
+ Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
EXPECT_EQ(1u, apis->count("ttsEngine"));
EXPECT_EQ(1u, apis->count("tts"));
}
@@ -283,10 +153,9 @@
{
scoped_refptr<Extension> extension =
CreateExtensionWithPermission("tts");
- scoped_ptr<ExtensionAPI> api(
- ExtensionAPI::CreateWithDefaultConfiguration());
- scoped_ptr<std::set<std::string> > apis = api->GetAPIsForContext(
- Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
+ scoped_ptr<std::set<std::string> > apis =
+ ExtensionAPI().GetAPIsForContext(
+ Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
EXPECT_EQ(0u, apis->count("ttsEngine"));
EXPECT_EQ(1u, apis->count("tts"));
}
@@ -300,125 +169,27 @@
}
TEST(ExtensionAPI, URLMatching) {
- scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration());
+ ExtensionAPI api;
// "app" API is available to all URLs that content scripts can be injected.
- EXPECT_TRUE(MatchesURL(api.get(), "app", "http://example.com/example.html"));
- EXPECT_TRUE(MatchesURL(api.get(), "app", "https://blah.net"));
- EXPECT_TRUE(MatchesURL(api.get(), "app", "file://somefile.html"));
+ EXPECT_TRUE(MatchesURL(&api, "app", "http://example.com/example.html"));
+ EXPECT_TRUE(MatchesURL(&api, "app", "https://blah.net"));
+ EXPECT_TRUE(MatchesURL(&api, "app", "file://somefile.html"));
// But not internal URLs (for chrome-extension:// the app API is injected by
// GetSchemasForExtension).
- EXPECT_FALSE(MatchesURL(api.get(), "app", "about:flags"));
- EXPECT_FALSE(MatchesURL(api.get(), "app", "chrome://flags"));
- EXPECT_FALSE(MatchesURL(api.get(), "app",
- "chrome-extension://fakeextension"));
+ EXPECT_FALSE(MatchesURL(&api, "app", "about:flags"));
+ EXPECT_FALSE(MatchesURL(&api, "app", "chrome://flags"));
+ EXPECT_FALSE(MatchesURL(&api, "app", "chrome-extension://fakeextension"));
// "storage" API (for example) isn't available to any URLs.
- EXPECT_FALSE(MatchesURL(api.get(), "storage",
- "http://example.com/example.html"));
- EXPECT_FALSE(MatchesURL(api.get(), "storage", "https://blah.net"));
- EXPECT_FALSE(MatchesURL(api.get(), "storage", "file://somefile.html"));
- EXPECT_FALSE(MatchesURL(api.get(), "storage", "about:flags"));
- EXPECT_FALSE(MatchesURL(api.get(), "storage", "chrome://flags"));
- EXPECT_FALSE(MatchesURL(api.get(), "storage",
- "chrome-extension://fakeextension"));
+ EXPECT_FALSE(MatchesURL(&api, "storage", "http://example.com/example.html"));
+ EXPECT_FALSE(MatchesURL(&api, "storage", "https://blah.net"));
+ EXPECT_FALSE(MatchesURL(&api, "storage", "file://somefile.html"));
+ EXPECT_FALSE(MatchesURL(&api, "storage", "about:flags"));
+ EXPECT_FALSE(MatchesURL(&api, "storage", "chrome://flags"));
+ EXPECT_FALSE(MatchesURL(&api, "storage", "chrome-extension://fakeextension"));
}
-TEST(ExtensionAPI, GetAPINameFromFullName) {
- struct {
- std::string input;
- std::string api_name;
- std::string child_name;
- } test_data[] = {
- { "", "", "" },
- { "unknown", "", "" },
- { "bookmarks", "bookmarks", "" },
- { "bookmarks.", "bookmarks", "" },
- { ".bookmarks", "", "" },
- { "bookmarks.create", "bookmarks", "create" },
- { "bookmarks.create.", "bookmarks", "create." },
- { "bookmarks.create.monkey", "bookmarks", "create.monkey" },
- { "experimental.bookmarkManager", "experimental.bookmarkManager", "" },
- { "experimental.bookmarkManager.copy", "experimental.bookmarkManager",
- "copy" }
- };
-
- scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration());
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
- std::string child_name;
- std::string api_name = api->GetAPINameFromFullName(test_data[i].input,
- &child_name);
- EXPECT_EQ(test_data[i].api_name, api_name) << test_data[i].input;
- EXPECT_EQ(test_data[i].child_name, child_name) << test_data[i].input;
- }
-}
-
-TEST(ExtensionAPI, DefaultConfigurationFeatures) {
- scoped_ptr<ExtensionAPI> api(ExtensionAPI::CreateWithDefaultConfiguration());
-
- scoped_ptr<Feature> bookmarks(api->GetFeature("bookmarks"));
- scoped_ptr<Feature> bookmarks_create(api->GetFeature("bookmarks.create"));
-
- struct {
- Feature* feature;
- // TODO(aa): More stuff to test over time.
- } test_data[] = {
- { bookmarks.get() },
- { bookmarks_create.get() }
- };
-
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
- Feature* feature = test_data[i].feature;
- ASSERT_TRUE(feature) << i;
-
- EXPECT_TRUE(feature->whitelist()->empty());
- EXPECT_TRUE(feature->extension_types()->empty());
-
- EXPECT_EQ(1u, feature->contexts()->size());
- EXPECT_TRUE(feature->contexts()->count(
- Feature::BLESSED_EXTENSION_CONTEXT));
-
- EXPECT_EQ(Feature::UNSPECIFIED_LOCATION, feature->location());
- EXPECT_EQ(Feature::UNSPECIFIED_PLATFORM, feature->platform());
- EXPECT_EQ(0, feature->min_manifest_version());
- EXPECT_EQ(0, feature->max_manifest_version());
- }
-}
-
-TEST(ExtensionAPI, FeaturesRequireContexts) {
- scoped_ptr<ListValue> schema1(new ListValue());
- DictionaryValue* feature_definition = new DictionaryValue();
- schema1->Append(feature_definition);
- feature_definition->SetString("namespace", "test");
- feature_definition->SetBoolean("uses_feature_system", true);
-
- scoped_ptr<ListValue> schema2(schema1->DeepCopy());
-
- ListValue* contexts = new ListValue();
- contexts->Append(Value::CreateStringValue("content_script"));
- feature_definition->Set("contexts", contexts);
-
- struct {
- ListValue* schema;
- bool expect_success;
- } test_data[] = {
- { schema1.get(), true },
- { schema2.get(), false }
- };
-
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(test_data); ++i) {
- std::string schema_source;
- base::JSONWriter::Write(test_data[i].schema, &schema_source);
-
- ExtensionAPI api;
- api.RegisterSchema("test", base::StringPiece(schema_source));
- api.LoadAllSchemas();
-
- scoped_ptr<Feature> feature(api.GetFeature("test"));
- EXPECT_EQ(test_data[i].expect_success, feature.get() != NULL) << i;
- }
-}
-
} // namespace
} // namespace extensions
« no previous file with comments | « chrome/common/extensions/api/extension_api.cc ('k') | chrome/common/extensions/extension.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698