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