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