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