| 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
|
|
|