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) 57dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch#include "chrome/browser/chrome_notification_types.h" 6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/crx_installer.h" 7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_browsertest.h" 8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/extensions/extension_service.h" 98bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/browser/extensions/extension_util.h" 10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/profiles/profile.h" 11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/browser/ui/browser_commands.h" 12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h" 137d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)#include "content/public/browser/notification_service.h" 14c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions { 16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)class ExtensionFunctionalTest : public ExtensionBrowserTest { 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)public: 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) void InstallExtensionSilently(ExtensionService* service, 20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const char* filename) { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) service->set_show_extensions_prompts(false); 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t num_before = service->extensions()->size(); 23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) base::FilePath path = test_data_dir_.AppendASCII(filename); 25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 26c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::WindowedNotificationObserver extension_loaded_observer( 27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) chrome::NOTIFICATION_EXTENSION_LOADED, 28c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) content::NotificationService::AllSources()); 29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) scoped_refptr<extensions::CrxInstaller> installer( 31ba5b9a6411cb1792fd21f0a078d7a25cd1ceec16Ben Murdoch extensions::CrxInstaller::CreateSilent(service)); 32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_is_gallery_install(false); 33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_allow_silent_install(true); 34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_install_source(Manifest::INTERNAL); 35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->set_off_store_install_allow_reason( 36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extensions::CrxInstaller::OffStoreInstallAllowedInTest); 37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 388bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) observer_->Watch( 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) chrome::NOTIFICATION_CRX_INSTALLER_DONE, 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) content::Source<extensions::CrxInstaller>(installer.get())); 41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) installer->InstallCrx(path); 438bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) observer_->Wait(); 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) size_t num_after = service->extensions()->size(); 46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_EQ(num_before + 1, num_after); 47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) extension_loaded_observer.Wait(); 49c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) const Extension* extension = service->GetExtensionById( 508bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id(), false); 51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) EXPECT_TRUE(extension != NULL); 52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) } 53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}; 54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 553240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, 563240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch PRE_TestAdblockExtensionCrash) { 57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionService* service = profile()->GetExtensionService(); 58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InstallExtensionSilently(service, "adblock.crx"); 593240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch} 60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 613240926e260ce088908e02ac07a6cf7b0c0cbf44Ben MurdochIN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, TestAdblockExtensionCrash) { 623240926e260ce088908e02ac07a6cf7b0c0cbf44Ben Murdoch ExtensionService* service = profile()->GetExtensionService(); 63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Verify that the extension is enabled and allowed in incognito 64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // is disabled. 658bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(service->IsExtensionEnabled(last_loaded_extension_id())); 668bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE( 678bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::IsIncognitoEnabled(last_loaded_extension_id(), service)); 68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 69c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 70c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest, TestSetExtensionsState) { 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) ExtensionService* service = profile()->GetExtensionService(); 72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) InstallExtensionSilently(service, "google_talk.crx"); 73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disable the extension and verify. 758bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::SetIsIncognitoEnabled( 768bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id(), service, false); 778bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->DisableExtension(last_loaded_extension_id(), 78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) Extension::DISABLE_USER_ACTION); 798bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE(service->IsExtensionEnabled(last_loaded_extension_id())); 80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Enable the extension and verify. 828bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::SetIsIncognitoEnabled( 838bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id(), service, false); 848bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->EnableExtension(last_loaded_extension_id()); 858bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE(service->IsExtensionEnabled(last_loaded_extension_id())); 86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Allow extension in incognito mode and verify. 888bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->EnableExtension(last_loaded_extension_id()); 898bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::SetIsIncognitoEnabled( 908bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id(), service, true); 918bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_TRUE( 928bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::IsIncognitoEnabled(last_loaded_extension_id(), service)); 93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) // Disallow extension in incognito mode and verify. 958bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) service->EnableExtension(last_loaded_extension_id()); 968bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::SetIsIncognitoEnabled( 978bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) last_loaded_extension_id(), service, false); 988bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) EXPECT_FALSE( 998bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles) extension_util::IsIncognitoEnabled(last_loaded_extension_id(), service)); 100c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} 101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)} // namespace extensions 102