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 EXTENSIONS_BROWSER_WARNING_SET_H_ 6 #define EXTENSIONS_BROWSER_WARNING_SET_H_ 7 8 #include <set> 9 #include <string> 10 #include <vector> 11 12 #include "url/gurl.h" 13 14 namespace base { 15 class FilePath; 16 } 17 18 namespace extensions { 19 20 class ExtensionSet; 21 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 { 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, 33 // This extension failed to modify a network request because the 34 // modification conflicted with a modification of another extension. 35 kNetworkConflict, 36 // This extension failed to redirect a network request because another 37 // extension with higher precedence redirected to a different target. 38 kRedirectConflict, 39 // The extension repeatedly flushed WebKit's in-memory cache, which slows 40 // down the overall performance. 41 kRepeatedCacheFlushes, 42 // The extension failed to determine the filename of a download because 43 // another extension with higher precedence determined a different filename. 44 kDownloadFilenameConflict, 45 kReloadTooFrequent, 46 kMaxWarningType 47 }; 48 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); 53 54 // Factory methods for various warning types. 55 static Warning CreateNetworkDelayWarning( 56 const std::string& extension_id); 57 static Warning CreateNetworkConflictWarning( 58 const std::string& extension_id); 59 static Warning CreateRedirectConflictWarning( 60 const std::string& extension_id, 61 const std::string& winning_extension_id, 62 const GURL& attempted_redirect_url, 63 const GURL& winning_redirect_url); 64 static Warning CreateRequestHeaderConflictWarning( 65 const std::string& extension_id, 66 const std::string& winning_extension_id, 67 const std::string& conflicting_header); 68 static Warning CreateResponseHeaderConflictWarning( 69 const std::string& extension_id, 70 const std::string& winning_extension_id, 71 const std::string& conflicting_header); 72 static Warning CreateCredentialsConflictWarning( 73 const std::string& extension_id, 74 const std::string& winning_extension_id); 75 static Warning CreateRepeatedCacheFlushesWarning( 76 const std::string& extension_id); 77 static Warning CreateDownloadFilenameConflictWarning( 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); 82 static Warning CreateReloadTooFrequentWarning( 83 const std::string& extension_id); 84 85 // Returns the specific warning type. warning_type()86 WarningType warning_type() const { return type_; } 87 88 // Returns the id of the extension for which this warning is valid. extension_id()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; 93 94 private: 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. 99 Warning(WarningType type, 100 const std::string& extension_id, 101 int message_id, 102 const std::vector<std::string>& message_parameters); 103 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_; 110 }; 111 112 // Compare Warnings based on the tuple of (extension_id, type). 113 // The message associated with Warnings is purely informational 114 // and does not contribute to distinguishing extensions. 115 bool operator<(const Warning& a, const Warning& b); 116 117 typedef std::set<Warning> WarningSet; 118 119 } // namespace extensions 120 121 #endif // EXTENSIONS_BROWSER_WARNING_SET_H_ 122