1c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
5c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#ifndef CHROME_BROWSER_AUTOMATION_AUTOMATION_PROVIDER_LIST_H_
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#define CHROME_BROWSER_AUTOMATION_AUTOMATION_PROVIDER_LIST_H_
73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once
8c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
9c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include <vector>
10c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "base/basictypes.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProvider;
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
14c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Stores a list of all AutomationProvider objects.
15c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass AutomationProviderList {
16c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch public:
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  ~AutomationProviderList();
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef std::vector<AutomationProvider*> list_type;
19c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef list_type::iterator iterator;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  typedef list_type::const_iterator const_iterator;
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  // Adds and removes automation providers from the global list.
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool AddProvider(AutomationProvider* provider);
24c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  bool RemoveProvider(AutomationProvider* provider);
25c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const_iterator begin() {
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return automation_providers_.begin();
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const_iterator end() {
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return automation_providers_.end();
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size_t size() {
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch    return automation_providers_.size();
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  }
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static AutomationProviderList* GetInstance();
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch private:
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AutomationProviderList();
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  void OnLastProviderRemoved();
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  list_type automation_providers_;
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  static AutomationProviderList* instance_;
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  DISALLOW_COPY_AND_ASSIGN(AutomationProviderList);
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch};
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#endif  // CHROME_BROWSER_AUTOMATION_AUTOMATION_PROVIDER_LIST_H_
50