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.
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"
16 namespace extensions
{
18 class ExtensionFunctionalTest
: public ExtensionBrowserTest
{
20 void InstallExtensionSilently(ExtensionService
* service
,
21 const char* filename
) {
22 service
->set_show_extensions_prompts(false);
23 size_t num_before
= service
->extensions()->size();
25 base::FilePath path
= test_data_dir_
.AppendASCII(filename
);
27 content::WindowedNotificationObserver
extension_loaded_observer(
28 extensions::NOTIFICATION_EXTENSION_LOADED_DEPRECATED
,
29 content::NotificationService::AllSources());
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
);
40 extensions::NOTIFICATION_CRX_INSTALLER_DONE
,
41 content::Source
<extensions::CrxInstaller
>(installer
.get()));
43 installer
->InstallCrx(path
);
46 size_t num_after
= service
->extensions()->size();
47 EXPECT_EQ(num_before
+ 1, num_after
);
49 extension_loaded_observer
.Wait();
50 const Extension
* extension
= service
->GetExtensionById(
51 last_loaded_extension_id(), false);
52 EXPECT_TRUE(extension
!= NULL
);
55 ExtensionService
* GetExtensionService() {
56 return ExtensionSystem::Get(profile())->extension_service();
60 IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest
,
61 PRE_TestAdblockExtensionCrash
) {
62 InstallExtensionSilently(GetExtensionService(), "adblock.crx");
65 // Timing out on XP and Vista: http://crbug.com/387866
67 #define MAYBE_TestAdblockExtensionCrash DISABLED_TestAdblockExtensionCrash
69 #define MAYBE_TestAdblockExtensionCrash TestAdblockExtensionCrash
71 IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest
,
72 MAYBE_TestAdblockExtensionCrash
) {
73 ExtensionService
* service
= GetExtensionService();
74 // Verify that the extension is enabled and allowed in incognito
76 EXPECT_TRUE(service
->IsExtensionEnabled(last_loaded_extension_id()));
77 EXPECT_FALSE(util::IsIncognitoEnabled(last_loaded_extension_id(), profile()));
80 // Failing on XP: http://crbug.com/389545
82 #define MAYBE_TestSetExtensionsState DISABLED_TestSetExtensionsState
84 #define MAYBE_TestSetExtensionsState TestSetExtensionsState
86 IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest
, MAYBE_TestSetExtensionsState
) {
87 InstallExtensionSilently(GetExtensionService(), "google_talk.crx");
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()));
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()));
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()));
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()));
111 } // namespace extensions