• 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/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:
InstallExtensionSilently(ExtensionService * service,const char * filename)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 
IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,PRE_TestAdblockExtensionCrash)55 IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,
56                        PRE_TestAdblockExtensionCrash) {
57   ExtensionService* service = profile()->GetExtensionService();
58   InstallExtensionSilently(service, "adblock.crx");
59 }
60 
IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,TestAdblockExtensionCrash)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 
IN_PROC_BROWSER_TEST_F(ExtensionFunctionalTest,TestSetExtensionsState)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