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