зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1604962 - use NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING to support refcounting for abstrach classes. r=chunmin
Inheriting from `nsISupports` is too complicated if we just want to support refcounting. Instead, we can use `NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING` to declare `Add/RemoveRef()` as pure virtual functions in order to create ref-counted abstract classes. Differential Revision: https://phabricator.services.mozilla.com/D57714 --HG-- extra : moz-landing-system : lando
This commit is contained in:
Родитель
a2e90147ab
Коммит
6c23e730f2
|
@ -25,8 +25,6 @@ namespace dom {
|
|||
("MediaControlKeysHandler=%p, " msg, this, \
|
||||
ToMediaControlKeysEventStr(key), ##__VA_ARGS__));
|
||||
|
||||
NS_IMPL_ISUPPORTS0(MediaControlKeysHandler)
|
||||
|
||||
void MediaControlKeysHandler::OnKeyPressed(MediaControlKeysEvent aKeyEvent) {
|
||||
LOG_KEY("OnKeyPressed '%s'", aKeyEvent);
|
||||
|
||||
|
@ -71,8 +69,6 @@ void MediaControlKeysHandler::OnKeyPressed(MediaControlKeysEvent aKeyEvent) {
|
|||
}
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS0(MediaControlKeysEventSource)
|
||||
|
||||
void MediaControlKeysEventSource::AddListener(
|
||||
MediaControlKeysEventListener* aListener) {
|
||||
MOZ_ASSERT(aListener);
|
||||
|
|
|
@ -36,8 +36,9 @@ enum class MediaControlKeysEvent : uint32_t {
|
|||
* and then everytime when the media key events occur, `OnKeyPressed` will be
|
||||
* called so that we can do related handling.
|
||||
*/
|
||||
class MediaControlKeysEventListener : public nsISupports {
|
||||
class MediaControlKeysEventListener {
|
||||
public:
|
||||
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
|
||||
MediaControlKeysEventListener() = default;
|
||||
|
||||
virtual void OnKeyPressed(MediaControlKeysEvent aKeyEvent) = 0;
|
||||
|
@ -52,8 +53,7 @@ class MediaControlKeysEventListener : public nsISupports {
|
|||
*/
|
||||
class MediaControlKeysHandler final : public MediaControlKeysEventListener {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_INLINE_DECL_REFCOUNTING(MediaControlKeysHandler, override)
|
||||
void OnKeyPressed(MediaControlKeysEvent aKeyEvent) override;
|
||||
|
||||
private:
|
||||
|
@ -61,14 +61,13 @@ class MediaControlKeysHandler final : public MediaControlKeysEventListener {
|
|||
};
|
||||
|
||||
/**
|
||||
* MediaControlKeysEventSource is a base class which is used to implement
|
||||
* MediaControlKeysEventSource is an abstract class which is used to implement
|
||||
* transporting media control keys event to all its listeners when media keys
|
||||
* event happens.
|
||||
*/
|
||||
class MediaControlKeysEventSource : public nsISupports {
|
||||
class MediaControlKeysEventSource {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
|
||||
NS_INLINE_DECL_PURE_VIRTUAL_REFCOUNTING
|
||||
MediaControlKeysEventSource() = default;
|
||||
|
||||
virtual void AddListener(MediaControlKeysEventListener* aListener);
|
||||
|
|
|
@ -20,9 +20,6 @@
|
|||
namespace mozilla {
|
||||
namespace dom {
|
||||
|
||||
NS_IMPL_ISUPPORTS_INHERITED0(MediaControlKeysManager,
|
||||
MediaControlKeysEventSource)
|
||||
|
||||
bool MediaControlKeysManager::IsOpened() const {
|
||||
// As MediaControlKeysManager represents a platform-indenpendent event source,
|
||||
// which we can use to add other listeners to moniter media key events, we
|
||||
|
|
|
@ -22,7 +22,8 @@ namespace dom {
|
|||
class MediaControlKeysManager final : public MediaControlKeysEventSource,
|
||||
public MediaControlKeysEventListener {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_INLINE_DECL_REFCOUNTING(MediaControlKeysManager, override)
|
||||
|
||||
MediaControlKeysManager() = default;
|
||||
|
||||
// MediaControlKeysEventSource methods
|
||||
|
|
|
@ -8,8 +8,13 @@
|
|||
using namespace mozilla::dom;
|
||||
|
||||
class MediaControlKeysEventSourceTestImpl : public MediaControlKeysEventSource {
|
||||
public:
|
||||
NS_INLINE_DECL_REFCOUNTING(MediaControlKeysEventSourceTestImpl, override)
|
||||
bool Open() override { return true; }
|
||||
bool IsOpened() const override { return true; }
|
||||
|
||||
private:
|
||||
~MediaControlKeysEventSourceTestImpl() = default;
|
||||
};
|
||||
|
||||
TEST(MediaControlKeysEvent, TestAddOrRemoveListener)
|
||||
|
|
|
@ -19,7 +19,7 @@ static const int kSystemDefinedEventMediaKeysSubtype = 8;
|
|||
|
||||
class MediaHardwareKeysEventListenerTest : public MediaControlKeysEventListener {
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_INLINE_DECL_REFCOUNTING(MediaHardwareKeysEventListenerTest, override)
|
||||
|
||||
void OnKeyPressed(MediaControlKeysEvent aKeyEvent) override {
|
||||
mReceivedEvent = mozilla::Some(aKeyEvent);
|
||||
|
@ -37,8 +37,6 @@ class MediaHardwareKeysEventListenerTest : public MediaControlKeysEventListener
|
|||
mozilla::Maybe<MediaControlKeysEvent> mReceivedEvent;
|
||||
};
|
||||
|
||||
NS_IMPL_ISUPPORTS0(MediaHardwareKeysEventListenerTest)
|
||||
|
||||
static void SendFakeEvent(RefPtr<MediaHardwareKeysEventSourceMac>& aSource, int aKeyData) {
|
||||
NSEvent* event = [NSEvent otherEventWithType:NSSystemDefined
|
||||
location:NSZeroPoint
|
||||
|
|
|
@ -17,6 +17,7 @@ namespace widget {
|
|||
class MediaHardwareKeysEventSourceMac final
|
||||
: public mozilla::dom::MediaControlKeysEventSource {
|
||||
public:
|
||||
NS_INLINE_DECL_REFCOUNTING(MediaHardwareKeysEventSourceMac, override)
|
||||
MediaHardwareKeysEventSourceMac() = default;
|
||||
|
||||
static CGEventRef EventTapCallback(CGEventTapProxy proxy, CGEventType type,
|
||||
|
|
Загрузка…
Ссылка в новой задаче