7128148deeeadf0ffb4ef8215da5d4d2dd9f11a0
[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 "Logging.h"
32 #include <WebCore/FloatRect.h>
33 #include <WebCore/MediaPlaybackTargetMock.h>
34 #include <WebCore/WebMediaSessionManager.h>
35
36 using namespace WebCore;
37
38 namespace WebCore {
39
40 static const double timerInterval = 1.0 / 10.0;
41
42 std::unique_ptr<MediaPlaybackTargetPickerMock> MediaPlaybackTargetPickerMock::create(MediaPlaybackTargetPicker::Client& client)
43 {
44     return std::unique_ptr<MediaPlaybackTargetPickerMock>(new MediaPlaybackTargetPickerMock(client));
45 }
46
47 MediaPlaybackTargetPickerMock::MediaPlaybackTargetPickerMock(MediaPlaybackTargetPicker::Client& client)
48     : MediaPlaybackTargetPicker(client)
49     , m_timer(RunLoop::main(), this, &MediaPlaybackTargetPickerMock::timerFired)
50 {
51     LOG(Media, "MediaPlaybackTargetPickerMock::MediaPlaybackTargetPickerMock");
52 }
53
54 MediaPlaybackTargetPickerMock::~MediaPlaybackTargetPickerMock()
55 {
56     LOG(Media, "MediaPlaybackTargetPickerMock::~MediaPlaybackTargetPickerMock");
57     setClient(nullptr);
58 }
59
60 bool MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable()
61 {
62     LOG(Media, "MediaPlaybackTargetPickerMock::externalOutputDeviceAvailable");
63     return m_state == MediaPlaybackTargetContext::OutputDeviceAvailable;
64 }
65
66 Ref<MediaPlaybackTarget> MediaPlaybackTargetPickerMock::playbackTarget()
67 {
68     LOG(Media, "MediaPlaybackTargetPickerMock::playbackTarget");
69     return WebCore::MediaPlaybackTargetMock::create(m_deviceName, m_state);
70 }
71
72 void MediaPlaybackTargetPickerMock::timerFired()
73 {
74     m_showingMenu = false;
75     currentDeviceDidChange();
76 }
77
78 void MediaPlaybackTargetPickerMock::showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute)
79 {
80     if (!client() || m_showingMenu)
81         return;
82
83 #if LOG_DISABLED
84     UNUSED_PARAM(checkActiveRoute);
85 #endif
86     LOG(Media, "MediaPlaybackTargetPickerMock::showPlaybackTargetPicker - checkActiveRoute = %i", (int)checkActiveRoute);
87
88     m_showingMenu = true;
89     m_timer.startOneShot(timerInterval);
90 }
91
92 void MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets()
93 {
94     LOG(Media, "MediaPlaybackTargetPickerMock::startingMonitoringPlaybackTargets");
95
96     if (m_state == MediaPlaybackTargetContext::OutputDeviceAvailable)
97         availableDevicesDidChange();
98
99     if (!m_deviceName.isEmpty() && m_state != MediaPlaybackTargetContext::Unknown)
100         currentDeviceDidChange();
101 }
102
103 void MediaPlaybackTargetPickerMock::stopMonitoringPlaybackTargets()
104 {
105     LOG(Media, "MediaPlaybackTargetPickerMock::stopMonitoringPlaybackTargets");
106 }
107
108 void MediaPlaybackTargetPickerMock::invalidatePlaybackTargets()
109 {
110     LOG(Media, "MediaPlaybackTargetPickerMock::invalidatePlaybackTargets");
111     setState(emptyString(), MediaPlaybackTargetContext::Unknown);
112 }
113
114 void MediaPlaybackTargetPickerMock::setState(const String& deviceName, MediaPlaybackTargetContext::State state)
115 {
116     LOG(Media, "MediaPlaybackTargetPickerMock::setState - name = %s, state = 0x%x", deviceName.utf8().data(), (unsigned)state);
117
118     if (deviceName != m_deviceName && state != MediaPlaybackTargetContext::Unknown) {
119         m_deviceName = deviceName;
120         currentDeviceDidChange();
121     }
122
123     if (m_state != state) {
124         m_state = state;
125         availableDevicesDidChange();
126     }
127 }
128
129 } // namespace WebCore
130
131 #endif // ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS)