2 * Copyright (C) 2012 Intel Corporation. All rights reserved.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
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.
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.
27 #include "VibrationProvider.h"
31 #include "WKAPICast.h"
32 #include "WKContext.h"
33 #include "WKVibration.h"
36 using namespace WebCore;
39 * \struct Ewk_Vibration_Client
40 * @brief Contains the vibration client callbacks.
42 struct Ewk_Vibration_Client {
43 Ewk_Vibration_Client_Vibrate_Cb vibrate;
44 Ewk_Vibration_Client_Vibration_Cancel_Cb cancelVibration;
47 Ewk_Vibration_Client(Ewk_Vibration_Client_Vibrate_Cb vibrate, Ewk_Vibration_Client_Vibration_Cancel_Cb cancelVibration, void* userData)
49 , cancelVibration(cancelVibration)
54 static inline VibrationProvider* toVibrationProvider(const void* clientInfo)
56 return static_cast<VibrationProvider*>(const_cast<void*>(clientInfo));
59 static void vibrateCallback(WKVibrationRef vibrationRef, uint64_t vibrationTime, const void* clientInfo)
61 toVibrationProvider(clientInfo)->vibrate(vibrationTime);
64 static void cancelVibrationCallback(WKVibrationRef vibrationRef, const void* clientInfo)
66 toVibrationProvider(clientInfo)->cancelVibration();
69 PassRefPtr<VibrationProvider> VibrationProvider::create(WKContextRef wkContext)
71 return adoptRef(new VibrationProvider(wkContext));
74 VibrationProvider::VibrationProvider(WKContextRef wkContext)
75 : m_wkContext(wkContext)
77 ASSERT(m_wkContext.get());
79 WKVibrationRef wkVibration = WKContextGetVibration(m_wkContext.get());
82 WKVibrationProvider wkVibrationProvider = {
83 kWKVibrationProviderCurrentVersion,
86 cancelVibrationCallback
88 WKVibrationSetProvider(wkVibration, &wkVibrationProvider);
91 VibrationProvider::~VibrationProvider()
93 WKVibrationRef wkVibration = WKContextGetVibration(m_wkContext.get());
96 WKVibrationSetProvider(wkVibration, 0);
99 void VibrationProvider::vibrate(uint64_t vibrationTime)
101 if (m_vibrationClient && m_vibrationClient->vibrate)
102 m_vibrationClient->vibrate(vibrationTime, m_vibrationClient->userData);
105 void VibrationProvider::cancelVibration()
107 if (m_vibrationClient && m_vibrationClient->cancelVibration)
108 m_vibrationClient->cancelVibration(m_vibrationClient->userData);
111 void VibrationProvider::setVibrationClientCallbacks(Ewk_Vibration_Client_Vibrate_Cb vibrate, Ewk_Vibration_Client_Vibration_Cancel_Cb cancelVibration, void* data)
113 m_vibrationClient = adoptPtr(new Ewk_Vibration_Client(vibrate, cancelVibration, data));
116 #endif // ENABLE(VIBRATION)