190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// found in the LICENSE file. 490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client.h" 6effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch#include "chrome/browser/signin/chrome_signin_client_factory.h" 790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/browser/signin/signin_manager_factory.h" 890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/test/base/testing_browser_process.h" 990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/test/base/testing_profile.h" 1090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "chrome/test/base/testing_profile_manager.h" 11e5d81f57cb97b3b6b7fccc9c5610d21eb81db09dBen Murdoch#include "components/signin/core/browser/signin_manager.h" 1290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "content/public/test/mock_render_process_host.h" 13a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch#include "content/public/test/test_browser_thread_bundle.h" 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension.h" 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/extension_builder.h" 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/permissions/permissions_data.h" 1790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 1890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 1990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace extensions { 2090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)namespace { 2290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 2390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)class BrowserPermissionsPolicyDelegateTest : public testing::Test { 24a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch protected: 2590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void SetUp() { 2690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_manager_.reset( 2790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) new TestingProfileManager(TestingBrowserProcess::GetGlobal())); 2890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(profile_manager_->SetUp()); 2990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_ = profile_manager_->CreateTestingProfile("test"); 3090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 3190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) virtual void TearDown() { 3290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // Need to delete profile here before the UI thread is destroyed. 3390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_manager_->DeleteTestingProfile("test"); 3490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) profile_manager_.reset(); 3590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) } 3690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) protected: 37a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch content::TestBrowserThreadBundle thread_bundle_; 3890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_ptr<TestingProfileManager> profile_manager_; 3990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) TestingProfile* profile_; 4090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)}; 4190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#if !defined(OS_CHROMEOS) 4390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)scoped_refptr<const Extension> CreateTestExtension(const std::string& id) { 4490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) return ExtensionBuilder() 4590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .SetManifest(DictionaryBuilder() 4690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Set("name", "Extension with ID " + id) 4790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Set("version", "1.0") 4890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Set("manifest_version", 2) 4990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Set("permissions", ListBuilder().Append("<all_urls>"))) 5090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .SetID(id) 5190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) .Build(); 5290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#endif 5490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace 5690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 5790dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#if !defined(OS_CHROMEOS) 5890dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// Tests that CanExecuteScriptOnPage returns false for the signin process, 5990dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)// all else being equal. 6090dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)TEST_F(BrowserPermissionsPolicyDelegateTest, CanExecuteScriptOnPage) { 6190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) GURL kSigninUrl( 6290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) "https://accounts.google.com/ServiceLogin?service=chromiumsync"); 6390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) ASSERT_TRUE(SigninManager::IsWebBasedSigninFlowURL(kSigninUrl)); 6490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 6590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::MockRenderProcessHost signin_process(profile_); 6690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) content::MockRenderProcessHost normal_process(profile_); 67cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) SigninClient* signin_client = 68effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ChromeSigninClientFactory::GetForProfile(profile_); 69effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch ASSERT_TRUE(signin_client); 70effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch signin_client->SetSigninProcess(signin_process.GetID()); 7190dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) scoped_refptr<const Extension> extension(CreateTestExtension("a")); 7390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) std::string error; 7490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 7590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // The same call should succeed with a normal process, but fail with a signin 7690dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) // process. 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const PermissionsData* permissions_data = extension->permissions_data(); 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(permissions_data->CanAccessPage(extension.get(), 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kSigninUrl, 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kSigninUrl, 8146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) -1, // no tab id. 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) normal_process.GetID(), 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &error)) 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << error; 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(permissions_data->CanAccessPage(extension.get(), 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kSigninUrl, 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) kSigninUrl, 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) -1, // no tab id. 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) signin_process.GetID(), 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) &error)) 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) << error; 9290dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} 9390dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)#endif 9490dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles) 9590dce4d38c5ff5333bea97d859d4e484e27edf0cTorne (Richard Coles)} // namespace extensions 96