1// Copyright (c) 2012 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/extensions/extension_warning_badge_service.h" 6 7#include "chrome/app/chrome_command_ids.h" 8#include "chrome/browser/profiles/profile.h" 9#include "chrome/browser/ui/global_error/global_error_service.h" 10#include "chrome/browser/ui/global_error/global_error_service_factory.h" 11#include "chrome/test/base/testing_profile.h" 12#include "extensions/browser/warning_service.h" 13#include "extensions/browser/warning_set.h" 14#include "testing/gtest/include/gtest/gtest.h" 15 16namespace extensions { 17 18namespace { 19 20class TestExtensionWarningSet : public WarningService { 21 public: 22 explicit TestExtensionWarningSet(Profile* profile) : WarningService(profile) { 23 } 24 virtual ~TestExtensionWarningSet() {} 25 26 void AddWarning(const Warning& warning) { 27 WarningSet warnings; 28 warnings.insert(warning); 29 AddWarnings(warnings); 30 } 31}; 32 33class TestExtensionWarningBadgeService : public ExtensionWarningBadgeService { 34 public: 35 TestExtensionWarningBadgeService(Profile* profile, 36 WarningService* warning_service) 37 : ExtensionWarningBadgeService(profile), 38 warning_service_(warning_service) {} 39 virtual ~TestExtensionWarningBadgeService() {} 40 41 virtual const std::set<Warning>& 42 GetCurrentWarnings() const OVERRIDE { 43 return warning_service_->warnings(); 44 } 45 46 private: 47 WarningService* warning_service_; 48}; 49 50bool HasBadge(Profile* profile) { 51 GlobalErrorService* service = 52 GlobalErrorServiceFactory::GetForProfile(profile); 53 return service->GetGlobalErrorByMenuItemCommandID(IDC_EXTENSION_ERRORS) != 54 NULL; 55} 56 57const char* ext1_id = "extension1"; 58const char* ext2_id = "extension2"; 59 60} // namespace 61 62// Check that no badge appears if it has been suppressed for a specific 63// warning. 64TEST(ExtensionWarningBadgeServiceTest, SuppressBadgeForCurrentWarnings) { 65 TestingProfile profile; 66 TestExtensionWarningSet warnings(&profile); 67 TestExtensionWarningBadgeService badge_service(&profile, &warnings); 68 warnings.AddObserver(&badge_service); 69 70 // Insert first warning. 71 warnings.AddWarning(Warning::CreateNetworkDelayWarning(ext1_id)); 72 EXPECT_TRUE(HasBadge(&profile)); 73 74 // Suppress first warning. 75 badge_service.SuppressCurrentWarnings(); 76 EXPECT_FALSE(HasBadge(&profile)); 77 78 // Simulate deinstallation of extension. 79 std::set<Warning::WarningType> to_clear = 80 warnings.GetWarningTypesAffectingExtension(ext1_id); 81 warnings.ClearWarnings(to_clear); 82 EXPECT_FALSE(HasBadge(&profile)); 83 84 // Set first warning again and verify that not badge is shown this time. 85 warnings.AddWarning(Warning::CreateNetworkDelayWarning(ext1_id)); 86 EXPECT_FALSE(HasBadge(&profile)); 87 88 // Set second warning and verify that it shows a badge. 89 warnings.AddWarning(Warning::CreateNetworkConflictWarning(ext2_id)); 90 EXPECT_TRUE(HasBadge(&profile)); 91 92 warnings.RemoveObserver(&badge_service); 93} 94 95} // namespace extensions 96