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