blob: 356f6652b2aebb7477010d000bf69fa891520668 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_CONTROLLER_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_CONTROLLER_H_
#include <memory>
#include "base/macros.h"
#include "chrome/browser/extensions/extension_error_ui.h"
#include "extensions/common/extension_set.h"
namespace content {
class BrowserContext;
}
namespace extensions {
// The controller for the ExtensionErrorUI. This examines extensions for any
// blacklisted or external extensions in order to notify the user with an error.
// On acceptance, this will acknowledge the extensions.
class ExtensionErrorController : public ExtensionErrorUI::Delegate {
public:
typedef ExtensionErrorUI* (*UICreateMethod)(ExtensionErrorUI::Delegate*);
ExtensionErrorController(content::BrowserContext* context, bool is_first_run);
virtual ~ExtensionErrorController();
void ShowErrorIfNeeded();
// Set the factory method for creating a new ExtensionErrorUI.
static void SetUICreateMethodForTesting(UICreateMethod method);
private:
// ExtensionErrorUI::Delegate implementation:
content::BrowserContext* GetContext() override;
const ExtensionSet& GetExternalExtensions() override;
const ExtensionSet& GetBlacklistedExtensions() override;
void OnAlertDetails() override;
void OnAlertAccept() override;
void OnAlertClosed() override;
// Find any extensions that the user should be alerted about (like blacklisted
// extensions).
void IdentifyAlertableExtensions();
// TODO(rdevlin.cronin): We never seem to use |external_extensions_| here,
// but we do warn about them. Investigate more.
ExtensionSet external_extensions_;
// The extensions that are blacklisted and need user approval.
ExtensionSet blacklisted_extensions_;
// The UI component of this controller.
std::unique_ptr<ExtensionErrorUI> error_ui_;
// The BrowserContext with which we are associated.
content::BrowserContext* browser_context_;
// Whether or not this is the first run. If it is, we avoid noisy errors, and
// silently acknowledge blacklisted extensions.
bool is_first_run_;
DISALLOW_COPY_AND_ASSIGN(ExtensionErrorController);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_ERROR_CONTROLLER_H_