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