#ifndef Notification_h
#define Notification_h
#include "bindings/v8/ScriptWrappable.h"
#include "core/dom/ActiveDOMObject.h"
#include "core/events/EventTarget.h"
#include "heap/Handle.h"
#include "modules/notifications/NotificationClient.h"
#include "platform/AsyncMethodRunner.h"
#include "platform/text/TextDirection.h"
#include "platform/weborigin/KURL.h"
#include "wtf/OwnPtr.h"
#include "wtf/PassRefPtr.h"
#include "wtf/RefCounted.h"
namespace WebCore {
class Dictionary;
class ExecutionContext;
class NotificationPermissionCallback;
class Notification : public RefCountedWillBeRefCountedGarbageCollected<Notification>, public ScriptWrappable, public ActiveDOMObject, public EventTargetWithInlineData {
DEFINE_EVENT_TARGET_REFCOUNTING(RefCountedWillBeRefCountedGarbageCollected<Notification>);
public:
static PassRefPtrWillBeRawPtr<Notification> create(ExecutionContext*, const String& title, const Dictionary& options);
virtual ~Notification();
void close();
DEFINE_ATTRIBUTE_EVENT_LISTENER(click);
DEFINE_ATTRIBUTE_EVENT_LISTENER(show);
DEFINE_ATTRIBUTE_EVENT_LISTENER(error);
DEFINE_ATTRIBUTE_EVENT_LISTENER(close);
void dispatchShowEvent();
void dispatchClickEvent();
void dispatchErrorEvent();
void dispatchCloseEvent();
String title() const { return m_title; }
String dir() const { return m_dir; }
String lang() const { return m_lang; }
String body() const { return m_body; }
String tag() const { return m_tag; }
String icon() const { return m_iconUrl; }
TextDirection direction() const;
KURL iconURL() const { return m_iconUrl; }
static const String& permissionString(NotificationClient::Permission);
static const String& permission(ExecutionContext*);
static void requestPermission(ExecutionContext*, PassOwnPtr<NotificationPermissionCallback> = nullptr);
virtual ExecutionContext* executionContext() const OVERRIDE FINAL { return ActiveDOMObject::executionContext(); }
virtual bool dispatchEvent(PassRefPtrWillBeRawPtr<Event>) OVERRIDE FINAL;
virtual const AtomicString& interfaceName() const OVERRIDE;
virtual void stop() OVERRIDE;
virtual bool hasPendingActivity() const OVERRIDE;
void trace(Visitor*) { }
private:
Notification(const String& title, ExecutionContext*, NotificationClient*);
void show();
void setDir(const String& dir) { m_dir = dir; }
void setLang(const String& lang) { m_lang = lang; }
void setBody(const String& body) { m_body = body; }
void setIconUrl(KURL iconUrl) { m_iconUrl = iconUrl; }
void setTag(const String& tag) { m_tag = tag; }
private:
String m_title;
String m_dir;
String m_lang;
String m_body;
String m_tag;
KURL m_iconUrl;
enum NotificationState {
Idle = 0,
Showing = 1,
Closed = 2,
};
NotificationState m_state;
NotificationClient* m_client;
OwnPtr<AsyncMethodRunner<Notification> > m_asyncRunner;
};
}
#endif