| 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 |