[GTK][WK2] Add the WebKitBatteryProvider class
authorzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Dec 2013 18:23:02 +0000 (18:23 +0000)
committerzandobersek@gmail.com <zandobersek@gmail.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 11 Dec 2013 18:23:02 +0000 (18:23 +0000)
https://bugs.webkit.org/show_bug.cgi?id=115720

Reviewed by Martin Robinson.

Source/WebKit2:

This patch adds the WebKitBatteryProvider class which sets up a BatteryProviderUPower instance,
controlling the provider's activity when instrumented to do so by the WebBatteryManagerProxy
and relaying the battery status updates from the battery provider to the battery manager.

* GNUmakefile.list.am: Add the build targets for the new source files.
* UIProcess/API/gtk/WebKitBatteryProvider.cpp: Added.
(toBatteryProvider): A helper inline method that casts the client info to the battery provider instance.
(startUpdatingCallback): Relays the instruction to the WebKitBattery instance.
(stopUpdatingCallback): Ditto.
(WebKitBatteryProvider::create):
(WebKitBatteryProvider::WebKitBatteryProvider): Set up a WKBatteryProvider and set it to the passed-in battery manager.
(WebKitBatteryProvider::~WebKitBatteryProvider): Force the BatteryProviderUPower to stop updating.
(WebKitBatteryProvider::startUpdating): Relays the instruction to the BatteryProviderUPower instance.
(WebKitBatteryProvider::stopUpdating): Ditto.
(WebKitBatteryProvider::notifyBatteryStatusUnavailable): Update the battery manager with the new status that
has the default values that are to be used when the implementation cannot determine the battery status (as per
the Battery Status API specification).
(WebKitBatteryProvider::notifyBatteryStatusUpdated): Update the battery status.
* UIProcess/API/gtk/WebKitBatteryProvider.h: Added.
(WebKitBatteryProvider): Define the WebKitBatteryProvider reference-counted interface that also inherits from the
BatteryProviderUPowerClient interface.
* UIProcess/API/gtk/WebKitWebContext.cpp:
(_WebKitWebContextPrivate): Add a WebKitBatteryProvider member variable to the struct.
(createDefaultWebContext): Create a new battery provider when initializing the default web context.

Tools:

* gtk/generate-gtkdoc:
(get_webkit2_options): Ignore the WebKitBatteryProvider source files when generating the documentation.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@160445 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebKit2/ChangeLog
Source/WebKit2/GNUmakefile.list.am
Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.cpp [new file with mode: 0644]
Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.h [new file with mode: 0644]
Source/WebKit2/UIProcess/API/gtk/WebKitWebContext.cpp
Tools/ChangeLog
Tools/gtk/generate-gtkdoc

index 2835e46..092a550 100644 (file)
@@ -1,5 +1,37 @@
 2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>
 
+        [GTK][WK2] Add the WebKitBatteryProvider class
+        https://bugs.webkit.org/show_bug.cgi?id=115720
+
+        Reviewed by Martin Robinson.
+
+        This patch adds the WebKitBatteryProvider class which sets up a BatteryProviderUPower instance,
+        controlling the provider's activity when instrumented to do so by the WebBatteryManagerProxy
+        and relaying the battery status updates from the battery provider to the battery manager.
+
+        * GNUmakefile.list.am: Add the build targets for the new source files.
+        * UIProcess/API/gtk/WebKitBatteryProvider.cpp: Added.
+        (toBatteryProvider): A helper inline method that casts the client info to the battery provider instance.
+        (startUpdatingCallback): Relays the instruction to the WebKitBattery instance.
+        (stopUpdatingCallback): Ditto.
+        (WebKitBatteryProvider::create):
+        (WebKitBatteryProvider::WebKitBatteryProvider): Set up a WKBatteryProvider and set it to the passed-in battery manager.
+        (WebKitBatteryProvider::~WebKitBatteryProvider): Force the BatteryProviderUPower to stop updating.
+        (WebKitBatteryProvider::startUpdating): Relays the instruction to the BatteryProviderUPower instance.
+        (WebKitBatteryProvider::stopUpdating): Ditto.
+        (WebKitBatteryProvider::notifyBatteryStatusUnavailable): Update the battery manager with the new status that
+        has the default values that are to be used when the implementation cannot determine the battery status (as per
+        the Battery Status API specification).
+        (WebKitBatteryProvider::notifyBatteryStatusUpdated): Update the battery status.
+        * UIProcess/API/gtk/WebKitBatteryProvider.h: Added.
+        (WebKitBatteryProvider): Define the WebKitBatteryProvider reference-counted interface that also inherits from the
+        BatteryProviderUPowerClient interface.
+        * UIProcess/API/gtk/WebKitWebContext.cpp:
+        (_WebKitWebContextPrivate): Add a WebKitBatteryProvider member variable to the struct.
+        (createDefaultWebContext): Create a new battery provider when initializing the default web context.
+
+2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>
+
         [GTK] Add a UPower-based BatteryProvider
         https://bugs.webkit.org/show_bug.cgi?id=115719
 
