// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/signin/signin_manager.h" #include "chrome/browser/signin/signin_manager_factory.h" #include "chrome/test/base/testing_browser_process.h" #include "chrome/test/base/testing_profile.h" #include "chrome/test/base/testing_profile_manager.h" #include "content/public/test/mock_render_process_host.h" #include "content/public/test/test_browser_thread_bundle.h" #include "extensions/common/extension.h" #include "extensions/common/extension_builder.h" #include "extensions/common/permissions/permissions_data.h" #include "testing/gtest/include/gtest/gtest.h" namespace extensions { namespace { class BrowserPermissionsPolicyDelegateTest : public testing::Test { protected: virtual void SetUp() { profile_manager_.reset( new TestingProfileManager(TestingBrowserProcess::GetGlobal())); ASSERT_TRUE(profile_manager_->SetUp()); profile_ = profile_manager_->CreateTestingProfile("test"); } virtual void TearDown() { // Need to delete profile here before the UI thread is destroyed. profile_manager_->DeleteTestingProfile("test"); profile_manager_.reset(); } protected: content::TestBrowserThreadBundle thread_bundle_; scoped_ptr profile_manager_; TestingProfile* profile_; }; #if !defined(OS_CHROMEOS) scoped_refptr CreateTestExtension(const std::string& id) { return ExtensionBuilder() .SetManifest(DictionaryBuilder() .Set("name", "Extension with ID " + id) .Set("version", "1.0") .Set("manifest_version", 2) .Set("permissions", ListBuilder().Append(""))) .SetID(id) .Build(); } #endif } // namespace #if !defined(OS_CHROMEOS) // Tests that CanExecuteScriptOnPage returns false for the signin process, // all else being equal. TEST_F(BrowserPermissionsPolicyDelegateTest, CanExecuteScriptOnPage) { GURL kSigninUrl( "https://accounts.google.com/ServiceLogin?service=chromiumsync"); ASSERT_TRUE(SigninManager::IsWebBasedSigninFlowURL(kSigninUrl)); content::MockRenderProcessHost signin_process(profile_); content::MockRenderProcessHost normal_process(profile_); SigninManager* signin_manager = SigninManagerFactory::GetForProfile(profile_); ASSERT_TRUE(signin_manager); signin_manager->SetSigninProcess(signin_process.GetID()); scoped_refptr extension(CreateTestExtension("a")); std::string error; // The same call should succeed with a normal process, but fail with a signin // process. EXPECT_TRUE(PermissionsData::CanExecuteScriptOnPage(extension.get(), kSigninUrl, kSigninUrl, -1, NULL, normal_process.GetID(), &error)) << error; EXPECT_FALSE(PermissionsData::CanExecuteScriptOnPage(extension.get(), kSigninUrl, kSigninUrl, -1, NULL, signin_process.GetID(), &error)) << error; } #endif } // namespace extensions