• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2011 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/basictypes.h"
6 #include "base/command_line.h"
7 #include "base/utf_string_conversions.h"
8 #include "chrome/browser/background_page_tracker.h"
9 #include "chrome/test/testing_browser_process.h"
10 #include "chrome/test/testing_browser_process_test.h"
11 #include "chrome/test/testing_pref_service.h"
12 #include "content/common/notification_service.h"
13 #include "content/common/notification_type.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15 #include "testing/platform_test.h"
16 
17 class MockBackgroundPageTracker : public BackgroundPageTracker {
18  public:
MockBackgroundPageTracker()19   MockBackgroundPageTracker() {
20     BackgroundPageTracker::RegisterPrefs(&prefs_);
21   }
~MockBackgroundPageTracker()22   ~MockBackgroundPageTracker() {}
23   // Overridden from BackgroundPageTracker to mock out functionality.
IsEnabled()24   virtual bool IsEnabled() { return true; }
GetPrefService()25   virtual PrefService* GetPrefService() { return &prefs_; }
26  private:
27   TestingPrefService prefs_;
28 };
29 
30 class BackgroundPageTrackerTest : public TestingBrowserProcessTest {
31 };
32 
TEST_F(BackgroundPageTrackerTest,Create)33 TEST_F(BackgroundPageTrackerTest, Create) {
34   MockBackgroundPageTracker tracker;
35   EXPECT_EQ(0, tracker.GetBackgroundPageCount());
36   EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount());
37 }
38 
TEST_F(BackgroundPageTrackerTest,OnBackgroundPageLoaded)39 TEST_F(BackgroundPageTrackerTest, OnBackgroundPageLoaded) {
40   MockBackgroundPageTracker tracker;
41   EXPECT_EQ(0, tracker.GetBackgroundPageCount());
42   EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount());
43   std::string app1 = "app_id_1";
44   std::string app2 = "app_id_2";
45   tracker.OnBackgroundPageLoaded(app1);
46   EXPECT_EQ(1, tracker.GetBackgroundPageCount());
47   EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount());
48   tracker.OnBackgroundPageLoaded(app1);
49   EXPECT_EQ(1, tracker.GetBackgroundPageCount());
50   EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount());
51   tracker.OnBackgroundPageLoaded(app2);
52   EXPECT_EQ(2, tracker.GetBackgroundPageCount());
53   EXPECT_EQ(2, tracker.GetUnacknowledgedBackgroundPageCount());
54 
55   tracker.OnExtensionUnloaded(app1);
56   EXPECT_EQ(1, tracker.GetBackgroundPageCount());
57   EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount());
58 
59   tracker.OnExtensionUnloaded(app2);
60   EXPECT_EQ(0, tracker.GetBackgroundPageCount());
61   EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount());
62 }
63 
TEST_F(BackgroundPageTrackerTest,AcknowledgeBackgroundPages)64 TEST_F(BackgroundPageTrackerTest, AcknowledgeBackgroundPages) {
65   MockBackgroundPageTracker tracker;
66   EXPECT_EQ(0, tracker.GetBackgroundPageCount());
67   EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount());
68   std::string app1 = "app_id_1";
69   tracker.OnBackgroundPageLoaded(app1);
70   EXPECT_EQ(1, tracker.GetBackgroundPageCount());
71   EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount());
72   tracker.AcknowledgeBackgroundPages();
73   EXPECT_EQ(1, tracker.GetBackgroundPageCount());
74   EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount());
75   tracker.OnBackgroundPageLoaded(app1);
76   EXPECT_EQ(1, tracker.GetBackgroundPageCount());
77   EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount());
78 }
79 
80 class BadgeChangedNotificationCounter : public NotificationObserver {
81  public:
BadgeChangedNotificationCounter()82   BadgeChangedNotificationCounter()
83       : count_(0) {
84     registrar_.Add(this,
85                    NotificationType::BACKGROUND_PAGE_TRACKER_CHANGED,
86                    NotificationService::AllSources());
87   }
88   // # notifications received.
count()89   int count() { return count_; }
90   // NotificationObserver implementation.
Observe(NotificationType type,const NotificationSource & source,const NotificationDetails & details)91   virtual void Observe(NotificationType type,
92                        const NotificationSource& source,
93                        const NotificationDetails& details) {
94     EXPECT_EQ(type.value,
95               NotificationType::BACKGROUND_PAGE_TRACKER_CHANGED);
96     count_++;
97   }
98  private:
99   int count_;
100   NotificationRegistrar registrar_;
101 };
102 
TEST_F(BackgroundPageTrackerTest,TestTrackerChangedNotifications)103 TEST_F(BackgroundPageTrackerTest, TestTrackerChangedNotifications) {
104   MockBackgroundPageTracker tracker;
105   BadgeChangedNotificationCounter counter;
106   std::string app1 = "app_id_1";
107   std::string app2 = "app_id_2";
108   std::string app3 = "app_id_3";
109   // New extension should generate notification
110   tracker.OnBackgroundPageLoaded(app1);
111   EXPECT_EQ(1, counter.count());
112   // Same extension should not generate notification
113   tracker.OnBackgroundPageLoaded(app1);
114   EXPECT_EQ(1, counter.count());
115   // New extension should generate notification
116   tracker.OnBackgroundPageLoaded(app2);
117   EXPECT_EQ(2, counter.count());
118   // Acknowledging pages should generate notification.
119   tracker.AcknowledgeBackgroundPages();
120   EXPECT_EQ(3, counter.count());
121   tracker.OnBackgroundPageLoaded(app1);
122   EXPECT_EQ(3, counter.count());
123   tracker.OnBackgroundPageLoaded(app3);
124   EXPECT_EQ(4, counter.count());
125 }
126