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

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, 7 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 TestAppManagerObserver : public AppManager::Observer {
110 public:
111 TestAppManagerObserver() = default;
112 ~TestAppManagerObserver() override = default;
113
114 void OnNoteTakingAvailabilityChanged() override {
115 ++availability_changed_count_;
116 }
117
118 int availability_changed_count() const { return availability_changed_count_; }
119
120 void ResetAvailabilityChangedCount() { availability_changed_count_ = 0; }
121
122 private:
123 int availability_changed_count_ = 0;
124
125 DISALLOW_COPY_AND_ASSIGN(TestAppManagerObserver);
126 };
127
128 class LockScreenAppManagerImplTest : public testing::Test {
129 public:
130 LockScreenAppManagerImplTest()
131 : profile_manager_(TestingBrowserProcess::GetGlobal()) {}
132
133 ~LockScreenAppManagerImplTest() override = default;
134
135 void SetUp() override {
136 // Initialize command line so chromeos::NoteTakingHelper thinks note taking
137 // on lock screen is enabled.
138 command_line_ = base::MakeUnique<base::test::ScopedCommandLine>();
139 command_line_->GetProcessCommandLine()->InitFromArgv(
140 {"", "--enable-lock-screen-apps", "--force-enable-stylus-tools"});
141
142 ASSERT_TRUE(profile_manager_.SetUp());
143
144 TestingProfile::Builder builder;
145 builder.SetPath(
146 profile_manager_.profiles_dir().AppendASCII(chrome::kInitialProfile));
147 signin_profile_ = builder.BuildIncognito(
148 profile_manager_.CreateTestingProfile(chrome::kInitialProfile));
149
150 InitExtensionSystem(profile());
151 InitExtensionSystem(signin_profile());
152
153 // Initialize arc session manager, since NoteTakingHelper expects it to be
154 // set.
155 arc_session_manager_ = base::MakeUnique<arc::ArcSessionManager>(
156 base::MakeUnique<arc::ArcSessionRunner>(
157 base::Bind(&ArcSessionFactory)));
158
159 chromeos::NoteTakingHelper::Initialize();
160
161 ResetAppManager();
162 }
163
164 void TearDown() override {
165 extensions::ExtensionSystem::Get(profile())->Shutdown();
166 extensions::ExtensionSystem::Get(signin_profile())->Shutdown();
167 chromeos::NoteTakingHelper::Shutdown();
168 }
169
170 void InitExtensionSystem(Profile* profile) {
171 extensions::TestExtensionSystem* extension_system =
172 static_cast<extensions::TestExtensionSystem*>(
173 extensions::ExtensionSystem::Get(profile));
174 extension_system->CreateExtensionService(
175 base::CommandLine::ForCurrentProcess(),
176 base::FilePath() /* install_directory */,
177 false /* autoupdate_enabled */);
178 }
179
180 scoped_refptr<const extensions::Extension> CreateTestApp(
181 const std::string& id,
182 const std::string& version,
183 bool supports_lock_screen) {
184 DictionaryBuilder manifest_builder;
185 manifest_builder.Set("name", "Note taking app")
186 .Set("version", version)
187 .Set("manifest_version", 2)
188 .Set("app",
189 DictionaryBuilder()
190 .Set("background",
191 DictionaryBuilder()
192 .Set("scripts",
193 ListBuilder().Append("background.js").Build())
194 .Build())
195 .Build())
196 .Set("action_handlers",
197 ListBuilder()
198 .Append(DictionaryBuilder()
199 .Set("action", "new_note")
200 .SetBoolean("enabled_on_lock_screen",
201 supports_lock_screen)
202 .Build())
203 .Build());
204 return extensions::ExtensionBuilder()
205 .SetManifest(manifest_builder.Build())
206 .SetID(id)
207 .Build();
208 }
209
210 TestingProfile* CreateSecondaryProfile() {
211 TestingProfile* profile =
212 profile_manager_.CreateTestingProfile("secondary_profile");
213 InitExtensionSystem(profile);
214 return profile;
215 }
216
217 TestingProfile* profile() { return &profile_; }
218 TestingProfile* signin_profile() { return signin_profile_; }
219
220 AppManager* app_manager() { return app_manager_.get(); }
221
222 void ResetAppManager() { app_manager_ = base::MakeUnique<AppManagerImpl>(); }
223
224 private:
225 std::unique_ptr<base::test::ScopedCommandLine> command_line_;
226 content::TestBrowserThreadBundle threads_;
227
228 chromeos::ScopedTestDeviceSettingsService test_device_settings_service_;
229 chromeos::ScopedTestCrosSettings test_cros_settings_;
230 chromeos::ScopedTestUserManager user_manager_;
231
232 TestingProfileManager profile_manager_;
233 TestingProfile profile_;
234 TestingProfile* signin_profile_ = nullptr;
235
236 std::unique_ptr<arc::ArcServiceManager> arc_service_manager_;
237 std::unique_ptr<arc::ArcSessionManager> arc_session_manager_;
238
239 std::unique_ptr<AppManager> app_manager_;
240
241 DISALLOW_COPY_AND_ASSIGN(LockScreenAppManagerImplTest);
242 };
243
244 } // namespace
245
246 TEST_F(LockScreenAppManagerImplTest, StartAddsAppToTarget) {
247 app_manager()->Initialize(profile(), signin_profile());
248 scoped_refptr<const extensions::Extension> note_taking_app = CreateTestApp(
249 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0", true);
250 extensions::ExtensionSystem::Get(profile())
251 ->extension_service()
252 ->AddExtension(note_taking_app.get());
253
254 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
255 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
256 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
257 true);
xiyuan 2017/05/26 22:44:52 nit: The above lines are quite similar in the test
tbarzic 2017/05/27 00:48:35 Done.
258
259 TestAppManagerObserver observer;
260 app_manager()->Start(&observer);
261
262 EXPECT_EQ(0, observer.availability_changed_count());
263 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
264 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
265 app_manager()->GetNoteTakingAppId());
266
267 const extensions::Extension* lock_app =
268 extensions::ExtensionRegistry::Get(signin_profile())
269 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
270 extensions::ExtensionRegistry::ENABLED);
271 ASSERT_TRUE(lock_app);
272 EXPECT_TRUE(lock_app->runs_on_lock_screen());
273
274 app_manager()->Stop();
275 EXPECT_EQ(0, observer.availability_changed_count());
276 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
277 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
278
279 lock_app =
280 extensions::ExtensionRegistry::Get(signin_profile())
281 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
282 extensions::ExtensionRegistry::EVERYTHING);
283 EXPECT_FALSE(lock_app);
284 }
285
286 TEST_F(LockScreenAppManagerImplTest, StartWhenLockScreenNotesNotEnabled) {
287 app_manager()->Initialize(profile(), signin_profile());
288 scoped_refptr<const extensions::Extension> note_taking_app = CreateTestApp(
289 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0", true);
290 extensions::ExtensionSystem::Get(profile())
291 ->extension_service()
292 ->AddExtension(note_taking_app.get());
293
294 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
295 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
296
297 TestAppManagerObserver observer;
298 app_manager()->Start(&observer);
299
300 EXPECT_EQ(0, observer.availability_changed_count());
301 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
302 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
303
304 const extensions::Extension* lock_app =
305 extensions::ExtensionRegistry::Get(signin_profile())
306 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
307 extensions::ExtensionRegistry::ENABLED);
308 EXPECT_FALSE(lock_app);
309
310 app_manager()->Stop();
311 EXPECT_EQ(0, observer.availability_changed_count());
312 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
313 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
314
315 lock_app =
316 extensions::ExtensionRegistry::Get(signin_profile())
317 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
318 extensions::ExtensionRegistry::EVERYTHING);
319 EXPECT_FALSE(lock_app);
320 }
321
322 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingDisabledWhileStarted) {
323 app_manager()->Initialize(profile(), signin_profile());
324 scoped_refptr<const extensions::Extension> note_taking_app = CreateTestApp(
325 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0", true);
326 extensions::ExtensionSystem::Get(profile())
327 ->extension_service()
328 ->AddExtension(note_taking_app.get());
329
330 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
331 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
332 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
333 true);
334
335 TestAppManagerObserver observer;
336 app_manager()->Start(&observer);
337
338 EXPECT_EQ(0, observer.availability_changed_count());
339 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
340 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
341 app_manager()->GetNoteTakingAppId());
342
343 const extensions::Extension* lock_app =
344 extensions::ExtensionRegistry::Get(signin_profile())
345 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
346 extensions::ExtensionRegistry::ENABLED);
347 ASSERT_TRUE(lock_app);
348 EXPECT_TRUE(lock_app->runs_on_lock_screen());
349
350 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
351 false);
352
353 EXPECT_EQ(1, observer.availability_changed_count());
354 observer.ResetAvailabilityChangedCount();
355 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
356 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
357 lock_app =
358 extensions::ExtensionRegistry::Get(signin_profile())
359 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
360 extensions::ExtensionRegistry::EVERYTHING);
361 EXPECT_FALSE(lock_app);
362
363 app_manager()->Stop();
364 EXPECT_EQ(0, observer.availability_changed_count());
365 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
366 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
367 }
368
369 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingEnabledWhileStarted) {
370 app_manager()->Initialize(profile(), signin_profile());
371 scoped_refptr<const extensions::Extension> note_taking_app = CreateTestApp(
372 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0", true);
373 extensions::ExtensionSystem::Get(profile())
374 ->extension_service()
375 ->AddExtension(note_taking_app.get());
376
377 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
378 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
379 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
380 false);
381
382 TestAppManagerObserver observer;
383 app_manager()->Start(&observer);
384
385 EXPECT_EQ(0, observer.availability_changed_count());
386 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
387 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
388 const extensions::Extension* lock_app =
389 extensions::ExtensionRegistry::Get(signin_profile())
390 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
391 extensions::ExtensionRegistry::EVERYTHING);
392 EXPECT_FALSE(lock_app);
393
394 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
395 true);
396
397 EXPECT_EQ(1, observer.availability_changed_count());
398 observer.ResetAvailabilityChangedCount();
399 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
400 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
401 app_manager()->GetNoteTakingAppId());
402
403 lock_app =
404 extensions::ExtensionRegistry::Get(signin_profile())
405 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
406 extensions::ExtensionRegistry::ENABLED);
407 ASSERT_TRUE(lock_app);
408 EXPECT_TRUE(lock_app->runs_on_lock_screen());
409
410 app_manager()->Stop();
411 EXPECT_EQ(0, observer.availability_changed_count());
412 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
413 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
414 }
415
416 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingChangedWhileStarted) {
417 app_manager()->Initialize(profile(), signin_profile());
418 scoped_refptr<const extensions::Extension> prod_note_taking_app =
419 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
420 true);
421 extensions::ExtensionSystem::Get(profile())
422 ->extension_service()
423 ->AddExtension(prod_note_taking_app.get());
424
425 scoped_refptr<const extensions::Extension> dev_note_taking_app =
426 CreateTestApp(chromeos::NoteTakingHelper::kDevKeepExtensionId, "1.0",
427 true);
428 extensions::ExtensionSystem::Get(profile())
429 ->extension_service()
430 ->AddExtension(dev_note_taking_app.get());
431
432 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
433 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
434 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
435 true);
436
437 TestAppManagerObserver observer;
438 app_manager()->Start(&observer);
439
440 EXPECT_EQ(0, observer.availability_changed_count());
441 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
442 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
443 app_manager()->GetNoteTakingAppId());
444
445 const extensions::Extension* lock_app =
446 extensions::ExtensionRegistry::Get(signin_profile())
447 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
448 extensions::ExtensionRegistry::ENABLED);
449 ASSERT_TRUE(lock_app);
450 EXPECT_TRUE(lock_app->runs_on_lock_screen());
451
452 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
453 profile(), chromeos::NoteTakingHelper::kDevKeepExtensionId);
454
455 EXPECT_EQ(1, observer.availability_changed_count());
456 observer.ResetAvailabilityChangedCount();
457
458 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
459 EXPECT_EQ(chromeos::NoteTakingHelper::kDevKeepExtensionId,
460 app_manager()->GetNoteTakingAppId());
461
462 // Verify prod app was unloaded from signin profile.
463 lock_app =
464 extensions::ExtensionRegistry::Get(signin_profile())
465 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
466 extensions::ExtensionRegistry::EVERYTHING);
467 EXPECT_FALSE(lock_app);
468
469 lock_app =
470 extensions::ExtensionRegistry::Get(signin_profile())
471 ->GetExtensionById(chromeos::NoteTakingHelper::kDevKeepExtensionId,
472 extensions::ExtensionRegistry::ENABLED);
473
474 ASSERT_TRUE(lock_app);
475 EXPECT_TRUE(lock_app->runs_on_lock_screen());
476
477 app_manager()->Stop();
478 EXPECT_EQ(0, observer.availability_changed_count());
479 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
480 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
481 }
482
483 TEST_F(LockScreenAppManagerImplTest, LockScreenNoteTakingReloadedWhileStarted) {
484 app_manager()->Initialize(profile(), signin_profile());
485 scoped_refptr<const extensions::Extension> prod_note_taking_app =
486 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
487 true);
488 extensions::ExtensionSystem::Get(profile())
489 ->extension_service()
490 ->AddExtension(prod_note_taking_app.get());
491
492 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
493 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
494 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
495 true);
496
497 TestAppManagerObserver observer;
498 app_manager()->Start(&observer);
499
500 EXPECT_EQ(0, observer.availability_changed_count());
501 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
502 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
503 app_manager()->GetNoteTakingAppId());
504
505 const extensions::Extension* lock_app =
506 extensions::ExtensionRegistry::Get(signin_profile())
507 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
508 extensions::ExtensionRegistry::ENABLED);
509 ASSERT_TRUE(lock_app);
510 EXPECT_TRUE(lock_app->runs_on_lock_screen());
511 EXPECT_EQ("1.0", lock_app->VersionString());
512
513 extensions::ExtensionSystem::Get(profile())
514 ->extension_service()
515 ->UnloadExtension(chromeos::NoteTakingHelper::kProdKeepExtensionId,
516 extensions::UnloadedExtensionReason::UPDATE);
517
518 EXPECT_EQ(1, observer.availability_changed_count());
519 observer.ResetAvailabilityChangedCount();
520
521 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
522 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
523
524 // Verify prod app was unloaded from signin profile.
525 lock_app =
526 extensions::ExtensionRegistry::Get(signin_profile())
527 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
528 extensions::ExtensionRegistry::EVERYTHING);
529 EXPECT_FALSE(lock_app);
530
531 // Add the app again.
532 prod_note_taking_app = CreateTestApp(
533 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1", true);
534 extensions::ExtensionSystem::Get(profile())
535 ->extension_service()
536 ->AddExtension(prod_note_taking_app.get());
537
538 EXPECT_EQ(1, observer.availability_changed_count());
539 observer.ResetAvailabilityChangedCount();
540 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
541 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
542 app_manager()->GetNoteTakingAppId());
543
544 lock_app =
545 extensions::ExtensionRegistry::Get(signin_profile())
546 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
547 extensions::ExtensionRegistry::ENABLED);
548
549 ASSERT_TRUE(lock_app);
550 EXPECT_TRUE(lock_app->runs_on_lock_screen());
551 EXPECT_EQ("1.1", lock_app->VersionString());
552
553 app_manager()->Stop();
554 EXPECT_EQ(0, observer.availability_changed_count());
555 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
556 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
557 }
558
559 TEST_F(LockScreenAppManagerImplTest, ReloadOldLockScreenApps) {
560 app_manager()->Initialize(profile(), signin_profile());
561 scoped_refptr<const extensions::Extension> prod_note_taking_app =
562 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
563 true);
564 extensions::ExtensionSystem::Get(profile())
565 ->extension_service()
566 ->AddExtension(prod_note_taking_app.get());
567
568 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
569 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
570 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
571 true);
572
573 TestAppManagerObserver observer;
574 app_manager()->Start(&observer);
575 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
576 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
577 app_manager()->GetNoteTakingAppId());
578
579 const extensions::Extension* lock_app =
580 extensions::ExtensionRegistry::Get(signin_profile())
581 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
582 extensions::ExtensionRegistry::ENABLED);
583 ASSERT_TRUE(lock_app);
584 EXPECT_TRUE(lock_app->runs_on_lock_screen());
585 EXPECT_EQ("1.1", lock_app->VersionString());
586
587 ResetAppManager();
588 TestingProfile* secondary_profile = CreateSecondaryProfile();
589 app_manager()->Initialize(secondary_profile, signin_profile());
590
591 scoped_refptr<const extensions::Extension> secondary_note_taking_app =
592 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
593 true);
594 extensions::ExtensionSystem::Get(secondary_profile)
595 ->extension_service()
596 ->AddExtension(secondary_note_taking_app.get());
597
598 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
599 secondary_profile, chromeos::NoteTakingHelper::kProdKeepExtensionId);
600 secondary_profile->GetPrefs()->SetBoolean(
601 prefs::kNoteTakingAppEnabledOnLockScreen, true);
602
603 app_manager()->Start(&observer);
604 EXPECT_TRUE(app_manager()->IsNoteTakingAppAvailable());
605 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
606 app_manager()->GetNoteTakingAppId());
607 lock_app =
608 extensions::ExtensionRegistry::Get(signin_profile())
609 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
610 extensions::ExtensionRegistry::ENABLED);
611 ASSERT_TRUE(lock_app);
612 EXPECT_TRUE(lock_app->runs_on_lock_screen());
613 EXPECT_EQ("1.0", lock_app->VersionString());
614
615 app_manager()->Stop();
616 }
617
618 TEST_F(LockScreenAppManagerImplTest,
619 DontOverrideDisabledNonLockScreenSigninProfileApps) {
620 app_manager()->Initialize(profile(), signin_profile());
621
622 scoped_refptr<const extensions::Extension> prod_note_taking_app =
623 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
624 true);
625 extensions::ExtensionSystem::Get(profile())
626 ->extension_service()
627 ->AddExtension(prod_note_taking_app.get());
628
629 scoped_refptr<const extensions::Extension> signin_profile_note_taking_app =
630 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
631 true);
632 extensions::ExtensionSystem::Get(signin_profile())
633 ->extension_service()
634 ->AddExtension(signin_profile_note_taking_app.get());
635
636 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
637 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
638 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
639 true);
640
641 TestAppManagerObserver observer;
642 app_manager()->Start(&observer);
643
644 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
645 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
646
647 const extensions::Extension* lock_app =
648 extensions::ExtensionRegistry::Get(signin_profile())
649 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
650 extensions::ExtensionRegistry::ENABLED);
651 ASSERT_TRUE(lock_app);
652 EXPECT_FALSE(lock_app->runs_on_lock_screen());
653 EXPECT_EQ("1.0", lock_app->VersionString());
654
655 app_manager()->Stop();
656 }
657
658 TEST_F(LockScreenAppManagerImplTest, DontOverrideDisabledSigninProfileApps) {
659 app_manager()->Initialize(profile(), signin_profile());
660
661 scoped_refptr<const extensions::Extension> prod_note_taking_app =
662 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
663 true);
664 extensions::ExtensionSystem::Get(profile())
665 ->extension_service()
666 ->AddExtension(prod_note_taking_app.get());
667
668 scoped_refptr<const extensions::Extension> signin_profile_note_taking_app =
669 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0",
670 true);
671 extensions::ExtensionSystem::Get(signin_profile())
672 ->extension_service()
673 ->AddExtension(signin_profile_note_taking_app.get());
674 extensions::ExtensionSystem::Get(signin_profile())
675 ->extension_service()
676 ->DisableExtension(signin_profile_note_taking_app->id(),
677 extensions::Extension::DISABLE_USER_ACTION);
678
679 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
680 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
681 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
682 true);
683
684 TestAppManagerObserver observer;
685 app_manager()->Start(&observer);
686
687 EXPECT_FALSE(app_manager()->IsNoteTakingAppAvailable());
688 EXPECT_TRUE(app_manager()->GetNoteTakingAppId().empty());
689
690 const extensions::Extension* lock_app =
691 extensions::ExtensionRegistry::Get(signin_profile())
692 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
693 extensions::ExtensionRegistry::DISABLED);
694 ASSERT_TRUE(lock_app);
695 EXPECT_FALSE(lock_app->runs_on_lock_screen());
696 EXPECT_EQ("1.0", lock_app->VersionString());
697
698 app_manager()->Stop();
699 }
700
701 TEST_F(LockScreenAppManagerImplTest, ShutdownWhenStarted) {
702 app_manager()->Initialize(profile(), signin_profile());
703 scoped_refptr<const extensions::Extension> prod_note_taking_app =
704 CreateTestApp(chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.1",
705 true);
706 extensions::ExtensionSystem::Get(profile())
707 ->extension_service()
708 ->AddExtension(prod_note_taking_app.get());
709 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
710 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
711 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
712 true);
713 TestAppManagerObserver observer;
714 app_manager()->Start(&observer);
715
716 const extensions::Extension* lock_app =
717 extensions::ExtensionRegistry::Get(signin_profile())
718 ->GetExtensionById(chromeos::NoteTakingHelper::kProdKeepExtensionId,
719 extensions::ExtensionRegistry::ENABLED);
720 EXPECT_TRUE(lock_app);
721 }
722
723 TEST_F(LockScreenAppManagerImplTest, LaunchAppWhenEnabled) {
724 TestEventRouter* event_router = static_cast<TestEventRouter*>(
725 extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse(
726 signin_profile()->GetOriginalProfile(),
727 &TestEventRouterFactoryFunction));
728 ASSERT_TRUE(event_router);
729
730 app_manager()->Initialize(profile(), signin_profile());
731 scoped_refptr<const extensions::Extension> note_taking_app = CreateTestApp(
732 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0", true);
733 extensions::ExtensionSystem::Get(profile())
734 ->extension_service()
735 ->AddExtension(note_taking_app.get());
736
737 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
738 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
739 profile()->GetPrefs()->SetBoolean(prefs::kNoteTakingAppEnabledOnLockScreen,
740 true);
741
742 TestAppManagerObserver observer;
743 app_manager()->Start(&observer);
744
745 ASSERT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
746 app_manager()->GetNoteTakingAppId());
747
748 EXPECT_TRUE(app_manager()->LaunchNoteTaking());
749
750 ASSERT_EQ(1u, event_router->launched_apps().size());
751 EXPECT_EQ(chromeos::NoteTakingHelper::kProdKeepExtensionId,
752 event_router->launched_apps()[0]);
753 event_router->ClearLaunchedApps();
754
755 app_manager()->Stop();
756
757 EXPECT_FALSE(app_manager()->LaunchNoteTaking());
758 EXPECT_TRUE(event_router->launched_apps().empty());
759 }
760
761 TEST_F(LockScreenAppManagerImplTest, LaunchAppWhenNoLockScreenApp) {
762 TestEventRouter* event_router = static_cast<TestEventRouter*>(
763 extensions::EventRouterFactory::GetInstance()->SetTestingFactoryAndUse(
764 signin_profile()->GetOriginalProfile(),
765 &TestEventRouterFactoryFunction));
766 ASSERT_TRUE(event_router);
767
768 app_manager()->Initialize(profile(), signin_profile());
769 scoped_refptr<const extensions::Extension> note_taking_app = CreateTestApp(
770 chromeos::NoteTakingHelper::kProdKeepExtensionId, "1.0", true);
771 extensions::ExtensionSystem::Get(profile())
772 ->extension_service()
773 ->AddExtension(note_taking_app.get());
774
775 chromeos::NoteTakingHelper::Get()->SetPreferredApp(
776 profile(), chromeos::NoteTakingHelper::kProdKeepExtensionId);
777
778 TestAppManagerObserver observer;
779 app_manager()->Start(&observer);
780
781 EXPECT_FALSE(app_manager()->LaunchNoteTaking());
782 EXPECT_TRUE(event_router->launched_apps().empty());
783
784 app_manager()->Stop();
785 EXPECT_FALSE(app_manager()->LaunchNoteTaking());
786 EXPECT_TRUE(event_router->launched_apps().empty());
787 }
788
789 } // namespace lock_screen_apps
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698