diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/gstreamer')
3 files changed, 202 insertions, 0 deletions
diff --git a/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp new file mode 100644 index 000000000..11d759e1c --- /dev/null +++ b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2015 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "InstallMissingMediaPluginsPermissionRequest.h" + +#if ENABLE(VIDEO) && USE(GSTREAMER) +#include "WebPageMessages.h" +#include "WebPageProxy.h" +#include <wtf/text/CString.h> + +namespace WebKit { + +InstallMissingMediaPluginsPermissionRequest::InstallMissingMediaPluginsPermissionRequest(WebPageProxy& page, const String& details, const String& description) + : m_page(&page) + , m_details(details) + , m_description(description) +{ +} + +InstallMissingMediaPluginsPermissionRequest::~InstallMissingMediaPluginsPermissionRequest() +{ +} + +void InstallMissingMediaPluginsPermissionRequest::allow(GUniquePtr<GstInstallPluginsContext>&& context) +{ + if (!m_page->isValid()) + return; + + CString detail = m_details.utf8(); + const char* detailArray[2] = { detail.data(), nullptr }; + ref(); + GstInstallPluginsReturn result = gst_install_plugins_async(detailArray, context.get(), [](GstInstallPluginsReturn result, gpointer userData) { + RefPtr<InstallMissingMediaPluginsPermissionRequest> request = adoptRef(static_cast<InstallMissingMediaPluginsPermissionRequest*>(userData)); + request->didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)); + }, this); + + if (result != GST_INSTALL_PLUGINS_STARTED_OK) { + // If the installer didn't start, the callback will not be called, so remove the ref manually. + deref(); + didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(result)); + WTFLogAlways("Missing GStreamer Plugin: %s\n", detail.data()); + } +} + +void InstallMissingMediaPluginsPermissionRequest::deny() +{ + didEndRequestInstallMissingMediaPlugins(static_cast<uint32_t>(GST_INSTALL_PLUGINS_USER_ABORT)); +} + +void InstallMissingMediaPluginsPermissionRequest::didEndRequestInstallMissingMediaPlugins(uint32_t result) +{ + if (!m_page->isValid()) + return; + + m_page->send(Messages::WebPage::DidEndRequestInstallMissingMediaPlugins(result)); +} + +} // namespace WebKit + +#endif // ENABLE(VIDEO) && USE(GSTREAMER) diff --git a/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h new file mode 100644 index 000000000..5416014cb --- /dev/null +++ b/Source/WebKit2/UIProcess/gstreamer/InstallMissingMediaPluginsPermissionRequest.h @@ -0,0 +1,73 @@ +/* + * Copyright (C) 2015 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef InstallMissingMediaPluginsPermissionRequest_h +#define InstallMissingMediaPluginsPermissionRequest_h + +#if ENABLE(VIDEO) && USE(GSTREAMER) +#include <WebCore/GUniquePtrGStreamer.h> +#include <wtf/RefCounted.h> +#include <wtf/RefPtr.h> +#include <wtf/text/WTFString.h> + +namespace WebKit { + +class WebPageProxy; + +class InstallMissingMediaPluginsPermissionRequest : public RefCounted<InstallMissingMediaPluginsPermissionRequest> { +public: + static Ref<InstallMissingMediaPluginsPermissionRequest> create(WebPageProxy& page, const String& details, const String& description) + { + return adoptRef(*new InstallMissingMediaPluginsPermissionRequest(page, details, description)); + } + ~InstallMissingMediaPluginsPermissionRequest(); + + void allow(GUniquePtr<GstInstallPluginsContext>&& = nullptr); + void deny(); + + WebPageProxy& page() const { return *m_page; } + const String& details() const { return m_details; } + const String& description() const { return m_description; } + +private: + InstallMissingMediaPluginsPermissionRequest(WebPageProxy&, const String& details, const String& description); + + void didEndRequestInstallMissingMediaPlugins(uint32_t result); + + RefPtr<WebPageProxy> m_page; + String m_details; + String m_description; +}; + +} // namespace WebKit + +#else + +namespace WebKit { +class InstallMissingMediaPluginsPermissionRequest; +} // namespace WebKit + +#endif // ENABLE(VIDEO) && USE(GSTREAMER) +#endif // InstallMissingMediaPluginsPermissionRequest_h diff --git a/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp b/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp new file mode 100644 index 000000000..2ed9c34cf --- /dev/null +++ b/Source/WebKit2/UIProcess/gstreamer/WebPageProxyGStreamer.cpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2015 Igalia S.L. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, + * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + * THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "config.h" +#include "WebPageProxy.h" + +#if ENABLE(VIDEO) && USE(GSTREAMER) +#include "InstallMissingMediaPluginsPermissionRequest.h" +#include "PageClient.h" + +namespace WebKit { + +void WebPageProxy::requestInstallMissingMediaPlugins(const String& details, const String& description) +{ + RefPtr<InstallMissingMediaPluginsPermissionRequest> request = InstallMissingMediaPluginsPermissionRequest::create(*this, details, description); + if (m_pageClient.decidePolicyForInstallMissingMediaPluginsPermissionRequest(*request)) + return; + + request->deny(); +} + +} // namespace WebKit + +#endif // ENABLE(VIDEO) && USE(GSTREAMER) |