visit_tracker.h revision 3345a6884c488ff3a535c2c9acdd33d74b37e311
1// Copyright (c) 2010 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_HISTORY_VISIT_TRACKER_H__
6#define CHROME_BROWSER_HISTORY_VISIT_TRACKER_H__
7#pragma once
8
9#include <map>
10#include <vector>
11
12#include "base/basictypes.h"
13#include "chrome/browser/history/history_types.h"
14
15namespace history {
16
17// Tracks history transitions between pages. The history backend uses this to
18// link up page transitions to form a chain of page visits, and to set the
19// transition type properly.
20//
21// This class is not thread safe.
22class VisitTracker {
23 public:
24  VisitTracker();
25  ~VisitTracker();
26
27  // Notifications -------------------------------------------------------------
28
29  void AddVisit(const void* host,
30                int32 page_id,
31                const GURL& url,
32                VisitID visit_id);
33
34  // When a RenderProcessHost is destroyed, we want to clear out our saved
35  // transitions/visit IDs for it.
36  void NotifyRenderProcessHostDestruction(const void* host);
37
38  // Querying ------------------------------------------------------------------
39
40  // Returns the visit ID for the transition given information about the visit
41  // supplied by the renderer. We will return 0 if there is no appropriate
42  // referring visit.
43  VisitID GetLastVisit(const void* host, int32 page_id, const GURL& url);
44
45 private:
46  struct Transition {
47    GURL url;          // URL that the event happened to.
48    int32 page_id;     // ID generated by the render process host.
49    VisitID visit_id;  // Visit ID generated by history.
50  };
51  typedef std::vector<Transition> TransitionList;
52  typedef std::map<const void*, TransitionList*> HostList;
53
54  // Expires oldish items in the given transition list. This keeps the list
55  // size small by removing items that are unlikely to be needed, which is
56  // important for GetReferrer which does brute-force searches of this list.
57  void CleanupTransitionList(TransitionList* transitions);
58
59  // Maps render view hosts to lists of recent transitions.
60  HostList hosts_;
61
62  DISALLOW_COPY_AND_ASSIGN(VisitTracker);
63};
64
65}  // namespace history
66
67#endif  // CHROME_BROWSER_HISTORY_VISIT_TRACKER_H__
68