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

Unified Diff: chrome/browser/chromeos/extensions/public_session_permission_helper_unittest.cc

Issue 2858013002: PS - Showing permission prompt for activeTab (Closed)
Patch Set: Changed permission prompt message Created 3 years, 7 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/chromeos/extensions/public_session_permission_helper_unittest.cc
diff --git a/chrome/browser/chromeos/extensions/public_session_permission_helper_unittest.cc b/chrome/browser/chromeos/extensions/public_session_permission_helper_unittest.cc
index 0ca18d0db3d952e9be8b7c5f1aa76e256dcd0173..56b71b154586c33718caa0508f4e666982827a1c 100644
--- a/chrome/browser/chromeos/extensions/public_session_permission_helper_unittest.cc
+++ b/chrome/browser/chromeos/extensions/public_session_permission_helper_unittest.cc
@@ -16,6 +16,7 @@
#include "chrome/browser/extensions/extension_install_prompt.h"
#include "chrome/common/extensions/extension_test_util.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "chromeos/login/scoped_test_public_session_login_state.h"
#include "content/public/browser/web_contents.h"
#include "extensions/browser/extension_dialog_auto_confirm.h"
#include "extensions/common/extension.h"
@@ -30,12 +31,17 @@ using extensions::Extension;
using extensions::Manifest;
using Result = ExtensionInstallPrompt::Result;
+namespace extensions {
+namespace permission_helper {
namespace {
auto permission_a = APIPermission::kAudio;
auto permission_b = APIPermission::kBookmark;
bool did_show_dialog;
+const char kWhitelistedId[] = "cbkkbcmdlboombapidmoeolnmdacpkch";
+const char kNonWhitelistedId[] = "bogus";
+
scoped_refptr<Extension> LoadManifestHelper(const std::string& id) {
std::string error;
scoped_refptr<Extension> extension = LoadManifestUnchecked(
@@ -51,6 +57,11 @@ bool get_did_show_dialog_and_reset() {
return tmp;
}
+base::Callback<void(const PermissionIDSet&)> BindQuitLoop(base::RunLoop* loop) {
+ return base::Bind(
+ [](base::RunLoop* loop, const PermissionIDSet&) { loop->Quit(); }, loop);
+}
+
class ProgrammableInstallPrompt
: public ExtensionInstallPrompt,
public base::SupportsWeakPtr<ProgrammableInstallPrompt> {
@@ -83,9 +94,6 @@ class ProgrammableInstallPrompt
} // namespace
-namespace extensions {
-namespace permission_helper {
-
class PublicSessionPermissionHelperTest
: public ChromeRenderViewHostTestHarness {
public:
@@ -111,6 +119,8 @@ class PublicSessionPermissionHelperTest
std::vector<PermissionIDSet> allowed_permissions_;
+ chromeos::ScopedTestPublicSessionLoginState login_state_;
+
private:
DISALLOW_COPY_AND_ASSIGN(PublicSessionPermissionHelperTest);
};
@@ -251,5 +261,58 @@ TEST_F(PublicSessionPermissionHelperTest, TestTwoPromptsDeny) {
EXPECT_TRUE(allowed_permissions_.at(1).Equals({permission_b}));
}
+TEST_F(PublicSessionPermissionHelperTest, WhitelistedExtension) {
+ auto extension = LoadManifestHelper(kWhitelistedId);
+ // Whitelisted extension can use any permission.
+ EXPECT_TRUE(PermissionAllowed(extension.get(), permission_a));
+ EXPECT_TRUE(PermissionAllowed(extension.get(), permission_b));
+ // Whitelisted extension is already handled (no permission prompt needed).
+ EXPECT_TRUE(HandlePermissionRequest(*extension, {permission_a},
+ web_contents(), RequestResolvedCallback(),
+ PromptFactory()));
+ EXPECT_TRUE(PermissionAllowed(extension.get(), permission_a));
+ EXPECT_TRUE(PermissionAllowed(extension.get(), permission_b));
+}
+
+TEST_F(PublicSessionPermissionHelperTest, NonWhitelistedExtension) {
+ auto extension = LoadManifestHelper(kNonWhitelistedId);
+ EXPECT_FALSE(PermissionAllowed(extension.get(), permission_a));
+ EXPECT_FALSE(PermissionAllowed(extension.get(), permission_b));
+ // Prompt for permission_a, grant it, verify.
+ {
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::ACCEPT);
+ // Permission not handled yet, need to show a prompt.
+ base::RunLoop loop;
+ EXPECT_FALSE(HandlePermissionRequest(*extension, {permission_a},
+ web_contents(), BindQuitLoop(&loop),
+ PromptFactory()));
+ loop.Run();
+ EXPECT_TRUE(PermissionAllowed(extension.get(), permission_a));
+ EXPECT_FALSE(PermissionAllowed(extension.get(), permission_b));
+ }
+ // Already handled (allow), doesn't show a prompt.
+ EXPECT_TRUE(HandlePermissionRequest(*extension, {permission_a},
+ web_contents(), RequestResolvedCallback(),
+ PromptFactory()));
+ // Prompt for permission_b, deny it, verify.
+ {
+ ScopedTestDialogAutoConfirm auto_confirm(
+ ScopedTestDialogAutoConfirm::CANCEL);
+ // Permission not handled yet, need to show a prompt.
+ base::RunLoop loop;
+ EXPECT_FALSE(HandlePermissionRequest(*extension, {permission_b},
+ web_contents(), BindQuitLoop(&loop),
+ PromptFactory()));
+ loop.Run();
+ EXPECT_TRUE(PermissionAllowed(extension.get(), permission_a));
+ EXPECT_FALSE(PermissionAllowed(extension.get(), permission_b));
+ }
+ // Already handled (deny), doesn't show a prompt.
+ EXPECT_TRUE(HandlePermissionRequest(*extension, {permission_b},
+ web_contents(), RequestResolvedCallback(),
+ PromptFactory()));
+}
+
} // namespace permission_helper
} // namespace extensions

Powered by Google App Engine
This is Rietveld 408576698