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