renderer_permissions_policy_delegate_unittest.cc revision 868fa2fe829687343ffae624259930155e16dbd8
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 "base/command_line.h" 6#include "chrome/common/chrome_switches.h" 7#include "chrome/common/extensions/extension.h" 8#include "chrome/common/extensions/extension_builder.h" 9#include "chrome/common/extensions/extension_messages.h" 10#include "chrome/common/extensions/permissions/permissions_data.h" 11#include "chrome/renderer/extensions/dispatcher.h" 12#include "chrome/renderer/extensions/renderer_permissions_policy_delegate.h" 13#include "content/public/test/mock_render_process_host.h" 14#include "content/public/test/mock_render_thread.h" 15#include "testing/gtest/include/gtest/gtest.h" 16 17namespace extensions { 18 19namespace { 20 21class RendererPermissionsPolicyDelegateTest : public testing::Test { 22 public: 23 RendererPermissionsPolicyDelegateTest() { 24 } 25 virtual void SetUp() { 26 testing::Test::SetUp(); 27 render_thread_.reset(new content::MockRenderThread()); 28 extension_dispatcher_.reset(new Dispatcher()); 29 policy_delegate_.reset( 30 new RendererPermissionsPolicyDelegate(extension_dispatcher_.get())); 31 } 32 protected: 33 scoped_ptr<Dispatcher> extension_dispatcher_; 34 scoped_ptr<RendererPermissionsPolicyDelegate> policy_delegate_; 35 scoped_ptr<content::MockRenderThread> render_thread_; 36}; 37 38scoped_refptr<const Extension> CreateTestExtension(const std::string& id) { 39 return ExtensionBuilder() 40 .SetManifest(DictionaryBuilder() 41 .Set("name", "Extension with ID " + id) 42 .Set("version", "1.0") 43 .Set("manifest_version", 2) 44 .Set("permissions", ListBuilder().Append("<all_urls>"))) 45 .SetID(id) 46 .Build(); 47} 48 49} // namespace 50 51// Tests that CanExecuteScriptOnPage returns false for the signin process, 52// all else being equal. 53TEST_F(RendererPermissionsPolicyDelegateTest, CannotScriptSigninProcess) { 54 GURL kSigninUrl( 55 "https://accounts.google.com/ServiceLogin?service=chromiumsync"); 56 scoped_refptr<const Extension> extension(CreateTestExtension("a")); 57 std::string error; 58 59 EXPECT_TRUE(PermissionsData::CanExecuteScriptOnPage( 60 extension.get(), kSigninUrl, kSigninUrl, -1, NULL, -1, &error)) << error; 61 // Pretend we are in the signin process. We should not be able to execute 62 // script. 63 CommandLine::ForCurrentProcess()->AppendSwitch(switches::kSigninProcess); 64 EXPECT_FALSE(PermissionsData::CanExecuteScriptOnPage( 65 extension.get(), kSigninUrl, kSigninUrl, -1, NULL, -1, &error)) << error; 66} 67 68// Tests that CanExecuteScriptOnPage returns false for the any process 69// which hosts the webstore. 70TEST_F(RendererPermissionsPolicyDelegateTest, CannotScriptWebstore) { 71 GURL kAnyUrl("http://example.com/"); 72 scoped_refptr<const Extension> extension(CreateTestExtension("a")); 73 std::string error; 74 75 EXPECT_TRUE(PermissionsData::CanExecuteScriptOnPage( 76 extension.get(), kAnyUrl, kAnyUrl, -1, NULL, -1, &error)) << error; 77 78 // Pretend we are in the webstore process. We should not be able to execute 79 // script. 80 scoped_refptr<const Extension> webstore_extension( 81 CreateTestExtension(extension_misc::kWebStoreAppId)); 82 extension_dispatcher_->OnLoadedInternal(webstore_extension); 83 extension_dispatcher_->OnActivateExtension(extension_misc::kWebStoreAppId); 84 EXPECT_FALSE(PermissionsData::CanExecuteScriptOnPage( 85 extension.get(), kAnyUrl, kAnyUrl, -1, NULL, -1, &error)) << error; 86} 87 88} // namespace extensions 89