summaryrefslogtreecommitdiffstats
path: root/chrome/renderer/weak_v8_function_map.h
blob: a51dc9d9824a5e5854044617df780763dbaf6c1c (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
// Copyright (c) 2011 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 CHROME_RENDERER_WEAK_V8_FUNCTION_MAP_H_
#define CHROME_RENDERER_WEAK_V8_FUNCTION_MAP_H_
#pragma once

#include <map>

#include "base/compiler_specific.h"
#include "base/memory/weak_ptr.h"
#include "v8/include/v8.h"

// This class lets you keep a mapping of integer to weak reference to a v8
// function. The entry will automatically get removed from the map if the
// function gets garbage collected.
class WeakV8FunctionMap {
 public:
  WeakV8FunctionMap();
  ~WeakV8FunctionMap();

  // Adds |callback_function| to the map under |key|. The entry will be removed
  // from the map when the function is about to be GCed.
  void Add(int key, v8::Local<v8::Function> callback_function);

  // Removes and returns a entry from the map for |key|. If there was no entry
  // for |key|, the return value will return true for IsEmpty().
  v8::Persistent<v8::Function> Remove(int key);

 private:
  typedef std::map<int, v8::Persistent<v8::Function> > Map;
  Map map_;
  base::WeakPtrFactory<WeakV8FunctionMap> weak_ptr_factory_;

  DISALLOW_COPY_AND_ASSIGN(WeakV8FunctionMap);
};

#endif  // CHROME_RENDERER_WEAK_V8_FUNCTION_MAP_H_