• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
16 namespace extensions {
17 
18 class ExtensionFunctionalTest : public ExtensionBrowserTest {
19  public:
InstallExtensionSilently(ExtensionService * service,const char * filename)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 
GetExtensionService()55   ExtensionService* GetExtensionService() {
56     return ExtensionSystem::Get(profile())->extension_service();
57   }
58 };
59 
IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,PRE_TestAdblockExtensionCrash)60 IN_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
IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,MAYBE_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
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
IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,MAYBE_TestSetExtensionsState)86 IN_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