5aaa84dc9a0acc2906fb093e1bf824b6e7980c33
[WebKit-https.git] / Source / WebCore / platform / mock / MediaPlaybackTargetPickerMock.cpp
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
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 APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
14  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
15  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
17  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
18  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
19  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
20  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
21  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
22  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
23  * THE POSSIBILITY OF SUCH DAMAGE.
24  */
25
26 #include "config.h"
27 #include "MediaPlaybackTargetPickerMock.h"
28
29 #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)
30
31 #include "FloatRect.h"
32 #include "Logging.h"
33 #include "MediaPlaybackTargetMock.h"
34 #include "WebMediaSessionManager.h"
35
36 using namespace WebCore;
37
38 namespace WebCore {
39
40 static const Seconds timerInterval { 100_ms };
41
42 MediaPlaybackTargetPickerMock::MediaPlaybackTargetPickerMock(MediaPlaybackTargetPicker::Client& client)
43     : MediaPlaybackTargetPicker(client)
44     , m_timer(RunLoop::main(), this, &MediaPlaybackTargetPickerMock::timerFired)
45 {
46     LOG(Media, "MediaPlaybackTargetPickerMock::MediaPlaybackTargetPickerMock");
47 }
48
49 MediaPlaybackTargetPickerMock::~MediaPlaybackTargetPickerMock()
50 {
51     LOG(Media, "MediaPlaybackTargetPickerMock::~MediaPlaybackTargetPickerMock");
52     setClient(nullptr);
53 }
54
55 bool MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable()
56 {
57     LOG(Media, "MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable");
58     return m_state == MediaPlaybackTargetContext::OutputDeviceAvailable;
59 }
60
61 Ref<MediaPlaybackTarget> MediaPlaybackTargetPickerMock::playbackTarget()
62 {
63     LOG(Media, "MediaPlaybackTargetPickerMock::playbackTarget");
64     return WebCore::MediaPlaybackTargetMock::create(m_deviceName, m_state);
65 }
66
67 void MediaPlaybackTargetPickerMock::timerFired()
68 {
69     m_showingMenu = false;
70     currentDeviceDidChange();
71 }
72
73 void MediaPlaybackTargetPickerMock::showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute)
74 {
75     if (!client() || m_showingMenu)
76         return;
77
78 #if LOG_DISABLED
79     UNUSED_PARAM(checkActiveRoute);
80 #endif
81     LOG(Media, "MediaPlaybackTargetPickerMock::showPlaybackTargetPicker - checkActiveRoute = %i", (int)checkActiveRoute);
82
83     m_showingMenu = true;
84     m_timer.startOneShot(timerInterval);
85 }
86
87 void MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets()
88 {
89     LOG(Media, "MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets");
90
91     if (m_state == MediaPlaybackTargetContext::OutputDeviceAvailable)
92         availableDevicesDidChange();
93
94     if (!m_deviceName.isEmpty() && m_state != MediaPlaybackTargetContext::Unknown)
95         currentDeviceDidChange();
96 }
97
98 void MediaPlaybackTargetPickerMock::stopMonitoringPlaybackTargets()
99 {
100     LOG(Media, "MediaPlaybackTargetPickerMock::stopMonitoringPlaybackTargets");
101 }
102
103 void MediaPlaybackTargetPickerMock::invalidatePlaybackTargets()
104 {
105     LOG(Media, "MediaPlaybackTargetPickerMock::invalidatePlaybackTargets");
106     setState(emptyString(), MediaPlaybackTargetContext::Unknown);
107 }
108
109 void MediaPlaybackTargetPickerMock::setState(const String& deviceName, MediaPlaybackTargetContext::State state)
110 {
111     LOG(Media, "MediaPlaybackTargetPickerMock::setState - name = %s, state = 0x%x", deviceName.utf8().data(), (unsigned)state);
112
113     if (deviceName != m_deviceName && state != MediaPlaybackTargetContext::Unknown) {
114         m_deviceName = deviceName;
115         currentDeviceDidChange();
116     }
117
118     if (m_state != state) {
119         m_state = state;
120         availableDevicesDidChange();
121     }
122 }
123
124 } // namespace WebCore
125
126 #endif // ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)