1// Copyright 2013 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_SITE_DETAILS_H_
6#define CHROME_BROWSER_SITE_DETAILS_H_
7
8#include "base/containers/hash_tables.h"
9#include "content/public/browser/browser_context.h"
10#include "content/public/browser/site_instance.h"
11#include "content/public/browser/web_contents.h"
12
13// Maps an ID representing each BrowsingInstance to a set of site URLs.
14typedef base::hash_map<int32, std::set<GURL> > BrowsingInstanceSiteMap;
15
16// Information about the sites and SiteInstances in each BrowsingInstance, for
17// use in estimating the number of processes needed for various process models.
18struct SiteData {
19  SiteData();
20  ~SiteData();
21
22  std::set<GURL> sites;
23  std::set<GURL> https_sites;
24  std::vector<content::SiteInstance*> instances;
25  BrowsingInstanceSiteMap instance_site_map;
26  BrowsingInstanceSiteMap instance_https_site_map;
27};
28
29// Maps a BrowserContext to information about the SiteInstances it contains.
30typedef base::hash_map<content::BrowserContext*, SiteData>
31    BrowserContextSiteDataMap;
32
33class SiteDetails {
34 public:
35  // Collect information about all committed sites in the given WebContents
36  // on the UI thread.
37  static void CollectSiteInfo(content::WebContents* contents,
38                              SiteData* site_data);
39
40  // Updates the global histograms for tracking memory usage.
41  static void UpdateHistograms(const BrowserContextSiteDataMap& site_data_map,
42                               int all_renderer_process_count,
43                               int non_renderer_process_count);
44
45 private:
46  // Never needs to be constructed.
47  SiteDetails();
48  ~SiteDetails();
49
50  DISALLOW_COPY_AND_ASSIGN(SiteDetails);
51};
52
53#endif  // CHROME_BROWSER_SITE_DETAILS_H_
54