- Revision
- 126211
- Author
- [email protected]
- Date
- 2012-08-21 16:22:09 -0700 (Tue, 21 Aug 2012)
Log Message
[BlackBerry] Add support for getUserMedia
https://bugs.webkit.org/show_bug.cgi?id=94591
Patch by Robin Cao <[email protected]> on 2012-08-21
Reviewed by George Staikos.
Implement getUserMedia feature using the platform API.
Source/WebCore:
Tests in fast/mediastream cover this.
PR #153571
Reviewed internally by George Staikos.
* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
(WebCore::toWebMediaStreamSource):
(WebCore):
(WebCore::toWebMediaStreamDescriptor):
(WebCore::MediaPlayerPrivate::lookupMediaStream):
* platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
(MediaPlayerPrivate):
Source/WebKit/blackberry:
PR #153571
Reviewed internally by George Staikos.
* WebCoreSupport/UserMediaClientImpl.cpp:
(WebCore):
(WebCore::userMediaRequestsMap):
(WebCore::toMediaStreamSource):
(WebCore::toMediaStreamDescriptor):
(WebUserMediaRequestClientImpl):
(WebCore::WebUserMediaRequestClientImpl::WebUserMediaRequestClientImpl):
(WebCore::WebUserMediaRequestClientImpl::requestSucceeded):
(WebCore::WebUserMediaRequestClientImpl::requestFailed):
(WebCore::UserMediaClientImpl::UserMediaClientImpl):
(WebCore::UserMediaClientImpl::~UserMediaClientImpl):
(WebCore::UserMediaClientImpl::requestUserMedia):
(WebCore::UserMediaClientImpl::cancelUserMediaRequest):
(WebCore::UserMediaClientImpl::webUserMedia):
* WebCoreSupport/UserMediaClientImpl.h:
(BlackBerry):
(Platform):
(UserMediaClientImpl):
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (126210 => 126211)
--- trunk/Source/WebCore/ChangeLog 2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebCore/ChangeLog 2012-08-21 23:22:09 UTC (rev 126211)
@@ -1,3 +1,26 @@
+2012-08-21 Robin Cao <[email protected]>
+
+ [BlackBerry] Add support for getUserMedia
+ https://bugs.webkit.org/show_bug.cgi?id=94591
+
+ Reviewed by George Staikos.
+
+ Implement getUserMedia feature using the platform API.
+
+ Tests in fast/mediastream cover this.
+
+ PR #153571
+
+ Reviewed internally by George Staikos.
+
+ * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp:
+ (WebCore::toWebMediaStreamSource):
+ (WebCore):
+ (WebCore::toWebMediaStreamDescriptor):
+ (WebCore::MediaPlayerPrivate::lookupMediaStream):
+ * platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h:
+ (MediaPlayerPrivate):
+
2012-08-21 Pavel Feldman <[email protected]>
Web Inspector: remove DOMNodeRemoved listener from the DefaultTextEditor
Modified: trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp (126210 => 126211)
--- trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp 2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.cpp 2012-08-21 23:22:09 UTC (rev 126211)
@@ -30,6 +30,8 @@
#include "HTMLMediaElement.h"
#include "HTMLNames.h"
#include "HostWindow.h"
+#include "MediaStreamDescriptor.h"
+#include "MediaStreamRegistry.h"
#include "NotImplemented.h"
#include "PlatformContextSkia.h"
#include "ProtectionSpace.h"
@@ -783,6 +785,33 @@
return rc;
}
+static WebMediaStreamSource toWebMediaStreamSource(MediaStreamSource* src)
+{
+ return WebMediaStreamSource(src->id().utf8().data(), static_cast<WebMediaStreamSource::Type>(src->type()), src->name().utf8().data());
+}
+
+static WebMediaStreamDescriptor toWebMediaStreamDescriptor(MediaStreamDescriptor* d)
+{
+ vector<WebMediaStreamSource> audioSources;
+ for (size_t i = 0; i < d->numberOfAudioComponents(); i++)
+ audioSources.push_back(toWebMediaStreamSource(d->audioComponent(i)->source()));
+
+ vector<WebMediaStreamSource> videoSources;
+ for (size_t i = 0; i < d->numberOfVideoComponents(); i++)
+ videoSources.push_back(toWebMediaStreamSource(d->videoComponent(i)->source()));
+
+ return WebMediaStreamDescriptor(d->label().utf8().data(), audioSources, videoSources);
+}
+
+WebMediaStreamDescriptor MediaPlayerPrivate::lookupMediaStream(const string& url)
+{
+ MediaStreamDescriptor* descriptor = MediaStreamRegistry::registry().lookupMediaStreamDescriptor(String::fromUTF8(url.c_str()));
+ if (!descriptor)
+ return WebMediaStreamDescriptor();
+
+ return toWebMediaStreamDescriptor(descriptor);
+}
+
FrameView* MediaPlayerPrivate::frameView() const
{
// We previously used m_webCorePlayer->frameView(), but this method returns
Modified: trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h (126210 => 126211)
--- trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h 2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebCore/platform/graphics/blackberry/MediaPlayerPrivateBlackBerry.h 2012-08-21 23:22:09 UTC (rev 126211)
@@ -138,6 +138,7 @@
virtual bool isTabVisible() const;
virtual int showErrorDialog(BlackBerry::Platform::PlatformPlayer::Error);
virtual BlackBerry::Platform::Graphics::Window* platformWindow();
+ virtual BlackBerry::Platform::WebMediaStreamDescriptor lookupMediaStream(const std::string& url);
private:
MediaPlayerPrivate(MediaPlayer*);
Modified: trunk/Source/WebKit/blackberry/ChangeLog (126210 => 126211)
--- trunk/Source/WebKit/blackberry/ChangeLog 2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebKit/blackberry/ChangeLog 2012-08-21 23:22:09 UTC (rev 126211)
@@ -1,3 +1,35 @@
+2012-08-21 Robin Cao <[email protected]>
+
+ [BlackBerry] Add support for getUserMedia
+ https://bugs.webkit.org/show_bug.cgi?id=94591
+
+ Reviewed by George Staikos.
+
+ Implement getUserMedia feature using the platform API.
+
+ PR #153571
+
+ Reviewed internally by George Staikos.
+
+ * WebCoreSupport/UserMediaClientImpl.cpp:
+ (WebCore):
+ (WebCore::userMediaRequestsMap):
+ (WebCore::toMediaStreamSource):
+ (WebCore::toMediaStreamDescriptor):
+ (WebUserMediaRequestClientImpl):
+ (WebCore::WebUserMediaRequestClientImpl::WebUserMediaRequestClientImpl):
+ (WebCore::WebUserMediaRequestClientImpl::requestSucceeded):
+ (WebCore::WebUserMediaRequestClientImpl::requestFailed):
+ (WebCore::UserMediaClientImpl::UserMediaClientImpl):
+ (WebCore::UserMediaClientImpl::~UserMediaClientImpl):
+ (WebCore::UserMediaClientImpl::requestUserMedia):
+ (WebCore::UserMediaClientImpl::cancelUserMediaRequest):
+ (WebCore::UserMediaClientImpl::webUserMedia):
+ * WebCoreSupport/UserMediaClientImpl.h:
+ (BlackBerry):
+ (Platform):
+ (UserMediaClientImpl):
+
2012-08-21 Kihong Kwon <[email protected]>
[EFL][GTK][BlackBerry] Fix build error in the DeviceOrientationClient
Modified: trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.cpp (126210 => 126211)
--- trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.cpp 2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.cpp 2012-08-21 23:22:09 UTC (rev 126211)
@@ -20,18 +20,89 @@
#include "UserMediaClientImpl.h"
#if ENABLE(MEDIA_STREAM)
+#include "MediaStreamDescriptor.h"
#include "WebPage.h"
+#include <BlackBerryPlatformWebMediaStreamDescriptor.h>
+#include <BlackBerryPlatformWebUserMedia.h>
+#include <wtf/HashMap.h>
+#include <wtf/OwnPtr.h>
+#include <wtf/PassOwnPtr.h>
#include <wtf/RefPtr.h>
+using namespace BlackBerry::Platform;
+
namespace WebCore {
+class WebUserMediaRequestClientImpl;
+
+typedef HashMap<UserMediaRequest*, OwnPtr<WebUserMediaRequestClientImpl> > UserMediaRequestsMap;
+
+static UserMediaRequestsMap& userMediaRequestsMap()
+{
+ DEFINE_STATIC_LOCAL(UserMediaRequestsMap, requests, ());
+ return requests;
+}
+
+static PassRefPtr<MediaStreamSource> toMediaStreamSource(const WebMediaStreamSource& src)
+{
+ return MediaStreamSource::create(String::fromUTF8(src.id().c_str()), static_cast<MediaStreamSource::Type>(src.type()), String::fromUTF8(src.name().c_str()));
+}
+
+static PassRefPtr<MediaStreamDescriptor> toMediaStreamDescriptor(const WebMediaStreamDescriptor& d)
+{
+ MediaStreamSourceVector audioSources;
+ for (size_t i = 0; i < d.audios().size(); i++) {
+ RefPtr<MediaStreamSource> src = ""
+ audioSources.append(src.release());
+ }
+
+ MediaStreamSourceVector videoSources;
+ for (size_t i = 0; i < d.videos().size(); i++) {
+ RefPtr<MediaStreamSource> src = ""
+ videoSources.append(src.release());
+ }
+
+ return MediaStreamDescriptor::create(String::fromUTF8(d.label().c_str()), audioSources, videoSources);
+}
+
+class WebUserMediaRequestClientImpl : public WebUserMediaRequestClient {
+public:
+ WebUserMediaRequestClientImpl(PassRefPtr<UserMediaRequest> prpRequest)
+ : m_request(prpRequest)
+ {
+ }
+
+ void requestSucceeded(const WebMediaStreamDescriptor& d)
+ {
+ if (m_request) {
+ RefPtr<MediaStreamDescriptor> descriptor = toMediaStreamDescriptor(d);
+ m_request->succeed(descriptor);
+
+ userMediaRequestsMap().remove(m_request.get());
+ }
+ }
+
+ void requestFailed()
+ {
+ if (m_request) {
+ m_request->fail();
+ userMediaRequestsMap().remove(m_request.get());
+ }
+ }
+
+private:
+ RefPtr<UserMediaRequest> m_request;
+};
+
UserMediaClientImpl::UserMediaClientImpl(BlackBerry::WebKit::WebPage*)
+ : m_webUserMedia(0)
{
}
UserMediaClientImpl::~UserMediaClientImpl()
{
+ BlackBerry::Platform::deleteGuardedObject(m_webUserMedia);
}
void UserMediaClientImpl::pageDestroyed()
@@ -40,12 +111,29 @@
void UserMediaClientImpl::requestUserMedia(PassRefPtr<UserMediaRequest> prpRequest, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
{
+ UserMediaRequest* request = prpRequest.get();
+ OwnPtr<WebUserMediaRequestClientImpl> requestClient = adoptPtr(new WebUserMediaRequestClientImpl(prpRequest));
+
+ webUserMedia()->requestUserMedia(WebUserMediaRequest(request->audio(), request->video(), requestClient.get()));
+ userMediaRequestsMap().add(request, requestClient.release());
}
-void UserMediaClientImpl::cancelUserMediaRequest(UserMediaRequest*)
+void UserMediaClientImpl::cancelUserMediaRequest(UserMediaRequest* request)
{
+ UserMediaRequestsMap::iterator it = userMediaRequestsMap().find(request);
+ if (it == userMediaRequestsMap().end())
+ return;
+
+ webUserMedia()->cancelUserMediaRequest(WebUserMediaRequest(request->audio(), request->video(), it->second.get()));
+ userMediaRequestsMap().remove(it);
}
+BlackBerry::Platform::WebUserMedia* UserMediaClientImpl::webUserMedia()
+{
+ if (!m_webUserMedia)
+ m_webUserMedia = new WebUserMedia;
+ return m_webUserMedia;
}
+}
#endif
Modified: trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.h (126210 => 126211)
--- trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.h 2012-08-21 23:19:11 UTC (rev 126210)
+++ trunk/Source/WebKit/blackberry/WebCoreSupport/UserMediaClientImpl.h 2012-08-21 23:22:09 UTC (rev 126211)
@@ -30,7 +30,11 @@
namespace WebKit {
class WebPage;
}
+
+namespace Platform {
+class WebUserMedia;
}
+}
namespace WebCore {
@@ -47,6 +51,9 @@
private:
UserMediaClientImpl();
+ BlackBerry::Platform::WebUserMedia* webUserMedia();
+
+ BlackBerry::Platform::WebUserMedia* m_webUserMedia;
};
}