1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// found in the LICENSE file. 4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/crx_installer.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 88bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/extension_util.h" 9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 127d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/notification_service.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "extensions/browser/extension_system.h" 145f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "extensions/browser/notification_types.h" 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions { 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ExtensionFunctionalTest : public ExtensionBrowserTest { 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void InstallExtensionSilently(ExtensionService* service, 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* filename) { 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) service->set_show_extensions_prompts(false); 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t num_before = service->extensions()->size(); 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath path = test_data_dir_.AppendASCII(filename); 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver extension_loaded_observer( 285f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<extensions::CrxInstaller> installer( 32ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch extensions::CrxInstaller::CreateSilent(service)); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_is_gallery_install(false); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_allow_silent_install(true); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_install_source(Manifest::INTERNAL); 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_off_store_install_allow_reason( 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::CrxInstaller::OffStoreInstallAllowedInTest); 38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 398bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) observer_->Watch( 405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) extensions::NOTIFICATION_CRX_INSTALLER_DONE, 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::Source<extensions::CrxInstaller>(installer.get())); 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->InstallCrx(path); 448bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) observer_->Wait(); 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t num_after = service->extensions()->size(); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(num_before + 1, num_after); 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_loaded_observer.Wait(); 50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension = service->GetExtensionById( 518bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id(), false); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(extension != NULL); 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* GetExtensionService() { 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return ExtensionSystem::Get(profile())->extension_service(); 57116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 603240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch PRE_TestAdblockExtensionCrash) { 62116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InstallExtensionSilently(GetExtensionService(), "adblock.crx"); 633240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 65116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Timing out on XP and Vista: http://crbug.com/387866 66116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 67116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_TestAdblockExtensionCrash DISABLED_TestAdblockExtensionCrash 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_TestAdblockExtensionCrash TestAdblockExtensionCrash 70116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 71116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, 72116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch MAYBE_TestAdblockExtensionCrash) { 73116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service = GetExtensionService(); 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the extension is enabled and allowed in incognito 75c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // is disabled. 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(service->IsExtensionEnabled(last_loaded_extension_id())); 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile())); 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Failing on XP: http://crbug.com/389545 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#if defined(OS_WIN) 82116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_TestSetExtensionsState DISABLED_TestSetExtensionsState 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#else 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MAYBE_TestSetExtensionsState TestSetExtensionsState 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif 86116680a4aac90f2aa7413d9095a592090648e557Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, MAYBE_TestSetExtensionsState) { 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch InstallExtensionSilently(GetExtensionService(), "google_talk.crx"); 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 89c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disable the extension and verify. 905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), false); 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch ExtensionService* service = GetExtensionService(); 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->DisableExtension(last_loaded_extension_id(), 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::DISABLE_USER_ACTION); 948bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE(service->IsExtensionEnabled(last_loaded_extension_id())); 95c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 96c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Enable the extension and verify. 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), false); 988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->EnableExtension(last_loaded_extension_id()); 998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(service->IsExtensionEnabled(last_loaded_extension_id())); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Allow extension in incognito mode and verify. 1028bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->EnableExtension(last_loaded_extension_id()); 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), true); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_TRUE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile())); 105c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 106c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disallow extension in incognito mode and verify. 1078bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->EnableExtension(last_loaded_extension_id()); 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), false); 1095d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) EXPECT_FALSE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile())); 110c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 111c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace extensions 112