gecko-dev/toolkit/components/alerts/AlertNotification.h
Nick Alexander 81d66e3c24 Bug 1775136 - Part 2: Support requireInteraction and actions in alert service and native Windows notifications. r=mhowell,smaug
1.  `requireInteraction` already existed, but it doesn't do anything.
    This patch makes it mean `scenario="reminder"` in the Windows
    Toast notification schema: see
    https://docs.microsoft.com/en-us/uwp/schemas/tiles/toastschema/element-toast.

2.  `actions` is intended to eventually support the Chrome-only
    extension to the Web Notifications API: see
    https://developer.mozilla.org/en-US/docs/Web/API/Notification/actions.

3.  We run into an `xpconnect` limit on the number of supported
    parameters.  Rather than bump the limit, which has global
    consequence, I added a second `init*` method.  The existing
    abstraction is horrible, but I can't rework it within my
    timelines.  Should we choose to invest, we might migrate to WebIDL
    so that we can sensibly use options objects.

Differential Revision: https://phabricator.services.mozilla.com/D150667
2022-07-12 03:18:42 +00:00

85 lines
2.3 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_AlertNotification_h__
#define mozilla_AlertNotification_h__
#include "imgINotificationObserver.h"
#include "nsIAlertsService.h"
#include "nsCOMPtr.h"
#include "nsCycleCollectionParticipant.h"
#include "nsICancelable.h"
#include "nsINamed.h"
#include "nsIPrincipal.h"
#include "nsString.h"
#include "nsITimer.h"
namespace mozilla {
class AlertImageRequest final : public imgINotificationObserver,
public nsICancelable,
public nsITimerCallback,
public nsINamed {
public:
NS_DECL_CYCLE_COLLECTING_ISUPPORTS
NS_DECL_CYCLE_COLLECTION_CLASS_AMBIGUOUS(AlertImageRequest,
imgINotificationObserver)
NS_DECL_IMGINOTIFICATIONOBSERVER
NS_DECL_NSICANCELABLE
NS_DECL_NSITIMERCALLBACK
NS_DECL_NSINAMED
AlertImageRequest(nsIURI* aURI, nsIPrincipal* aPrincipal,
bool aInPrivateBrowsing, uint32_t aTimeout,
nsIAlertNotificationImageListener* aListener,
nsISupports* aUserData);
nsresult Start();
private:
virtual ~AlertImageRequest();
nsresult NotifyMissing();
void NotifyComplete();
nsCOMPtr<nsIURI> mURI;
nsCOMPtr<nsIPrincipal> mPrincipal;
bool mInPrivateBrowsing;
uint32_t mTimeout;
nsCOMPtr<nsIAlertNotificationImageListener> mListener;
nsCOMPtr<nsISupports> mUserData;
nsCOMPtr<nsITimer> mTimer;
nsCOMPtr<imgIRequest> mRequest;
};
class AlertNotification final : public nsIAlertNotification {
public:
NS_DECL_ISUPPORTS
NS_DECL_NSIALERTNOTIFICATION
AlertNotification();
protected:
virtual ~AlertNotification();
private:
nsString mName;
nsString mImageURL;
nsString mTitle;
nsString mText;
bool mTextClickable;
nsString mCookie;
nsString mDir;
nsString mLang;
bool mRequireInteraction;
nsString mData;
nsCOMPtr<nsIPrincipal> mPrincipal;
bool mInPrivateBrowsing;
bool mSilent;
nsTArray<uint32_t> mVibrate;
nsTArray<RefPtr<nsIAlertAction>> mActions;
};
} // namespace mozilla
#endif /* mozilla_AlertNotification_h__ */