1// Copyright (c) 2012 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/extensions/crx_installer.h" 6#include "chrome/browser/extensions/extension_browsertest.h" 7#include "chrome/browser/extensions/extension_service.h" 8#include "chrome/browser/extensions/extension_util.h" 9#include "chrome/browser/profiles/profile.h" 10#include "chrome/browser/ui/browser_commands.h" 11#include "chrome/test/base/ui_test_utils.h" 12#include "content/public/browser/notification_service.h" 13#include "extensions/browser/extension_system.h" 14#include "extensions/browser/notification_types.h" 15 16namespace extensions { 17 18class ExtensionFunctionalTest : public ExtensionBrowserTest { 19 public: 20 void InstallExtensionSilently(ExtensionService* service, 21 const char* filename) { 22 service->set_show_extensions_prompts(false); 23 size_t num_before = service->extensions()->size(); 24 25 base::FilePath path = test_data_dir_.AppendASCII(filename); 26 27 content::WindowedNotificationObserver extension_loaded_observer( 28 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED, 29 content::NotificationService::AllSources()); 30 31 scoped_refptr<extensions::CrxInstaller> installer( 32 extensions::CrxInstaller::CreateSilent(service)); 33 installer->set_is_gallery_install(false); 34 installer->set_allow_silent_install(true); 35 installer->set_install_source(Manifest::INTERNAL); 36 installer->set_off_store_install_allow_reason( 37 extensions::CrxInstaller::OffStoreInstallAllowedInTest); 38 39 observer_->Watch( 40 extensions::NOTIFICATION_CRX_INSTALLER_DONE, 41 content::Source<extensions::CrxInstaller>(installer.get())); 42 43 installer->InstallCrx(path); 44 observer_->Wait(); 45 46 size_t num_after = service->extensions()->size(); 47 EXPECT_EQ(num_before + 1, num_after); 48 49 extension_loaded_observer.Wait(); 50 const Extension* extension = service->GetExtensionById( 51 last_loaded_extension_id(), false); 52 EXPECT_TRUE(extension != NULL); 53 } 54 55 ExtensionService* GetExtensionService() { 56 return ExtensionSystem::Get(profile())->extension_service(); 57 } 58}; 59 60IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, 61 PRE_TestAdblockExtensionCrash) { 62 InstallExtensionSilently(GetExtensionService(), "adblock.crx"); 63} 64 65// Timing out on XP and Vista: http://crbug.com/387866 66#if defined(OS_WIN) 67#define MAYBE_TestAdblockExtensionCrash DISABLED_TestAdblockExtensionCrash 68#else 69#define MAYBE_TestAdblockExtensionCrash TestAdblockExtensionCrash 70#endif 71IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, 72 MAYBE_TestAdblockExtensionCrash) { 73 ExtensionService* service = GetExtensionService(); 74 // Verify that the extension is enabled and allowed in incognito 75 // is disabled. 76 EXPECT_TRUE(service->IsExtensionEnabled(last_loaded_extension_id())); 77 EXPECT_FALSE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile())); 78} 79 80// Failing on XP: http://crbug.com/389545 81#if defined(OS_WIN) 82#define MAYBE_TestSetExtensionsState DISABLED_TestSetExtensionsState 83#else 84#define MAYBE_TestSetExtensionsState TestSetExtensionsState 85#endif 86IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, MAYBE_TestSetExtensionsState) { 87 InstallExtensionSilently(GetExtensionService(), "google_talk.crx"); 88 89 // Disable the extension and verify. 90 util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), false); 91 ExtensionService* service = GetExtensionService(); 92 service->DisableExtension(last_loaded_extension_id(), 93 Extension::DISABLE_USER_ACTION); 94 EXPECT_FALSE(service->IsExtensionEnabled(last_loaded_extension_id())); 95 96 // Enable the extension and verify. 97 util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), false); 98 service->EnableExtension(last_loaded_extension_id()); 99 EXPECT_TRUE(service->IsExtensionEnabled(last_loaded_extension_id())); 100 101 // Allow extension in incognito mode and verify. 102 service->EnableExtension(last_loaded_extension_id()); 103 util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), true); 104 EXPECT_TRUE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile())); 105 106 // Disallow extension in incognito mode and verify. 107 service->EnableExtension(last_loaded_extension_id()); 108 util::SetIsIncognitoEnabled(last_loaded_extension_id(), profile(), false); 109 EXPECT_FALSE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile())); 110} 111} // namespace extensions 112