1// Copyright (c) 2006-2008 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 "chrome/browser/automation/automation_provider_list.h"
6
7#include <algorithm>
8
9#include "base/logging.h"
10#include "chrome/browser/automation/automation_provider.h"
11
12AutomationProviderList* AutomationProviderList::instance_ = NULL;
13
14AutomationProviderList::AutomationProviderList() {
15}
16
17AutomationProviderList::~AutomationProviderList() {
18  iterator iter = automation_providers_.begin();
19  while (iter != automation_providers_.end()) {
20    (*iter)->Release();
21    iter = automation_providers_.erase(iter);
22  }
23  instance_ = NULL;
24}
25
26bool AutomationProviderList::AddProvider(AutomationProvider* provider) {
27  provider->AddRef();
28  automation_providers_.push_back(provider);
29  return true;
30}
31
32bool AutomationProviderList::RemoveProvider(AutomationProvider* provider) {
33  const iterator remove_provider =
34    find(automation_providers_.begin(), automation_providers_.end(), provider);
35  if (remove_provider != automation_providers_.end()) {
36    (*remove_provider)->Release();
37    automation_providers_.erase(remove_provider);
38    if (automation_providers_.empty())
39      OnLastProviderRemoved();
40    return true;
41  }
42  return false;
43}
44
45AutomationProviderList* AutomationProviderList::GetInstance() {
46  if (!instance_) {
47    instance_ = new AutomationProviderList;
48  }
49  DCHECK(NULL != instance_);
50  return instance_;
51}
52