Home | History | Annotate | Download | only in browser
      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.
     86   WarningType warning_type() const { return type_; }
     87 
     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;
     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