14e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved. 24e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 34e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// found in the LICENSE file. 44e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_WEBUI_CHROMEOS_SLOW_TRACE_UI_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CHROME_BROWSER_UI_WEBUI_CHROMEOS_SLOW_TRACE_UI_H_ 74e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 84e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include <string> 94e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 104e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "base/compiler_specific.h" 114e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/url_data_source.h" 124e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "content/public/browser/web_ui_controller.h" 134e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#include "ui/base/layout.h" 144e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 154e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace base { 164e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class RefCountedMemory; 174e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class RefCountedString; 184e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} 194e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 204e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)namespace chromeos { 214e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 224e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// This class provides the source for chrome://slow_trace/. It needs to be a 234e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// separate handler that chrome://slow, because URLDataSource and 244e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// WebUIDataSource are not descended from each other, and WebUIDataSource 254e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// doesn't allow the MimeType to be dynamically specified. 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SlowTraceSource : public content::URLDataSource { 274e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 284e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) SlowTraceSource(); 294e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 304e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) // content::URLDataSource implementation. 314e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual std::string GetSource() const OVERRIDE; 324e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual void StartDataRequest( 334e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const std::string& path, 344e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) int render_process_id, 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int render_frame_id, 364e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) const content::URLDataSource::GotDataCallback& callback) OVERRIDE; 374e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual std::string GetMimeType(const std::string& path) const OVERRIDE; 384e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 394e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 404e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) virtual ~SlowTraceSource(); 414e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 424e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) void OnGetTraceData(const content::URLDataSource::GotDataCallback& callback, 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) scoped_refptr<base::RefCountedString> trace_data); 444e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 454e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SlowTraceSource); 464e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 474e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)class SlowTraceController : public content::WebUIController { 494e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) public: 504e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) explicit SlowTraceController(content::WebUI* web_ui); 514e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 524e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) private: 534e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(SlowTraceController); 544e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)}; 554e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 564e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)} // namespace chromeos 574e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CHROME_BROWSER_UI_WEBUI_CHROMEOS_SLOW_TRACE_UI_H_ 59