2012-04-03 03:34:16 +02:00
|
|
|
// Copyright (c) 2012 The Chromium Embedded Framework Authors. All rights
|
|
|
|
// reserved. Use of this source code is governed by a BSD-style license that
|
|
|
|
// can be found in the LICENSE file.
|
|
|
|
|
|
|
|
#include "libcef/common/tracker.h"
|
|
|
|
|
|
|
|
// CefTrackNode implementation.
|
|
|
|
|
2017-05-17 11:29:28 +02:00
|
|
|
CefTrackNode::CefTrackNode() : track_next_(NULL), track_prev_(NULL) {}
|
2012-04-03 03:34:16 +02:00
|
|
|
|
2017-05-17 11:29:28 +02:00
|
|
|
CefTrackNode::~CefTrackNode() {}
|
2012-04-03 03:34:16 +02:00
|
|
|
|
|
|
|
void CefTrackNode::InsertTrackPrev(CefTrackNode* object) {
|
|
|
|
if (track_prev_)
|
|
|
|
track_prev_->SetTrackNext(object);
|
|
|
|
object->SetTrackNext(this);
|
|
|
|
object->SetTrackPrev(track_prev_);
|
|
|
|
track_prev_ = object;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CefTrackNode::InsertTrackNext(CefTrackNode* object) {
|
|
|
|
if (track_next_)
|
|
|
|
track_next_->SetTrackPrev(object);
|
|
|
|
object->SetTrackPrev(this);
|
|
|
|
object->SetTrackNext(track_next_);
|
|
|
|
track_next_ = object;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CefTrackNode::RemoveTracking() {
|
|
|
|
if (track_next_)
|
|
|
|
track_next_->SetTrackPrev(track_prev_);
|
|
|
|
if (track_prev_)
|
|
|
|
track_prev_->SetTrackNext(track_next_);
|
|
|
|
track_next_ = NULL;
|
|
|
|
track_prev_ = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
// CefTrackManager implementation.
|
|
|
|
|
2017-05-17 11:29:28 +02:00
|
|
|
CefTrackManager::CefTrackManager() : object_count_(0) {}
|
2012-04-03 03:34:16 +02:00
|
|
|
|
|
|
|
CefTrackManager::~CefTrackManager() {
|
|
|
|
DeleteAll();
|
|
|
|
}
|
|
|
|
|
|
|
|
void CefTrackManager::Add(CefTrackNode* object) {
|
2014-07-15 00:18:51 +02:00
|
|
|
base::AutoLock lock_scope(lock_);
|
2012-04-03 03:34:16 +02:00
|
|
|
if (!object->IsTracked()) {
|
|
|
|
tracker_.InsertTrackNext(object);
|
|
|
|
++object_count_;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool CefTrackManager::Delete(CefTrackNode* object) {
|
2014-07-15 00:18:51 +02:00
|
|
|
base::AutoLock lock_scope(lock_);
|
2012-04-03 03:34:16 +02:00
|
|
|
if (object->IsTracked()) {
|
|
|
|
object->RemoveTracking();
|
|
|
|
delete object;
|
|
|
|
--object_count_;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
|
|
|
void CefTrackManager::DeleteAll() {
|
2014-07-15 00:18:51 +02:00
|
|
|
base::AutoLock lock_scope(lock_);
|
2012-04-03 03:34:16 +02:00
|
|
|
CefTrackNode* next;
|
|
|
|
do {
|
|
|
|
next = tracker_.GetTrackNext();
|
|
|
|
if (next) {
|
|
|
|
next->RemoveTracking();
|
|
|
|
delete next;
|
|
|
|
}
|
|
|
|
} while (next != NULL);
|
|
|
|
object_count_ = 0;
|
|
|
|
}
|