1 // Copyright 2014 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.
5 #include "chrome/browser/notifications/extension_welcome_notification.h"
9 #include "base/memory/scoped_ptr.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/prefs/pref_service.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "base/test/test_simple_task_runner.h"
14 #include "base/thread_task_runner_handle.h"
15 #include "chrome/browser/notifications/notification.h"
16 #include "chrome/common/pref_names.h"
17 #include "chrome/test/base/testing_pref_service_syncable.h"
18 #include "chrome/test/base/testing_profile.h"
19 #include "components/pref_registry/pref_registry_syncable.h"
20 #include "sync/api/fake_sync_change_processor.h"
21 #include "sync/api/sync_error_factory_mock.h"
22 #include "testing/gtest/include/gtest/gtest.h"
23 #include "ui/message_center/fake_message_center.h"
24 #include "ui/message_center/notification.h"
26 const char kChromeNowExtensionID
[] = "pafkbggdmjlpgkdkcbjmhmfcdpncadgh";
28 class MockMessageCenter
: public message_center::FakeMessageCenter
{
31 : add_notification_calls_(0),
32 remove_notification_calls_(0),
33 notifications_with_shown_as_popup_(0) {
36 int add_notification_calls() { return add_notification_calls_
; }
37 int remove_notification_calls() { return remove_notification_calls_
; }
38 int notifications_with_shown_as_popup() {
39 return notifications_with_shown_as_popup_
;
42 // message_center::FakeMessageCenter Overrides
43 virtual message_center::Notification
* FindVisibleNotificationById(
44 const std::string
& id
) OVERRIDE
{
45 if (last_notification
.get() && last_notification
->id() == id
)
46 return last_notification
.get();
50 virtual void AddNotification(
51 scoped_ptr
<message_center::Notification
> notification
) OVERRIDE
{
52 EXPECT_FALSE(last_notification
.get());
53 last_notification
.swap(notification
);
54 add_notification_calls_
++;
55 if (last_notification
->shown_as_popup())
56 notifications_with_shown_as_popup_
++;
59 virtual void RemoveNotification(const std::string
& id
,
60 bool by_user
) OVERRIDE
{
61 EXPECT_TRUE(last_notification
.get());
62 last_notification
.reset();
63 remove_notification_calls_
++;
66 void CloseCurrentNotification() {
67 EXPECT_TRUE(last_notification
.get());
68 last_notification
->delegate()->Close(true);
69 RemoveNotification(last_notification
->id(), true);
73 scoped_ptr
<message_center::Notification
> last_notification
;
74 int add_notification_calls_
;
75 int remove_notification_calls_
;
76 int notifications_with_shown_as_popup_
;
78 DISALLOW_COPY_AND_ASSIGN(MockMessageCenter
);
81 class WelcomeNotificationDelegate
82 : public ExtensionWelcomeNotification::Delegate
{
84 WelcomeNotificationDelegate()
85 : start_time_(base::Time::Now()),
86 message_center_(new MockMessageCenter()) {
89 // ExtensionWelcomeNotification::Delegate
90 virtual message_center::MessageCenter
* GetMessageCenter() OVERRIDE
{
91 return message_center_
.get();
94 virtual base::Time
GetCurrentTime() OVERRIDE
{
95 return start_time_
+ elapsed_time_
;
98 virtual void PostTask(
99 const tracked_objects::Location
& from_here
,
100 const base::Closure
& task
) OVERRIDE
{
101 EXPECT_TRUE(pending_task_
.is_null());
102 pending_task_
= task
;
105 // WelcomeNotificationDelegate
106 MockMessageCenter
* message_center() const { return message_center_
.get(); }
108 base::Time
GetStartTime() const { return start_time_
; }
110 void SetElapsedTime(base::TimeDelta elapsed_time
) {
111 elapsed_time_
= elapsed_time
;
114 void RunPendingTask() {
115 base::Closure task_to_run
= pending_task_
;
116 pending_task_
.Reset();
121 const base::Time start_time_
;
122 base::TimeDelta elapsed_time_
;
123 scoped_ptr
<MockMessageCenter
> message_center_
;
124 base::Closure pending_task_
;
126 DISALLOW_COPY_AND_ASSIGN(WelcomeNotificationDelegate
);
129 class ExtensionWelcomeNotificationTest
: public testing::Test
{
131 ExtensionWelcomeNotificationTest() {
132 scoped_refptr
<user_prefs::PrefRegistrySyncable
> pref_registry(
133 new user_prefs::PrefRegistrySyncable());
134 ExtensionWelcomeNotification::RegisterProfilePrefs(pref_registry
.get());
137 virtual void SetUp() {
138 task_runner_
= new base::TestSimpleTaskRunner();
139 thread_task_runner_handle_
.reset(
140 new base::ThreadTaskRunnerHandle(task_runner_
));
141 profile_
.reset(new TestingProfile());
142 delegate_
= new WelcomeNotificationDelegate();
143 welcome_notification_
= ExtensionWelcomeNotification::Create(
144 kChromeNowExtensionID
, profile_
.get(), delegate_
);
147 virtual void TearDown() {
149 welcome_notification_
.reset();
151 thread_task_runner_handle_
.reset();
155 void StartPreferenceSyncing() const {
156 PrefServiceSyncable::FromProfile(profile_
.get())
157 ->GetSyncableService(syncer::PREFERENCES
)
158 ->MergeDataAndStartSyncing(syncer::PREFERENCES
,
159 syncer::SyncDataList(),
160 scoped_ptr
<syncer::SyncChangeProcessor
>(
161 new syncer::FakeSyncChangeProcessor
),
162 scoped_ptr
<syncer::SyncErrorFactory
>(
163 new syncer::SyncErrorFactoryMock()));
166 void ShowChromeNowNotification() const {
168 "ChromeNowNotification",
169 message_center::NotifierId(message_center::NotifierId::APPLICATION
,
170 kChromeNowExtensionID
));
173 void ShowRegularNotification() const {
175 "RegularNotification",
176 message_center::NotifierId(message_center::NotifierId::APPLICATION
,
177 "aaaabbbbccccddddeeeeffffggghhhhi"));
180 void FlushMessageLoop() { delegate_
->RunPendingTask(); }
182 MockMessageCenter
* message_center() const {
183 return delegate_
->message_center();
185 base::TestSimpleTaskRunner
* task_runner() const {
186 return task_runner_
.get();
188 base::Time
GetStartTime() const {
189 return delegate_
->GetStartTime();
191 void SetElapsedTime(base::TimeDelta elapsed_time
) const {
192 delegate_
->SetElapsedTime(elapsed_time
);
194 bool GetBooleanPref(const char* path
) const {
195 return profile_
->GetPrefs()->GetBoolean(path
);
197 void SetBooleanPref(const char* path
, bool value
) const {
198 profile_
->GetPrefs()->SetBoolean(path
, value
);
200 int64
GetInt64Pref(const char* path
) const {
201 return profile_
->GetPrefs()->GetInt64(path
);
203 void SetInt64Pref(const char* path
, int64 value
) const {
204 profile_
->GetPrefs()->SetInt64(path
, value
);
208 class TestNotificationDelegate
: public NotificationDelegate
{
210 explicit TestNotificationDelegate(const std::string
& id
) : id_(id
) {}
212 // Overridden from NotificationDelegate:
213 virtual void Display() OVERRIDE
{}
214 virtual void Error() OVERRIDE
{}
215 virtual void Close(bool by_user
) OVERRIDE
{}
216 virtual void Click() OVERRIDE
{}
217 virtual void ButtonClick(int index
) OVERRIDE
{}
219 virtual std::string
id() const OVERRIDE
{ return id_
; }
221 virtual content::WebContents
* GetWebContents() const OVERRIDE
{
226 virtual ~TestNotificationDelegate() {}
228 const std::string id_
;
230 DISALLOW_COPY_AND_ASSIGN(TestNotificationDelegate
);
233 void ShowNotification(std::string notification_id
,
234 const message_center::NotifierId
& notifier_id
) const {
235 message_center::RichNotificationData rich_notification_data
;
236 rich_notification_data
.priority
= 0;
237 Notification
notification(message_center::NOTIFICATION_TYPE_BASE_FORMAT
,
238 GURL("http://tests.url"),
239 base::UTF8ToUTF16("Title"),
240 base::UTF8ToUTF16("Body"),
242 blink::WebTextDirectionDefault
,
244 base::UTF8ToUTF16("Source"),
245 base::UTF8ToUTF16(notification_id
),
246 rich_notification_data
,
247 new TestNotificationDelegate("TestNotification"));
248 welcome_notification_
->ShowWelcomeNotificationIfNecessary(notification
);
251 scoped_refptr
<base::TestSimpleTaskRunner
> task_runner_
;
252 scoped_ptr
<base::ThreadTaskRunnerHandle
> thread_task_runner_handle_
;
253 scoped_ptr
<TestingProfile
> profile_
;
254 // Weak Ref owned by welcome_notification_
255 WelcomeNotificationDelegate
* delegate_
;
256 scoped_ptr
<ExtensionWelcomeNotification
> welcome_notification_
;
258 DISALLOW_COPY_AND_ASSIGN(ExtensionWelcomeNotificationTest
);
261 // Show a regular notification. Expect that WelcomeNotification will
262 // not show a welcome notification.
263 TEST_F(ExtensionWelcomeNotificationTest
, FirstRunShowRegularNotification
) {
264 StartPreferenceSyncing();
265 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
266 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
267 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
269 ShowRegularNotification();
271 EXPECT_EQ(message_center()->add_notification_calls(), 0);
272 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
273 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
274 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
275 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
276 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
279 // Show a Chrome Now notification. Expect that WelcomeNotification will
280 // show a welcome notification.
281 TEST_F(ExtensionWelcomeNotificationTest
, FirstRunChromeNowNotification
) {
282 StartPreferenceSyncing();
283 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
284 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
285 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
287 ShowChromeNowNotification();
289 EXPECT_EQ(message_center()->add_notification_calls(), 1);
290 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
291 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
292 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
293 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
294 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
297 // Show a Chrome Now notification that was already shown before.
298 TEST_F(ExtensionWelcomeNotificationTest
, ShowWelcomeNotificationAgain
) {
299 StartPreferenceSyncing();
300 SetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
, true);
301 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
302 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
303 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
305 ShowChromeNowNotification();
307 EXPECT_EQ(message_center()->add_notification_calls(), 1);
308 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
309 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 1);
310 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
311 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
312 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
315 // Don't show a welcome notification if it was previously dismissed on another
316 // machine that wrote the synced flag.
317 TEST_F(ExtensionWelcomeNotificationTest
,
318 WelcomeNotificationPreviouslyDismissed
) {
319 StartPreferenceSyncing();
320 SetBooleanPref(prefs::kWelcomeNotificationDismissed
, true);
321 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
322 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
323 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
325 ShowChromeNowNotification();
327 EXPECT_EQ(message_center()->add_notification_calls(), 0);
328 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
329 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
330 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
331 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
332 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
335 // Don't show a welcome notification if it was previously dismissed on this
337 TEST_F(ExtensionWelcomeNotificationTest
,
338 WelcomeNotificationPreviouslyDismissedLocal
) {
339 StartPreferenceSyncing();
340 SetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
, true);
341 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
342 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
343 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
345 ShowChromeNowNotification();
347 EXPECT_EQ(message_center()->add_notification_calls(), 0);
348 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
349 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
350 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
351 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
352 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
355 // Don't show a welcome notification if it was previously dismissed with the
356 // local flag and synced flag. This case is possible but rare.
357 TEST_F(ExtensionWelcomeNotificationTest
,
358 WelcomeNotificationPreviouslyDismissedSyncedAndLocal
) {
359 StartPreferenceSyncing();
360 SetBooleanPref(prefs::kWelcomeNotificationDismissed
, true);
361 SetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
, true);
362 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
363 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
364 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
366 ShowChromeNowNotification();
368 EXPECT_EQ(message_center()->add_notification_calls(), 0);
369 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
370 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
371 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
372 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
373 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
376 // Show a Chrome Now notification and dismiss it.
377 // Expect welcome toast dismissed to be true.
378 TEST_F(ExtensionWelcomeNotificationTest
, DismissWelcomeNotification
) {
379 StartPreferenceSyncing();
380 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
381 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
382 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
384 ShowChromeNowNotification();
385 message_center()->CloseCurrentNotification();
388 EXPECT_EQ(message_center()->add_notification_calls(), 1);
389 EXPECT_EQ(message_center()->remove_notification_calls(), 1);
390 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
391 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
392 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
393 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
396 // Show a Chrome Now notification and dismiss it via a synced preference change.
397 // Expect welcome toast dismissed to be true.
398 TEST_F(ExtensionWelcomeNotificationTest
, SyncedDismissalWelcomeNotification
) {
399 StartPreferenceSyncing();
400 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
401 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
402 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
404 ShowChromeNowNotification();
405 SetBooleanPref(prefs::kWelcomeNotificationDismissed
, true);
407 EXPECT_EQ(message_center()->add_notification_calls(), 1);
408 EXPECT_EQ(message_center()->remove_notification_calls(), 1);
409 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
410 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
411 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
412 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
415 // Simulate a delayed preference sync when the welcome notification was
416 // previously dismissed.
417 TEST_F(ExtensionWelcomeNotificationTest
,
418 DelayedPreferenceSyncPreviouslyDismissed
) {
419 // Show a notification while the preference system is not syncing.
420 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
421 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
422 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
424 ShowChromeNowNotification();
426 EXPECT_EQ(message_center()->add_notification_calls(), 0);
427 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
428 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
429 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
430 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
431 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
433 // Now start the preference syncing with a previously dismissed welcome.
434 SetBooleanPref(prefs::kWelcomeNotificationDismissed
, true);
435 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
436 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
437 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
439 StartPreferenceSyncing();
441 EXPECT_EQ(message_center()->add_notification_calls(), 0);
442 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
443 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
444 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
445 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
446 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
449 // Simulate a delayed preference sync when the welcome notification was
451 TEST_F(ExtensionWelcomeNotificationTest
, DelayedPreferenceSyncNeverShown
) {
452 // Show a notification while the preference system is not syncing.
453 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
454 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
455 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
457 ShowChromeNowNotification();
459 EXPECT_EQ(message_center()->add_notification_calls(), 0);
460 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
461 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
462 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
463 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
464 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
466 // Now start the preference syncing with the default preference values.
467 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
468 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
469 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
471 StartPreferenceSyncing();
473 EXPECT_EQ(message_center()->add_notification_calls(), 1);
474 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
475 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
476 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
477 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
478 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
481 // Simulate the passage of time when the welcome notification
482 // automatically dismisses.
483 TEST_F(ExtensionWelcomeNotificationTest
, TimeExpiredNotification
) {
484 StartPreferenceSyncing();
485 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
486 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
487 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
488 EXPECT_EQ(GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp
), 0);
489 EXPECT_TRUE(task_runner()->GetPendingTasks().empty());
491 ShowChromeNowNotification();
493 base::TimeDelta requested_show_time
=
494 base::TimeDelta::FromDays(
495 ExtensionWelcomeNotification::kRequestedShowTimeDays
);
497 EXPECT_EQ(task_runner()->GetPendingTasks().size(), 1U);
498 EXPECT_EQ(task_runner()->NextPendingTaskDelay(), requested_show_time
);
500 EXPECT_EQ(message_center()->add_notification_calls(), 1);
501 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
502 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
503 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
504 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
505 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
507 GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp
),
508 (GetStartTime() + requested_show_time
).ToInternalValue());
510 SetElapsedTime(requested_show_time
);
511 task_runner()->RunPendingTasks();
513 EXPECT_TRUE(task_runner()->GetPendingTasks().empty());
514 EXPECT_EQ(message_center()->add_notification_calls(), 1);
515 EXPECT_EQ(message_center()->remove_notification_calls(), 1);
516 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
517 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
518 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
519 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
521 GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp
),
522 (GetStartTime() + requested_show_time
).ToInternalValue());
525 // Simulate the passage of time after Chrome is closed and the welcome
526 // notification expiration elapses.
527 TEST_F(ExtensionWelcomeNotificationTest
, NotificationPreviouslyExpired
) {
528 StartPreferenceSyncing();
529 SetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
, true);
530 SetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp
, 1);
531 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
532 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
533 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
534 EXPECT_EQ(GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp
), 1);
535 EXPECT_TRUE(task_runner()->GetPendingTasks().empty());
537 const base::TimeDelta requested_show_time
=
538 base::TimeDelta::FromDays(
539 ExtensionWelcomeNotification::kRequestedShowTimeDays
);
540 SetElapsedTime(requested_show_time
);
541 ShowChromeNowNotification();
543 EXPECT_TRUE(task_runner()->GetPendingTasks().empty());
544 EXPECT_EQ(message_center()->add_notification_calls(), 0);
545 EXPECT_EQ(message_center()->remove_notification_calls(), 0);
546 EXPECT_EQ(message_center()->notifications_with_shown_as_popup(), 0);
547 EXPECT_FALSE(GetBooleanPref(prefs::kWelcomeNotificationDismissed
));
548 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationDismissedLocal
));
549 EXPECT_TRUE(GetBooleanPref(prefs::kWelcomeNotificationPreviouslyPoppedUp
));
550 EXPECT_EQ(GetInt64Pref(prefs::kWelcomeNotificationExpirationTimestamp
), 1);