Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(83)

Unified Diff: extensions/browser/extension_error.cc

Issue 23007021: Report Javascript Runtime Errors to the Error Console (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dc_ec_feldman
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « extensions/browser/extension_error.h ('k') | extensions/common/DEPS » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/extension_error.cc
diff --git a/extensions/browser/extension_error.cc b/extensions/browser/extension_error.cc
index eaef2216d1d9fd88883d9d36d2324b585e5f4500..9b1e95fb6068e60831f902f33146b0a868085ab7 100644
--- a/extensions/browser/extension_error.cc
+++ b/extensions/browser/extension_error.cc
@@ -4,7 +4,6 @@
#include "extensions/browser/extension_error.h"
-#include "base/json/json_reader.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/utf_string_conversions.h"
#include "base/values.h"
@@ -97,42 +96,21 @@ bool ManifestError::IsEqualImpl(const ExtensionError* rhs) const {
return true;
}
-RuntimeError::StackFrame::StackFrame() : line_number(-1), column_number(-1) {
-}
-
-RuntimeError::StackFrame::StackFrame(size_t frame_line,
- size_t frame_column,
- const string16& frame_url,
- const string16& frame_function)
- : line_number(frame_line),
- column_number(frame_column),
- url(frame_url),
- function(frame_function) {
-}
-
-RuntimeError::StackFrame::~StackFrame() {
-}
-
-bool RuntimeError::StackFrame::operator==(
- const RuntimeError::StackFrame& rhs) const {
- return line_number == rhs.line_number &&
- column_number == rhs.column_number &&
- url == rhs.url &&
- function == rhs.function;
-}
RuntimeError::RuntimeError(bool from_incognito,
const string16& source,
const string16& message,
- logging::LogSeverity level,
- const string16& details)
+ const StackTrace& stack_trace,
+ const GURL& context_url,
+ logging::LogSeverity level)
: ExtensionError(ExtensionError::RUNTIME_ERROR,
- std::string(), // We don't know the id yet.
+ GURL(source).host(),
from_incognito,
level,
source,
- message) {
- ParseDetails(details);
- DetermineExtensionID();
+ message),
+ context_url_(context_url),
+ stack_trace_(stack_trace) {
+ CleanUpInit();
}
RuntimeError::~RuntimeError() {
@@ -141,14 +119,14 @@ RuntimeError::~RuntimeError() {
std::string RuntimeError::PrintForTest() const {
std::string result = ExtensionError::PrintForTest() +
"\n Type: RuntimeError"
- "\n Context: " + base::UTF16ToUTF8(execution_context_url_) +
+ "\n Context: " + context_url_.spec() +
"\n Stack Trace: ";
for (StackTrace::const_iterator iter = stack_trace_.begin();
iter != stack_trace_.end(); ++iter) {
result += "\n {"
"\n Line: " + base::IntToString(iter->line_number) +
"\n Column: " + base::IntToString(iter->column_number) +
- "\n URL: " + base::UTF16ToUTF8(iter->url) +
+ "\n URL: " + base::UTF16ToUTF8(iter->source) +
"\n Function: " + base::UTF16ToUTF8(iter->function) +
"\n }";
}
@@ -163,49 +141,30 @@ bool RuntimeError::IsEqualImpl(const ExtensionError* rhs) const {
// of displaying an old and inaccurate stack trace.
return level_ == level_ &&
source_ == source_ &&
- execution_context_url_ == error->execution_context_url_ &&
+ context_url_ == error->context_url_ &&
stack_trace_.size() == error->stack_trace_.size() &&
(stack_trace_.empty() || stack_trace_[0] == error->stack_trace_[0]);
}
-void RuntimeError::ParseDetails(const string16& details) {
- scoped_ptr<base::Value> value(
- base::JSONReader::Read(base::UTF16ToUTF8(details)));
- const base::DictionaryValue* details_value;
- const base::ListValue* trace_value = NULL;
-
- // The |details| value should contain an execution context url and a stack
- // trace.
- if (!value.get() ||
- !value->GetAsDictionary(&details_value) ||
- !details_value->GetString(kExecutionContextURLKey,
- &execution_context_url_) ||
- !details_value->GetList(kStackTraceKey, &trace_value)) {
- NOTREACHED();
- return;
+void RuntimeError::CleanUpInit() {
+ // If the error came from a generated background page, the "context" is empty
+ // because there's no visible URL. We should set context to be the generated
+ // background page in this case.
+ GURL source_url = GURL(source_);
+ if (context_url_.is_empty() &&
+ source_url.path() ==
+ std::string("/") + kGeneratedBackgroundPageFilename) {
+ context_url_ = source_url;
}
- int line = 0;
- int column = 0;
- string16 url;
-
- for (size_t i = 0; i < trace_value->GetSize(); ++i) {
- const base::DictionaryValue* frame_value = NULL;
- CHECK(trace_value->GetDictionary(i, &frame_value));
-
- frame_value->GetInteger(kLineNumberKey, &line);
- frame_value->GetInteger(kColumnNumberKey, &column);
- frame_value->GetString(kURLKey, &url);
-
- string16 function;
- frame_value->GetString(kFunctionNameKey, &function); // This can be empty.
- stack_trace_.push_back(StackFrame(line, column, url, function));
- }
-}
-
-void RuntimeError::DetermineExtensionID() {
- if (!GetExtensionIDFromGURL(GURL(source_), &extension_id_))
- GetExtensionIDFromGURL(GURL(execution_context_url_), &extension_id_);
+ // In some instances (due to the fact that we're reusing error reporting from
+ // other systems), the source won't match up with the final entry in the stack
+ // trace. (For instance, in a browser action error, the source is the page -
+ // sometimes the background page - but the error is thrown from the script.)
+ // Make the source match the stack trace, since that is more likely the cause
+ // of the error.
+ if (!stack_trace_.empty() && source_ != stack_trace_[0].source)
+ source_ = stack_trace_[0].source;
}
} // namespace extensions
« no previous file with comments | « extensions/browser/extension_error.h ('k') | extensions/common/DEPS » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698