summaryrefslogtreecommitdiffstats
path: root/content/browser/loader/render_view_host_tracker.h
blob: 7fc5fa00b80351c7e2634376daae079616595783 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// Copyright (c) 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CONTENT_BROWSER_LOADER_RENDER_VIEW_HOST_TRACKER_H_
#define CONTENT_BROWSER_LOADER_RENDER_VIEW_HOST_TRACKER_H_

#include <set>

#include "content/public/browser/render_view_host.h"
#include "content/public/browser/render_view_host_observer.h"

namespace content {

// The ResourceDispatcherHost needs to know when renderers are created and
// destroyed. That happens on the UI thread, but the ResourceDispatcherHost
// operates on the IO thread. RenderViewHostTracker listens for renderer
// notifications on the UI thread, then bounces them over to the IO thread so
// the ResourceDispatcherHost can be notified.
class CONTENT_EXPORT RenderViewHostTracker {
 public:
  RenderViewHostTracker();
  virtual ~RenderViewHostTracker();

 private:
  // TODO(phajdan.jr): Move this declaration of inner class to the .cc file.
  class Observer : public RenderViewHostObserver {
   public:
    Observer(RenderViewHost* rvh,
             RenderViewHostTracker* tracker);
    virtual ~Observer();

   private:
    // RenderViewHostObserver interface:
    virtual void RenderViewHostDestroyed(RenderViewHost* rvh) OVERRIDE;

    RenderViewHostTracker* tracker_;
  };

  friend class Observer;
  typedef std::set<Observer*> ObserverSet;

  void RenderViewHostCreated(RenderViewHost* rvh);

  void RemoveObserver(Observer* observer);

  RenderViewHost::CreatedCallback rvh_created_callback_;
  ObserverSet observers_;
};

}  // namespace content

#endif  // CONTENT_BROWSER_LOADER_RENDER_VIEW_HOST_TRACKER_H_