summaryrefslogtreecommitdiffstats
path: root/chrome/common/extensions/api/extension_api_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/common/extensions/api/extension_api_unittest.cc')
-rw-r--r--chrome/common/extensions/api/extension_api_unittest.cc104
1 files changed, 65 insertions, 39 deletions
diff --git a/chrome/common/extensions/api/extension_api_unittest.cc b/chrome/common/extensions/api/extension_api_unittest.cc
index 1bcf33b..d6e324f 100644
--- a/chrome/common/extensions/api/extension_api_unittest.cc
+++ b/chrome/common/extensions/api/extension_api_unittest.cc
@@ -13,36 +13,57 @@
#include "chrome/common/extensions/extension.h"
#include "testing/gtest/include/gtest/gtest.h"
+namespace extensions {
namespace {
-using extensions::ExtensionAPI;
-using extensions::Feature;
-
TEST(ExtensionAPI, IsPrivileged) {
- ExtensionAPI* extension_api = ExtensionAPI::GetInstance();
- EXPECT_FALSE(extension_api->IsPrivileged("extension.connect"));
- EXPECT_FALSE(extension_api->IsPrivileged("extension.onConnect"));
+ ExtensionAPI extension_api;
+
+ 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(""));
+ 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, LazyGetSchema) {
+ 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_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(
@@ -84,16 +105,18 @@ TEST(ExtensionAPI, ExtensionWithUnprivilegedAPIs) {
extension = CreateExtensionWithPermissions(permissions);
}
+ ExtensionAPI extension_api;
+
scoped_ptr<std::set<std::string> > privileged_apis =
- ExtensionAPI::GetInstance()->GetAPIsForContext(
+ extension_api.GetAPIsForContext(
Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
scoped_ptr<std::set<std::string> > unprivileged_apis =
- ExtensionAPI::GetInstance()->GetAPIsForContext(
+ extension_api.GetAPIsForContext(
Feature::UNBLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
scoped_ptr<std::set<std::string> > content_script_apis =
- ExtensionAPI::GetInstance()->GetAPIsForContext(
+ extension_api.GetAPIsForContext(
Feature::CONTENT_SCRIPT_CONTEXT, extension.get(), GURL());
// "storage" is completely unprivileged.
@@ -119,7 +142,7 @@ TEST(ExtensionAPI, ExtensionWithDependencies) {
scoped_refptr<Extension> extension =
CreateExtensionWithPermission("ttsEngine");
scoped_ptr<std::set<std::string> > apis =
- ExtensionAPI::GetInstance()->GetAPIsForContext(
+ ExtensionAPI().GetAPIsForContext(
Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
EXPECT_EQ(1u, apis->count("ttsEngine"));
EXPECT_EQ(1u, apis->count("tts"));
@@ -131,39 +154,42 @@ TEST(ExtensionAPI, ExtensionWithDependencies) {
scoped_refptr<Extension> extension =
CreateExtensionWithPermission("tts");
scoped_ptr<std::set<std::string> > apis =
- ExtensionAPI::GetInstance()->GetAPIsForContext(
+ ExtensionAPI().GetAPIsForContext(
Feature::BLESSED_EXTENSION_CONTEXT, extension.get(), GURL());
EXPECT_EQ(0u, apis->count("ttsEngine"));
EXPECT_EQ(1u, apis->count("tts"));
}
}
-bool MatchesURL(const std::string& api_name, const std::string& url) {
+bool MatchesURL(
+ ExtensionAPI* api, const std::string& api_name, const std::string& url) {
scoped_ptr<std::set<std::string> > apis =
- ExtensionAPI::GetInstance()->GetAPIsForContext(
- Feature::WEB_PAGE_CONTEXT, NULL, GURL(url));
+ api->GetAPIsForContext(Feature::WEB_PAGE_CONTEXT, NULL, GURL(url));
return apis->count(api_name);
}
TEST(ExtensionAPI, URLMatching) {
+ ExtensionAPI api;
+
// "app" API is available to all URLs that content scripts can be injected.
- EXPECT_TRUE(MatchesURL("app", "http://example.com/example.html"));
- EXPECT_TRUE(MatchesURL("app", "https://blah.net"));
- EXPECT_TRUE(MatchesURL("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("app", "about:flags"));
- EXPECT_FALSE(MatchesURL("app", "chrome://flags"));
- EXPECT_FALSE(MatchesURL("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("storage", "http://example.com/example.html"));
- EXPECT_FALSE(MatchesURL("storage", "https://blah.net"));
- EXPECT_FALSE(MatchesURL("storage", "file://somefile.html"));
- EXPECT_FALSE(MatchesURL("storage", "about:flags"));
- EXPECT_FALSE(MatchesURL("storage", "chrome://flags"));
- EXPECT_FALSE(MatchesURL("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"));
}
} // namespace
+} // namespace extensions