• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
18 template <typename T> struct DefaultSingletonTraits;
19 class GURL;
20 class 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.
28 bool WillHandleBrowserAboutURL(GURL* url, Profile* profile);
29 
30 // Register the data source for chrome://about URLs.
31 // Safe to call multiple times.
32 void 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.
37 bool HandleNonNavigationAboutURL(const GURL& url);
38 
39 // Gets the paths that are shown in about:about.
40 std::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.
45 typedef std::map<std::string, std::string> AboutTcmallocOutputsType;
46 
47 class AboutTcmallocOutputs {
48  public:
49   // Returns the singleton instance.
50   static AboutTcmallocOutputs* GetInstance();
51 
outputs()52   AboutTcmallocOutputsType* outputs() { return &outputs_; }
53 
54   // Records the output for a specified header string.
SetOutput(const std::string & header,const std::string & output)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.
RendererCallback(base::ProcessId pid,const std::string & output)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.
78 void AboutTcmallocRendererCallback(base::ProcessId pid,
79                                    const std::string& output);
80 #endif
81 
82 #endif  // CHROME_BROWSER_BROWSER_ABOUT_HANDLER_H_
83