12a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file. 42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/warning_service.h" 62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_browser_context.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "extensions/browser/extensions_test.h" 92a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock.h" 102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace extensions { 132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)namespace { 152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass TestWarningService : public WarningService { 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci explicit TestWarningService(content::BrowserContext* browser_context) 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : WarningService(browser_context) { 202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~TestWarningService() {} 222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void AddWarning(const Warning& warning) { 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WarningSet warnings; 252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warnings.insert(warning); 262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) AddWarnings(warnings); 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) } 282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MockObserver : public WarningService::Observer { 312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) public: 322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) virtual ~MockObserver() {} 332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MOCK_METHOD0(ExtensionWarningsChanged, void()); 342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}; 352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccitypedef ExtensionsTest WarningServiceTest; 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* ext1_id = "extension1"; 392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)const char* ext2_id = "extension2"; 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst Warning::WarningType warning_1 = 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Warning::kNetworkDelay; 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst Warning::WarningType warning_2 = 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Warning::kNetworkConflict; 442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Check that inserting a warning triggers notifications, whereas inserting 482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// the same warning again is silent. 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WarningServiceTest, SetWarning) { 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::TestBrowserContext browser_context; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestWarningService warning_service(&browser_context); 522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockObserver observer; 532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.AddObserver(&observer); 542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Insert warning for the first time. 562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer, ExtensionWarningsChanged()); 572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.AddWarning( 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Warning::CreateNetworkDelayWarning(ext1_id)); 592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing::Mock::VerifyAndClearExpectations(&warning_service); 602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Second insertion of same warning does not trigger anything. 622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.AddWarning( 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Warning::CreateNetworkDelayWarning(ext1_id)); 642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing::Mock::VerifyAndClearExpectations(&warning_service); 652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.RemoveObserver(&observer); 672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Check that ClearWarnings deletes exactly the specified warnings and 702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// triggers notifications where appropriate. 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WarningServiceTest, ClearWarnings) { 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::TestBrowserContext browser_context; 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci TestWarningService warning_service(&browser_context); 742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) MockObserver observer; 752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.AddObserver(&observer); 762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Insert two unique warnings in one batch. 782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer, ExtensionWarningsChanged()); 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WarningSet warning_set; 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci warning_set.insert(Warning::CreateNetworkDelayWarning(ext1_id)); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci warning_set.insert(Warning::CreateNetworkConflictWarning(ext2_id)); 822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.AddWarnings(warning_set); 832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing::Mock::VerifyAndClearExpectations(&warning_service); 842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove one warning and check that the badge remains. 862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer, ExtensionWarningsChanged()); 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<Warning::WarningType> to_clear; 882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_clear.insert(warning_2); 892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.ClearWarnings(to_clear); 902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing::Mock::VerifyAndClearExpectations(&warning_service); 912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check that the correct warnings appear in |warnings|. 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<Warning::WarningType> existing_warnings = 942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.GetWarningTypesAffectingExtension(ext1_id); 952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(1u, existing_warnings.size()); 962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) existing_warnings = 972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.GetWarningTypesAffectingExtension(ext2_id); 982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, existing_warnings.size()); 992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Remove the other one warning. 1012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_CALL(observer, ExtensionWarningsChanged()); 1022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) to_clear.insert(warning_1); 1032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.ClearWarnings(to_clear); 1042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) testing::Mock::VerifyAndClearExpectations(&warning_service); 1052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) // Check that not warnings remain. 1072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) existing_warnings = 1082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.GetWarningTypesAffectingExtension(ext1_id); 1092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, existing_warnings.size()); 1102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) existing_warnings = 1112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.GetWarningTypesAffectingExtension(ext2_id); 1122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) EXPECT_EQ(0u, existing_warnings.size()); 1132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) warning_service.RemoveObserver(&observer); 1152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} 1162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) 1172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)} // namespace extensions 118