Use "= default" to denote default constructor or destructor
[WebKit-https.git] / Source / WebCore / platform / mock / TimerEventBasedMock.h
1 /*
2  *  Copyright (C) 2013 Nokia Corporation and/or its subsidiary(-ies).
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
14  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
15  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
16  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
17  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
20  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
21  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #ifndef TimerEventBasedMock_h
27 #define TimerEventBasedMock_h
28
29 #if ENABLE(WEB_RTC)
30
31 #include "Timer.h"
32 #include <wtf/Ref.h>
33 #include <wtf/RefCounted.h>
34 #include <wtf/RefPtr.h>
35 #include <wtf/Vector.h>
36
37 namespace WebCore {
38
39 class TimerEvent;
40
41 class MockNotifier : public RefCounted<MockNotifier> {
42 public:
43     virtual ~MockNotifier() = default;
44     virtual void fire() = 0;
45 };
46
47 class TimerEventBasedMock {
48 public:
49     void removeEvent(TimerEvent& event)
50     {
51         size_t pos = m_timerEvents.find(&event);
52         m_timerEvents.remove(pos);
53     }
54
55 protected:
56     Vector<RefPtr<TimerEvent> > m_timerEvents;
57 };
58
59 class TimerEvent : public RefCounted<TimerEvent> {
60 public:
61     TimerEvent(TimerEventBasedMock* mock, Ref<MockNotifier>&& notifier)
62         : m_mock(mock)
63         , m_timer(*this, &TimerEvent::timerFired)
64         , m_notifier(WTFMove(notifier))
65     {
66         m_timer.startOneShot(500_ms);
67     }
68
69     virtual ~TimerEvent()
70     {
71         m_mock = nullptr;
72     }
73
74     void timerFired()
75     {
76         m_notifier->fire();
77         m_mock->removeEvent(*this);
78     }
79
80 private:
81     TimerEventBasedMock* m_mock;
82     Timer m_timer;
83     Ref<MockNotifier> m_notifier;
84 };
85
86 } // namespace WebCore
87
88 #endif // ENABLE(WEB_RTC)
89
90 #endif // TimerEventBasedMock_h