#ifndef CHROME_BROWSER_EXTENSIONS_WINDOW_CONTROLLER_LIST_H_
#define CHROME_BROWSER_EXTENSIONS_WINDOW_CONTROLLER_LIST_H_
#include <list>
#include "base/compiler_specific.h"
#include "base/memory/singleton.h"
#include "base/observer_list.h"
#include "chrome/browser/extensions/window_controller.h"
class Profile;
class ChromeAsyncExtensionFunction;
namespace extensions {
class WindowControllerListObserver;
class WindowControllerList {
 public:
  typedef std::list<WindowController*> ControllerList;
  WindowControllerList();
  ~WindowControllerList();
  void AddExtensionWindow(WindowController* window);
  void RemoveExtensionWindow(WindowController* window);
  void AddObserver(WindowControllerListObserver* observer);
  void RemoveObserver(WindowControllerListObserver* observer);
  
  WindowController* FindWindowById(int id) const;
  
  WindowController* FindWindowForFunctionById(
      const ChromeAsyncExtensionFunction* function,
      int id) const;
  
  
  WindowController* CurrentWindowForFunction(
      const ChromeAsyncExtensionFunction* function) const;
  const ControllerList& windows() const { return windows_; }
  static WindowControllerList* GetInstance();
 private:
  friend struct DefaultSingletonTraits<WindowControllerList>;
  
  ControllerList windows_;
  ObserverList<WindowControllerListObserver> observers_;
  DISALLOW_COPY_AND_ASSIGN(WindowControllerList);
};
}  
#endif