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 |