[Extensions] Clean up ExtensionMessageBubble architecture

It's confusing to have ExtensionMessageBubbleController have both a delegate
(with subclasses) and be subclassed itself. Remove the subclasses of
ExtensionMessageBubbleController (except tests), and have the delegates
determine the behavior.

BUG=
[email protected]

Review URL: https://codereview.chromium.org/1424723004

Cr-Commit-Position: refs/heads/master@{#358198}
diff --git a/chrome/browser/extensions/settings_api_bubble_delegate.h b/chrome/browser/extensions/settings_api_bubble_delegate.h
new file mode 100644
index 0000000..dde081d3
--- /dev/null
+++ b/chrome/browser/extensions/settings_api_bubble_delegate.h
@@ -0,0 +1,57 @@
+// 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_SETTINGS_API_BUBBLE_DELEGATE_H_
+#define CHROME_BROWSER_EXTENSIONS_SETTINGS_API_BUBBLE_DELEGATE_H_
+
+#include <string>
+
+#include "base/macros.h"
+#include "chrome/browser/extensions/extension_message_bubble_controller.h"
+#include "chrome/common/extensions/manifest_handlers/settings_overrides_handler.h"
+
+namespace extensions {
+
+class SettingsApiBubbleDelegate
+    : public ExtensionMessageBubbleController::Delegate {
+ public:
+  SettingsApiBubbleDelegate(Profile* profile, SettingsApiOverrideType type);
+  ~SettingsApiBubbleDelegate() override;
+
+  // ExtensionMessageBubbleController::Delegate methods.
+  bool ShouldIncludeExtension(const Extension* extension) override;
+  void AcknowledgeExtension(
+      const std::string& extension_id,
+      ExtensionMessageBubbleController::BubbleAction user_action) override;
+  void PerformAction(const ExtensionIdList& list) override;
+  base::string16 GetTitle() const override;
+  base::string16 GetMessageBody(bool anchored_to_browser_action,
+                                int extension_count) const override;
+  base::string16 GetOverflowText(
+      const base::string16& overflow_count) const override;
+  GURL GetLearnMoreUrl() const override;
+  base::string16 GetActionButtonLabel() const override;
+  base::string16 GetDismissButtonLabel() const override;
+  bool ShouldCloseOnDeactivate() const override;
+  bool ShouldShowExtensionList() const override;
+  bool ShouldHighlightExtensions() const override;
+  bool ShouldLimitToEnabledExtensions() const override;
+  void LogExtensionCount(size_t count) override;
+  void LogAction(ExtensionMessageBubbleController::BubbleAction) override;
+
+ private:
+  // The type of settings override this bubble will report on. This can be, for
+  // example, a bubble to notify the user that the search engine has been
+  // changed by an extension (or homepage/startup pages/etc).
+  SettingsApiOverrideType type_;
+
+  // The ID of the extension we are showing the bubble for.
+  std::string extension_id_;
+
+  DISALLOW_COPY_AND_ASSIGN(SettingsApiBubbleDelegate);
+};
+
+}  // namespace extensions
+
+#endif  // CHROME_BROWSER_EXTENSIONS_SETTINGS_API_BUBBLE_DELEGATE_H_