// Copyright (c) 2012 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 CONTENT_RENDERER_NOTIFICATION_PROVIDER_H_
#define CONTENT_RENDERER_NOTIFICATION_PROVIDER_H_

#include "content/public/renderer/render_view_observer.h"
#include "content/renderer/active_notification_tracker.h"
#include "third_party/WebKit/public/web/WebNotification.h"
#include "third_party/WebKit/public/web/WebNotificationPresenter.h"

namespace blink {
class WebNotificationPermissionCallback;
}

namespace content {
class RenderViewImpl;

// NotificationProvider class is owned by the RenderView.  Only
// to be used on the main thread.
class NotificationProvider : public RenderViewObserver,
                             public blink::WebNotificationPresenter {
 public:
  explicit NotificationProvider(RenderViewImpl* render_view);
  virtual ~NotificationProvider();

 private:
  // RenderView::Observer implementation.
  virtual bool OnMessageReceived(const IPC::Message& message) OVERRIDE;

  // blink::WebNotificationPresenter interface.
  virtual bool show(const blink::WebNotification& proxy);
  virtual void cancel(const blink::WebNotification& proxy);
  virtual void objectDestroyed(const blink::WebNotification& proxy);
  virtual blink::WebNotificationPresenter::Permission checkPermission(
      const blink::WebSecurityOrigin& origin);
  virtual void requestPermission(const blink::WebSecurityOrigin& origin,
      blink::WebNotificationPermissionCallback* callback);

  // IPC handlers.
  void OnDisplay(int id);
  void OnError(int id, const blink::WebString& message);
  void OnClose(int id, bool by_user);
  void OnClick(int id);
  void OnPermissionRequestComplete(int id);
  void OnNavigate();

  // A tracker object which manages the active notifications and the IDs
  // that are used to refer to them over IPC.
  ActiveNotificationTracker manager_;

  DISALLOW_COPY_AND_ASSIGN(NotificationProvider);
};

}  // namespace content

#endif  // CONTENT_RENDERER_NOTIFICATION_PROVIDER_H_
