1ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch// found in the LICENSE file. 4201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 5201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/basictypes.h" 6201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/command_line.h" 7201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "base/utf_string_conversions.h" 8201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/browser/background_page_tracker.h" 9dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process.h" 10dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/test/testing_browser_process_test.h" 11201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "chrome/test/testing_pref_service.h" 12ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_service.h" 13ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "content/common/notification_type.h" 14201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "testing/gtest/include/gtest/gtest.h" 15201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch#include "testing/platform_test.h" 16201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 17201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass MockBackgroundPageTracker : public BackgroundPageTracker { 18201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 19201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MockBackgroundPageTracker() { 20201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BackgroundPageTracker::RegisterPrefs(&prefs_); 21201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 22201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch ~MockBackgroundPageTracker() {} 23201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Overridden from BackgroundPageTracker to mock out functionality. 24201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual bool IsEnabled() { return true; } 25201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual PrefService* GetPrefService() { return &prefs_; } 26201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 27201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch TestingPrefService prefs_; 28201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 29201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 30dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenclass BackgroundPageTrackerTest : public TestingBrowserProcessTest { 31dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen}; 32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen 33dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(BackgroundPageTrackerTest, Create) { 34201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MockBackgroundPageTracker tracker; 35201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetBackgroundPageCount()); 36201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount()); 37201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 38201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 39dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(BackgroundPageTrackerTest, OnBackgroundPageLoaded) { 40201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MockBackgroundPageTracker tracker; 41201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetBackgroundPageCount()); 42201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount()); 43201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string app1 = "app_id_1"; 44201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string app2 = "app_id_2"; 45201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 46201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetBackgroundPageCount()); 47201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount()); 48201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 49201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetBackgroundPageCount()); 50201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount()); 51201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app2); 52201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(2, tracker.GetBackgroundPageCount()); 53201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(2, tracker.GetUnacknowledgedBackgroundPageCount()); 54201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 55201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnExtensionUnloaded(app1); 56201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetBackgroundPageCount()); 57201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount()); 58201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 59201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnExtensionUnloaded(app2); 60201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetBackgroundPageCount()); 61201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount()); 62201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 63201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 64dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(BackgroundPageTrackerTest, AcknowledgeBackgroundPages) { 65201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MockBackgroundPageTracker tracker; 66201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetBackgroundPageCount()); 67201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount()); 68201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string app1 = "app_id_1"; 69201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 70201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetBackgroundPageCount()); 71201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetUnacknowledgedBackgroundPageCount()); 72201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.AcknowledgeBackgroundPages(); 73201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetBackgroundPageCount()); 74201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount()); 75201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 76201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, tracker.GetBackgroundPageCount()); 77201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(0, tracker.GetUnacknowledgedBackgroundPageCount()); 78201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 79201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 80201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdochclass BadgeChangedNotificationCounter : public NotificationObserver { 81201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch public: 82201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BadgeChangedNotificationCounter() 83201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch : count_(0) { 84201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch registrar_.Add(this, 85201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NotificationType::BACKGROUND_PAGE_TRACKER_CHANGED, 86201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NotificationService::AllSources()); 87201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 88201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // # notifications received. 89201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int count() { return count_; } 90201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // NotificationObserver implementation. 91201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch virtual void Observe(NotificationType type, 92201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const NotificationSource& source, 93201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch const NotificationDetails& details) { 94201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(type.value, 95201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NotificationType::BACKGROUND_PAGE_TRACKER_CHANGED); 96201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch count_++; 97201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch } 98201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch private: 99201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch int count_; 100201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch NotificationRegistrar registrar_; 101201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}; 102201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch 103dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(BackgroundPageTrackerTest, TestTrackerChangedNotifications) { 104201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch MockBackgroundPageTracker tracker; 105201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch BadgeChangedNotificationCounter counter; 106201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string app1 = "app_id_1"; 107201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string app2 = "app_id_2"; 108201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch std::string app3 = "app_id_3"; 109201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // New extension should generate notification 110201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 111201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, counter.count()); 112201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Same extension should not generate notification 113201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 114201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(1, counter.count()); 115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // New extension should generate notification 116201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app2); 117201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(2, counter.count()); 118201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch // Acknowledging pages should generate notification. 119201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.AcknowledgeBackgroundPages(); 120201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(3, counter.count()); 121201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app1); 122201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(3, counter.count()); 123201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch tracker.OnBackgroundPageLoaded(app3); 124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch EXPECT_EQ(4, counter.count()); 125201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch} 126