// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CHROME_BROWSER_NATIVE_WINDOW_NOTIFICATION_SOURCE_H_
#define CHROME_BROWSER_NATIVE_WINDOW_NOTIFICATION_SOURCE_H_

#include "build/build_config.h"
#include "content/public/browser/notification_source.h"
#include "ui/gfx/native_widget_types.h"

#if !BUILDFLAG(IS_MAC)

namespace content {

// Specialization of the Source class for native windows.  On Windows, these are
// HWNDs rather than pointers, and since the Source class expects a pointer
// type, this is necessary.  On Mac/Linux, these are pointers, so this is
// unnecessary but harmless.
template<>
class Source<gfx::NativeWindow> : public content::NotificationSource {
 public:
  explicit Source(gfx::NativeWindow wnd) : content::NotificationSource(wnd) {}

  explicit Source(const content::NotificationSource& other)
      : content::NotificationSource(other) {}

  gfx::NativeWindow operator->() const { return ptr(); }
  gfx::NativeWindow ptr() const {
    return static_cast<gfx::NativeWindow>(const_cast<void*>(ptr_.get()));
  }
};

}  // namespace content

#endif

#endif  // CHROME_BROWSER_NATIVE_WINDOW_NOTIFICATION_SOURCE_H_
