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 #ifndef CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_ 6 #define CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_ 7 8 #include <map> 9 #include <string> 10 #include <vector> 11 12 #include "base/process/process.h" 13 #include "base/strings/stringprintf.h" 14 #include "build/build_config.h" // USE_TCMALLOC 15 16 template <typename T> struct DefaultSingletonTraits; 17 class GURL; 18 19 namespace content { 20 class BrowserContext; 21 } 22 23 // Returns true if the given URL will be handled by the browser about handler. 24 // Nowadays, these go through the webui, so the return is always false. 25 // Either way, |url| will be processed by URLFixerUpper::FixupURL, which 26 // replaces the about: scheme with chrome:// for all about:foo URLs except 27 // "about:blank". 28 // Some |url| host values will be replaced with their respective redirects. 29 // 30 // This is used by BrowserURLHandler. 31 bool WillHandleBrowserAboutURL(GURL* url, 32 content::BrowserContext* browser_context); 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. 37 bool HandleNonNavigationAboutURL(const GURL& url); 38 39 #if defined(USE_TCMALLOC) 40 // A map of header strings (e.g. "Browser", "Renderer PID 123") 41 // to the tcmalloc output collected for each process. 42 typedef std::map<std::string, std::string> AboutTcmallocOutputsType; 43 44 class AboutTcmallocOutputs { 45 public: 46 // Returns the singleton instance. 47 static AboutTcmallocOutputs* GetInstance(); 48 49 AboutTcmallocOutputsType* outputs() { return &outputs_; } 50 51 // Records the output for a specified header string. 52 void SetOutput(const std::string& header, const std::string& output) { 53 outputs_[header] = output; 54 } 55 56 // Callback for output returned from renderer processes. Adds 57 // the output for a canonical renderer header string that 58 // incorporates the pid. 59 void RendererCallback(base::ProcessId pid, const std::string& output) { 60 SetOutput( 61 base::StringPrintf("Renderer PID %d", static_cast<int>(pid)), output); 62 } 63 64 private: 65 AboutTcmallocOutputs(); 66 ~AboutTcmallocOutputs(); 67 68 AboutTcmallocOutputsType outputs_; 69 70 friend struct DefaultSingletonTraits<AboutTcmallocOutputs>; 71 72 DISALLOW_COPY_AND_ASSIGN(AboutTcmallocOutputs); 73 }; 74 75 // Glue between the callback task and the method in the singleton. 76 void AboutTcmallocRendererCallback(base::ProcessId pid, 77 const std::string& output); 78 #endif // defined(USE_TCMALLOC) 79 80 #endif // CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_ 81