Home | History | Annotate | Download | only in activity_log
      1 // Copyright 2013 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 "base/command_line.h"
      6 #include "base/run_loop.h"
      7 #include "chrome/browser/extensions/activity_log/activity_log.h"
      8 #include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h"
      9 #include "chrome/browser/extensions/extension_service.h"
     10 #include "chrome/browser/extensions/test_extension_system.h"
     11 #include "chrome/common/chrome_switches.h"
     12 #include "chrome/common/pref_names.h"
     13 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
     14 #include "chrome/test/base/testing_profile.h"
     15 #include "extensions/common/extension_builder.h"
     16 
     17 #if defined OS_CHROMEOS
     18 #include "chrome/browser/chromeos/login/user_manager.h"
     19 #include "chrome/browser/chromeos/settings/cros_settings.h"
     20 #include "chrome/browser/chromeos/settings/device_settings_service.h"
     21 #endif
     22 
     23 namespace extensions {
     24 
     25 const char* kExtensionID = "abjoigjokfeibfhiahiijggogladbmfm";
     26 
     27 class ActivityLogEnabledTest : public ChromeRenderViewHostTestHarness {
     28  protected:
     29   virtual void SetUp() OVERRIDE {
     30     ChromeRenderViewHostTestHarness::SetUp();
     31 #if defined OS_CHROMEOS
     32     test_user_manager_.reset(new chromeos::ScopedTestUserManager());
     33 #endif
     34   }
     35 
     36   virtual void TearDown() OVERRIDE {
     37 #if defined OS_CHROMEOS
     38     test_user_manager_.reset();
     39 #endif
     40     ChromeRenderViewHostTestHarness::TearDown();
     41   }
     42 
     43 #if defined OS_CHROMEOS
     44   chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
     45   chromeos::ScopedTestCrosSettings test_cros_settings_;
     46   scoped_ptr<chromeos::ScopedTestUserManager> test_user_manager_;
     47 #endif
     48 };
     49 
     50 TEST_F(ActivityLogEnabledTest, NoSwitch) {
     51   scoped_ptr<TestingProfile> profile(
     52     static_cast<TestingProfile*>(CreateBrowserContext()));
     53   EXPECT_FALSE(
     54       profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
     55 
     56   ActivityLog* activity_log = ActivityLog::GetInstance(profile.get());
     57 
     58   EXPECT_EQ(0,
     59     profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
     60   EXPECT_FALSE(activity_log->IsDatabaseEnabled());
     61   EXPECT_FALSE(activity_log->IsWatchdogAppActive());
     62 }
     63 
     64 TEST_F(ActivityLogEnabledTest, CommandLineSwitch) {
     65   scoped_ptr<TestingProfile> profile1(
     66     static_cast<TestingProfile*>(CreateBrowserContext()));
     67   scoped_ptr<TestingProfile> profile2(
     68     static_cast<TestingProfile*>(CreateBrowserContext()));
     69 
     70   CommandLine command_line(CommandLine::NO_PROGRAM);
     71   CommandLine saved_cmdline_ = *CommandLine::ForCurrentProcess();
     72   CommandLine::ForCurrentProcess()->AppendSwitch(
     73       switches::kEnableExtensionActivityLogging);
     74   ActivityLog* activity_log1 = ActivityLog::GetInstance(profile1.get());
     75   *CommandLine::ForCurrentProcess() = saved_cmdline_;
     76   ActivityLog* activity_log2 = ActivityLog::GetInstance(profile2.get());
     77 
     78   EXPECT_EQ(0,
     79       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
     80   EXPECT_EQ(0,
     81       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
     82   EXPECT_TRUE(activity_log1->IsDatabaseEnabled());
     83   EXPECT_FALSE(activity_log2->IsDatabaseEnabled());
     84   EXPECT_FALSE(activity_log1->IsWatchdogAppActive());
     85   EXPECT_FALSE(activity_log2->IsWatchdogAppActive());
     86 }
     87 
     88 TEST_F(ActivityLogEnabledTest, PrefSwitch) {
     89   scoped_ptr<TestingProfile> profile1(
     90     static_cast<TestingProfile*>(CreateBrowserContext()));
     91   scoped_ptr<TestingProfile> profile2(
     92     static_cast<TestingProfile*>(CreateBrowserContext()));
     93   scoped_ptr<TestingProfile> profile3(
     94     static_cast<TestingProfile*>(CreateBrowserContext()));
     95 
     96   EXPECT_EQ(0,
     97       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
     98   EXPECT_EQ(0,
     99       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    100   EXPECT_EQ(0,
    101       profile3->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    102 
    103   profile1->GetPrefs()->SetInteger(prefs::kWatchdogExtensionActive, 1);
    104   profile3->GetPrefs()->SetInteger(prefs::kWatchdogExtensionActive, 2);
    105   ActivityLog* activity_log1 = ActivityLog::GetInstance(profile1.get());
    106   ActivityLog* activity_log2 = ActivityLog::GetInstance(profile2.get());
    107   ActivityLog* activity_log3 = ActivityLog::GetInstance(profile3.get());
    108 
    109   EXPECT_EQ(1,
    110       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    111   EXPECT_EQ(0,
    112       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    113   EXPECT_EQ(2,
    114       profile3->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    115   EXPECT_TRUE(activity_log1->IsWatchdogAppActive());
    116   EXPECT_FALSE(activity_log2->IsWatchdogAppActive());
    117   EXPECT_TRUE(activity_log3->IsWatchdogAppActive());
    118   EXPECT_TRUE(activity_log1->IsDatabaseEnabled());
    119   EXPECT_FALSE(activity_log2->IsDatabaseEnabled());
    120   EXPECT_TRUE(activity_log3->IsDatabaseEnabled());
    121 }
    122 
    123 TEST_F(ActivityLogEnabledTest, WatchdogSwitch) {
    124   CommandLine command_line(CommandLine::NO_PROGRAM);
    125   scoped_ptr<TestingProfile> profile1(
    126     static_cast<TestingProfile*>(CreateBrowserContext()));
    127   scoped_ptr<TestingProfile> profile2(
    128     static_cast<TestingProfile*>(CreateBrowserContext()));
    129   // Extension service is destroyed by the profile.
    130   ExtensionService* extension_service1 =
    131     static_cast<TestExtensionSystem*>(
    132         ExtensionSystem::Get(profile1.get()))->CreateExtensionService(
    133             &command_line, base::FilePath(), false);
    134   static_cast<TestExtensionSystem*>(
    135       ExtensionSystem::Get(profile1.get()))->SetReady();
    136 
    137   ActivityLog* activity_log1 = ActivityLog::GetInstance(profile1.get());
    138   ActivityLog* activity_log2 = ActivityLog::GetInstance(profile2.get());
    139 
    140   // Allow Activity Log to install extension tracker.
    141   base::RunLoop().RunUntilIdle();
    142 
    143   EXPECT_EQ(0,
    144       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    145   EXPECT_EQ(0,
    146       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    147 
    148   scoped_refptr<Extension> extension =
    149       ExtensionBuilder()
    150           .SetManifest(DictionaryBuilder()
    151                        .Set("name", "Watchdog Extension ")
    152                        .Set("version", "1.0.0")
    153                        .Set("manifest_version", 2))
    154           .SetID(kExtensionID)
    155           .Build();
    156   extension_service1->AddExtension(extension.get());
    157 
    158   EXPECT_EQ(1,
    159       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    160   EXPECT_EQ(0,
    161       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    162   EXPECT_TRUE(activity_log1->IsWatchdogAppActive());
    163   EXPECT_FALSE(activity_log2->IsWatchdogAppActive());
    164   EXPECT_TRUE(activity_log1->IsDatabaseEnabled());
    165   EXPECT_FALSE(activity_log2->IsDatabaseEnabled());
    166 
    167   extension_service1->DisableExtension(kExtensionID,
    168                                        Extension::DISABLE_USER_ACTION);
    169 
    170   EXPECT_EQ(0,
    171       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    172   EXPECT_EQ(0,
    173       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    174   EXPECT_FALSE(activity_log1->IsWatchdogAppActive());
    175   EXPECT_FALSE(activity_log2->IsWatchdogAppActive());
    176   EXPECT_FALSE(activity_log1->IsDatabaseEnabled());
    177   EXPECT_FALSE(activity_log2->IsDatabaseEnabled());
    178 
    179   extension_service1->EnableExtension(kExtensionID);
    180 
    181   EXPECT_EQ(1,
    182       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    183   EXPECT_EQ(0,
    184       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    185   EXPECT_TRUE(activity_log1->IsWatchdogAppActive());
    186   EXPECT_FALSE(activity_log2->IsWatchdogAppActive());
    187   EXPECT_TRUE(activity_log1->IsDatabaseEnabled());
    188   EXPECT_FALSE(activity_log2->IsDatabaseEnabled());
    189 
    190   extension_service1->UninstallExtension(kExtensionID, false, NULL);
    191 
    192   EXPECT_EQ(0,
    193       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    194   EXPECT_EQ(0,
    195       profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    196   EXPECT_FALSE(activity_log1->IsWatchdogAppActive());
    197   EXPECT_FALSE(activity_log2->IsWatchdogAppActive());
    198   EXPECT_FALSE(activity_log1->IsDatabaseEnabled());
    199   EXPECT_FALSE(activity_log2->IsDatabaseEnabled());
    200 
    201   scoped_refptr<Extension> extension2 =
    202       ExtensionBuilder()
    203           .SetManifest(DictionaryBuilder()
    204                        .Set("name", "Watchdog Extension ")
    205                        .Set("version", "1.0.0")
    206                        .Set("manifest_version", 2))
    207           .SetID("fpofdchlamddhnajleknffcbmnjfahpg")
    208           .Build();
    209   extension_service1->AddExtension(extension.get());
    210   extension_service1->AddExtension(extension2.get());
    211   EXPECT_EQ(2,
    212       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    213   EXPECT_TRUE(activity_log1->IsDatabaseEnabled());
    214   extension_service1->DisableExtension(kExtensionID,
    215                                        Extension::DISABLE_USER_ACTION);
    216   extension_service1->DisableExtension("fpofdchlamddhnajleknffcbmnjfahpg",
    217                                        Extension::DISABLE_USER_ACTION);
    218   EXPECT_EQ(0,
    219       profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    220   EXPECT_FALSE(activity_log1->IsDatabaseEnabled());
    221 }
    222 
    223 TEST_F(ActivityLogEnabledTest, AppAndCommandLine) {
    224   // Set the command line switch.
    225   CommandLine command_line(CommandLine::NO_PROGRAM);
    226   CommandLine saved_cmdline_ = *CommandLine::ForCurrentProcess();
    227   CommandLine::ForCurrentProcess()->AppendSwitch(
    228       switches::kEnableExtensionActivityLogging);
    229 
    230   scoped_ptr<TestingProfile> profile(
    231     static_cast<TestingProfile*>(CreateBrowserContext()));
    232   // Extension service is destroyed by the profile.
    233   ExtensionService* extension_service =
    234     static_cast<TestExtensionSystem*>(
    235         ExtensionSystem::Get(profile.get()))->CreateExtensionService(
    236             &command_line, base::FilePath(), false);
    237   static_cast<TestExtensionSystem*>(
    238       ExtensionSystem::Get(profile.get()))->SetReady();
    239 
    240   ActivityLog* activity_log = ActivityLog::GetInstance(profile.get());
    241   // Allow Activity Log to install extension tracker.
    242   base::RunLoop().RunUntilIdle();
    243 
    244   EXPECT_TRUE(activity_log->IsDatabaseEnabled());
    245   EXPECT_EQ(0,
    246       profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    247   EXPECT_FALSE(activity_log->IsWatchdogAppActive());
    248 
    249   // Enable the extension.
    250   scoped_refptr<Extension> extension =
    251       ExtensionBuilder()
    252           .SetManifest(DictionaryBuilder()
    253                        .Set("name", "Watchdog Extension ")
    254                        .Set("version", "1.0.0")
    255                        .Set("manifest_version", 2))
    256           .SetID(kExtensionID)
    257           .Build();
    258   extension_service->AddExtension(extension.get());
    259 
    260   EXPECT_TRUE(activity_log->IsDatabaseEnabled());
    261   EXPECT_EQ(1,
    262       profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    263   EXPECT_TRUE(activity_log->IsWatchdogAppActive());
    264 
    265   extension_service->UninstallExtension(kExtensionID, false, NULL);
    266 
    267   EXPECT_TRUE(activity_log->IsDatabaseEnabled());
    268   EXPECT_EQ(0,
    269       profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive));
    270   EXPECT_FALSE(activity_log->IsWatchdogAppActive());
    271 
    272   // Cleanup.
    273   *CommandLine::ForCurrentProcess() = saved_cmdline_;
    274 }
    275 
    276 } // namespace extensions
    277