diff options
Diffstat (limited to 'chromium/extensions/browser/extension_error.h')
-rw-r--r-- | chromium/extensions/browser/extension_error.h | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/chromium/extensions/browser/extension_error.h b/chromium/extensions/browser/extension_error.h new file mode 100644 index 00000000000..7caa95cddd5 --- /dev/null +++ b/chromium/extensions/browser/extension_error.h @@ -0,0 +1,165 @@ +// Copyright 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_BROWSER_EXTENSION_ERROR_H_ +#define EXTENSIONS_BROWSER_EXTENSION_ERROR_H_ + +#include <stddef.h> + +#include <string> +#include <vector> + +#include "base/compiler_specific.h" +#include "base/logging.h" +#include "base/macros.h" +#include "base/strings/string16.h" +#include "extensions/common/stack_frame.h" +#include "url/gurl.h" + +namespace extensions { + +class ExtensionError { + public: + enum Type { + MANIFEST_ERROR = 0, + RUNTIME_ERROR, + INTERNAL_ERROR, + NUM_ERROR_TYPES, // Put new values above this. + }; + + virtual ~ExtensionError(); + + virtual std::string GetDebugString() const; + + // Return true if this error and |rhs| are considered equal, and should be + // grouped together. + bool IsEqual(const ExtensionError* rhs) const; + + Type type() const { return type_; } + const std::string& extension_id() const { return extension_id_; } + int id() const { return id_; } + void set_id(int id) { id_ = id; } + bool from_incognito() const { return from_incognito_; } + logging::LogSeverity level() const { return level_; } + const base::string16& source() const { return source_; } + const base::string16& message() const { return message_; } + size_t occurrences() const { return occurrences_; } + void set_occurrences(size_t occurrences) { occurrences_ = occurrences; } + + protected: + ExtensionError(Type type, + const std::string& extension_id, + bool from_incognito, + logging::LogSeverity level, + const base::string16& source, + const base::string16& message); + + virtual bool IsEqualImpl(const ExtensionError* rhs) const = 0; + + // Which type of error this is. + Type type_; + // The ID of the extension which caused the error. + std::string extension_id_; + // The id of this particular error. This can be zero if the id is never set. + int id_; + // Whether or not the error was caused while incognito. + bool from_incognito_; + // The severity level of the error. + logging::LogSeverity level_; + // The source for the error; this can be a script, web page, or manifest file. + // This is stored as a string (rather than a url) since it can be a Chrome + // script file (e.g., event_bindings.js). + base::string16 source_; + // The error message itself. + base::string16 message_; + // The number of times this error has occurred. + size_t occurrences_; + + private: + DISALLOW_COPY_AND_ASSIGN(ExtensionError); +}; + +class ManifestError : public ExtensionError { + public: + ManifestError(const std::string& extension_id, + const base::string16& message, + const base::string16& manifest_key, + const base::string16& manifest_specific); + ~ManifestError() override; + + std::string GetDebugString() const override; + + const base::string16& manifest_key() const { return manifest_key_; } + const base::string16& manifest_specific() const { return manifest_specific_; } + + private: + bool IsEqualImpl(const ExtensionError* rhs) const override; + + // If present, this indicates the feature in the manifest which caused the + // error. + base::string16 manifest_key_; + // If present, this is a more-specific location of the error - for instance, + // a specific permission which is incorrect, rather than simply "permissions". + base::string16 manifest_specific_; + + DISALLOW_COPY_AND_ASSIGN(ManifestError); +}; + +class RuntimeError : public ExtensionError { + public: + RuntimeError(const std::string& extension_id, // optional, sometimes unknown. + bool from_incognito, + const base::string16& source, + const base::string16& message, + const StackTrace& stack_trace, + const GURL& context_url, + logging::LogSeverity level, + int render_view_id, + int render_process_id); + ~RuntimeError() override; + + std::string GetDebugString() const override; + + const GURL& context_url() const { return context_url_; } + const StackTrace& stack_trace() const { return stack_trace_; } + int render_frame_id() const { return render_frame_id_; } + int render_process_id() const { return render_process_id_; } + + private: + bool IsEqualImpl(const ExtensionError* rhs) const override; + + // Since we piggy-back onto other error reporting systems (like V8 and + // WebKit), the reported information may need to be cleaned up in order to be + // in a consistent format. + void CleanUpInit(); + + GURL context_url_; + StackTrace stack_trace_; + + // Keep track of the render process which caused the error in order to + // inspect the frame later, if possible. + int render_frame_id_; + int render_process_id_; + + DISALLOW_COPY_AND_ASSIGN(RuntimeError); +}; + +class InternalError : public ExtensionError { + public: + InternalError(const std::string& extension_id, + const base::string16& message, + logging::LogSeverity level); + ~InternalError() override; + + std::string GetDebugString() const override; + + private: + bool IsEqualImpl(const ExtensionError* rhs) const override; + + DISALLOW_COPY_AND_ASSIGN(InternalError); +}; + +} // namespace extensions + +#endif // EXTENSIONS_BROWSER_EXTENSION_ERROR_H_ |