1// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5// Contains code for handling "about:" URLs in the browser process. 6 7#ifndef CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_ 8#define CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_ 9#pragma once 10 11#include <map> 12#include <string> 13#include <vector> 14 15#include "base/process.h" 16#include "base/string_util.h" 17 18template <typename T> struct DefaultSingletonTraits; 19class GURL; 20class Profile; 21 22// Decides whether the given URL will be handled by the browser about handler 23// and returns true if so. On true, it may also modify the given URL to be the 24// final form (we fix up most "about:" URLs to be "chrome:" because WebKit 25// handles all "about:" URLs as "about:blank. 26// 27// This is used by BrowserURLHandler. 28bool WillHandleBrowserAboutURL(GURL* url, Profile* profile); 29 30// Register the data source for chrome://about URLs. 31// Safe to call multiple times. 32void InitializeAboutDataSource(Profile* profile); 33 34// We have a few magic commands that don't cause navigations, but rather pop up 35// dialogs. This function handles those cases, and returns true if so. In this 36// case, normal tab navigation should be skipped. 37bool HandleNonNavigationAboutURL(const GURL& url); 38 39// Gets the paths that are shown in about:about. 40std::vector<std::string> AboutPaths(); 41 42#if defined(USE_TCMALLOC) 43// A map of header strings (e.g. "Browser", "Renderer PID 123") 44// to the tcmalloc output collected for each process. 45typedef std::map<std::string, std::string> AboutTcmallocOutputsType; 46 47class AboutTcmallocOutputs { 48 public: 49 // Returns the singleton instance. 50 static AboutTcmallocOutputs* GetInstance(); 51 52 AboutTcmallocOutputsType* outputs() { return &outputs_; } 53 54 // Records the output for a specified header string. 55 void SetOutput(const std::string& header, const std::string& output) { 56 outputs_[header] = output; 57 } 58 59 // Callback for output returned from renderer processes. Adds 60 // the output for a canonical renderer header string that 61 // incorporates the pid. 62 void RendererCallback(base::ProcessId pid, const std::string& output) { 63 SetOutput(StringPrintf("Renderer PID %d", static_cast<int>(pid)), output); 64 } 65 66 private: 67 AboutTcmallocOutputs(); 68 ~AboutTcmallocOutputs(); 69 70 AboutTcmallocOutputsType outputs_; 71 72 friend struct DefaultSingletonTraits<AboutTcmallocOutputs>; 73 74 DISALLOW_COPY_AND_ASSIGN(AboutTcmallocOutputs); 75}; 76 77// Glue between the callback task and the method in the singleton. 78void AboutTcmallocRendererCallback(base::ProcessId pid, 79 const std::string& output); 80#endif 81 82#endif // CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_ 83