1// Copyright 2014 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#include "config.h" 6#include "modules/geolocation/GeolocationWatchers.h" 7 8#include "modules/geolocation/GeoNotifier.h" 9 10namespace blink { 11 12void GeolocationWatchers::trace(Visitor* visitor) 13{ 14 visitor->trace(m_idToNotifierMap); 15 visitor->trace(m_notifierToIdMap); 16} 17 18bool GeolocationWatchers::add(int id, GeoNotifier* notifier) 19{ 20 ASSERT(id > 0); 21 if (!m_idToNotifierMap.add(id, notifier).isNewEntry) 22 return false; 23 m_notifierToIdMap.set(notifier, id); 24 return true; 25} 26 27GeoNotifier* GeolocationWatchers::find(int id) 28{ 29 ASSERT(id > 0); 30 IdToNotifierMap::iterator iter = m_idToNotifierMap.find(id); 31 if (iter == m_idToNotifierMap.end()) 32 return 0; 33 return iter->value.get(); 34} 35 36void GeolocationWatchers::remove(int id) 37{ 38 ASSERT(id > 0); 39 IdToNotifierMap::iterator iter = m_idToNotifierMap.find(id); 40 if (iter == m_idToNotifierMap.end()) 41 return; 42 m_notifierToIdMap.remove(iter->value); 43 m_idToNotifierMap.remove(iter); 44} 45 46void GeolocationWatchers::remove(GeoNotifier* notifier) 47{ 48 NotifierToIdMap::iterator iter = m_notifierToIdMap.find(notifier); 49 if (iter == m_notifierToIdMap.end()) 50 return; 51 m_idToNotifierMap.remove(iter->value); 52 m_notifierToIdMap.remove(iter); 53} 54 55bool GeolocationWatchers::contains(GeoNotifier* notifier) const 56{ 57 return m_notifierToIdMap.contains(notifier); 58} 59 60void GeolocationWatchers::clear() 61{ 62 m_idToNotifierMap.clear(); 63 m_notifierToIdMap.clear(); 64} 65 66bool GeolocationWatchers::isEmpty() const 67{ 68 return m_idToNotifierMap.isEmpty(); 69} 70 71void GeolocationWatchers::getNotifiersVector(HeapVector<Member<GeoNotifier> >& copy) const 72{ 73 copyValuesToVector(m_idToNotifierMap, copy); 74} 75 76} // namespace blink 77