Commit 6f94facf authored by mkosiba@chromium.org's avatar mkosiba@chromium.org

Move DetailedConsoleMessageAdded from ChromeRVO to ChromeRFO.

BUG=304341

Review URL: https://codereview.chromium.org/307623004

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@274218 0039d316-1c4b-4281-b951-d872f2087c98
parent b6ff87ac
...@@ -41,6 +41,16 @@ bool ChromeExtensionWebContentsObserver::OnMessageReceived( ...@@ -41,6 +41,16 @@ bool ChromeExtensionWebContentsObserver::OnMessageReceived(
bool handled = true; bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ChromeExtensionWebContentsObserver, message) IPC_BEGIN_MESSAGE_MAP(ChromeExtensionWebContentsObserver, message)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_PostMessage, OnPostMessage) IPC_MESSAGE_HANDLER(ExtensionHostMsg_PostMessage, OnPostMessage)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
bool ChromeExtensionWebContentsObserver::OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(ChromeExtensionWebContentsObserver, message)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DetailedConsoleMessageAdded, IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DetailedConsoleMessageAdded,
OnDetailedConsoleMessageAdded) OnDetailedConsoleMessageAdded)
IPC_MESSAGE_UNHANDLED(handled = false) IPC_MESSAGE_UNHANDLED(handled = false)
......
...@@ -11,6 +11,10 @@ ...@@ -11,6 +11,10 @@
#include "extensions/browser/extension_web_contents_observer.h" #include "extensions/browser/extension_web_contents_observer.h"
#include "extensions/common/stack_frame.h" #include "extensions/common/stack_frame.h"
namespace content {
class RenderFrameHost;
}
namespace extensions { namespace extensions {
struct Message; struct Message;
...@@ -31,6 +35,9 @@ class ChromeExtensionWebContentsObserver ...@@ -31,6 +35,9 @@ class ChromeExtensionWebContentsObserver
virtual void RenderViewCreated(content::RenderViewHost* render_view_host) virtual void RenderViewCreated(content::RenderViewHost* render_view_host)
OVERRIDE; OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual bool OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) OVERRIDE;
// Routes a message to the extensions MessageService. // Routes a message to the extensions MessageService.
void OnPostMessage(int port_id, const Message& message); void OnPostMessage(int port_id, const Message& message);
......
...@@ -311,6 +311,15 @@ bool TabHelper::OnMessageReceived(const IPC::Message& message) { ...@@ -311,6 +311,15 @@ bool TabHelper::OnMessageReceived(const IPC::Message& message) {
OnContentScriptsExecuting) OnContentScriptsExecuting)
IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange, IPC_MESSAGE_HANDLER(ExtensionHostMsg_OnWatchedPageChange,
OnWatchedPageChange) OnWatchedPageChange)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
return handled;
}
bool TabHelper::OnMessageReceived(const IPC::Message& message,
content::RenderFrameHost* render_frame_host) {
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(TabHelper, message)
IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DetailedConsoleMessageAdded, IPC_MESSAGE_HANDLER(ChromeViewHostMsg_DetailedConsoleMessageAdded,
OnDetailedConsoleMessageAdded) OnDetailedConsoleMessageAdded)
IPC_MESSAGE_UNHANDLED(handled = false) IPC_MESSAGE_UNHANDLED(handled = false)
......
...@@ -28,6 +28,7 @@ class FaviconDownloader; ...@@ -28,6 +28,7 @@ class FaviconDownloader;
namespace content { namespace content {
struct LoadCommittedDetails; struct LoadCommittedDetails;
class RenderFrameHost;
} }
namespace gfx { namespace gfx {
...@@ -178,6 +179,9 @@ class TabHelper : public content::WebContentsObserver, ...@@ -178,6 +179,9 @@ class TabHelper : public content::WebContentsObserver,
const content::LoadCommittedDetails& details, const content::LoadCommittedDetails& details,
const content::FrameNavigateParams& params) OVERRIDE; const content::FrameNavigateParams& params) OVERRIDE;
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual bool OnMessageReceived(
const IPC::Message& message,
content::RenderFrameHost* render_frame_host) OVERRIDE;
virtual void DidCloneToNewWebContents( virtual void DidCloneToNewWebContents(
content::WebContents* old_web_contents, content::WebContents* old_web_contents,
content::WebContents* new_web_contents) OVERRIDE; content::WebContents* new_web_contents) OVERRIDE;
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
#include "chrome/renderer/chrome_render_frame_observer.h" #include "chrome/renderer/chrome_render_frame_observer.h"
#include "base/strings/string_split.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/common/prerender_messages.h" #include "chrome/common/prerender_messages.h"
#include "chrome/common/print_messages.h" #include "chrome/common/print_messages.h"
...@@ -11,6 +12,7 @@ ...@@ -11,6 +12,7 @@
#include "chrome/renderer/prerender/prerender_helper.h" #include "chrome/renderer/prerender/prerender_helper.h"
#include "chrome/renderer/printing/print_web_view_helper.h" #include "chrome/renderer/printing/print_web_view_helper.h"
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "extensions/common/stack_frame.h"
#include "skia/ext/image_operations.h" #include "skia/ext/image_operations.h"
#include "skia/ext/platform_canvas.h" #include "skia/ext/platform_canvas.h"
#include "third_party/WebKit/public/platform/WebImage.h" #include "third_party/WebKit/public/platform/WebImage.h"
...@@ -22,6 +24,62 @@ using blink::WebElement; ...@@ -22,6 +24,62 @@ using blink::WebElement;
using blink::WebNode; using blink::WebNode;
namespace { namespace {
// The delimiter for a stack trace provided by WebKit.
const char kStackFrameDelimiter[] = "\n at ";
// Get a stack trace from a WebKit console message.
// There are three possible scenarios:
// 1. WebKit gives us a stack trace in |stack_trace|.
// 2. The stack trace is embedded in the error |message| by an internal
// script. This will be more useful than |stack_trace|, since |stack_trace|
// will include the internal bindings trace, instead of a developer's code.
// 3. No stack trace is included. In this case, we should mock one up from
// the given line number and source.
// |message| will be populated with the error message only (i.e., will not
// include any stack trace).
extensions::StackTrace GetStackTraceFromMessage(
base::string16* message,
const base::string16& source,
const base::string16& stack_trace,
int32 line_number) {
extensions::StackTrace result;
std::vector<base::string16> pieces;
size_t index = 0;
if (message->find(base::UTF8ToUTF16(kStackFrameDelimiter)) !=
base::string16::npos) {
base::SplitStringUsingSubstr(*message,
base::UTF8ToUTF16(kStackFrameDelimiter),
&pieces);
*message = pieces[0];
index = 1;
} else if (!stack_trace.empty()) {
base::SplitStringUsingSubstr(stack_trace,
base::UTF8ToUTF16(kStackFrameDelimiter),
&pieces);
}
// If we got a stack trace, parse each frame from the text.
if (index < pieces.size()) {
for (; index < pieces.size(); ++index) {
scoped_ptr<extensions::StackFrame> frame =
extensions::StackFrame::CreateFromText(pieces[index]);
if (frame.get())
result.push_back(*frame);
}
}
if (result.empty()) { // If we don't have a stack trace, mock one up.
result.push_back(
extensions::StackFrame(line_number,
1u, // column number
source,
base::string16() /* no function name */ ));
}
return result;
}
// If the source image is null or occupies less area than // If the source image is null or occupies less area than
// |thumbnail_min_area_pixels|, we return the image unmodified. Otherwise, we // |thumbnail_min_area_pixels|, we return the image unmodified. Otherwise, we
// scale down the image so that the width and height do not exceed // scale down the image so that the width and height do not exceed
...@@ -97,6 +155,22 @@ void ChromeRenderFrameObserver::DidChangeName( ...@@ -97,6 +155,22 @@ void ChromeRenderFrameObserver::DidChangeName(
base::UTF16ToUTF8(name))); base::UTF16ToUTF8(name)));
} }
void ChromeRenderFrameObserver::DetailedConsoleMessageAdded(
const base::string16& message,
const base::string16& source,
const base::string16& stack_trace_string,
int32 line_number,
int32 severity_level) {
base::string16 trimmed_message = message;
extensions::StackTrace stack_trace = GetStackTraceFromMessage(
&trimmed_message,
source,
stack_trace_string,
line_number);
Send(new ChromeViewHostMsg_DetailedConsoleMessageAdded(
routing_id(), trimmed_message, source, stack_trace, severity_level));
}
void ChromeRenderFrameObserver::OnSetIsPrerendering(bool is_prerendering) { void ChromeRenderFrameObserver::OnSetIsPrerendering(bool is_prerendering) {
if (is_prerendering) { if (is_prerendering) {
// If the PrerenderHelper for this frame already exists, don't create it. It // If the PrerenderHelper for this frame already exists, don't create it. It
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#ifndef CHROME_RENDERER_CHROME_RENDER_FRAME_OBSERVER_H_ #ifndef CHROME_RENDERER_CHROME_RENDER_FRAME_OBSERVER_H_
#define CHROME_RENDERER_CHROME_RENDER_FRAME_OBSERVER_H_ #define CHROME_RENDERER_CHROME_RENDER_FRAME_OBSERVER_H_
#include "base/basictypes.h"
#include "content/public/renderer/render_frame_observer.h" #include "content/public/renderer/render_frame_observer.h"
namespace gfx { namespace gfx {
...@@ -22,6 +23,11 @@ class ChromeRenderFrameObserver : public content::RenderFrameObserver { ...@@ -22,6 +23,11 @@ class ChromeRenderFrameObserver : public content::RenderFrameObserver {
// RenderFrameObserver implementation. // RenderFrameObserver implementation.
virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE; virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;
virtual void DidChangeName(const base::string16& name) OVERRIDE; virtual void DidChangeName(const base::string16& name) OVERRIDE;
virtual void DetailedConsoleMessageAdded(const base::string16& message,
const base::string16& source,
const base::string16& stack_trace,
int32 line_number,
int32 severity_level) OVERRIDE;
// IPC handlers // IPC handlers
void OnSetIsPrerendering(bool is_prerendering); void OnSetIsPrerendering(bool is_prerendering);
......
...@@ -10,7 +10,6 @@ ...@@ -10,7 +10,6 @@
#include "base/debug/trace_event.h" #include "base/debug/trace_event.h"
#include "base/message_loop/message_loop.h" #include "base/message_loop/message_loop.h"
#include "base/metrics/histogram.h" #include "base/metrics/histogram.h"
#include "base/strings/string_split.h"
#include "base/strings/string_util.h" #include "base/strings/string_util.h"
#include "base/strings/utf_string_conversions.h" #include "base/strings/utf_string_conversions.h"
#include "chrome/common/chrome_constants.h" #include "chrome/common/chrome_constants.h"
...@@ -28,7 +27,6 @@ ...@@ -28,7 +27,6 @@
#include "content/public/renderer/render_frame.h" #include "content/public/renderer/render_frame.h"
#include "content/public/renderer/render_view.h" #include "content/public/renderer/render_view.h"
#include "extensions/common/constants.h" #include "extensions/common/constants.h"
#include "extensions/common/stack_frame.h"
#include "net/base/data_url.h" #include "net/base/data_url.h"
#include "skia/ext/platform_canvas.h" #include "skia/ext/platform_canvas.h"
#include "third_party/WebKit/public/platform/WebCString.h" #include "third_party/WebKit/public/platform/WebCString.h"
...@@ -104,62 +102,6 @@ GURL StripRef(const GURL& url) { ...@@ -104,62 +102,6 @@ GURL StripRef(const GURL& url) {
return url.ReplaceComponents(replacements); return url.ReplaceComponents(replacements);
} }
// The delimiter for a stack trace provided by WebKit.
const char kStackFrameDelimiter[] = "\n at ";
// Get a stack trace from a WebKit console message.
// There are three possible scenarios:
// 1. WebKit gives us a stack trace in |stack_trace|.
// 2. The stack trace is embedded in the error |message| by an internal
// script. This will be more useful than |stack_trace|, since |stack_trace|
// will include the internal bindings trace, instead of a developer's code.
// 3. No stack trace is included. In this case, we should mock one up from
// the given line number and source.
// |message| will be populated with the error message only (i.e., will not
// include any stack trace).
extensions::StackTrace GetStackTraceFromMessage(
base::string16* message,
const base::string16& source,
const base::string16& stack_trace,
int32 line_number) {
extensions::StackTrace result;
std::vector<base::string16> pieces;
size_t index = 0;
if (message->find(base::UTF8ToUTF16(kStackFrameDelimiter)) !=
base::string16::npos) {
base::SplitStringUsingSubstr(*message,
base::UTF8ToUTF16(kStackFrameDelimiter),
&pieces);
*message = pieces[0];
index = 1;
} else if (!stack_trace.empty()) {
base::SplitStringUsingSubstr(stack_trace,
base::UTF8ToUTF16(kStackFrameDelimiter),
&pieces);
}
// If we got a stack trace, parse each frame from the text.
if (index < pieces.size()) {
for (; index < pieces.size(); ++index) {
scoped_ptr<extensions::StackFrame> frame =
extensions::StackFrame::CreateFromText(pieces[index]);
if (frame.get())
result.push_back(*frame);
}
}
if (result.empty()) { // If we don't have a stack trace, mock one up.
result.push_back(
extensions::StackFrame(line_number,
1u, // column number
source,
base::string16() /* no function name */ ));
}
return result;
}
#if defined(OS_ANDROID) #if defined(OS_ANDROID)
// Parses the DOM for a <meta> tag with a particular name. // Parses the DOM for a <meta> tag with a particular name.
// |meta_tag_content| is set to the contents of the 'content' attribute. // |meta_tag_content| is set to the contents of the 'content' attribute.
...@@ -431,25 +373,6 @@ void ChromeRenderViewObserver::DidCommitProvisionalLoad( ...@@ -431,25 +373,6 @@ void ChromeRenderViewObserver::DidCommitProvisionalLoad(
base::TimeDelta::FromMilliseconds(kDelayForForcedCaptureMs)); base::TimeDelta::FromMilliseconds(kDelayForForcedCaptureMs));
} }
void ChromeRenderViewObserver::DetailedConsoleMessageAdded(
const base::string16& message,
const base::string16& source,
const base::string16& stack_trace_string,
int32 line_number,
int32 severity_level) {
base::string16 trimmed_message = message;
extensions::StackTrace stack_trace = GetStackTraceFromMessage(
&trimmed_message,
source,
stack_trace_string,
line_number);
Send(new ChromeViewHostMsg_DetailedConsoleMessageAdded(routing_id(),
trimmed_message,
source,
stack_trace,
severity_level));
}
void ChromeRenderViewObserver::CapturePageInfoLater(int page_id, void ChromeRenderViewObserver::CapturePageInfoLater(int page_id,
bool preliminary_capture, bool preliminary_capture,
base::TimeDelta delay) { base::TimeDelta delay) {
......
...@@ -51,11 +51,6 @@ class ChromeRenderViewObserver : public content::RenderViewObserver { ...@@ -51,11 +51,6 @@ class ChromeRenderViewObserver : public content::RenderViewObserver {
virtual void DidStopLoading() OVERRIDE; virtual void DidStopLoading() OVERRIDE;
virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame, virtual void DidCommitProvisionalLoad(blink::WebLocalFrame* frame,
bool is_new_navigation) OVERRIDE; bool is_new_navigation) OVERRIDE;
virtual void DetailedConsoleMessageAdded(const base::string16& message,
const base::string16& source,
const base::string16& stack_trace,
int32 line_number,
int32 severity_level) OVERRIDE;
virtual void Navigate(const GURL& url) OVERRIDE; virtual void Navigate(const GURL& url) OVERRIDE;
void OnWebUIJavaScript(const base::string16& javascript); void OnWebUIJavaScript(const base::string16& javascript);
......
...@@ -89,18 +89,6 @@ class CONTENT_EXPORT RenderViewObserver : public IPC::Listener, ...@@ -89,18 +89,6 @@ class CONTENT_EXPORT RenderViewObserver : public IPC::Listener,
virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) {} virtual void DidHandleMouseEvent(const blink::WebMouseEvent& event) {}
virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) {} virtual void DidHandleTouchEvent(const blink::WebTouchEvent& event) {}
// Called when we receive a console message from WebKit for which we requested
// extra details (like the stack trace). |message| is the error message,
// |source| is the WebKit-reported source of the error (either external or
// internal), and |stack_trace| is the stack trace of the error in a
// human-readable format (each frame is formatted as
// "\n at function_name (source:line_number:column_number)").
virtual void DetailedConsoleMessageAdded(const base::string16& message,
const base::string16& source,
const base::string16& stack_trace,
int32 line_number,
int32 severity_level) {}
// These match incoming IPCs. // These match incoming IPCs.
virtual void Navigate(const GURL& url) {} virtual void Navigate(const GURL& url) {}
virtual void ClosePage() {} virtual void ClosePage() {}
......
...@@ -1631,13 +1631,6 @@ void RenderFrameImpl::didAddMessageToConsole( ...@@ -1631,13 +1631,6 @@ void RenderFrameImpl::didAddMessageToConsole(
} }
if (shouldReportDetailedMessageForSource(source_name)) { if (shouldReportDetailedMessageForSource(source_name)) {
FOR_EACH_OBSERVER(
RenderViewObserver, render_view_->observers(),
DetailedConsoleMessageAdded(message.text,
source_name,
stack_trace,
source_line,
static_cast<int32>(log_severity)));
FOR_EACH_OBSERVER( FOR_EACH_OBSERVER(
RenderFrameObserver, observers_, RenderFrameObserver, observers_,
DetailedConsoleMessageAdded(message.text, DetailedConsoleMessageAdded(message.text,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment