diff options
Diffstat (limited to 'chrome/common/extensions/api/extension_api_unittest.cc')
-rw-r--r-- | chrome/common/extensions/api/extension_api_unittest.cc | 104 |
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 |