mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-07 12:15:51 +00:00
3bc73e0fbe
--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
183 lines
4.8 KiB
C++
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__
|
|
|