|  | // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style license that can be | 
|  | // found in the LICENSE file. | 
|  |  | 
|  | #ifndef EXTENSIONS_COMMON_INSTALL_WARNING_H_ | 
|  | #define EXTENSIONS_COMMON_INSTALL_WARNING_H_ | 
|  |  | 
|  | #include <ostream> | 
|  | #include <string> | 
|  |  | 
|  | namespace extensions { | 
|  |  | 
|  | // A struct to describe a non-fatal issue discovered in the installation of an | 
|  | // extension. | 
|  | struct InstallWarning { | 
|  | explicit InstallWarning(const std::string& message); | 
|  | InstallWarning(const std::string& message, | 
|  | const std::string& key); | 
|  | InstallWarning(const std::string& message, | 
|  | const std::string& key, | 
|  | const std::string& specific); | 
|  | ~InstallWarning(); | 
|  |  | 
|  | bool operator==(const InstallWarning& other) const { | 
|  | // We don't have to look at |key| or |specific| here, because they are each | 
|  | // used in the the message itself. | 
|  | // For example, a full message would be "Permission 'foo' is unknown or URL | 
|  | // pattern is malformed." |key| here is "permissions", and |specific| is | 
|  | // "foo", but these are redundant with the message. | 
|  | return message == other.message; | 
|  | } | 
|  |  | 
|  | // The warning's message (human-friendly). | 
|  | std::string message; | 
|  | // Optional - for specifying the incorrect key in the manifest (e.g., | 
|  | // "permissions"). | 
|  | std::string key; | 
|  | // Optional - for specifying the incorrect portion of a key in the manifest | 
|  | // (e.g., an unrecognized permission "foo" in "permissions"). | 
|  | std::string specific; | 
|  | }; | 
|  |  | 
|  | // Let gtest print InstallWarnings. | 
|  | void PrintTo(const InstallWarning&, ::std::ostream* os); | 
|  |  | 
|  | }  // namespace extensions | 
|  |  | 
|  | #endif  // EXTENSIONS_COMMON_INSTALL_WARNING_H_ |