1c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// found in the LICENSE file. 4c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 5c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "base/memory/ref_counted.h" 6c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/extensions/extension_error_controller.h" 7c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/extensions/extension_error_ui.h" 8c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/extensions/extension_service.h" 9f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/extensions/extension_service_test_base.h" 10c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/browser/profiles/profile.h" 11c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "chrome/test/base/testing_profile.h" 12c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/browser/extension_prefs.h" 13c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/browser/extension_registry.h" 14c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/extension.h" 15c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/extension_builder.h" 16c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch#include "extensions/common/value_builder.h" 17c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 18c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace extensions { 19c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 20c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochnamespace { 21c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 22c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Create a mock for the UI component of the error alert that is shown for 23c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// blacklisted extensions. This allows us to test which extensions the alert 24c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// is showing, and also eliminates the UI component (since this is a unit 25c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// test). 26c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass MockExtensionErrorUI : public ExtensionErrorUI { 27c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch public: 28c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch explicit MockExtensionErrorUI(ExtensionErrorUI::Delegate* delegate); 29c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual ~MockExtensionErrorUI(); 30c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 31c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Wrappers around the similar methods in ExtensionErrorUI. 32c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void CloseUI(); 33c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void Accept(); 34c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch void Details(); 35c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 36c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionErrorUI::Delegate* delegate() { return delegate_; } 37c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 38c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch private: 39c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // ExtensionErrorUI implementation. 40c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual bool ShowErrorInBubbleView() OVERRIDE; 41c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void ShowExtensions() OVERRIDE; 42c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void Close() OVERRIDE; 43c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 44c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Keep a copy of the delegate around for ourselves. 45c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionErrorUI::Delegate* delegate_; 46c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 47c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 48c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// We use this as a slight hack to get the created Error UI, if any. We should 49c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// only ever have one (since this is a single-profile test), and this avoids 50c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// the need for any kind of accessor to the ErrorController from 51c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// ExtensionService. 52c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochMockExtensionErrorUI* g_error_ui = NULL; 53c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 54c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochMockExtensionErrorUI::MockExtensionErrorUI( 55c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionErrorUI::Delegate* delegate) 56c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch : ExtensionErrorUI(delegate), 57c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate_(delegate) { 58c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // We should never make more than one of these in a test. 59c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch DCHECK(!g_error_ui); 60c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch g_error_ui = this; 61c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 62c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 63c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochMockExtensionErrorUI::~MockExtensionErrorUI() { 64c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch g_error_ui = NULL; 65c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 66c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 67c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid MockExtensionErrorUI::CloseUI() { 68c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BubbleViewDidClose(); 69c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 70c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 71c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid MockExtensionErrorUI::Accept() { 72c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BubbleViewAcceptButtonPressed(); 73c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 74c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 75c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid MockExtensionErrorUI::Details() { 76c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch BubbleViewCancelButtonPressed(); 77c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 78c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 79c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochbool MockExtensionErrorUI::ShowErrorInBubbleView() { 80c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return true; 81c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 82c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 83c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid MockExtensionErrorUI::ShowExtensions() {} 84c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 85c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid MockExtensionErrorUI::Close() { 86c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch CloseUI(); 87c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 88c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 89c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochExtensionErrorUI* CreateMockUI(ExtensionErrorUI::Delegate* delegate) { 90c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return new MockExtensionErrorUI(delegate); 91c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 92c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 93c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Builds and returns a simple extension. 94c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochscoped_refptr<const Extension> BuildExtension() { 95c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return ExtensionBuilder() 96c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .SetManifest(DictionaryBuilder().Set("name", "My Wonderful Extension") 97c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .Set("version", "0.1.1.0") 98c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .Set("manifest_version", 2) 99c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .Build()) 100c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .Build(); 101c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 102c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 103c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace 104c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 105c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochclass ExtensionErrorControllerUnitTest : public ExtensionServiceTestBase { 106c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch protected: 107c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch virtual void SetUp() OVERRIDE; 108c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 109c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Add an extension to chrome, and mark it as blacklisted in the prefs. 110c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch testing::AssertionResult AddBlacklistedExtension(const Extension* extension); 111c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 112c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Return the ExtensionPrefs associated with the test. 113c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionPrefs* GetPrefs(); 114c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 115c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch Profile* profile() { return profile_.get(); } 116c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch}; 117c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 118c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochvoid ExtensionErrorControllerUnitTest::SetUp() { 119c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionServiceTestBase::SetUp(); 120c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Make sure we use the mock UI instead of the real UI. 121c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionErrorController::SetUICreateMethodForTesting(CreateMockUI); 122c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 123c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // We don't want a first-run ExtensionService, since we ignore warnings 124c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // for new profiles. 125c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionServiceInitParams params = CreateDefaultInitParams(); 126c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch params.is_first_run = false; 127c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch InitializeExtensionService(params); 128c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 129c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 130c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdochtesting::AssertionResult 131c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochExtensionErrorControllerUnitTest::AddBlacklistedExtension( 132c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const Extension* extension) { 133c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetPrefs()->SetExtensionBlacklisted(extension->id(), true); 134c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch service_->AddExtension(extension); 135c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 136c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Make sure the extension is added to the blacklisted set. 137c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch if (!ExtensionRegistry::Get(profile())->blacklisted_extensions() 138c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch .Contains(extension->id())) { 139c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return testing::AssertionFailure() 140c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch << "Failed to add blacklisted extension."; 141c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch } 142c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 143c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return testing::AssertionSuccess(); 144c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 145c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 146c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochExtensionPrefs* ExtensionErrorControllerUnitTest::GetPrefs() { 147c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch return ExtensionPrefs::Get(profile()); 148c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 149c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 150c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Test that closing the extension alert for blacklisted extensions counts 151c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// as acknowledging them in the prefs. 152c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(ExtensionErrorControllerUnitTest, ClosingAcknowledgesBlacklisted) { 153c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Add a blacklisted extension. 154c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_refptr<const Extension> extension = BuildExtension(); 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(AddBlacklistedExtension(extension.get())); 156c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 157c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch service_->Init(); 158c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 159c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Make sure that we created an error "ui" to warn about the blacklisted 160c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // extension. 161c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(g_error_ui); 162c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ExtensionErrorUI::Delegate* delegate = g_error_ui->delegate(); 163c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(delegate); 164c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 165c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Make sure that the blacklisted extension is reported (and that no other 166c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // extensions are). 167c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch const ExtensionSet& delegate_blacklisted_extensions = 168c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch delegate->GetBlacklistedExtensions(); 169c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_EQ(1u, delegate_blacklisted_extensions.size()); 170c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(delegate_blacklisted_extensions.Contains(extension->id())); 171c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 172c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Close, and verify that the extension ids now acknowledged. 173c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch g_error_ui->CloseUI(); 174c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GetPrefs()->IsBlacklistedExtensionAcknowledged(extension->id())); 175c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Verify we cleaned up after ourselves. 176c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(g_error_ui); 177c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 178c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 179c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Test that clicking "accept" on the extension alert counts as acknowledging 180c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// blacklisted extensions. 181c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(ExtensionErrorControllerUnitTest, AcceptingAcknowledgesBlacklisted) { 182c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Add a blacklisted extension. 183c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_refptr<const Extension> extension = BuildExtension(); 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(AddBlacklistedExtension(extension.get())); 185c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 186c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch service_->Init(); 187c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 188c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Make sure that we created an error "ui" to warn about the blacklisted 189c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // extension. 190c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_TRUE(g_error_ui); 191c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 192c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Accept, and verify that the extension ids now acknowledged. 193c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch g_error_ui->Accept(); 194c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_TRUE(GetPrefs()->IsBlacklistedExtensionAcknowledged(extension->id())); 195c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // Verify we cleaned up after ourselves. 196c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch EXPECT_FALSE(g_error_ui); 197c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 198c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 199c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// Test that we don't warn for extensions which are blacklisted, but have 200c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch// already been acknowledged. 201c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen MurdochTEST_F(ExtensionErrorControllerUnitTest, DontWarnForAcknowledgedBlacklisted) { 202c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch scoped_refptr<const Extension> extension = BuildExtension(); 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ASSERT_TRUE(AddBlacklistedExtension(extension.get())); 204c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 205c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch GetPrefs()->AcknowledgeBlacklistedExtension(extension->id()); 206c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 207c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch service_->Init(); 208c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 209c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // We should never have made an alert, because the extension should already 210c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch // be acknowledged. 211c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch ASSERT_FALSE(g_error_ui); 212c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} 213c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch 214c5cede9ae108bb15f6b7a8aea21c7e1fefa2834cBen Murdoch} // namespace extensions 215