• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.
warning_type()89   WarningType warning_type() const { return type_; }
90 
91   // Returns the id of the extension for which this warning is valid.
extension_id()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