- Revision
- 129922
- Author
- [email protected]
- Date
- 2012-09-28 11:04:17 -0700 (Fri, 28 Sep 2012)
Log Message
[EFL][WK2] {Vibration,Battery,NetworkInfo}Provider should contain WKContextRef instead of proxy.
https://bugs.webkit.org/show_bug.cgi?id=97839
Patch by Byungwoo Lee <[email protected]> on 2012-09-28
Reviewed by Kenneth Rohde Christiansen.
VibrationProvider has WKRetainPtr<WKVibrationRef> m_wkVibrationRef
which has reference for object WebVibrationProxy.
The WebVibrationProxy instance is a member of WebContext who has it
as RefPtr<WebVibrationProxy>.
A member of one class is shared with another class, but there is no
relation between the two classes.
This can become a problem when WebContext is deleted before the
VibrationProvider, WebVibrationProxy will be alive without WebContext,
because VibrationProvider also has the reference for WebVibrationProxy.
This is a problem because WebVibrationProxy should be a member of
WebContext.
To prevent this, I changed the VibrationProvider to have
WKRetainPtr<WKContextRef> instead of WKRetainPtr<WKVibrationRef>.
Same for BatteryProvider and NetworkInfoProvider.
* UIProcess/API/efl/BatteryProvider.cpp:
(BatteryProvider::create):
(BatteryProvider::BatteryProvider):
(BatteryProvider::didChangeBatteryStatus):
* UIProcess/API/efl/BatteryProvider.h:
(BatteryProvider):
* UIProcess/API/efl/NetworkInfoProvider.cpp:
(NetworkInfoProvider::create):
(NetworkInfoProvider::NetworkInfoProvider):
* UIProcess/API/efl/NetworkInfoProvider.h:
(NetworkInfoProvider):
* UIProcess/API/efl/VibrationProvider.cpp:
(VibrationProvider::create):
(VibrationProvider::VibrationProvider):
* UIProcess/API/efl/VibrationProvider.h:
(VibrationProvider):
* UIProcess/API/efl/ewk_context.cpp:
(_Ewk_Context::_Ewk_Context):
Modified Paths
Diff
Modified: trunk/Source/WebKit2/ChangeLog (129921 => 129922)
--- trunk/Source/WebKit2/ChangeLog 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/ChangeLog 2012-09-28 18:04:17 UTC (rev 129922)
@@ -1,3 +1,48 @@
+2012-09-28 Byungwoo Lee <[email protected]>
+
+ [EFL][WK2] {Vibration,Battery,NetworkInfo}Provider should contain WKContextRef instead of proxy.
+ https://bugs.webkit.org/show_bug.cgi?id=97839
+
+ Reviewed by Kenneth Rohde Christiansen.
+
+ VibrationProvider has WKRetainPtr<WKVibrationRef> m_wkVibrationRef
+ which has reference for object WebVibrationProxy.
+ The WebVibrationProxy instance is a member of WebContext who has it
+ as RefPtr<WebVibrationProxy>.
+
+ A member of one class is shared with another class, but there is no
+ relation between the two classes.
+
+ This can become a problem when WebContext is deleted before the
+ VibrationProvider, WebVibrationProxy will be alive without WebContext,
+ because VibrationProvider also has the reference for WebVibrationProxy.
+
+ This is a problem because WebVibrationProxy should be a member of
+ WebContext.
+
+ To prevent this, I changed the VibrationProvider to have
+ WKRetainPtr<WKContextRef> instead of WKRetainPtr<WKVibrationRef>.
+ Same for BatteryProvider and NetworkInfoProvider.
+
+ * UIProcess/API/efl/BatteryProvider.cpp:
+ (BatteryProvider::create):
+ (BatteryProvider::BatteryProvider):
+ (BatteryProvider::didChangeBatteryStatus):
+ * UIProcess/API/efl/BatteryProvider.h:
+ (BatteryProvider):
+ * UIProcess/API/efl/NetworkInfoProvider.cpp:
+ (NetworkInfoProvider::create):
+ (NetworkInfoProvider::NetworkInfoProvider):
+ * UIProcess/API/efl/NetworkInfoProvider.h:
+ (NetworkInfoProvider):
+ * UIProcess/API/efl/VibrationProvider.cpp:
+ (VibrationProvider::create):
+ (VibrationProvider::VibrationProvider):
+ * UIProcess/API/efl/VibrationProvider.h:
+ (VibrationProvider):
+ * UIProcess/API/efl/ewk_context.cpp:
+ (_Ewk_Context::_Ewk_Context):
+
2012-09-28 Mario Sanchez Prada <[email protected]>
[WK2][GTK] Implement new Favicons API
Modified: trunk/Source/WebKit2/UIProcess/API/efl/BatteryProvider.cpp (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/BatteryProvider.cpp 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/BatteryProvider.cpp 2012-09-28 18:04:17 UTC (rev 129922)
@@ -31,6 +31,7 @@
#include "WKAPICast.h"
#include "WKBatteryManager.h"
#include "WKBatteryStatus.h"
+#include "WKContext.h"
using namespace WebCore;
using namespace WebKit;
@@ -53,18 +54,25 @@
BatteryProvider::~BatteryProvider()
{
m_provider.stopUpdating();
- WKBatteryManagerSetProvider(m_wkBatteryManager.get(), 0);
+
+ WKBatteryManagerRef wkBatteryManager = WKContextGetBatteryManager(m_wkContext.get());
+ ASSERT(wkBatteryManager);
+
+ WKBatteryManagerSetProvider(wkBatteryManager, 0);
}
-PassRefPtr<BatteryProvider> BatteryProvider::create(WKBatteryManagerRef wkBatteryManager)
+PassRefPtr<BatteryProvider> BatteryProvider::create(WKContextRef wkContext)
{
- return adoptRef(new BatteryProvider(wkBatteryManager));
+ return adoptRef(new BatteryProvider(wkContext));
}
-BatteryProvider::BatteryProvider(WKBatteryManagerRef wkBatteryManager)
- : m_wkBatteryManager(wkBatteryManager)
+BatteryProvider::BatteryProvider(WKContextRef wkContext)
+ : m_wkContext(wkContext)
, m_provider(this)
{
+ ASSERT(m_wkContext);
+
+ WKBatteryManagerRef wkBatteryManager = WKContextGetBatteryManager(m_wkContext.get());
ASSERT(wkBatteryManager);
WKBatteryProvider wkBatteryProvider = {
@@ -73,7 +81,7 @@
startUpdatingCallback,
stopUpdatingCallback
};
- WKBatteryManagerSetProvider(m_wkBatteryManager.get(), &wkBatteryProvider);
+ WKBatteryManagerSetProvider(wkBatteryManager, &wkBatteryProvider);
}
void BatteryProvider::startUpdating()
@@ -88,8 +96,11 @@
void BatteryProvider::didChangeBatteryStatus(const AtomicString& eventType, PassRefPtr<BatteryStatus> status)
{
+ WKBatteryManagerRef wkBatteryManager = WKContextGetBatteryManager(m_wkContext.get());
+ ASSERT(wkBatteryManager);
+
WKRetainPtr<WKBatteryStatusRef> wkBatteryStatus(AdoptWK, WKBatteryStatusCreate(status->charging(), status->chargingTime(), status->dischargingTime(), status->level()));
- WKBatteryManagerProviderDidChangeBatteryStatus(m_wkBatteryManager.get(), toAPI(eventType.impl()), wkBatteryStatus.get());
+ WKBatteryManagerProviderDidChangeBatteryStatus(wkBatteryManager, toAPI(eventType.impl()), wkBatteryStatus.get());
}
#endif // ENABLE(BATTERY_STATUS)
Modified: trunk/Source/WebKit2/UIProcess/API/efl/BatteryProvider.h (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/BatteryProvider.h 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/BatteryProvider.h 2012-09-28 18:04:17 UTC (rev 129922)
@@ -38,18 +38,18 @@
class BatteryProvider : public RefCounted<BatteryProvider>, public WebCore::BatteryProviderEflClient {
public:
virtual ~BatteryProvider();
- static PassRefPtr<BatteryProvider> create(WKBatteryManagerRef);
+ static PassRefPtr<BatteryProvider> create(WKContextRef);
void startUpdating();
void stopUpdating();
private:
- BatteryProvider(WKBatteryManagerRef);
+ BatteryProvider(WKContextRef);
// BatteryProviderEflClient interface.
virtual void didChangeBatteryStatus(const AtomicString& eventType, PassRefPtr<WebCore::BatteryStatus>);
- WKRetainPtr<WKBatteryManagerRef> m_wkBatteryManager;
+ WKRetainPtr<WKContextRef> m_wkContext;
WebCore::BatteryProviderEfl m_provider;
};
Modified: trunk/Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.cpp (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.cpp 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.cpp 2012-09-28 18:04:17 UTC (rev 129922)
@@ -28,6 +28,7 @@
#if ENABLE(NETWORK_INFO)
+#include "WKContext.h"
#include "WKNetworkInfoManager.h"
#include <NotImplemented.h>
@@ -56,16 +57,19 @@
return toNetworkInfoProvider(clientInfo)->metered();
}
-PassRefPtr<NetworkInfoProvider> NetworkInfoProvider::create(WKNetworkInfoManagerRef wkManager)
+PassRefPtr<NetworkInfoProvider> NetworkInfoProvider::create(WKContextRef wkContext)
{
- return adoptRef(new NetworkInfoProvider(wkManager));
+ return adoptRef(new NetworkInfoProvider(wkContext));
}
-NetworkInfoProvider::NetworkInfoProvider(WKNetworkInfoManagerRef wkManager)
- : m_wkNetworkInfoManager(wkManager)
+NetworkInfoProvider::NetworkInfoProvider(WKContextRef wkContext)
+ : m_wkContext(wkContext)
{
- ASSERT(wkManager);
+ ASSERT(wkContext);
+ WKNetworkInfoManagerRef wkNetworkInfoManager = WKContextGetNetworkInfoManager(m_wkContext.get());
+ ASSERT(wkNetworkInfoManager);
+
WKNetworkInfoProvider wkNetworkInfoProvider = {
kWKNetworkInfoProviderCurrentVersion,
this, // clientInfo
@@ -74,12 +78,15 @@
getBandwidthCallback,
isMeteredCallback
};
- WKNetworkInfoManagerSetProvider(m_wkNetworkInfoManager.get(), &wkNetworkInfoProvider);
+ WKNetworkInfoManagerSetProvider(wkNetworkInfoManager, &wkNetworkInfoProvider);
}
NetworkInfoProvider::~NetworkInfoProvider()
{
- WKNetworkInfoManagerSetProvider(m_wkNetworkInfoManager.get(), 0);
+ WKNetworkInfoManagerRef wkNetworkInfoManager = WKContextGetNetworkInfoManager(m_wkContext.get());
+ ASSERT(wkNetworkInfoManager);
+
+ WKNetworkInfoManagerSetProvider(wkNetworkInfoManager, 0);
}
double NetworkInfoProvider::bandwidth() const
Modified: trunk/Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.h (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.h 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/NetworkInfoProvider.h 2012-09-28 18:04:17 UTC (rev 129922)
@@ -37,7 +37,7 @@
class NetworkInfoProvider : public RefCounted<NetworkInfoProvider>, public WebCore::NetworkInfoClient {
public:
virtual ~NetworkInfoProvider();
- static PassRefPtr<NetworkInfoProvider> create(WKNetworkInfoManagerRef);
+ static PassRefPtr<NetworkInfoProvider> create(WKContextRef);
// NetworkInfoClient interface.
virtual double bandwidth() const;
@@ -47,9 +47,9 @@
virtual void stopUpdating();
private:
- NetworkInfoProvider(WKNetworkInfoManagerRef);
+ NetworkInfoProvider(WKContextRef);
- WKRetainPtr<WKNetworkInfoManagerRef> m_wkNetworkInfoManager;
+ WKRetainPtr<WKContextRef> m_wkContext;
WebCore::NetworkInfoProviderEfl m_provider;
};
Modified: trunk/Source/WebKit2/UIProcess/API/efl/VibrationProvider.cpp (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/VibrationProvider.cpp 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/VibrationProvider.cpp 2012-09-28 18:04:17 UTC (rev 129922)
@@ -29,6 +29,7 @@
#if ENABLE(VIBRATION)
#include "WKAPICast.h"
+#include "WKContext.h"
#include "WKVibration.h"
#include <Evas.h>
@@ -65,28 +66,34 @@
toVibrationProvider(clientInfo)->cancelVibration();
}
-PassRefPtr<VibrationProvider> VibrationProvider::create(WKVibrationRef wkVibrationRef)
+PassRefPtr<VibrationProvider> VibrationProvider::create(WKContextRef wkContext)
{
- return adoptRef(new VibrationProvider(wkVibrationRef));
+ return adoptRef(new VibrationProvider(wkContext));
}
-VibrationProvider::VibrationProvider(WKVibrationRef wkVibrationRef)
- : m_wkVibrationRef(wkVibrationRef)
+VibrationProvider::VibrationProvider(WKContextRef wkContext)
+ : m_wkContext(wkContext)
{
- ASSERT(wkVibrationRef);
+ ASSERT(m_wkContext.get());
+ WKVibrationRef wkVibration = WKContextGetVibration(m_wkContext.get());
+ ASSERT(wkVibration);
+
WKVibrationProvider wkVibrationProvider = {
kWKVibrationProviderCurrentVersion,
this, // clientInfo
vibrateCallback,
cancelVibrationCallback
};
- WKVibrationSetProvider(m_wkVibrationRef.get(), &wkVibrationProvider);
+ WKVibrationSetProvider(wkVibration, &wkVibrationProvider);
}
VibrationProvider::~VibrationProvider()
{
- WKVibrationSetProvider(m_wkVibrationRef.get(), 0);
+ WKVibrationRef wkVibration = WKContextGetVibration(m_wkContext.get());
+ ASSERT(wkVibration);
+
+ WKVibrationSetProvider(wkVibration, 0);
}
void VibrationProvider::vibrate(uint64_t vibrationTime)
Modified: trunk/Source/WebKit2/UIProcess/API/efl/VibrationProvider.h (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/VibrationProvider.h 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/VibrationProvider.h 2012-09-28 18:04:17 UTC (rev 129922)
@@ -37,7 +37,7 @@
class VibrationProvider : public RefCounted<VibrationProvider> {
public:
- static PassRefPtr<VibrationProvider> create(WKVibrationRef);
+ static PassRefPtr<VibrationProvider> create(WKContextRef);
virtual ~VibrationProvider();
void vibrate(uint64_t vibrationTime);
@@ -45,9 +45,9 @@
void setVibrationClientCallbacks(Ewk_Vibration_Client_Vibrate_Cb, Ewk_Vibration_Client_Vibration_Cancel_Cb, void*);
private:
- explicit VibrationProvider(WKVibrationRef);
+ explicit VibrationProvider(WKContextRef);
- WKRetainPtr<WKVibrationRef> m_wkVibrationRef;
+ WKRetainPtr<WKContextRef> m_wkContext;
OwnPtr<Ewk_Vibration_Client> m_vibrationClient;
};
Modified: trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp (129921 => 129922)
--- trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp 2012-09-28 17:55:44 UTC (rev 129921)
+++ trunk/Source/WebKit2/UIProcess/API/efl/ewk_context.cpp 2012-09-28 18:04:17 UTC (rev 129922)
@@ -86,18 +86,15 @@
, requestManager(WKContextGetSoupRequestManager(contextRef.get()))
{
#if ENABLE(BATTERY_STATUS)
- WKBatteryManagerRef wkBatteryManager = WKContextGetBatteryManager(contextRef.get());
- batteryProvider = BatteryProvider::create(wkBatteryManager);
+ batteryProvider = BatteryProvider::create(context.get());
#endif
#if ENABLE(NETWORK_INFO)
- WKNetworkInfoManagerRef wkNetworkInfoManagerRef = WKContextGetNetworkInfoManager(contextRef.get());
- networkInfoProvider = NetworkInfoProvider::create(wkNetworkInfoManagerRef);
+ networkInfoProvider = NetworkInfoProvider::create(context.get());
#endif
#if ENABLE(VIBRATION)
- WKVibrationRef wkVibrationRef = WKContextGetVibration(contextRef.get());
- vibrationProvider = VibrationProvider::create(wkVibrationRef);
+ vibrationProvider = VibrationProvider::create(context.get());
#endif
#if ENABLE(MEMORY_SAMPLER)