blob: d932e1dc219d264017a12d47d3b7ef9596bd826c (
plain)
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_
|