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

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

Issue 348313003: Create withheld permissions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Test fix Created 6 years, 6 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
Index: chrome/browser/extensions/active_script_controller_unittest.cc
diff --git a/chrome/browser/extensions/active_script_controller_unittest.cc b/chrome/browser/extensions/active_script_controller_unittest.cc
index 0b40328c14329891aeb22953d731e3e46710b495..6cc521e1e0f0e3445741a2b11189f5d06f593cc5 100644
--- a/chrome/browser/extensions/active_script_controller_unittest.cc
+++ b/chrome/browser/extensions/active_script_controller_unittest.cc
@@ -15,6 +15,7 @@
#include "content/public/browser/navigation_entry.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_registry.h"
+#include "extensions/common/constants.h"
#include "extensions/common/extension.h"
#include "extensions/common/extension_builder.h"
#include "extensions/common/feature_switch.h"
@@ -43,19 +44,28 @@ class ActiveScriptControllerUnitTest : public ChromeRenderViewHostTestHarness {
// Creates an extension with all hosts permission and adds it to the registry.
const Extension* AddExtension();
- // Returns the current page id.
- int GetPageId();
+ // Returns true if the |extension| requires user consent before injecting
+ // a script.
+ bool RequiresUserConsent(const Extension* extension) const;
- // Returns a closure to use as a script execution for a given extension.
- base::Closure GetExecutionCallbackForExtension(
- const std::string& extension_id);
+ // Request an injection for the given |extension|.
+ void RequestInjection(const Extension* extension);
// Returns the number of times a given extension has had a script execute.
size_t GetExecutionCountForExtension(const std::string& extension_id) const;
- ActiveScriptController* controller() { return active_script_controller_; }
+ ActiveScriptController* controller() const {
+ return active_script_controller_;
+ }
private:
+ // Returns the current page id.
+ int GetPageId();
+
+ // Returns a closure to use as a script execution for a given extension.
+ base::Closure GetExecutionCallbackForExtension(
+ const std::string& extension_id);
+
// Increment the number of executions for the given |extension_id|.
void IncrementExecutionCount(const std::string& extension_id);
@@ -101,6 +111,33 @@ const Extension* ActiveScriptControllerUnitTest::AddExtension() {
return extension;
}
+bool ActiveScriptControllerUnitTest::RequiresUserConsent(
+ const Extension* extension) const {
+ PermissionsData::AccessType access_type =
+ controller()->RequiresUserConsentForScriptInjectionForTesting(
+ extension, extension_misc::PROGRAMMATIC_SCRIPT);
+ // We should never downright refuse access in these tests.
+ DCHECK_NE(PermissionsData::DENY_ACCESS, access_type);
+ return access_type == PermissionsData::REQUEST_ACCESS;
+}
+
+void ActiveScriptControllerUnitTest::RequestInjection(
+ const Extension* extension) {
+ controller()->RequestScriptInjectionForTesting(
+ extension,
+ GetPageId(),
+ GetExecutionCallbackForExtension(extension->id()));
+}
+
+size_t ActiveScriptControllerUnitTest::GetExecutionCountForExtension(
+ const std::string& extension_id) const {
+ std::map<std::string, int>::const_iterator iter =
+ extension_executions_.find(extension_id);
+ if (iter != extension_executions_.end())
+ return iter->second;
+ return 0u;
+}
+
int ActiveScriptControllerUnitTest::GetPageId() {
content::NavigationEntry* navigation_entry =
web_contents()->GetController().GetVisibleEntry();
@@ -117,15 +154,6 @@ base::Closure ActiveScriptControllerUnitTest::GetExecutionCallbackForExtension(
extension_id);
}
-size_t ActiveScriptControllerUnitTest::GetExecutionCountForExtension(
- const std::string& extension_id) const {
- std::map<std::string, int>::const_iterator iter =
- extension_executions_.find(extension_id);
- if (iter != extension_executions_.end())
- return iter->second;
- return 0u;
-}
-
void ActiveScriptControllerUnitTest::IncrementExecutionCount(
const std::string& extension_id) {
++extension_executions_[extension_id];
@@ -157,14 +185,10 @@ TEST_F(ActiveScriptControllerUnitTest, RequestPermissionAndExecute) {
ASSERT_FALSE(controller()->GetActionForExtension(extension));
// Since the extension requests all_hosts, we should require user consent.
- EXPECT_TRUE(
- controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
// Request an injection. There should be an action visible, but no executions.
- controller()->RequestScriptInjection(
- extension,
- GetPageId(),
- GetExecutionCallbackForExtension(extension->id()));
+ RequestInjection(extension);
EXPECT_TRUE(controller()->GetActionForExtension(extension));
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id()));
@@ -177,28 +201,22 @@ TEST_F(ActiveScriptControllerUnitTest, RequestPermissionAndExecute) {
// Since we already executed on the given page, we shouldn't need permission
// for a second time.
- EXPECT_FALSE(
- controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_FALSE(RequiresUserConsent(extension));
// Reloading should clear those permissions, and we should again require user
// consent.
Reload();
- EXPECT_TRUE(
- controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
// Grant access.
- controller()->RequestScriptInjection(
- extension,
- GetPageId(),
- GetExecutionCallbackForExtension(extension->id()));
+ RequestInjection(extension);
controller()->OnClicked(extension);
EXPECT_EQ(2u, GetExecutionCountForExtension(extension->id()));
EXPECT_FALSE(controller()->GetActionForExtension(extension));
// Navigating to another site should also clear the permissions.
NavigateAndCommit(GURL("https://www.foo.com"));
- EXPECT_TRUE(
- controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
}
// Test that injections that are not executed by the time the user navigates are
@@ -212,10 +230,7 @@ TEST_F(ActiveScriptControllerUnitTest, PendingInjectionsRemovedAtNavigation) {
ASSERT_EQ(0u, GetExecutionCountForExtension(extension->id()));
// Request an injection. There should be an action visible, but no executions.
- controller()->RequestScriptInjection(
- extension,
- GetPageId(),
- GetExecutionCallbackForExtension(extension->id()));
+ RequestInjection(extension);
EXPECT_TRUE(controller()->GetActionForExtension(extension));
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id()));
@@ -226,10 +241,7 @@ TEST_F(ActiveScriptControllerUnitTest, PendingInjectionsRemovedAtNavigation) {
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id()));
// Request and accept a new injection.
- controller()->RequestScriptInjection(
- extension,
- GetPageId(),
- GetExecutionCallbackForExtension(extension->id()));
+ RequestInjection(extension);
controller()->OnClicked(extension);
// The extension should only have executed once, even though a grand total
@@ -249,12 +261,9 @@ TEST_F(ActiveScriptControllerUnitTest, MultiplePendingInjection) {
const size_t kNumInjections = 3u;
// Queue multiple pending injections.
- for (size_t i = 0u; i < kNumInjections; ++i) {
- controller()->RequestScriptInjection(
- extension,
- GetPageId(),
- GetExecutionCallbackForExtension(extension->id()));
- }
+ for (size_t i = 0u; i < kNumInjections; ++i)
+ RequestInjection(extension);
+
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id()));
controller()->OnClicked(extension);
@@ -278,17 +287,14 @@ TEST_F(ActiveScriptControllerUnitTest, ActiveScriptsUseActiveTabPermissions) {
// Since we have active tab permissions, we shouldn't need user consent
// anymore.
- EXPECT_FALSE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_FALSE(RequiresUserConsent(extension));
// Also test that granting active tab runs any pending tasks.
Reload();
// Navigating should mean we need permission again.
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
- controller()->RequestScriptInjection(
- extension,
- GetPageId(),
- GetExecutionCallbackForExtension(extension->id()));
+ RequestInjection(extension);
EXPECT_TRUE(controller()->GetActionForExtension(extension));
EXPECT_EQ(0u, GetExecutionCountForExtension(extension->id()));
@@ -306,23 +312,23 @@ TEST_F(ActiveScriptControllerUnitTest, ActiveScriptsCanHaveAllUrlsPref) {
ASSERT_TRUE(extension);
NavigateAndCommit(GURL("https://www.google.com"));
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
// Enable the extension on all urls.
util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), true);
- EXPECT_FALSE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_FALSE(RequiresUserConsent(extension));
// This should carry across navigations, and websites.
NavigateAndCommit(GURL("http://www.foo.com"));
- EXPECT_FALSE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_FALSE(RequiresUserConsent(extension));
// Turning off the preference should have instant effect.
util::SetAllowedScriptingOnAllUrls(extension->id(), profile(), false);
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
// And should also persist across navigations and websites.
NavigateAndCommit(GURL("http://www.bar.com"));
- EXPECT_TRUE(controller()->RequiresUserConsentForScriptInjection(extension));
+ EXPECT_TRUE(RequiresUserConsent(extension));
}
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698