Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(178)

Side by Side Diff: chrome/browser/chromeos/lock_screen_apps/app_manager_impl_unittest.cc

Issue 2902293002: Introduce lock screen app manager (Closed)
Patch Set: . Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 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 "chrome/browser/chromeos/lock_screen_apps/app_manager_impl.h"
6
7 #include <memory>
8 #include <string>
9 #include <utility>
10 #include <vector>
11
12 #include "base/files/file_path.h"
13 #include "base/memory/ptr_util.h"
14 #include "base/test/scoped_command_line.h"
15 #include "base/values.h"
16 #include "chrome/browser/chromeos/arc/arc_session_manager.h"
17 #include "chrome/browser/chromeos/login/users/scoped_test_user_manager.h"
18 #include "chrome/browser/chromeos/note_taking_helper.h"
19 #include "chrome/browser/chromeos/settings/cros_settings.h"
20 #include "chrome/browser/chromeos/settings/device_settings_service.h"
21 #include "chrome/browser/extensions/extension_service.h"
22 #include "chrome/browser/extensions/test_extension_system.h"
23 #include "chrome/common/chrome_constants.h"
24 #include "chrome/common/pref_names.h"
25 #include "chrome/test/base/testing_browser_process.h"
26 #include "chrome/test/base/testing_profile.h"
27 #include "chrome/test/base/testing_profile_manager.h"
28 #include "components/arc/arc_service_manager.h"
29 #include "components/arc/arc_session.h"
30 #include "content/public/test/test_browser_thread_bundle.h"
31 #include "extensions/browser/event_router.h"
32 #include "extensions/browser/event_router_factory.h"
33 #include "extensions/browser/extension_prefs.h"
34 #include "extensions/browser/extension_registry.h"
35 #include "extensions/common/api/app_runtime.h"
36 #include "extensions/common/extension.h"
37 #include "extensions/common/extension_builder.h"
38 #include "extensions/common/value_builder.h"
39 #include "testing/gtest/include/gtest/gtest.h"
40
41 using extensions::DictionaryBuilder;
42 using extensions::ListBuilder;
43
44 namespace lock_screen_apps {
45 namespace {
46
47 std::unique_ptr<arc::ArcSession> ArcSessionFactory() {
48 ADD_FAILURE() << "Attempt to create arc session.";
49 return nullptr;
50 }
51
52 class TestEventRouter : public extensions::EventRouter {
53 public:
54 explicit TestEventRouter(content::BrowserContext* context)
55 : extensions::EventRouter(context,
56 extensions::ExtensionPrefs::Get(context)),
57 context_(context) {}
58 ~TestEventRouter() override = default;
59
60 bool ExtensionHasEventListener(const std::string& extension_id,
61 const std::string& event_name) const override {
62 return event_name == extensions::api::app_runtime::OnLaunched::kEventName;
63 }
64
65 void BroadcastEvent(std::unique_ptr<extensions::Event> event) override {}
66
67 void DispatchEventToExtension(
68 const std::string& extension_id,
69 std::unique_ptr<extensions::Event> event) override {
70 if (event->event_name !=
71 extensions::api::app_runtime::OnLaunched::kEventName) {
72 return;
73 }
74 ASSERT_TRUE(event->event_args);
75 const base::Value* arg_value = nullptr;
76 ASSERT_TRUE(event->event_args->Get(0, &arg_value));
77 ASSERT_TRUE(arg_value);
78 if (event->restrict_to_browser_context)
79 EXPECT_EQ(context_, event->restrict_to_browser_context);
80
81 std::unique_ptr<extensions::api::app_runtime::LaunchData> launch_data =
82 extensions::api::app_runtime::LaunchData::FromValue(*arg_value);
83 ASSERT_TRUE(launch_data);
84 ASSERT_TRUE(launch_data->action_data);
85 EXPECT_EQ(extensions::api::app_runtime::ACTION_TYPE_NEW_NOTE,
86 launch_data->action_data->action_type);
87
88 launched_apps_.push_back(extension_id);
89 }
90
91 const std::vector<std::string>& launched_apps() const {
92 return launched_apps_;
93 }
94
95 void ClearLaunchedApps() { launched_apps_.clear(); }
96
97 private:
98 std::vector<std::string> launched_apps_;
99 content::BrowserContext* context_;
100
101 DISALLOW_COPY_AND_ASSIGN(TestEventRouter);
102 };
103
104 std::unique_ptr<KeyedService> TestEventRouterFactoryFunction(
105 content::BrowserContext* profile) {
106 return base::MakeUnique<TestEventRouter>(profile);
107 }
108
109 class LockScreenAppManagerImplTest : public testing::Test {
110 public:
111 LockScreenAppManagerImplTest()
112 : profile_manager_(TestingBrowserProcess::GetGlobal()) {}
113
114 ~LockScreenAppManagerImplTest() override = default;
115
116 void SetUp() override {
117 // Initialize command line so chromeos::NoteTakingHelper thinks note taking
118 // on lock screen is enabled.
119 command_line_ = base::MakeUnique<base::test::ScopedCommandLine>();
120 command_line_->GetProcessCommandLine()->InitFromArgv(
121 {"", "--enable-lock-screen-apps", "--force-enable-stylus-tools"});
122
123 ASSERT_TRUE(profile_manager_.SetUp());
124
125 TestingProfile::Builder builder;
126 builder.SetPath(
127 profile_manager_.profiles_dir().AppendASCII(chrome::kInitialProfile));
128 signin_profile_ = builder.BuildIncognito(
129 profile_manager_.CreateTestingProfile(chrome::kInitialProfile));
130
131 InitExtensionSystem(profile());
132 InitExtensionSystem(signin_profile());
133
134 // Initialize arc session manager - NoteTakingHelper expects it to be set.
135 arc_session_manager_ = base::MakeUnique<arc::ArcSessionManager>(
136 base::MakeUnique<arc::ArcSessionRunner>(
137 base::Bind(&ArcSessionFactory)));
138
139 chromeos::NoteTakingHelper::Initialize();
140
141 ResetAppManager();
142 }
143
144 void TearDown() override {
145 extensions::ExtensionSystem::Get(profile())->Shutdown();
146 extensions::ExtensionSystem::Get(signin_profile())->Shutdown();
147 chromeos::NoteTakingHelper::Shutdown();
148 }
149
150 void InitExtensionSystem(Profile* profile) {
151 extensions::TestExtensionSystem* extension_system =
152 static_cast<extensions::TestExtensionSystem*>(
153 extensions::ExtensionSystem::Get(profile));
154 extension_system->CreateExtensionService(
155 base::CommandLine::ForCurrentProcess(),
156 base::FilePath() /* install_directory */,
157 false /* autoupdate_enabled */);
158 }
159
160 scoped_refptr<const extensions::Extension> CreateTestApp(
161 const std::string& id,
162 const std::string& version,
163 bool supports_lock_screen) {
164 DictionaryBuilder manifest_builder;
165 manifest_builder.Set("name", "Note taking app")
166 .Set("version", version)
167 .Set("manifest_version", 2)
168 .Set("app",
169 DictionaryBuilder()
170 .Set("background",
171 DictionaryBuilder()
172 .Set("scripts",
173 ListBuilder().Append("background.js").Build())
174 .Build())
175 .Build())
176 .Set("action_handlers",
177 ListBuilder()
178 .Append(DictionaryBuilder()
179 .Set("action", "new_note")
180 .SetBoolean("enabled_on_lock_screen",
181 supports_lock_screen)
182 .Build())
183 .Build());
184 return extensions::ExtensionBuilder()
185 .SetManifest(manifest_builder.Build())
186 .SetID(id)
187 .Build();
188 }
189
190 TestingProfile* CreateSecondaryProfile() {
191 TestingProfile* profile =
192 profile_manager_.CreateTestingProfile("secondary_profile");
193 InitExtensionSystem(profile);
194 return profile;
195 }
196
197 scoped_refptr<const extensions::Extension> AddTestAppWithLockScreenSupport(
198 Profile* profile,
199 const std::string& app_id,
200 const std::string& version,
201 bool enable_on_lock_screen) {
202 scoped_refptr<const extensions::Extension> app =
203 CreateTestApp(app_id, version, true /* supports_lock_screen*/);
204 extensions::ExtensionSystem::Get(profile)
205 ->extension_service()
206 ->AddExtension(app.get());
207
208 chromeos::NoteTakingHelper::Get()->SetPreferredApp(profile, app_id);
209 profile->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
210 enable_on_lock_screen);
211 return app;
212 }
213
214 void InitializeAndStartAppManager(Profile* profile) {
215 app_manager()->Initialize(profile, signin_profile());
216 app_manager()->Start(
217 base::Bind(&LockScreenAppManagerImplTest::OnNoteTakingChanged,
218 base::Unretained(this)));
219 }
220 TestingProfile* profile() { return &profile_; }
221 TestingProfile* signin_profile() { return signin_profile_; }
222
223 AppManager* app_manager() { return app_manager_.get(); }
224
225 void ResetAppManager() { app_manager_ = base::MakeUnique<AppManagerImpl>(); }
226
227 int note_taking_changed_count() const { return note_taking_changed_count_; }
228
229 void ResetNoteTakingChangedCount() { note_taking_changed_count_ = 0; }
230
231 private:
232 void OnNoteTakingChanged() { ++note_taking_changed_count_; }
233
234 std::unique_ptr<base::test::ScopedCommandLine> command_line_;
235 content::TestBrowserThreadBundle threads_;
236
237 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
238 chromeos::ScopedTestCrosSettings test_cros_settings_;
239 chromeos::ScopedTestUserManager user_manager_;
240
241 TestingProfileManager profile_manager_;
242 TestingProfile profile_;
243 TestingProfile* signin_profile_ = nullptr;
244
245 std::unique_ptr<arc::ArcServiceManager> arc_service_manager_;
246 std::unique_ptr<arc::ArcSessionManager> arc_session_manager_;
247
248 std::unique_ptr<AppManager> app_manager_;
249
250 int note_taking_changed_count_ = 0;
251
252 DISALLOW_COPY_AND_ASSIGN(LockScreenAppManagerImplTest);
253 };
254
255 } // namespace
256
257 TEST_F(LockScreenAppManagerImplTest, StartAddsAppToTarget) {
258 scoped_refptr<const extensions::Extension> note_taking_app =
259 AddTestAppWithLockScreenSupport(
260 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
261 true /* enable_on_lock_screen */);
262
263 InitializeAndStartAppManager(profile());
264
265 EXPECT_EQ(0, note_taking_changed_count());
266 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
267 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
268 app_manager()->GetNoteTakingAppId());
269
270 const extensions::Extension* lock_app =
271 extensions::ExtensionRegistry::Get(signin_profile())
272 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
273 extensions::ExtensionRegistry::ENABLED);
274 ASSERT_TRUE(lock_app);
275
276 app_manager()->Stop();
277 EXPECT_EQ(0, note_taking_changed_count());
278 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
279 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
280
281 lock_app =
282 extensions::ExtensionRegistry::Get(signin_profile())
283 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
284 extensions::ExtensionRegistry::EVERYTHING);
285 EXPECT_FALSE(lock_app);
286 }
287
288 TEST_F(LockScreenAppManagerImplTest, StartWhenLockScreenNotesNotEnabled) {
289 scoped_refptr<const extensions::Extension> note_taking_app =
290 AddTestAppWithLockScreenSupport(
291 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
292 false /* enable_on_lock_screen */);
293
294 InitializeAndStartAppManager(profile());
295
296 EXPECT_EQ(0, note_taking_changed_count());
297 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
298 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
299
300 const extensions::Extension* lock_app =
301 extensions::ExtensionRegistry::Get(signin_profile())
302 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
303 extensions::ExtensionRegistry::ENABLED);
304 EXPECT_FALSE(lock_app);
305
306 app_manager()->Stop();
307 EXPECT_EQ(0, note_taking_changed_count());
308 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
309 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
310
311 lock_app =
312 extensions::ExtensionRegistry::Get(signin_profile())
313 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
314 extensions::ExtensionRegistry::EVERYTHING);
315 EXPECT_FALSE(lock_app);
316 }
317
318 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingDisabledWhileStarted) {
319 scoped_refptr<const extensions::Extension> note_taking_app =
320 AddTestAppWithLockScreenSupport(
321 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
322 true /* enable_on_lock_screen */);
323
324 InitializeAndStartAppManager(profile());
325
326 EXPECT_EQ(0, note_taking_changed_count());
327 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
328 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
329 app_manager()->GetNoteTakingAppId());
330
331 const extensions::Extension* lock_app =
332 extensions::ExtensionRegistry::Get(signin_profile())
333 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
334 extensions::ExtensionRegistry::ENABLED);
335 ASSERT_TRUE(lock_app);
336
337 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
338 false);
339
340 EXPECT_EQ(1, note_taking_changed_count());
341 ResetNoteTakingChangedCount();
342 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
343 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
344 lock_app =
345 extensions::ExtensionRegistry::Get(signin_profile())
346 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
347 extensions::ExtensionRegistry::EVERYTHING);
348 EXPECT_FALSE(lock_app);
349
350 app_manager()->Stop();
351 EXPECT_EQ(0, note_taking_changed_count());
352 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
353 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
354 }
355
356 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingEnabledWhileStarted) {
357 scoped_refptr<const extensions::Extension> note_taking_app =
358 AddTestAppWithLockScreenSupport(
359 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
360 false /* enable_on_lock_screen */);
361
362 InitializeAndStartAppManager(profile());
363
364 EXPECT_EQ(0, note_taking_changed_count());
365 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
366 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
367
368 const extensions::Extension* lock_app =
369 extensions::ExtensionRegistry::Get(signin_profile())
370 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
371 extensions::ExtensionRegistry::EVERYTHING);
372 EXPECT_FALSE(lock_app);
373
374 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
375 true);
376
377 EXPECT_EQ(1, note_taking_changed_count());
378 ResetNoteTakingChangedCount();
379 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
380 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
381 app_manager()->GetNoteTakingAppId());
382
383 lock_app =
384 extensions::ExtensionRegistry::Get(signin_profile())
385 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
386 extensions::ExtensionRegistry::ENABLED);
387 ASSERT_TRUE(lock_app);
388
389 app_manager()->Stop();
390 EXPECT_EQ(0, note_taking_changed_count());
391 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
392 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
393 }
394
395 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingChangedWhileStarted) {
396 scoped_refptr<const extensions::Extension> dev_note_taking_app =
397 AddTestAppWithLockScreenSupport(
398 profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId, "1.0",
399 false /* enable_on_lock_screen */);
400
401 scoped_refptr<const extensions::Extension> prod_note_taking_app =
402 AddTestAppWithLockScreenSupport(
403 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
404 true /* enable_on_lock_screen */);
405
406 InitializeAndStartAppManager(profile());
407
408 EXPECT_EQ(0, note_taking_changed_count());
409 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
410 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
411 app_manager()->GetNoteTakingAppId());
412
413 const extensions::Extension* lock_app =
414 extensions::ExtensionRegistry::Get(signin_profile())
415 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
416 extensions::ExtensionRegistry::ENABLED);
417 ASSERT_TRUE(lock_app);
418
419 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
420 profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId);
421
422 EXPECT_EQ(1, note_taking_changed_count());
423 ResetNoteTakingChangedCount();
424
425 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
426 EXPECT_EQ(chromeos::NoteTakingHelper::kDevKeepExtensionId,
427 app_manager()->GetNoteTakingAppId());
428
429 // Verify prod app was unloaded from signin profile.
430 lock_app =
431 extensions::ExtensionRegistry::Get(signin_profile())
432 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
433 extensions::ExtensionRegistry::EVERYTHING);
434 EXPECT_FALSE(lock_app);
435
436 lock_app =
437 extensions::ExtensionRegistry::Get(signin_profile())
438 ->GetExtensionById(chromeos::NoteTakingHelper::kDevKeepExtensionId,
439 extensions::ExtensionRegistry::ENABLED);
440
441 ASSERT_TRUE(lock_app);
442
443 app_manager()->Stop();
444 EXPECT_EQ(0, note_taking_changed_count());
445 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
446 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
447 }
448
449 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingReloadedWhileStarted) {
450 scoped_refptr<const extensions::Extension> note_taking_app =
451 AddTestAppWithLockScreenSupport(
452 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
453 true /* enable_on_lock_screen */);
454
455 InitializeAndStartAppManager(profile());
456
457 EXPECT_EQ(0, note_taking_changed_count());
458 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
459 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
460 app_manager()->GetNoteTakingAppId());
461
462 const extensions::Extension* lock_app =
463 extensions::ExtensionRegistry::Get(signin_profile())
464 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
465 extensions::ExtensionRegistry::ENABLED);
466 ASSERT_TRUE(lock_app);
467 EXPECT_EQ("1.0", lock_app->VersionString());
468
469 extensions::ExtensionSystem::Get(profile())
470 ->extension_service()
471 ->UnloadExtension(chromeos::NoteTakingHelper::kProdKeepExtensionId,
472 extensions::UnloadedExtensionReason::UPDATE);
473
474 EXPECT_EQ(1, note_taking_changed_count());
475 ResetNoteTakingChangedCount();
476
477 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
478 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
479
480 // Verify prod app was unloaded from signin profile.
481 lock_app =
482 extensions::ExtensionRegistry::Get(signin_profile())
483 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
484 extensions::ExtensionRegistry::EVERYTHING);
485 EXPECT_FALSE(lock_app);
486
487 // Add the app again.
488 note_taking_app = CreateTestApp(
489 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1", true);
490 extensions::ExtensionSystem::Get(profile())
491 ->extension_service()
492 ->AddExtension(note_taking_app.get());
493
494 EXPECT_EQ(1, note_taking_changed_count());
495 ResetNoteTakingChangedCount();
496 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
497 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
498 app_manager()->GetNoteTakingAppId());
499
500 lock_app =
501 extensions::ExtensionRegistry::Get(signin_profile())
502 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
503 extensions::ExtensionRegistry::ENABLED);
504
505 ASSERT_TRUE(lock_app);
506 EXPECT_EQ("1.1", lock_app->VersionString());
507
508 app_manager()->Stop();
509 EXPECT_EQ(0, note_taking_changed_count());
510 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
511 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
512 }
513
514 TEST_F(LockScreenAppManagerImplTest, ReloadOldLockScreenApps) {
515 scoped_refptr<const extensions::Extension> note_taking_app =
516 AddTestAppWithLockScreenSupport(
517 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
518 true /* enable_on_lock_screen */);
519
520 InitializeAndStartAppManager(profile());
521
522 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
523 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
524 app_manager()->GetNoteTakingAppId());
525
526 const extensions::Extension* lock_app =
527 extensions::ExtensionRegistry::Get(signin_profile())
528 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
529 extensions::ExtensionRegistry::ENABLED);
530 ASSERT_TRUE(lock_app);
531 EXPECT_EQ("1.1", lock_app->VersionString());
532
533 ResetAppManager();
534 TestingProfile* secondary_profile = CreateSecondaryProfile();
535
536 scoped_refptr<const extensions::Extension> secondary_note_taking_app =
537 AddTestAppWithLockScreenSupport(
538 secondary_profile, chromeos::NoteTakingHelper::kProdKeepExtensionId,
539 "1.0", true /* enable_on_lock_screen */);
540
541 InitializeAndStartAppManager(secondary_profile);
542
543 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
544 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
545 app_manager()->GetNoteTakingAppId());
546 lock_app =
547 extensions::ExtensionRegistry::Get(signin_profile())
548 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
549 extensions::ExtensionRegistry::ENABLED);
550 ASSERT_TRUE(lock_app);
551 EXPECT_EQ("1.0", lock_app->VersionString());
552
553 app_manager()->Stop();
554 }
555
556 TEST_F(LockScreenAppManagerImplTest,
557 OverrideDisabledNonLockScreenSigninProfileApps) {
558 scoped_refptr<const extensions::Extension> signin_profile_note_taking_app =
559 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
560 true);
561 extensions::ExtensionSystem::Get(signin_profile())
562 ->extension_service()
563 ->AddExtension(signin_profile_note_taking_app.get());
564
565 scoped_refptr<const extensions::Extension> note_taking_app =
566 AddTestAppWithLockScreenSupport(
567 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
568 true /* enable_on_lock_screen */);
569
570 InitializeAndStartAppManager(profile());
571
572 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
573 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
574 app_manager()->GetNoteTakingAppId());
575
576 const extensions::Extension* lock_app =
577 extensions::ExtensionRegistry::Get(signin_profile())
578 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
579 extensions::ExtensionRegistry::ENABLED);
580 ASSERT_TRUE(lock_app);
581 EXPECT_EQ("1.1", lock_app->VersionString());
582
583 app_manager()->Stop();
584 }
585
586 TEST_F(LockScreenAppManagerImplTest, OverrideDisabledSigninProfileApps) {
587 scoped_refptr<const extensions::Extension> signin_profile_note_taking_app =
588 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
589 true);
590 extensions::ExtensionSystem::Get(signin_profile())
591 ->extension_service()
592 ->AddExtension(signin_profile_note_taking_app.get());
593 extensions::ExtensionSystem::Get(signin_profile())
594 ->extension_service()
595 ->DisableExtension(signin_profile_note_taking_app->id(),
596 extensions::Extension::DISABLE_USER_ACTION);
597
598 scoped_refptr<const extensions::Extension> note_taking_app =
599 AddTestAppWithLockScreenSupport(
600 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
601 true /* enable_on_lock_screen */);
602
603 InitializeAndStartAppManager(profile());
604
605 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
606 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
607 app_manager()->GetNoteTakingAppId());
608
609 const extensions::Extension* lock_app =
610 extensions::ExtensionRegistry::Get(signin_profile())
611 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
612 extensions::ExtensionRegistry::ENABLED);
613 ASSERT_TRUE(lock_app);
614 EXPECT_EQ("1.1", lock_app->VersionString());
615
616 app_manager()->Stop();
617 }
618
619 TEST_F(LockScreenAppManagerImplTest, ShutdownWhenStarted) {
620 scoped_refptr<const extensions::Extension> note_taking_app =
621 AddTestAppWithLockScreenSupport(
622 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
623 true /* enable_on_lock_screen */);
624
625 InitializeAndStartAppManager(profile());
626
627 const extensions::Extension* lock_app =
628 extensions::ExtensionRegistry::Get(signin_profile())
629 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
630 extensions::ExtensionRegistry::ENABLED);
631 EXPECT_TRUE(lock_app);
632 }
633
634 TEST_F(LockScreenAppManagerImplTest, LaunchAppWhenEnabled) {
635 TestEventRouter* event_router = static_cast<TestEventRouter*>(
636 extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse(
637 signin_profile()->GetOriginalProfile(),
638 &TestEventRouterFactoryFunction));
639 ASSERT_TRUE(event_router);
640
641 scoped_refptr<const extensions::Extension> note_taking_app =
642 AddTestAppWithLockScreenSupport(
643 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
644 true /* enable_on_lock_screen */);
645
646 InitializeAndStartAppManager(profile());
647
648 ASSERT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
649 app_manager()->GetNoteTakingAppId());
650
651 EXPECT_TRUE(app_manager()->LaunchNoteTaking());
652
653 ASSERT_EQ(1u, event_router->launched_apps().size());
654 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
655 event_router->launched_apps()[0]);
656 event_router->ClearLaunchedApps();
657
658 app_manager()->Stop();
659
660 EXPECT_FALSE(app_manager()->LaunchNoteTaking());
661 EXPECT_TRUE(event_router->launched_apps().empty());
662 }
663
664 TEST_F(LockScreenAppManagerImplTest, LaunchAppWhenNoLockScreenApp) {
665 TestEventRouter* event_router = static_cast<TestEventRouter*>(
666 extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse(
667 signin_profile()->GetOriginalProfile(),
668 &TestEventRouterFactoryFunction));
669 ASSERT_TRUE(event_router);
670
671 scoped_refptr<const extensions::Extension> note_taking_app =
672 AddTestAppWithLockScreenSupport(
673 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
674 false /* enable_on_lock_screen */);
675
676 InitializeAndStartAppManager(profile());
677
678 EXPECT_FALSE(app_manager()->LaunchNoteTaking());
679 EXPECT_TRUE(event_router->launched_apps().empty());
680
681 app_manager()->Stop();
682 EXPECT_FALSE(app_manager()->LaunchNoteTaking());
683 EXPECT_TRUE(event_router->launched_apps().empty());
684 }
685
686 } // namespace lock_screen_apps
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698