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