OLD | NEW |
| (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 #ifndef CHROME_BROWSER_EXTENSIONS_EXTENSION_WARNING_SET_H_ | |
6 #define CHROME_BROWSER_EXTENSIONS_EXTENSION_WARNING_SET_H_ | |
7 | |
8 #include <set> | |
9 #include <string> | |
10 #include <vector> | |
11 | |
12 #include "url/gurl.h" | |
13 | |
14 // TODO(battre) Remove the Extension prefix. | |
15 | |
16 namespace base { | |
17 class FilePath; | |
18 } | |
19 | |
20 namespace extensions { | |
21 | |
22 class ExtensionSet; | |
23 | |
24 // This class is used by the ExtensionWarningService to represent warnings if | |
25 // extensions misbehave. Note that the ExtensionWarningService deals only with | |
26 // specific warnings that should trigger a badge on the Chrome menu button. | |
27 class ExtensionWarning { | |
28 public: | |
29 enum WarningType { | |
30 // Don't use this, it is only intended for the default constructor and | |
31 // does not have localized warning messages for the UI. | |
32 kInvalid = 0, | |
33 // An extension caused excessive network delays. | |
34 kNetworkDelay, | |
35 // This extension failed to modify a network request because the | |
36 // modification conflicted with a modification of another extension. | |
37 kNetworkConflict, | |
38 // This extension failed to redirect a network request because another | |
39 // extension with higher precedence redirected to a different target. | |
40 kRedirectConflict, | |
41 // The extension repeatedly flushed WebKit's in-memory cache, which slows | |
42 // down the overall performance. | |
43 kRepeatedCacheFlushes, | |
44 // The extension failed to determine the filename of a download because | |
45 // another extension with higher precedence determined a different filename. | |
46 kDownloadFilenameConflict, | |
47 kReloadTooFrequent, | |
48 kMaxWarningType | |
49 }; | |
50 | |
51 // We allow copy&assign for passing containers of ExtensionWarnings between | |
52 // threads. | |
53 ExtensionWarning(const ExtensionWarning& other); | |
54 ~ExtensionWarning(); | |
55 ExtensionWarning& operator=(const ExtensionWarning& other); | |
56 | |
57 // Factory methods for various warning types. | |
58 static ExtensionWarning CreateNetworkDelayWarning( | |
59 const std::string& extension_id); | |
60 static ExtensionWarning CreateNetworkConflictWarning( | |
61 const std::string& extension_id); | |
62 static ExtensionWarning CreateRedirectConflictWarning( | |
63 const std::string& extension_id, | |
64 const std::string& winning_extension_id, | |
65 const GURL& attempted_redirect_url, | |
66 const GURL& winning_redirect_url); | |
67 static ExtensionWarning CreateRequestHeaderConflictWarning( | |
68 const std::string& extension_id, | |
69 const std::string& winning_extension_id, | |
70 const std::string& conflicting_header); | |
71 static ExtensionWarning CreateResponseHeaderConflictWarning( | |
72 const std::string& extension_id, | |
73 const std::string& winning_extension_id, | |
74 const std::string& conflicting_header); | |
75 static ExtensionWarning CreateCredentialsConflictWarning( | |
76 const std::string& extension_id, | |
77 const std::string& winning_extension_id); | |
78 static ExtensionWarning CreateRepeatedCacheFlushesWarning( | |
79 const std::string& extension_id); | |
80 static ExtensionWarning CreateDownloadFilenameConflictWarning( | |
81 const std::string& losing_extension_id, | |
82 const std::string& winning_extension_id, | |
83 const base::FilePath& losing_filename, | |
84 const base::FilePath& winning_filename); | |
85 static ExtensionWarning CreateReloadTooFrequentWarning( | |
86 const std::string& extension_id); | |
87 | |
88 // Returns the specific warning type. | |
89 WarningType warning_type() const { return type_; } | |
90 | |
91 // Returns the id of the extension for which this warning is valid. | |
92 const std::string& extension_id() const { return extension_id_; } | |
93 | |
94 // Returns a localized warning message. | |
95 std::string GetLocalizedMessage(const ExtensionSet* extensions) const; | |
96 | |
97 private: | |
98 // Constructs a warning of type |type| for extension |extension_id|. This | |
99 // could indicate for example the fact that an extension conflicted with | |
100 // others. The |message_id| refers to an IDS_ string ID. The | |
101 // |message_parameters| are filled into the message template. | |
102 ExtensionWarning(WarningType type, | |
103 const std::string& extension_id, | |
104 int message_id, | |
105 const std::vector<std::string>& message_parameters); | |
106 | |
107 WarningType type_; | |
108 std::string extension_id_; | |
109 // IDS_* resource ID. | |
110 int message_id_; | |
111 // Parameters to be filled into the string identified by |message_id_|. | |
112 std::vector<std::string> message_parameters_; | |
113 }; | |
114 | |
115 // Compare ExtensionWarnings based on the tuple of (extension_id, type). | |
116 // The message associated with ExtensionWarnings is purely informational | |
117 // and does not contribute to distinguishing extensions. | |
118 bool operator<(const ExtensionWarning& a, const ExtensionWarning& b); | |
119 | |
120 typedef std::set<ExtensionWarning> ExtensionWarningSet; | |
121 | |
122 } // namespace extensions | |
123 | |
124 #endif // CHROME_BROWSER_EXTENSIONS_EXTENSION_WARNING_SET_H_ | |
OLD | NEW |