1ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Copyright 2013 The Chromium Authors. All rights reserved. 2ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// Use of this source code is governed by a BSD-style license that can be 3ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown// found in the LICENSE file. 4ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 5ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "base/command_line.h" 6ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "base/prefs/pref_service.h" 7ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "base/run_loop.h" 8ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/browser/extensions/activity_log/activity_log.h" 9ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/browser/extensions/api/activity_log_private/activity_log_private_api.h" 10436e89c602e787e7a27dd6624b09beed41a0da8aDmitriy Ivanov#include "chrome/browser/extensions/extension_service.h" 11ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/browser/extensions/test_extension_system.h" 12ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/common/chrome_switches.h" 13ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/common/pref_names.h" 14ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/test/base/chrome_render_view_host_test_harness.h" 15ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/test/base/testing_profile.h" 16ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "extensions/browser/uninstall_reason.h" 17ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "extensions/common/extension_builder.h" 18ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 19ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined OS_CHROMEOS 20ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h" 21ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/browser/chromeos/settings/cros_settings.h" 22ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#include "chrome/browser/chromeos/settings/device_settings_service.h" 23ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 24ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 25ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownnamespace extensions { 26ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 27ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownconst char* kExtensionID = "abjoigjokfeibfhiahiijggogladbmfm"; 28ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 29ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brownclass ActivityLogEnabledTest : public ChromeRenderViewHostTestHarness { 30ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown protected: 31ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void SetUp() OVERRIDE { 32ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ChromeRenderViewHostTestHarness::SetUp(); 33b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov#if defined OS_CHROMEOS 34ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_user_manager_.reset(new chromeos::ScopedTestUserManager()); 35ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 36b32f58018498ea2225959b0ba11c18f0c433deefEvgeniy Stepanov } 37ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 38ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown virtual void TearDown() OVERRIDE { 39ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined OS_CHROMEOS 40ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown test_user_manager_.reset(); 41ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 42ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ChromeRenderViewHostTestHarness::TearDown(); 43ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown } 44ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 45ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#if defined OS_CHROMEOS 46ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown chromeos::ScopedTestDeviceSettingsService test_device_settings_service_; 47ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown chromeos::ScopedTestCrosSettings test_cros_settings_; 48ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<chromeos::ScopedTestUserManager> test_user_manager_; 49ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown#endif 50ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown}; 51ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 52ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownTEST_F(ActivityLogEnabledTest, NoSwitch) { 53ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile( 54ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 55ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE( 56ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 57ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 58ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ActivityLog* activity_log = ActivityLog::GetInstance(profile.get()); 59ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 60ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 61ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 62ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log->IsDatabaseEnabled()); 63ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log->IsWatchdogAppActive()); 64ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 65ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 66ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownTEST_F(ActivityLogEnabledTest, CommandLineSwitch) { 67ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile1( 68ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 69ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile2( 70ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 71ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 72ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine command_line(CommandLine::NO_PROGRAM); 73ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine saved_cmdline_ = *CommandLine::ForCurrentProcess(); 74ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine::ForCurrentProcess()->AppendSwitch( 75ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switches::kEnableExtensionActivityLogging); 76ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ActivityLog* activity_log1 = ActivityLog::GetInstance(profile1.get()); 77ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *CommandLine::ForCurrentProcess() = saved_cmdline_; 78ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ActivityLog* activity_log2 = ActivityLog::GetInstance(profile2.get()); 79ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 80ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 81ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 82ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 83ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 84ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log1->IsDatabaseEnabled()); 85ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsDatabaseEnabled()); 86ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log1->IsWatchdogAppActive()); 87ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsWatchdogAppActive()); 88ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 89ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 90ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownTEST_F(ActivityLogEnabledTest, PrefSwitch) { 91ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile1( 92ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 93ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile2( 94ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 95ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile3( 96ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 97ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 98ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 99ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 100663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(0, 101663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 102663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(0, 103663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile3->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 104663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 105663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile1->GetPrefs()->SetInteger(prefs::kWatchdogExtensionActive, 1); 106663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile3->GetPrefs()->SetInteger(prefs::kWatchdogExtensionActive, 2); 107663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ActivityLog* activity_log1 = ActivityLog::GetInstance(profile1.get()); 108663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ActivityLog* activity_log2 = ActivityLog::GetInstance(profile2.get()); 109663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng ActivityLog* activity_log3 = ActivityLog::GetInstance(profile3.get()); 110663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 111663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(1, 112663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 113663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(0, 114663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 115663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(2, 116663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile3->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 117ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log1->IsWatchdogAppActive()); 118ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsWatchdogAppActive()); 119ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log3->IsWatchdogAppActive()); 120ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log1->IsDatabaseEnabled()); 121ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsDatabaseEnabled()); 122ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log3->IsDatabaseEnabled()); 123ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 124ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 125ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownTEST_F(ActivityLogEnabledTest, WatchdogSwitch) { 126ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine command_line(CommandLine::NO_PROGRAM); 127ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile1( 128ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 129ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile2( 130ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 131ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Extension service is destroyed by the profile. 132ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionService* extension_service1 = 133ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestExtensionSystem*>( 134ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionSystem::Get(profile1.get()))->CreateExtensionService( 135ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &command_line, base::FilePath(), false); 136ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestExtensionSystem*>( 137ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionSystem::Get(profile1.get()))->SetReady(); 138ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 139ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ActivityLog* activity_log1 = ActivityLog::GetInstance(profile1.get()); 140ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ActivityLog* activity_log2 = ActivityLog::GetInstance(profile2.get()); 141ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 142ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Allow Activity Log to install extension tracker. 143ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base::RunLoop().RunUntilIdle(); 144ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 145ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 146ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 147ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 148ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 149ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 150ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_refptr<Extension> extension = 151ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionBuilder() 152ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .SetManifest(DictionaryBuilder() 153ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("name", "Watchdog Extension ") 154ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("version", "1.0.0") 155ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("manifest_version", 2)) 156ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .SetID(kExtensionID) 157ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Build(); 158ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service1->AddExtension(extension.get()); 159ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 160ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(1, 161ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 162ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 163ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 164ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log1->IsWatchdogAppActive()); 165ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsWatchdogAppActive()); 166ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log1->IsDatabaseEnabled()); 167ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsDatabaseEnabled()); 168ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 169ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service1->DisableExtension(kExtensionID, 170ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Extension::DISABLE_USER_ACTION); 171ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 172ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 173ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 174ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 175ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 176ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log1->IsWatchdogAppActive()); 177663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_FALSE(activity_log2->IsWatchdogAppActive()); 178663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_FALSE(activity_log1->IsDatabaseEnabled()); 179663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_FALSE(activity_log2->IsDatabaseEnabled()); 180663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 181663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng extension_service1->EnableExtension(kExtensionID); 182663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 183663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(1, 184663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 185663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_EQ(0, 186663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 187663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_TRUE(activity_log1->IsWatchdogAppActive()); 188663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_FALSE(activity_log2->IsWatchdogAppActive()); 189663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_TRUE(activity_log1->IsDatabaseEnabled()); 190663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng EXPECT_FALSE(activity_log2->IsDatabaseEnabled()); 191663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng 192663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng extension_service1->UninstallExtension( 193663860b1408516d02ebfcb3a9999a134e6cfb223Ben Cheng kExtensionID, 194ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extensions::UNINSTALL_REASON_FOR_TESTING, 195ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base::Bind(&base::DoNothing), 196ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL); 197ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 198ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 199ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 200ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 201ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile2->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 202ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log1->IsWatchdogAppActive()); 203ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsWatchdogAppActive()); 204ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log1->IsDatabaseEnabled()); 205ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log2->IsDatabaseEnabled()); 206ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 207ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_refptr<Extension> extension2 = 208ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionBuilder() 209ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .SetManifest(DictionaryBuilder() 210ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("name", "Watchdog Extension ") 211ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("version", "1.0.0") 212ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("manifest_version", 2)) 213ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .SetID("fpofdchlamddhnajleknffcbmnjfahpg") 214ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Build(); 215ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service1->AddExtension(extension.get()); 216ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service1->AddExtension(extension2.get()); 217ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(2, 218ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 219ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log1->IsDatabaseEnabled()); 220ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service1->DisableExtension(kExtensionID, 221ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Extension::DISABLE_USER_ACTION); 222ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service1->DisableExtension("fpofdchlamddhnajleknffcbmnjfahpg", 223ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown Extension::DISABLE_USER_ACTION); 224ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 225ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile1->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 226ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log1->IsDatabaseEnabled()); 227ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 228ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 229ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff BrownTEST_F(ActivityLogEnabledTest, AppAndCommandLine) { 230ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Set the command line switch. 231ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine command_line(CommandLine::NO_PROGRAM); 232ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine saved_cmdline_ = *CommandLine::ForCurrentProcess(); 233ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown CommandLine::ForCurrentProcess()->AppendSwitch( 234ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown switches::kEnableExtensionActivityLogging); 235ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 236ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_ptr<TestingProfile> profile( 237ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestingProfile*>(CreateBrowserContext())); 238ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Extension service is destroyed by the profile. 239ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionService* extension_service = 240ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestExtensionSystem*>( 241ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionSystem::Get(profile.get()))->CreateExtensionService( 242ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown &command_line, base::FilePath(), false); 243ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown static_cast<TestExtensionSystem*>( 244ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionSystem::Get(profile.get()))->SetReady(); 245ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 246ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ActivityLog* activity_log = ActivityLog::GetInstance(profile.get()); 247ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Allow Activity Log to install extension tracker. 248ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base::RunLoop().RunUntilIdle(); 249ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 250ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log->IsDatabaseEnabled()); 251ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 252ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 253ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log->IsWatchdogAppActive()); 254ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 255ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Enable the extension. 256ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown scoped_refptr<Extension> extension = 257ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown ExtensionBuilder() 258ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .SetManifest(DictionaryBuilder() 259ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("name", "Watchdog Extension ") 260ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("version", "1.0.0") 261ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Set("manifest_version", 2)) 262ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .SetID(kExtensionID) 263ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown .Build(); 264ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service->AddExtension(extension.get()); 265ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 266ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log->IsDatabaseEnabled()); 267ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(1, 268ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 269ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log->IsWatchdogAppActive()); 270ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 271ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extension_service->UninstallExtension( 272ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown kExtensionID, 273ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown extensions::UNINSTALL_REASON_FOR_TESTING, 274ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown base::Bind(&base::DoNothing), 275ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown NULL); 276ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 277ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_TRUE(activity_log->IsDatabaseEnabled()); 278ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_EQ(0, 279ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown profile->GetPrefs()->GetInteger(prefs::kWatchdogExtensionActive)); 280ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown EXPECT_FALSE(activity_log->IsWatchdogAppActive()); 281ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 282ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown // Cleanup. 283ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown *CommandLine::ForCurrentProcess() = saved_cmdline_; 284ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} 285ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown 286ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown} // namespace extensions 287ed07e00d438c74b7a23c01bfffde77e3968305e4Jeff Brown