| Index: chrome/browser/extensions/active_tab_unittest.cc
|
| diff --git a/chrome/browser/extensions/active_tab_unittest.cc b/chrome/browser/extensions/active_tab_unittest.cc
|
| index 908d366a92c7e4d6202824b1f8f6dc558e03b4ea..77b8e472aaa73a9c83e147b41cf361a513263b07 100644
|
| --- a/chrome/browser/extensions/active_tab_unittest.cc
|
| +++ b/chrome/browser/extensions/active_tab_unittest.cc
|
| @@ -7,6 +7,8 @@
|
| #include <utility>
|
|
|
| #include "base/compiler_specific.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/ptr_util.h"
|
| #include "base/message_loop/message_loop.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/chrome_notification_types.h"
|
| @@ -32,6 +34,20 @@
|
| #include "extensions/common/permissions/permissions_data.h"
|
| #include "extensions/common/value_builder.h"
|
|
|
| +#if defined(OS_CHROMEOS)
|
| +#include "base/run_loop.h"
|
| +#include "chrome/browser/chromeos/login/users/fake_chrome_user_manager.h"
|
| +#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h"
|
| +#include "chrome/browser/chromeos/login/users/wallpaper/wallpaper_manager.h"
|
| +#include "chrome/browser/chromeos/profiles/profile_helper.h"
|
| +#include "chrome/browser/chromeos/settings/device_settings_service.h"
|
| +#include "chrome/test/base/scoped_testing_local_state.h"
|
| +#include "chrome/test/base/testing_browser_process.h"
|
| +#include "chromeos/login/scoped_test_public_session_login_state.h"
|
| +#include "components/signin/core/account_id/account_id.h"
|
| +#include "extensions/browser/extension_dialog_auto_confirm.h"
|
| +#endif
|
| +
|
| using base::DictionaryValue;
|
| using base::ListValue;
|
| using content::BrowserThread;
|
| @@ -67,6 +83,28 @@ enum PermittedFeature {
|
| PERMITTED_BOTH
|
| };
|
|
|
| +class ActiveTabPermissionGranterTestDelegate
|
| + : public ActiveTabPermissionGranter::Delegate {
|
| + public:
|
| + ActiveTabPermissionGranterTestDelegate() {}
|
| + ~ActiveTabPermissionGranterTestDelegate() override {}
|
| +
|
| + // ActiveTabPermissionGranterTestDelegate::Delegate
|
| + bool ShouldGrantActiveTab(const Extension* extension,
|
| + content::WebContents* contents) override {
|
| + return should_grant_;
|
| + }
|
| +
|
| + void SetShouldGrant(bool should_grant) {
|
| + should_grant_ = should_grant;
|
| + }
|
| +
|
| + private:
|
| + bool should_grant_ = false;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ActiveTabPermissionGranterTestDelegate);
|
| +};
|
| +
|
| class ActiveTabTest : public ChromeRenderViewHostTestHarness {
|
| protected:
|
| ActiveTabTest()
|
| @@ -380,5 +418,81 @@ TEST_F(ActiveTabTest, ChromeUrlGrants) {
|
| tab_id() + 1, APIPermission::kTabCaptureForTab));
|
| }
|
|
|
| +// Test that the custom platform delegate works as expected.
|
| +TEST_F(ActiveTabTest, Delegate) {
|
| + auto test_delegate =
|
| + base::MakeUnique<ActiveTabPermissionGranterTestDelegate>();
|
| + ActiveTabPermissionGranter::SetPlatformDelegate(test_delegate.get());
|
| +
|
| + GURL google("http://www.google.com");
|
| + NavigateAndCommit(google);
|
| +
|
| + // Not granted because the delegate denies grant.
|
| + active_tab_permission_granter()->GrantIfRequested(extension.get());
|
| + EXPECT_TRUE(IsBlocked(extension, google));
|
| +
|
| + // This time it's granted because the delegate allows it.
|
| + test_delegate->SetShouldGrant(true);
|
| + active_tab_permission_granter()->GrantIfRequested(extension.get());
|
| + EXPECT_TRUE(IsAllowed(extension, google));
|
| +
|
| + // Cleanup :).
|
| + ActiveTabPermissionGranter::SetPlatformDelegate(nullptr);
|
| +}
|
| +
|
| +#if defined(OS_CHROMEOS)
|
| +// Test that the platform delegate is being set and the permission is prompted
|
| +// for.
|
| +TEST_F(ActiveTabTest, DelegateIsSet) {
|
| + // Setup, login a public account user.
|
| + chromeos::ScopedTestPublicSessionLoginState login_state;
|
| + std::string user_id = "public@account.user";
|
| + std::string user_email = user_id;
|
| + AccountId account_id = AccountId::FromUserEmailGaiaId(user_email, user_id);
|
| + std::string user_id_hash = chromeos::ProfileHelper::Get()->
|
| + GetUserIdHashByUserIdForTesting(user_id);
|
| + chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
|
| + chromeos::ScopedTestCrosSettings test_cros_settings_;
|
| + ScopedTestingLocalState local_state(TestingBrowserProcess::GetGlobal());
|
| + chromeos::ScopedTestUserManager test_user_manager_;
|
| + chromeos::WallpaperManager::Initialize();
|
| + g_browser_process->local_state()->SetString(
|
| + "PublicAccountPendingDataRemoval", user_email);
|
| + user_manager::UserManager::Get()->UserLoggedIn(
|
| + account_id, user_id_hash, true);
|
| +
|
| + GURL google("http://www.google.com");
|
| + NavigateAndCommit(google);
|
| +
|
| + // Grant and verify.
|
| + {
|
| + ScopedTestDialogAutoConfirm auto_confirm(
|
| + ScopedTestDialogAutoConfirm::ACCEPT);
|
| + active_tab_permission_granter()->GrantIfRequested(extension.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(IsBlocked(extension, google));
|
| + active_tab_permission_granter()->GrantIfRequested(extension.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(IsAllowed(extension, google));
|
| + }
|
| +
|
| + // Deny and verify. Use a different extension so it doesn't trigger the cache.
|
| + {
|
| + ScopedTestDialogAutoConfirm auto_confirm(
|
| + ScopedTestDialogAutoConfirm::CANCEL);
|
| + active_tab_permission_granter()->GrantIfRequested(another_extension.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(IsBlocked(another_extension, google));
|
| + active_tab_permission_granter()->GrantIfRequested(another_extension.get());
|
| + base::RunLoop().RunUntilIdle();
|
| + EXPECT_TRUE(IsBlocked(another_extension, google));
|
| + }
|
| +
|
| + // Cleanup.
|
| + chromeos::WallpaperManager::Shutdown();
|
| + free(ActiveTabPermissionGranter::SetPlatformDelegate(nullptr));
|
| +}
|
| +#endif
|
| +
|
| } // namespace
|
| } // namespace extensions
|
|
|