1// Copyright 2014 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 "ui/ozone/platform/dri/dri_window_delegate_manager.h"
6
7#include "ui/ozone/platform/dri/dri_window_delegate.h"
8
9namespace ui {
10
11DriWindowDelegateManager::DriWindowDelegateManager() {
12}
13
14DriWindowDelegateManager::~DriWindowDelegateManager() {
15  DCHECK(delegate_map_.empty());
16}
17
18void DriWindowDelegateManager::AddWindowDelegate(
19    gfx::AcceleratedWidget widget,
20    scoped_ptr<DriWindowDelegate> delegate) {
21  std::pair<WidgetToDelegateMap::iterator, bool> result =
22      delegate_map_.add(widget, delegate.Pass());
23  DCHECK(result.second) << "Delegate already added.";
24}
25
26scoped_ptr<DriWindowDelegate> DriWindowDelegateManager::RemoveWindowDelegate(
27    gfx::AcceleratedWidget widget) {
28  scoped_ptr<DriWindowDelegate> delegate = delegate_map_.take_and_erase(widget);
29  DCHECK(delegate) << "Attempting to remove non-existing delegate for "
30                   << widget;
31  return delegate.Pass();
32}
33
34DriWindowDelegate* DriWindowDelegateManager::GetWindowDelegate(
35    gfx::AcceleratedWidget widget) {
36  WidgetToDelegateMap::iterator it = delegate_map_.find(widget);
37  if (it != delegate_map_.end())
38    return it->second;
39
40  NOTREACHED() << "Attempting to get non-existing delegate for " << widget;
41  return NULL;
42}
43
44bool DriWindowDelegateManager::HasWindowDelegate(
45    gfx::AcceleratedWidget widget) {
46  return delegate_map_.find(widget) != delegate_map_.end();
47}
48
49}  // namespace ui
50