1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "chrome/browser/signin/chrome_signin_client.h" 6 #include "chrome/browser/signin/chrome_signin_client_factory.h" 7 #include "chrome/browser/signin/signin_manager_factory.h" 8 #include "chrome/test/base/testing_browser_process.h" 9 #include "chrome/test/base/testing_profile.h" 10 #include "chrome/test/base/testing_profile_manager.h" 11 #include "components/signin/core/browser/signin_manager.h" 12 #include "content/public/test/mock_render_process_host.h" 13 #include "content/public/test/test_browser_thread_bundle.h" 14 #include "extensions/common/extension.h" 15 #include "extensions/common/extension_builder.h" 16 #include "extensions/common/permissions/permissions_data.h" 17 #include "testing/gtest/include/gtest/gtest.h" 18 19 namespace extensions { 20 21 namespace { 22 23 class BrowserPermissionsPolicyDelegateTest : public testing::Test { 24 protected: 25 virtual void SetUp() { 26 profile_manager_.reset( 27 new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 28 ASSERT_TRUE(profile_manager_->SetUp()); 29 profile_ = profile_manager_->CreateTestingProfile("test"); 30 } 31 virtual void TearDown() { 32 // Need to delete profile here before the UI thread is destroyed. 33 profile_manager_->DeleteTestingProfile("test"); 34 profile_manager_.reset(); 35 } 36 protected: 37 content::TestBrowserThreadBundle thread_bundle_; 38 scoped_ptr<TestingProfileManager> profile_manager_; 39 TestingProfile* profile_; 40 }; 41 42 #if !defined(OS_CHROMEOS) 43 scoped_refptr<const Extension> CreateTestExtension(const std::string& id) { 44 return ExtensionBuilder() 45 .SetManifest(DictionaryBuilder() 46 .Set("name", "Extension with ID " + id) 47 .Set("version", "1.0") 48 .Set("manifest_version", 2) 49 .Set("permissions", ListBuilder().Append("<all_urls>"))) 50 .SetID(id) 51 .Build(); 52 } 53 #endif 54 55 } // namespace 56 57 #if !defined(OS_CHROMEOS) 58 // Tests that CanExecuteScriptOnPage returns false for the signin process, 59 // all else being equal. 60 TEST_F(BrowserPermissionsPolicyDelegateTest, CanExecuteScriptOnPage) { 61 GURL kSigninUrl( 62 "https://accounts.google.com/ServiceLogin?service=chromiumsync"); 63 ASSERT_TRUE(SigninManager::IsWebBasedSigninFlowURL(kSigninUrl)); 64 65 content::MockRenderProcessHost signin_process(profile_); 66 content::MockRenderProcessHost normal_process(profile_); 67 SigninClient* signin_client = 68 ChromeSigninClientFactory::GetForProfile(profile_); 69 ASSERT_TRUE(signin_client); 70 signin_client->SetSigninProcess(signin_process.GetID()); 71 72 scoped_refptr<const Extension> extension(CreateTestExtension("a")); 73 std::string error; 74 75 // The same call should succeed with a normal process, but fail with a signin 76 // process. 77 const PermissionsData* permissions_data = extension->permissions_data(); 78 EXPECT_TRUE(permissions_data->CanAccessPage(extension.get(), 79 kSigninUrl, 80 kSigninUrl, 81 -1, // no tab id. 82 normal_process.GetID(), 83 &error)) 84 << error; 85 EXPECT_FALSE(permissions_data->CanAccessPage(extension.get(), 86 kSigninUrl, 87 kSigninUrl, 88 -1, // no tab id. 89 signin_process.GetID(), 90 &error)) 91 << error; 92 } 93 #endif 94 95 } // namespace extensions 96