index 06df211..e7e11f1 100644 (file)
@@ -724,6 +724,8 @@ webkit2_sources += \
        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.h \
        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListItem.cpp \
        Source/WebKit2/UIProcess/API/gtk/WebKitBackForwardListPrivate.h \
+       Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.cpp \
+       Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.h \
        Source/WebKit2/UIProcess/API/gtk/WebKitCertificateInfo.cpp \
        Source/WebKit2/UIProcess/API/gtk/WebKitCertificateInfo.h \
        Source/WebKit2/UIProcess/API/gtk/WebKitCertificateInfoPrivate.h \
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.cpp b/Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.cpp
new file mode 100644 (file)
index 0000000..3c1e4c6
--- /dev/null
@@ -0,0 +1,106 @@
+/*
+ * Copyright (C) 2013 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "WebKitBatteryProvider.h"
+
+#if ENABLE(BATTERY_STATUS)
+
+#include "WebBatteryManagerProxy.h"
+#include "WebBatteryStatus.h"
+#include <limits>
+
+using namespace WebKit;
+
+static inline WebKitBatteryProvider* toBatteryProvider(const void* clientInfo)
+{
+    return static_cast<WebKitBatteryProvider*>(const_cast<void*>(clientInfo));
+}
+
+static void startUpdatingCallback(WKBatteryManagerRef batteryManager, const void* clientInfo)
+{
+    toBatteryProvider(clientInfo)->startUpdating();
+}
+
+static void stopUpdatingCallback(WKBatteryManagerRef batteryManager, const void* clientInfo)
+{
+    toBatteryProvider(clientInfo)->stopUpdating();
+}
+
+PassRefPtr<WebKitBatteryProvider> WebKitBatteryProvider::create(WebBatteryManagerProxy* batteryManager)
+{
+    return adoptRef(new WebKitBatteryProvider(batteryManager));
+}
+
+WebKitBatteryProvider::WebKitBatteryProvider(WebBatteryManagerProxy* batteryManager)
+    : m_batteryManager(batteryManager)
+    , m_provider(this)
+{
+    ASSERT(batteryManager);
+
+    WKBatteryProviderV0 wkBatteryProvider = {
+        {
+            0, // version
+            this // clientInfo
+        },
+        startUpdatingCallback,
+        stopUpdatingCallback
+    };
+    WKBatteryManagerSetProvider(toAPI(batteryManager), &wkBatteryProvider.base);
+}
+
+WebKitBatteryProvider::~WebKitBatteryProvider()
+{
+    m_provider.stopUpdating();
+}
+
+void WebKitBatteryProvider::startUpdating()
+{
+    m_provider.startUpdating();
+}
+
+void WebKitBatteryProvider::stopUpdating()
+{
+    m_provider.stopUpdating();
+}
+
+void WebKitBatteryProvider::updateBatteryStatus(WebCore::BatteryProviderUPowerStatus status, double secondsRemaining, double batteryLevel)
+{
+    RefPtr<WebBatteryStatus> batteryStatus;
+
+    switch (status) {
+    case WebCore::NotAvailable:
+        // When an implementation cannot report battery status, the default values should be used.
+        batteryStatus = WebBatteryStatus::create(true, std::numeric_limits<double>::infinity(),
+            std::numeric_limits<double>::infinity(), 1.0);
+        break;
+    case WebCore::Charging:
+        batteryStatus = WebBatteryStatus::create(true, secondsRemaining, 0, batteryLevel);
+        break;
+    case WebCore::Discharging:
+        batteryStatus = WebBatteryStatus::create(false, 0, secondsRemaining, batteryLevel);
+        break;
+    default:
+        ASSERT_NOT_REACHED();
+    }
+
+    m_batteryManager->providerUpdateBatteryStatus(batteryStatus.get());
+}
+
+#endif // ENABLE(BATTERY_STATUS)
diff --git a/Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.h b/Source/WebKit2/UIProcess/API/gtk/WebKitBatteryProvider.h
new file mode 100644 (file)
index 0000000..7f05db6
--- /dev/null
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2013 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB.  If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef WebKitBatteryProvider_h
+#define WebKitBatteryProvider_h
+
+#if ENABLE(BATTERY_STATUS)
+
+#include "WebKitPrivate.h"
+#include <WebCore/BatteryProviderUPowerClient.h>
+#include <WebCore/BatteryProviderUPower.h>
+#include <wtf/PassRefPtr.h>
+#include <wtf/RefCounted.h>
+
+namespace WebKit {
+
+class WebKitBatteryProvider : public RefCounted<WebKitBatteryProvider>, public WebCore::BatteryProviderUPowerClient {
+public:
+    static PassRefPtr<WebKitBatteryProvider> create(WebBatteryManagerProxy*);
+    virtual ~WebKitBatteryProvider();
+
+    void startUpdating();
+    void stopUpdating();
+
+private:
+    WebKitBatteryProvider(WebBatteryManagerProxy*);
+
+    // WebCore::BatteryProviderUPowerClient
+    virtual void updateBatteryStatus(WebCore::BatteryProviderUPowerStatus, double secondsRemaining, double batteryLevel);
+
+    RefPtr<WebBatteryManagerProxy> m_batteryManager;
+    WebCore::BatteryProviderUPower m_provider;
+};
+
+}
+
+#endif // ENABLE(BATTERY_STATUS)
+
+#endif // WebKitBatteryProvider_h
index 0694129..899167f 100644 (file)
 #include "config.h"
 #include "WebKitWebContext.h"
 
+#include "WebBatteryManagerProxy.h"
 #include "WebCertificateInfo.h"
 #include "WebCookieManagerProxy.h"
 #include "WebGeolocationManagerProxy.h"
+#include "WebKitBatteryProvider.h"
 #include "WebKitCertificateInfoPrivate.h"
 #include "WebKitCookieManagerPrivate.h"
 #include "WebKitDownloadClient.h"
@@ -139,6 +141,9 @@ struct _WebKitWebContextPrivate {
 #if ENABLE(GEOLOCATION)
     RefPtr<WebKitGeolocationProvider> geolocationProvider;
 #endif
+#if ENABLE(BATTERY_STATUS)
+    RefPtr<WebKitBatteryProvider> batteryProvider;
+#endif
 #if ENABLE(SPELLCHECK)
     OwnPtr<WebKitTextChecker> textChecker;
 #endif
@@ -211,6 +216,9 @@ static gpointer createDefaultWebContext(gpointer)
 #if ENABLE(GEOLOCATION)
     priv->geolocationProvider = WebKitGeolocationProvider::create(priv->context->supplement<WebGeolocationManagerProxy>());
 #endif
+#if ENABLE(BATTERY_STATUS)
+    priv->batteryProvider = WebKitBatteryProvider::create(priv->context->supplement<WebBatteryManagerProxy>());
+#endif
 #if ENABLE(SPELLCHECK)
     priv->textChecker = WebKitTextChecker::create();
 #endif
index 3f6793a..d06634b 100644 (file)
@@ -1,3 +1,13 @@
+2013-12-11  José Dapena Paz  <jdapena@igalia.com> and Zan Dobersek  <zdobersek@igalia.com>
+
+        [GTK][WK2] Add the WebKitBatteryProvider class
+        https://bugs.webkit.org/show_bug.cgi?id=115720
+
+        Reviewed by Martin Robinson.
+
+        * gtk/generate-gtkdoc:
+        (get_webkit2_options): Ignore the WebKitBatteryProvider source files when generating the documentation.
+
 2013-12-11  Mark Rowe  <mrowe@apple.com>
 
         <https://webkit.org/b/125563> Remove the DumpRenderTree Perl Support module
index 87f6844..36fac4d 100755 (executable)
@@ -104,9 +104,10 @@ def get_webkit2_options():
         'ignored_files': glob.glob(src_path('*Private.h')) + \
                          glob.glob(injected_bundle_src_path('*Private.h')) + \
                          glob.glob(src_path('*Client*')) + \
+                         glob.glob(src_path('WebKitAuthenticationDialog.*')) + \
+                         glob.glob(src_path('WebKitBatteryProvider.*')) + \
                          glob.glob(src_path('WebKitGeolocationProvider.*')) + \
                          glob.glob(src_path('WebKitTextChecker.*')) + \
-                         glob.glob(src_path('WebKitAuthenticationDialog.*')) + \
                          glob.glob(src_path('WebKitWebViewBaseAccessible.*')) + \
                          glob.glob(src_path('WebViewBaseInputMethodFilter.*')) + \
                          glob.glob(derived_sources_path('webkit2gtk', 'webkit2', 'WebKitMarshal.*')) + \