diff options
author | nduca@chromium.org <nduca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-02 00:40:23 +0000 |
---|---|---|
committer | nduca@chromium.org <nduca@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-02 00:40:23 +0000 |
commit | 73fbaacc3f807064f911843b943054386e7eacfa (patch) | |
tree | ebb5a46a7be72724ab3c854294b0ac59fcd68786 /content/browser/tracing | |
parent | 8328f0121a8a3c0d59fc7e2306803f8c6495e079 (diff) | |
download | chromium_src-73fbaacc3f807064f911843b943054386e7eacfa.zip chromium_src-73fbaacc3f807064f911843b943054386e7eacfa.tar.gz chromium_src-73fbaacc3f807064f911843b943054386e7eacfa.tar.bz2 |
Harden about:tracing JS<->WebUI protocol for better handling of JSON errors
Moves all handling of JSON parsing into JS, whereas before it was handled
before in JS, but under control of WebUI. This lets JS do much better error
handling.
Pairs with https://codereview.appspot.com/9025044, so DEP roll to past that.
[CQ failures are flake]
R=dsinclair,piman
NOTRY=True
Review URL: https://chromiumcodereview.appspot.com/14644002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@197754 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/tracing')
-rw-r--r-- | content/browser/tracing/tracing_ui.cc | 32 |
1 files changed, 21 insertions, 11 deletions
diff --git a/content/browser/tracing/tracing_ui.cc b/content/browser/tracing/tracing_ui.cc index 1d9574e..8ef5751 100644 --- a/content/browser/tracing/tracing_ui.cc +++ b/content/browser/tracing/tracing_ui.cc @@ -344,7 +344,7 @@ void TracingMessageHandler::LoadTraceFileComplete(string16* contents) { rvh->ExecuteJavascriptInWebFrame(string16(), javascript); } rvh->ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16( - "tracingController.onLoadTraceFileComplete(JSON.parse(window.traceData));" + "tracingController.onLoadTraceFileComplete(window.traceData);" "delete window.traceData;")); } @@ -425,6 +425,14 @@ void TracingMessageHandler::OnBeginTracing(const base::ListValue* args) { void TracingMessageHandler::OnEndTracingAsync(const base::ListValue* list) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); + // This is really us beginning to end tracing, rather than tracing being truly + // over. When this function yields, we expect to get some number of + // OnTraceDataCollected callbacks, which will append data to window.traceData. + // To set up for this, set window.traceData to the empty string. + web_ui()->GetWebContents()->GetRenderViewHost()-> + ExecuteJavascriptInWebFrame(string16(), + UTF8ToUTF16("window.traceData = '';")); + // TODO(nduca): fix javascript code to make sure trace_enabled_ is always true // here. triggered a false condition by just clicking stop // trace a few times when it was going slow, and maybe switching @@ -455,7 +463,11 @@ void TracingMessageHandler::OnEndTracingComplete() { return; #endif } - web_ui()->CallJavascriptFunction("tracingController.onEndTracingComplete"); + + RenderViewHost* rvh = web_ui()->GetWebContents()->GetRenderViewHost(); + rvh->ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16( + "tracingController.onEndTracingComplete(window.traceData);" + "delete window.traceData;")); } void TracingMessageHandler::OnEndSystemTracingAck( @@ -474,17 +486,15 @@ void TracingMessageHandler::OnTraceDataCollected( const scoped_refptr<base::RefCountedString>& trace_fragment) { DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); - base::debug::TraceResultBuffer::SimpleOutput output; - base::debug::TraceResultBuffer trace_buffer; - trace_buffer.SetOutputCallback(output.GetCallback()); - output.Append("tracingController.onTraceDataCollected("); - trace_buffer.Start(); - trace_buffer.AddFragment(trace_fragment->data()); - trace_buffer.Finish(); - output.Append(");"); + std::string javascript("window.traceData += '"); + javascript += trace_fragment->data(); + // Intentionally append a , to the traceData. This technically causes all + // traceData that we pass back to JS to end with a comma, but that is actually + // something the JS side strips away anyway + javascript += ",';"; web_ui()->GetWebContents()->GetRenderViewHost()-> - ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(output.json_output)); + ExecuteJavascriptInWebFrame(string16(), UTF8ToUTF16(javascript)); } void TracingMessageHandler::OnTraceBufferPercentFullReply(float percent_full) { |