Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(82)

Side by Side Diff: chrome/browser/extensions/extension_warning_set.cc

Issue 503033002: Move ExtensionWarningService and ExtensionsWarningSet to extensions. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@3_web_view_internal
Patch Set: rebase Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/extensions/extension_warning_set.h"
6
7 #include "base/files/file_path.h"
8 #include "base/strings/string_util.h"
9 #include "base/strings/utf_string_conversions.h"
10 #include "chrome/browser/chrome_notification_types.h"
11 #include "chrome/grit/chromium_strings.h"
12 #include "chrome/grit/generated_resources.h"
13 #include "content/public/browser/browser_thread.h"
14 #include "extensions/common/extension.h"
15 #include "extensions/common/extension_set.h"
16 #include "net/base/escape.h"
17 #include "ui/base/l10n/l10n_util.h"
18
19 using content::BrowserThread;
20
21 namespace {
22 // Prefix for message parameters indicating that the parameter needs to
23 // be translated from an extension id to the extension name.
24 const char kTranslate[] = "TO_TRANSLATE:";
25 const size_t kMaxNumberOfParameters = 4;
26 }
27
28 namespace extensions {
29
30 //
31 // ExtensionWarning
32 //
33
34 ExtensionWarning::ExtensionWarning(
35 WarningType type,
36 const std::string& extension_id,
37 int message_id,
38 const std::vector<std::string>& message_parameters)
39 : type_(type),
40 extension_id_(extension_id),
41 message_id_(message_id),
42 message_parameters_(message_parameters) {
43 // These are invalid here because they do not have corresponding warning
44 // messages in the UI.
45 CHECK_NE(type, kInvalid);
46 CHECK_NE(type, kMaxWarningType);
47 CHECK_LE(message_parameters.size(), kMaxNumberOfParameters);
48 }
49
50 ExtensionWarning::ExtensionWarning(const ExtensionWarning& other)
51 : type_(other.type_),
52 extension_id_(other.extension_id_),
53 message_id_(other.message_id_),
54 message_parameters_(other.message_parameters_) {}
55
56 ExtensionWarning::~ExtensionWarning() {
57 }
58
59 ExtensionWarning& ExtensionWarning::operator=(const ExtensionWarning& other) {
60 type_ = other.type_;
61 extension_id_ = other.extension_id_;
62 message_id_ = other.message_id_;
63 message_parameters_ = other.message_parameters_;
64 return *this;
65 }
66
67 // static
68 ExtensionWarning ExtensionWarning::CreateNetworkDelayWarning(
69 const std::string& extension_id) {
70 std::vector<std::string> message_parameters;
71 message_parameters.push_back(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME));
72 return ExtensionWarning(
73 kNetworkDelay,
74 extension_id,
75 IDS_EXTENSION_WARNINGS_NETWORK_DELAY,
76 message_parameters);
77 }
78
79 // static
80 ExtensionWarning ExtensionWarning::CreateNetworkConflictWarning(
81 const std::string& extension_id) {
82 std::vector<std::string> message_parameters;
83 return ExtensionWarning(
84 kNetworkConflict,
85 extension_id,
86 IDS_EXTENSION_WARNINGS_NETWORK_CONFLICT,
87 message_parameters);
88 }
89
90 // static
91 ExtensionWarning ExtensionWarning::CreateRedirectConflictWarning(
92 const std::string& extension_id,
93 const std::string& winning_extension_id,
94 const GURL& attempted_redirect_url,
95 const GURL& winning_redirect_url) {
96 std::vector<std::string> message_parameters;
97 message_parameters.push_back(attempted_redirect_url.spec());
98 message_parameters.push_back(kTranslate + winning_extension_id);
99 message_parameters.push_back(winning_redirect_url.spec());
100 return ExtensionWarning(
101 kRedirectConflict,
102 extension_id,
103 IDS_EXTENSION_WARNINGS_REDIRECT_CONFLICT,
104 message_parameters);
105 }
106
107 // static
108 ExtensionWarning ExtensionWarning::CreateRequestHeaderConflictWarning(
109 const std::string& extension_id,
110 const std::string& winning_extension_id,
111 const std::string& conflicting_header) {
112 std::vector<std::string> message_parameters;
113 message_parameters.push_back(conflicting_header);
114 message_parameters.push_back(kTranslate + winning_extension_id);
115 return ExtensionWarning(
116 kNetworkConflict,
117 extension_id,
118 IDS_EXTENSION_WARNINGS_REQUEST_HEADER_CONFLICT,
119 message_parameters);
120 }
121
122 // static
123 ExtensionWarning ExtensionWarning::CreateResponseHeaderConflictWarning(
124 const std::string& extension_id,
125 const std::string& winning_extension_id,
126 const std::string& conflicting_header) {
127 std::vector<std::string> message_parameters;
128 message_parameters.push_back(conflicting_header);
129 message_parameters.push_back(kTranslate + winning_extension_id);
130 return ExtensionWarning(
131 kNetworkConflict,
132 extension_id,
133 IDS_EXTENSION_WARNINGS_RESPONSE_HEADER_CONFLICT,
134 message_parameters);
135 }
136
137 // static
138 ExtensionWarning ExtensionWarning::CreateCredentialsConflictWarning(
139 const std::string& extension_id,
140 const std::string& winning_extension_id) {
141 std::vector<std::string> message_parameters;
142 message_parameters.push_back(kTranslate + winning_extension_id);
143 return ExtensionWarning(
144 kNetworkConflict,
145 extension_id,
146 IDS_EXTENSION_WARNINGS_CREDENTIALS_CONFLICT,
147 message_parameters);
148 }
149
150 // static
151 ExtensionWarning ExtensionWarning::CreateRepeatedCacheFlushesWarning(
152 const std::string& extension_id) {
153 std::vector<std::string> message_parameters;
154 message_parameters.push_back(l10n_util::GetStringUTF8(IDS_PRODUCT_NAME));
155 return ExtensionWarning(
156 kRepeatedCacheFlushes,
157 extension_id,
158 IDS_EXTENSION_WARNINGS_NETWORK_DELAY,
159 message_parameters);
160 }
161
162 // static
163 ExtensionWarning ExtensionWarning::CreateDownloadFilenameConflictWarning(
164 const std::string& losing_extension_id,
165 const std::string& winning_extension_id,
166 const base::FilePath& losing_filename,
167 const base::FilePath& winning_filename) {
168 std::vector<std::string> message_parameters;
169 message_parameters.push_back(base::UTF16ToUTF8(
170 losing_filename.LossyDisplayName()));
171 message_parameters.push_back(kTranslate + winning_extension_id);
172 message_parameters.push_back(base::UTF16ToUTF8(
173 winning_filename.LossyDisplayName()));
174 return ExtensionWarning(
175 kDownloadFilenameConflict,
176 losing_extension_id,
177 IDS_EXTENSION_WARNINGS_DOWNLOAD_FILENAME_CONFLICT,
178 message_parameters);
179 }
180
181 // static
182 ExtensionWarning ExtensionWarning::CreateReloadTooFrequentWarning(
183 const std::string& extension_id) {
184 std::vector<std::string> message_parameters;
185 return ExtensionWarning(kReloadTooFrequent,
186 extension_id,
187 IDS_EXTENSION_WARNING_RELOAD_TOO_FREQUENT,
188 message_parameters);
189 }
190
191 std::string ExtensionWarning::GetLocalizedMessage(
192 const ExtensionSet* extensions) const {
193 DCHECK_CURRENTLY_ON(BrowserThread::UI);
194
195 // These parameters may be unsafe (URLs and Extension names) and need
196 // to be HTML-escaped before being embedded in the UI. Also extension IDs
197 // are translated to full extension names.
198 std::vector<base::string16> final_parameters;
199 for (size_t i = 0; i < message_parameters_.size(); ++i) {
200 std::string message = message_parameters_[i];
201 if (StartsWithASCII(message, kTranslate, true)) {
202 std::string extension_id = message.substr(sizeof(kTranslate) - 1);
203 const extensions::Extension* extension =
204 extensions->GetByID(extension_id);
205 message = extension ? extension->name() : extension_id;
206 }
207 final_parameters.push_back(base::UTF8ToUTF16(net::EscapeForHTML(message)));
208 }
209
210 COMPILE_ASSERT(kMaxNumberOfParameters == 4u, YouNeedToAddMoreCaseStatements);
211 switch (final_parameters.size()) {
212 case 0:
213 return l10n_util::GetStringUTF8(message_id_);
214 case 1:
215 return l10n_util::GetStringFUTF8(message_id_, final_parameters[0]);
216 case 2:
217 return l10n_util::GetStringFUTF8(message_id_, final_parameters[0],
218 final_parameters[1]);
219 case 3:
220 return l10n_util::GetStringFUTF8(message_id_, final_parameters[0],
221 final_parameters[1], final_parameters[2]);
222 case 4:
223 return l10n_util::GetStringFUTF8(message_id_, final_parameters[0],
224 final_parameters[1], final_parameters[2], final_parameters[3]);
225 default:
226 NOTREACHED();
227 return std::string();
228 }
229 }
230
231 bool operator<(const ExtensionWarning& a, const ExtensionWarning& b) {
232 if (a.extension_id() != b.extension_id())
233 return a.extension_id() < b.extension_id();
234 return a.warning_type() < b.warning_type();
235 }
236
237 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/extension_warning_set.h ('k') | chrome/browser/extensions/test_extension_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698