Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(264)

Side by Side Diff: net/dns/mdns_client_impl.cc

Issue 2389613002: Remove stl_util's deletion functions from net/dns/. (Closed)
Patch Set: fixin Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/dns/mdns_client_impl.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/dns/mdns_client_impl.h" 5 #include "net/dns/mdns_client_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <queue> 8 #include <queue>
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/bind.h" 11 #include "base/bind.h"
12 #include "base/location.h" 12 #include "base/location.h"
13 #include "base/memory/ptr_util.h" 13 #include "base/memory/ptr_util.h"
14 #include "base/single_thread_task_runner.h" 14 #include "base/single_thread_task_runner.h"
15 #include "base/stl_util.h"
16 #include "base/threading/thread_task_runner_handle.h" 15 #include "base/threading/thread_task_runner_handle.h"
17 #include "base/time/clock.h" 16 #include "base/time/clock.h"
18 #include "base/time/default_clock.h" 17 #include "base/time/default_clock.h"
19 #include "base/time/time.h" 18 #include "base/time/time.h"
20 #include "base/timer/timer.h" 19 #include "base/timer/timer.h"
21 #include "net/base/net_errors.h" 20 #include "net/base/net_errors.h"
22 #include "net/base/rand_callback.h" 21 #include "net/base/rand_callback.h"
23 #include "net/dns/dns_protocol.h" 22 #include "net/dns/dns_protocol.h"
24 #include "net/dns/dns_util.h" 23 #include "net/dns/dns_util.h"
25 #include "net/dns/record_rdata.h" 24 #include "net/dns/record_rdata.h"
(...skipping 175 matching lines...) Expand 10 before | Expand all | Expand 10 after
201 delegate_->HandlePacket(response, bytes_read); 200 delegate_->HandlePacket(response, bytes_read);
202 } 201 }
203 202
204 MDnsClientImpl::Core::Core(base::Clock* clock, base::Timer* timer) 203 MDnsClientImpl::Core::Core(base::Clock* clock, base::Timer* timer)
205 : clock_(clock), 204 : clock_(clock),
206 cleanup_timer_(timer), 205 cleanup_timer_(timer),
207 connection_(new MDnsConnection(this)) { 206 connection_(new MDnsConnection(this)) {
208 } 207 }
209 208
210 MDnsClientImpl::Core::~Core() { 209 MDnsClientImpl::Core::~Core() {
211 base::STLDeleteValues(&listeners_);
212 } 210 }
213 211
214 bool MDnsClientImpl::Core::Init(MDnsSocketFactory* socket_factory) { 212 bool MDnsClientImpl::Core::Init(MDnsSocketFactory* socket_factory) {
215 return connection_->Init(socket_factory); 213 return connection_->Init(socket_factory);
216 } 214 }
217 215
218 bool MDnsClientImpl::Core::SendQuery(uint16_t rrtype, const std::string& name) { 216 bool MDnsClientImpl::Core::SendQuery(uint16_t rrtype, const std::string& name) {
219 std::string name_dns; 217 std::string name_dns;
220 if (!DNSDomainFromDot(name, &name_dns)) 218 if (!DNSDomainFromDot(name, &name_dns))
221 return false; 219 return false;
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
341 ListenerMap::iterator listener_map_iterator = listeners_.find(key); 339 ListenerMap::iterator listener_map_iterator = listeners_.find(key);
342 if (listener_map_iterator == listeners_.end()) return; 340 if (listener_map_iterator == listeners_.end()) return;
343 341
344 for (auto& observer : *listener_map_iterator->second) 342 for (auto& observer : *listener_map_iterator->second)
345 observer.HandleRecordUpdate(update_type, record); 343 observer.HandleRecordUpdate(update_type, record);
346 } 344 }
347 345
348 void MDnsClientImpl::Core::AddListener( 346 void MDnsClientImpl::Core::AddListener(
349 MDnsListenerImpl* listener) { 347 MDnsListenerImpl* listener) {
350 ListenerKey key(listener->GetName(), listener->GetType()); 348 ListenerKey key(listener->GetName(), listener->GetType());
351 std::pair<ListenerMap::iterator, bool> observer_insert_result =
352 listeners_.insert(make_pair(
353 key, static_cast<base::ObserverList<MDnsListenerImpl>*>(NULL)));
354 349
355 // If an equivalent key does not exist, actually create the observer list. 350 std::unique_ptr<base::ObserverList<MDnsListenerImpl>>& observer_list =
356 if (observer_insert_result.second) 351 listeners_[key];
357 observer_insert_result.first->second =
358 new base::ObserverList<MDnsListenerImpl>();
359 352
360 base::ObserverList<MDnsListenerImpl>* observer_list = 353 if (!observer_list)
361 observer_insert_result.first->second; 354 observer_list = base::MakeUnique<base::ObserverList<MDnsListenerImpl>>();
362 355
363 observer_list->AddObserver(listener); 356 observer_list->AddObserver(listener);
364 } 357 }
365 358
366 void MDnsClientImpl::Core::RemoveListener(MDnsListenerImpl* listener) { 359 void MDnsClientImpl::Core::RemoveListener(MDnsListenerImpl* listener) {
367 ListenerKey key(listener->GetName(), listener->GetType()); 360 ListenerKey key(listener->GetName(), listener->GetType());
368 ListenerMap::iterator observer_list_iterator = listeners_.find(key); 361 ListenerMap::iterator observer_list_iterator = listeners_.find(key);
369 362
370 DCHECK(observer_list_iterator != listeners_.end()); 363 DCHECK(observer_list_iterator != listeners_.end());
371 DCHECK(observer_list_iterator->second->HasObserver(listener)); 364 DCHECK(observer_list_iterator->second->HasObserver(listener));
372 365
373 observer_list_iterator->second->RemoveObserver(listener); 366 observer_list_iterator->second->RemoveObserver(listener);
374 367
375 // Remove the observer list from the map if it is empty 368 // Remove the observer list from the map if it is empty
376 if (!observer_list_iterator->second->might_have_observers()) { 369 if (!observer_list_iterator->second->might_have_observers()) {
377 // Schedule the actual removal for later in case the listener removal 370 // Schedule the actual removal for later in case the listener removal
378 // happens while iterating over the observer list. 371 // happens while iterating over the observer list.
379 base::ThreadTaskRunnerHandle::Get()->PostTask( 372 base::ThreadTaskRunnerHandle::Get()->PostTask(
380 FROM_HERE, base::Bind(&MDnsClientImpl::Core::CleanupObserverList, 373 FROM_HERE, base::Bind(&MDnsClientImpl::Core::CleanupObserverList,
381 AsWeakPtr(), key)); 374 AsWeakPtr(), key));
382 } 375 }
383 } 376 }
384 377
385 void MDnsClientImpl::Core::CleanupObserverList(const ListenerKey& key) { 378 void MDnsClientImpl::Core::CleanupObserverList(const ListenerKey& key) {
386 ListenerMap::iterator found = listeners_.find(key); 379 ListenerMap::iterator found = listeners_.find(key);
387 if (found != listeners_.end() && !found->second->might_have_observers()) { 380 if (found != listeners_.end() && !found->second->might_have_observers()) {
388 delete found->second;
389 listeners_.erase(found); 381 listeners_.erase(found);
390 } 382 }
391 } 383 }
392 384
393 void MDnsClientImpl::Core::ScheduleCleanup(base::Time cleanup) { 385 void MDnsClientImpl::Core::ScheduleCleanup(base::Time cleanup) {
394 // Cleanup is already scheduled, no need to do anything. 386 // Cleanup is already scheduled, no need to do anything.
395 if (cleanup == scheduled_cleanup_) { 387 if (cleanup == scheduled_cleanup_) {
396 return; 388 return;
397 } 389 }
398 scheduled_cleanup_ = cleanup; 390 scheduled_cleanup_ = cleanup;
(...skipping 350 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 741
750 void MDnsTransactionImpl::OnNsecRecord(const std::string& name, unsigned type) { 742 void MDnsTransactionImpl::OnNsecRecord(const std::string& name, unsigned type) {
751 TriggerCallback(RESULT_NSEC, NULL); 743 TriggerCallback(RESULT_NSEC, NULL);
752 } 744 }
753 745
754 void MDnsTransactionImpl::OnCachePurged() { 746 void MDnsTransactionImpl::OnCachePurged() {
755 // TODO(noamsml): Cache purge situations not yet implemented 747 // TODO(noamsml): Cache purge situations not yet implemented
756 } 748 }
757 749
758 } // namespace net 750 } // namespace net
OLDNEW
« no previous file with comments | « net/dns/mdns_client_impl.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698