1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
// Copyright (c) 2013 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_MESSAGE_BUBBLE_CONTROLLER_H_
#define CHROME_BROWSER_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_CONTROLLER_H_
#include <string>
#include "chrome/browser/extensions/extension_message_bubble.h"
#include "extensions/browser/browser_context_keyed_api_factory.h"
#include "extensions/common/extension.h"
class Browser;
class Profile;
namespace extensions {
class ExtensionPrefs;
class SuspiciousExtensionBubble;
class ExtensionMessageBubbleController {
public:
// UMA histogram constants.
enum BubbleAction {
ACTION_LEARN_MORE = 0,
ACTION_EXECUTE,
ACTION_DISMISS,
ACTION_BOUNDARY, // Must be the last value.
};
class Delegate {
public:
explicit Delegate(Profile* profile);
virtual ~Delegate();
virtual bool ShouldIncludeExtension(const std::string& extension_id) = 0;
virtual void AcknowledgeExtension(
const std::string& extension_id,
BubbleAction action) = 0;
virtual void PerformAction(const ExtensionIdList& list) = 0;
virtual void OnClose() {}
// Text for various UI labels shown in the bubble.
virtual base::string16 GetTitle() const = 0;
// Fetches the message to show in the body. |anchored_to_browser_action|
// will be true if the bubble is anchored against a specific extension
// icon, allowing the bubble to show a different message than when it is
// anchored against something else (e.g. show "This extension has..."
// instead of "An extension has...").
virtual base::string16 GetMessageBody(
bool anchored_to_browser_action) const = 0;
virtual base::string16 GetOverflowText(
const base::string16& overflow_count) const = 0;
virtual base::string16 GetLearnMoreLabel() const;
virtual GURL GetLearnMoreUrl() const = 0;
virtual base::string16 GetActionButtonLabel() const = 0;
virtual base::string16 GetDismissButtonLabel() const = 0;
// Whether to show a list of extensions in the bubble.
virtual bool ShouldShowExtensionList() const = 0;
// In some cases, we want the delegate only to handle a single extension
// and this sets which extension.
virtual void RestrictToSingleExtension(const std::string& extension_id);
// Record, through UMA, how many extensions were found.
virtual void LogExtensionCount(size_t count) = 0;
virtual void LogAction(BubbleAction action) = 0;
// Has the user acknowledged info about the extension the bubble reports.
virtual bool HasBubbleInfoBeenAcknowledged(const std::string& extension_id);
virtual void SetBubbleInfoBeenAcknowledged(const std::string& extension_id,
bool value);
protected:
Profile* profile() const;
std::string get_acknowledged_flag_pref_name() const;
void set_acknowledged_flag_pref_name(std::string pref_name);
private:
// A weak pointer to the profile we are associated with. Not owned by us.
Profile* profile_;
// Name for corresponding pref that keeps if the info the bubble contains
// was acknowledged by user.
std::string acknowledged_pref_name_;
};
ExtensionMessageBubbleController(Delegate* delegate, Profile* profile);
virtual ~ExtensionMessageBubbleController();
Delegate* delegate() const { return delegate_.get(); }
// Obtains a list of all extensions (by name) the controller knows about.
std::vector<base::string16> GetExtensionList();
// Obtains a list of all extensions (by id) the controller knows about.
const ExtensionIdList& GetExtensionIdList();
// Whether to close the bubble when it loses focus.
virtual bool CloseOnDeactivate();
// Sets up the callbacks and shows the bubble.
virtual void Show(ExtensionMessageBubble* bubble);
// Callbacks from bubble. Declared virtual for testing purposes.
virtual void OnBubbleAction();
virtual void OnBubbleDismiss();
virtual void OnLinkClicked();
private:
// Iterate over the known extensions and acknowledge each one.
void AcknowledgeExtensions();
// Get the data this class needs.
ExtensionIdList* GetOrCreateExtensionList();
// A weak pointer to the profile we are associated with. Not owned by us.
Profile* profile_;
// The list of extensions found.
ExtensionIdList extension_list_;
// The action the user took in the bubble.
BubbleAction user_action_;
// Our delegate supplying information about what to show in the dialog.
scoped_ptr<Delegate> delegate_;
// Whether this class has initialized.
bool initialized_;
DISALLOW_COPY_AND_ASSIGN(ExtensionMessageBubbleController);
};
} // namespace extensions
#endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_MESSAGE_BUBBLE_CONTROLLER_H_
|