gecko/dom/notification/Notification.h
Birunthan Mohanathas 71ebe5a4e2 Bug 1058101 - Move dom/src/notification/ into dom/. r=mccr8
--HG--
rename : dom/src/notification/ChromeNotifications.js => dom/notification/ChromeNotifications.js
rename : dom/src/notification/ChromeNotifications.manifest => dom/notification/ChromeNotifications.manifest
rename : dom/src/notification/DesktopNotification.cpp => dom/notification/DesktopNotification.cpp
rename : dom/src/notification/DesktopNotification.h => dom/notification/DesktopNotification.h
rename : dom/src/notification/Notification.cpp => dom/notification/Notification.cpp
rename : dom/src/notification/Notification.h => dom/notification/Notification.h
rename : dom/src/notification/NotificationDB.jsm => dom/notification/NotificationDB.jsm
rename : dom/src/notification/NotificationStorage.js => dom/notification/NotificationStorage.js
rename : dom/src/notification/NotificationStorage.manifest => dom/notification/NotificationStorage.manifest
rename : dom/src/notification/moz.build => dom/notification/moz.build
rename : dom/src/notification/test/unit/common_test_notificationdb.js => dom/notification/test/unit/common_test_notificationdb.js
rename : dom/src/notification/test/unit/test_notificationdb.js => dom/notification/test/unit/test_notificationdb.js
rename : dom/src/notification/test/unit/test_notificationdb_bug1024090.js => dom/notification/test/unit/test_notificationdb_bug1024090.js
rename : dom/src/notification/test/unit/xpcshell.ini => dom/notification/test/unit/xpcshell.ini
2014-08-30 21:43:46 -07:00

183 lines
4.8 KiB
C++

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef mozilla_dom_notification_h__
#define mozilla_dom_notification_h__
#include "mozilla/DOMEventTargetHelper.h"
#include "mozilla/dom/NotificationBinding.h"
#include "nsIObserver.h"
#include "nsCycleCollectionParticipant.h"
class nsIPrincipal;
class nsIStructuredCloneContainer;
class nsIVariant;
namespace mozilla {
namespace dom {
class NotificationObserver;
class Promise;
class Notification : public DOMEventTargetHelper
{
friend class NotificationTask;
friend class NotificationPermissionRequest;
friend class NotificationObserver;
friend class NotificationStorageCallback;
public:
IMPL_EVENT_HANDLER(click)
IMPL_EVENT_HANDLER(show)
IMPL_EVENT_HANDLER(error)
IMPL_EVENT_HANDLER(close)
NS_DECL_ISUPPORTS_INHERITED
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(Notification, DOMEventTargetHelper)
static already_AddRefed<Notification> Constructor(const GlobalObject& aGlobal,
const nsAString& aTitle,
const NotificationOptions& aOption,
ErrorResult& aRv);
void GetID(nsAString& aRetval) {
aRetval = mID;
}
void GetTitle(nsAString& aRetval)
{
aRetval = mTitle;
}
NotificationDirection Dir()
{
return mDir;
}
void GetLang(nsAString& aRetval)
{
aRetval = mLang;
}
void GetBody(nsAString& aRetval)
{
aRetval = mBody;
}
void GetTag(nsAString& aRetval)
{
aRetval = mTag;
}
void GetIcon(nsAString& aRetval)
{
aRetval = mIconUrl;
}
nsIStructuredCloneContainer* GetDataCloneContainer();
static void RequestPermission(const GlobalObject& aGlobal,
const Optional<OwningNonNull<NotificationPermissionCallback> >& aCallback,
ErrorResult& aRv);
static NotificationPermission GetPermission(const GlobalObject& aGlobal,
ErrorResult& aRv);
static already_AddRefed<Promise> Get(const GlobalObject& aGlobal,
const GetNotificationOptions& aFilter,
ErrorResult& aRv);
void Close();
nsPIDOMWindow* GetParentObject()
{
return GetOwner();
}
virtual JSObject* WrapObject(JSContext* aCx) MOZ_OVERRIDE;
void GetData(JSContext* aCx, JS::MutableHandle<JS::Value> aRetval);
void InitFromJSVal(JSContext* aCx, JS::Handle<JS::Value> aData, ErrorResult& aRv);
void InitFromBase64(JSContext* aCx, const nsAString& aData, ErrorResult& aRv);
protected:
Notification(const nsAString& aID, const nsAString& aTitle, const nsAString& aBody,
NotificationDirection aDir, const nsAString& aLang,
const nsAString& aTag, const nsAString& aIconUrl,
nsPIDOMWindow* aWindow);
static already_AddRefed<Notification> CreateInternal(nsPIDOMWindow* aWindow,
const nsAString& aID,
const nsAString& aTitle,
const NotificationOptions& aOptions);
void ShowInternal();
void CloseInternal();
static NotificationPermission GetPermissionInternal(nsISupports* aGlobal,
ErrorResult& rv);
static const nsString DirectionToString(NotificationDirection aDirection)
{
switch (aDirection) {
case NotificationDirection::Ltr:
return NS_LITERAL_STRING("ltr");
case NotificationDirection::Rtl:
return NS_LITERAL_STRING("rtl");
default:
return NS_LITERAL_STRING("auto");
}
}
static const NotificationDirection StringToDirection(const nsAString& aDirection)
{
if (aDirection.EqualsLiteral("ltr")) {
return NotificationDirection::Ltr;
}
if (aDirection.EqualsLiteral("rtl")) {
return NotificationDirection::Rtl;
}
return NotificationDirection::Auto;
}
static nsresult GetOrigin(nsPIDOMWindow* aWindow, nsString& aOrigin);
void GetAlertName(nsAString& aRetval)
{
aRetval = mAlertName;
}
nsString mID;
nsString mTitle;
nsString mBody;
NotificationDirection mDir;
nsString mLang;
nsString mTag;
nsString mIconUrl;
nsCOMPtr<nsIStructuredCloneContainer> mDataObjectContainer;
// It's null until GetData is first called
nsCOMPtr<nsIVariant> mData;
nsString mAlertName;
bool mIsClosed;
static uint32_t sCount;
private:
virtual ~Notification();
nsIPrincipal* GetPrincipal();
};
} // namespace dom
} // namespace mozilla
#endif // mozilla_dom_notification_h__