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

Unified Diff: chrome/browser/extensions/content_capabilities_browsertest.cc

Issue 802593003: Implement unlimitedStorage content capability (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: lockness Created 6 years 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
Index: chrome/browser/extensions/content_capabilities_browsertest.cc
diff --git a/chrome/browser/extensions/content_capabilities_browsertest.cc b/chrome/browser/extensions/content_capabilities_browsertest.cc
index 5a4114d5820e14769d742ce6dabfb05026ad53ee..58c40318431ff76cba02c167d89e3247114555ff 100644
--- a/chrome/browser/extensions/content_capabilities_browsertest.cc
+++ b/chrome/browser/extensions/content_capabilities_browsertest.cc
@@ -13,6 +13,7 @@
#include "base/strings/stringprintf.h"
#include "chrome/browser/extensions/extension_apitest.h"
#include "chrome/browser/extensions/test_extension_dir.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/test/base/ui_test_utils.h"
@@ -24,6 +25,7 @@
#include "extensions/common/url_pattern.h"
#include "net/dns/mock_host_resolver.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
+#include "storage/browser/quota/special_storage_policy.h"
using extensions::DictionaryBuilder;
using extensions::Extension;
@@ -44,7 +46,8 @@ class ContentCapabilitiesTest : public ExtensionApiTest {
// and permissions. The extension always has the same (whitelisted) ID.
scoped_refptr<const Extension> LoadExtensionWithCapabilities(
const std::string& matches,
- const std::string& permissions) {
+ const std::string& permissions,
+ const std::string& extension_permissions = "[]") {
std::string manifest = base::StringPrintf(
"{\n"
" \"name\": \"content_capabilities test extensions\",\n"
@@ -53,9 +56,10 @@ class ContentCapabilitiesTest : public ExtensionApiTest {
" \"content_capabilities\": {\n"
" \"matches\": %s,\n"
" \"permissions\": %s\n"
- " }\n"
+ " },\n"
+ " \"permissions\": %s\n"
"}\n",
- matches.c_str(), permissions.c_str());
+ matches.c_str(), permissions.c_str(), extension_permissions.c_str());
test_extension_dir_.WriteManifest(manifest);
return LoadExtension(test_extension_dir_.unpacked_path());
}
@@ -103,22 +107,33 @@ class ContentCapabilitiesTest : public ExtensionApiTest {
// the given extension. This is used to wrap calls into the JS test functions
// defined by
// $(DIR_TEST_DATA)/extensions/content_capabilities/capability_tests.js.
- bool TestContentCapability(const Extension* extension,
- const char* origin,
- const char* code) {
- ui_test_utils::NavigateToURL(browser(), GetTestURLFor(origin));
+ testing::AssertionResult TestScriptResult(const Extension* extension,
+ const GURL& url,
+ const char* code) {
+ ui_test_utils::NavigateToURL(browser(), url);
bool result = false;
- CHECK(content::ExecuteScriptAndExtractBool(web_contents(), code, &result));
- return result;
+ if (!content::ExecuteScriptAndExtractBool(web_contents(), code, &result))
+ return testing::AssertionFailure() << "Could not execute test script.";
+ if (!result)
+ return testing::AssertionFailure();
+ return testing::AssertionSuccess();
}
- bool CanReadClipboard(const Extension* extension, const char* origin) {
- return TestContentCapability(extension, origin, "tests.canReadClipboard()");
+ testing::AssertionResult CanReadClipboard(const Extension* extension,
+ const GURL& url) {
+ return TestScriptResult(extension, url, "tests.canReadClipboard()");
}
- bool CanWriteClipboard(const Extension* extension, const char* origin) {
- return TestContentCapability(extension, origin,
- "tests.canWriteClipboard()");
+ testing::AssertionResult CanWriteClipboard(const Extension* extension,
+ const GURL& url) {
+ return TestScriptResult(extension, url, "tests.canWriteClipboard()");
+ }
+
+ testing::AssertionResult HasUnlimitedStorage(const Extension* extension,
+ const GURL& url) {
+ if (profile()->GetSpecialStoragePolicy()->IsStorageUnlimited(url))
+ return testing::AssertionSuccess();
+ return testing::AssertionFailure();
}
private:
@@ -129,26 +144,36 @@ IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, NoCapabilities) {
InitializeTestServer();
scoped_refptr<const Extension> extension = LoadExtensionWithCapabilities(
MakeJSONList("http://foo.example.com/*"), MakeJSONList());
- EXPECT_FALSE(CanReadClipboard(extension.get(), "foo.example.com"));
- EXPECT_FALSE(CanWriteClipboard(extension.get(), "foo.example.com"));
+ EXPECT_FALSE(
+ CanReadClipboard(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_FALSE(
+ CanWriteClipboard(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_FALSE(
+ HasUnlimitedStorage(extension.get(), GetTestURLFor("foo.example.com")));
}
IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, ClipboardRead) {
InitializeTestServer();
scoped_refptr<const Extension> extension = LoadExtensionWithCapabilities(
MakeJSONList("http://foo.example.com/*"), MakeJSONList("clipboardRead"));
- EXPECT_TRUE(CanReadClipboard(extension.get(), "foo.example.com"));
- EXPECT_FALSE(CanReadClipboard(extension.get(), "bar.example.com"));
- EXPECT_FALSE(CanWriteClipboard(extension.get(), "foo.example.com"));
+ EXPECT_TRUE(
+ CanReadClipboard(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_FALSE(
+ CanReadClipboard(extension.get(), GetTestURLFor("bar.example.com")));
+ EXPECT_FALSE(
+ CanWriteClipboard(extension.get(), GetTestURLFor("foo.example.com")));
}
IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, ClipboardWrite) {
InitializeTestServer();
scoped_refptr<const Extension> extension = LoadExtensionWithCapabilities(
MakeJSONList("http://foo.example.com/*"), MakeJSONList("clipboardWrite"));
- EXPECT_TRUE(CanWriteClipboard(extension.get(), "foo.example.com"));
- EXPECT_FALSE(CanWriteClipboard(extension.get(), "bar.example.com"));
- EXPECT_FALSE(CanReadClipboard(extension.get(), "foo.example.com"));
+ EXPECT_TRUE(
+ CanWriteClipboard(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_FALSE(
+ CanWriteClipboard(extension.get(), GetTestURLFor("bar.example.com")));
+ EXPECT_FALSE(
+ CanReadClipboard(extension.get(), GetTestURLFor("foo.example.com")));
}
IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, ClipboardReadWrite) {
@@ -156,8 +181,50 @@ IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, ClipboardReadWrite) {
scoped_refptr<const Extension> extension = LoadExtensionWithCapabilities(
MakeJSONList("http://foo.example.com/*"),
MakeJSONList("clipboardRead", "clipboardWrite"));
- EXPECT_TRUE(CanReadClipboard(extension.get(), "foo.example.com"));
- EXPECT_TRUE(CanWriteClipboard(extension.get(), "foo.example.com"));
- EXPECT_FALSE(CanReadClipboard(extension.get(), "bar.example.com"));
- EXPECT_FALSE(CanWriteClipboard(extension.get(), "bar.example.com"));
+ EXPECT_TRUE(
+ CanReadClipboard(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_TRUE(
+ CanWriteClipboard(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_FALSE(
+ CanReadClipboard(extension.get(), GetTestURLFor("bar.example.com")));
+ EXPECT_FALSE(
+ CanWriteClipboard(extension.get(), GetTestURLFor("bar.example.com")));
+}
+
+IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, UnlimitedStorage) {
+ InitializeTestServer();
+ scoped_refptr<const Extension> extension =
+ LoadExtensionWithCapabilities(MakeJSONList("http://foo.example.com/*"),
+ MakeJSONList("unlimitedStorage"));
+ EXPECT_TRUE(
+ HasUnlimitedStorage(extension.get(), GetTestURLFor("foo.example.com")));
+ EXPECT_FALSE(
+ HasUnlimitedStorage(extension.get(), GetTestURLFor("bar.example.com")));
+}
+
+IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest, WebUnlimitedStorageIsIsolated) {
+ InitializeTestServer();
+ // This extension grants unlimited storage to bar.example.com but does not
+ // have unlimitedStorage itself.
+ scoped_refptr<const Extension> extension = LoadExtensionWithCapabilities(
+ MakeJSONList("http://bar.example.com/*"),
+ MakeJSONList("unlimitedStorage"), MakeJSONList("storage"));
+ EXPECT_FALSE(
+ HasUnlimitedStorage(extension.get(), extension->GetResourceURL("")));
+ EXPECT_TRUE(
+ HasUnlimitedStorage(extension.get(), GetTestURLFor("bar.example.com")));
+}
+
+IN_PROC_BROWSER_TEST_F(ContentCapabilitiesTest,
+ ExtensionUnlimitedStorageIsIsolated) {
+ InitializeTestServer();
+ // This extension has unlimitedStorage but doesn't grant it to foo.example.com
+ scoped_refptr<const Extension> extension = LoadExtensionWithCapabilities(
+ MakeJSONList("http://foo.example.com/*"), MakeJSONList("clipboardRead"),
+ MakeJSONList("unlimitedStorage"));
+
+ EXPECT_TRUE(
+ HasUnlimitedStorage(extension.get(), extension->GetResourceURL("")));
+ EXPECT_FALSE(
+ HasUnlimitedStorage(extension.get(), GetTestURLFor("foo.example.com")));
}

Powered by Google App Engine
This is Rietveld 408576698