diff options
author | rdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-10 01:50:44 +0000 |
---|---|---|
committer | rdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-04-10 01:50:44 +0000 |
commit | 373daf970e47a31cd49f516fa9a1ce9978140999 (patch) | |
tree | fc9f1fa4f719acb17551c07db3c3621b1e57636a /chrome/browser/extensions/extension_error_controller.h | |
parent | 6683e1b251eb78a569fefcc15d1a64ca22a4421a (diff) | |
download | chromium_src-373daf970e47a31cd49f516fa9a1ce9978140999.zip chromium_src-373daf970e47a31cd49f516fa9a1ce9978140999.tar.gz chromium_src-373daf970e47a31cd49f516fa9a1ce9978140999.tar.bz2 |
Refactor ExtensionErrorUI to remove ExtensionService's work
Create an ExtensionErrorController to be in charge of ExtensionErrorUI so that
ExtensionService doens't have to know as much about it.
And, of course, add a few tests for otherwise untested behavior.
BUG=351891
Review URL: https://codereview.chromium.org/227373007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262893 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/extensions/extension_error_controller.h')
-rw-r--r-- | chrome/browser/extensions/extension_error_controller.h | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/chrome/browser/extensions/extension_error_controller.h b/chrome/browser/extensions/extension_error_controller.h new file mode 100644 index 0000000..a86e8f6 --- /dev/null +++ b/chrome/browser/extensions/extension_error_controller.h @@ -0,0 +1,68 @@ +// 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 "base/memory/scoped_ptr.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: + virtual content::BrowserContext* GetContext() OVERRIDE; + virtual const ExtensionSet& GetExternalExtensions() OVERRIDE; + virtual const ExtensionSet& GetBlacklistedExtensions() OVERRIDE; + virtual void OnAlertDetails() OVERRIDE; + virtual void OnAlertAccept() OVERRIDE; + virtual 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. + scoped_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_ |