Source/WebCore/ChangeLog

 12012-02-20 MORITA Hajime <morrita@google.com>
 2
 3 MEDIA_STREAM should be implemented as a PageSupplement.
 4 https://bugs.webkit.org/show_bug.cgi?id=79050
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 Added UserMediaController which implements PageSupplement. This
 9 controller mediates WebCore-to-client communication and lifecycle
 10 management. Then pushed UserMediaController out as a
 11 PageSupplement module.
 12
 13 No new tests. No behavior change.
 14
 15 * WebCore.gypi:
 16 * GNUmakefile.list.am:
 17 * mediastream/NavigatorMediaStream.cpp:
 18 (WebCore::NavigatorMediaStream::webkitGetUserMedia):
 19 * mediastream/UserMediaClient.h:
 20 (WebCore):
 21 * mediastream/UserMediaController.cpp: Added.
 22 (WebCore):
 23 (WebCore::UserMediaController::supplementName):
 24 (WebCore::UserMediaController::UserMediaController):
 25 (WebCore::UserMediaController::~UserMediaController):
 26 (WebCore::UserMediaController::create):
 27 (WebCore::provideUserMediaTo):
 28 * mediastream/UserMediaController.h: Added.
 29 (WebCore):
 30 (UserMediaController):
 31 (WebCore::UserMediaController::client):
 32 (WebCore::UserMediaController::from):
 33 (WebCore::UserMediaController::requestUserMedia):
 34 (WebCore::UserMediaController::cancelUserMediaRequest):
 35 * mediastream/UserMediaRequest.cpp:
 36 (WebCore::UserMediaRequest::create):
 37 (WebCore::UserMediaRequest::UserMediaRequest):
 38 (WebCore::UserMediaRequest::didCompleteQuery):
 39 (WebCore::UserMediaRequest::contextDestroyed):
 40 * mediastream/UserMediaRequest.h:
 41 (WebCore):
 42 (UserMediaRequest):
 43 * page/Page.cpp:
 44 (WebCore::Page::Page):
 45 (WebCore::Page::~Page):
 46 (WebCore::Page::PageClients::PageClients):
 47 * page/Page.h:
 48 (WebCore):
 49 (PageClients):
 50 (Page):
 51
1522012-02-20 Raymond Liu <raymond.liu@intel.com>
253
354 Have the DynamicsCompressorNode support multi-channel data

Source/WebKit/chromium/ChangeLog

 12012-02-20 MORITA Hajime <morrita@google.com>
 2
 3 MEDIA_STREAM should be implemented as a PageSupplement.
 4 https://bugs.webkit.org/show_bug.cgi?id=79050
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 * src/WebViewImpl.cpp:
 9 (WebKit::WebViewImpl::WebViewImpl):
 10
1112012-02-20 Peter Beverloo <peter@chromium.org>
212
313 Unreviewed. Rolled DEPS.

Source/WebCore/GNUmakefile.list.am

@@webcore_sources += \
26392639 Source/WebCore/mediastream/PeerConnection.h \
26402640 Source/WebCore/mediastream/SignalingCallback.h \
26412641 Source/WebCore/mediastream/UserMediaClient.h \
 2642 Source/WebCore/mediastream/UserMediaController.h \
 2643 Source/WebCore/mediastream/UserMediaController.cpp \
26422644 Source/WebCore/mediastream/UserMediaRequest.cpp \
26432645 Source/WebCore/mediastream/UserMediaRequest.h \
26442646 Source/WebCore/notifications/NotificationCenter.cpp \

Source/WebCore/WebCore.gypi

25882588 'mediastream/PeerConnection.h',
25892589 'mediastream/SignalingCallback.h',
25902590 'mediastream/UserMediaClient.h',
 2591 'mediastream/UserMediaController.h',
 2592 'mediastream/UserMediaController.cpp',
25912593 'mediastream/UserMediaRequest.cpp',
25922594 'mediastream/UserMediaRequest.h',
25932595 'notifications/Notification.cpp',

Source/WebCore/mediastream/NavigatorMediaStream.cpp

3535#include "NavigatorUserMediaErrorCallback.h"
3636#include "NavigatorUserMediaSuccessCallback.h"
3737#include "Page.h"
 38#include "UserMediaController.h"
3839#include "UserMediaRequest.h"
3940
4041namespace WebCore {

@@void NavigatorMediaStream::webkitGetUserMedia(Navigator* navigator, const String
5253 if (!successCallback)
5354 return;
5455
55  Frame* frame = navigator->frame();
56  if (!frame)
57  return;
58 
59  Page* page = frame->page();
60  if (!page)
 56 UserMediaController* userMedia = UserMediaController::from(navigator->frame());
 57 if (!userMedia) {
 58 ec = NOT_SUPPORTED_ERR;
6159 return;
 60 }
6261
63  RefPtr<UserMediaRequest> request = UserMediaRequest::create(frame->document(), page->userMediaClient(), options, successCallback, errorCallback);
 62 RefPtr<UserMediaRequest> request = UserMediaRequest::create(navigator->frame()->document(), userMedia, options, successCallback, errorCallback);
6463 if (!request) {
6564 ec = NOT_SUPPORTED_ERR;
6665 return;

Source/WebCore/mediastream/UserMediaClient.h

3838
3939namespace WebCore {
4040
 41class Page;
 42
4143class UserMediaClient {
4244public:
4345 virtual void pageDestroyed() = 0;

@@protected:
4951 virtual ~UserMediaClient() { }
5052};
5153
 54void provideUserMediaTo(Page*, UserMediaClient*);
 55
5256} // namespace WebCore
5357
5458#endif // ENABLE(MEDIA_STREAM)

Source/WebCore/mediastream/UserMediaController.cpp

 1/*
 2 * Copyright (C) 2012 Google Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 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.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 23 */
 24
 25#include "config.h"
 26#include "UserMediaController.h"
 27
 28#if ENABLE(MEDIA_STREAM)
 29
 30namespace WebCore {
 31
 32const AtomicString& UserMediaController::supplementName()
 33{
 34 DEFINE_STATIC_LOCAL(AtomicString, name, ("userMedia"));
 35 return name;
 36}
 37
 38UserMediaController::UserMediaController(UserMediaClient* client)
 39 : m_client(client)
 40{
 41}
 42
 43UserMediaController::~UserMediaController()
 44{
 45 m_client->pageDestroyed();
 46}
 47
 48PassOwnPtr<UserMediaController> UserMediaController::create(UserMediaClient* client)
 49{
 50 return adoptPtr(new UserMediaController(client));
 51}
 52
 53void provideUserMediaTo(Page* page, UserMediaClient* client)
 54{
 55 PageSupplement::provideTo(page, UserMediaController::supplementName(), UserMediaController::create(client));
 56}
 57
 58} // namespace WebCore
 59
 60#endif // ENABLE(MEDIA_STREAM)

Source/WebCore/mediastream/UserMediaController.h

 1/*
 2 * Copyright (C) 2012 Google Inc. All rights reserved.
 3 *
 4 * Redistribution and use in source and binary forms, with or without
 5 * modification, are permitted provided that the following conditions
 6 * are met:
 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.
 12 *
 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
 15 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 16 * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
 17 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 18 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 19 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 20 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 21 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 22 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 23 */
 24
 25#ifndef UserMediaController_h
 26#define UserMediaController_h
 27
 28#if ENABLE(MEDIA_STREAM)
 29
 30#include "PageSupplement.h"
 31#include "UserMediaClient.h"
 32#include <wtf/PassOwnPtr.h>
 33
 34namespace WebCore {
 35
 36class Frame;
 37class Page;
 38
 39class UserMediaController : public PageSupplement {
 40public:
 41 ~UserMediaController();
 42
 43 UserMediaClient* client() const { return m_client; }
 44 void requestUserMedia(PassRefPtr<UserMediaRequest>, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources);
 45 void cancelUserMediaRequest(UserMediaRequest*);
 46
 47 static PassOwnPtr<UserMediaController> create(UserMediaClient*);
 48 static const AtomicString& supplementName();
 49 static UserMediaController* from(Frame* frame) { return static_cast<UserMediaController*>(PageSupplement::from(frame, supplementName())); }
 50 static UserMediaController* from(Page* page) { return static_cast<UserMediaController*>(PageSupplement::from(page, supplementName())); }
 51
 52protected:
 53 UserMediaController(UserMediaClient*);
 54
 55private:
 56 UserMediaClient* m_client;
 57};
 58
 59inline void UserMediaController::requestUserMedia(PassRefPtr<UserMediaRequest> request, const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
 60{
 61 m_client->requestUserMedia(request, audioSources, videoSources);
 62}
 63
 64inline void UserMediaController::cancelUserMediaRequest(UserMediaRequest* request)
 65{
 66 m_client->cancelUserMediaRequest(request);
 67}
 68
 69} // namespace WebCore
 70
 71#endif // ENABLE(MEDIA_STREAM)
 72
 73#endif // UserMediaController_h

Source/WebCore/mediastream/UserMediaRequest.cpp

3636
3737#include "LocalMediaStream.h"
3838#include "SpaceSplitString.h"
39 #include "UserMediaClient.h"
 39#include "UserMediaController.h"
4040
4141namespace WebCore {
4242
43 PassRefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaClient* client, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
 43PassRefPtr<UserMediaRequest> UserMediaRequest::create(ScriptExecutionContext* context, UserMediaController* controller, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
4444{
45  RefPtr<UserMediaRequest> request = adoptRef(new UserMediaRequest(context, client, options, successCallback, errorCallback));
 45 RefPtr<UserMediaRequest> request = adoptRef(new UserMediaRequest(context, controller, options, successCallback, errorCallback));
4646 if (!request->audio() && !request->video())
4747 return 0;
4848
4949 return request.release();
5050}
5151
52 UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaClient* client, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
 52UserMediaRequest::UserMediaRequest(ScriptExecutionContext* context, UserMediaController* controller, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback> successCallback, PassRefPtr<NavigatorUserMediaErrorCallback> errorCallback)
5353 : ContextDestructionObserver(context)
5454 , m_audio(false)
5555 , m_video(false)
5656 , m_cameraPreferenceUser(false)
5757 , m_cameraPreferenceEnvironment(false)
58  , m_client(client)
 58 , m_controller(controller)
5959 , m_successCallback(successCallback)
6060 , m_errorCallback(errorCallback)
6161{

@@void UserMediaRequest::start()
7373
7474void UserMediaRequest::didCompleteQuery(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)
7575{
76  if (m_client)
77  m_client->requestUserMedia(this, audioSources, videoSources);
 76 if (m_controller)
 77 m_controller->requestUserMedia(this, audioSources, videoSources);
7878}
7979
8080void UserMediaRequest::succeed(const MediaStreamSourceVector& audioSources, const MediaStreamSourceVector& videoSources)

@@void UserMediaRequest::fail()
9999
100100void UserMediaRequest::contextDestroyed()
101101{
102  if (m_client) {
103  m_client->cancelUserMediaRequest(this);
104  m_client = 0;
 102 if (m_controller) {
 103 m_controller->cancelUserMediaRequest(this);
 104 m_controller = 0;
105105 }
106106
107107 ContextDestructionObserver::contextDestroyed();

Source/WebCore/mediastream/UserMediaRequest.h

4444
4545namespace WebCore {
4646
47 class UserMediaClient;
 47class UserMediaController;
4848
4949class UserMediaRequest : public MediaStreamSourcesQueryClient, public ContextDestructionObserver {
5050public:
51  static PassRefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaClient*, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
 51 static PassRefPtr<UserMediaRequest> create(ScriptExecutionContext*, UserMediaController*, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
5252 ~UserMediaRequest();
5353
5454 NavigatorUserMediaSuccessCallback* successCallback() const { return m_successCallback.get(); }

@@public:
7070 virtual void contextDestroyed();
7171
7272private:
73  UserMediaRequest(ScriptExecutionContext*, UserMediaClient*, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
 73 UserMediaRequest(ScriptExecutionContext*, UserMediaController*, const String& options, PassRefPtr<NavigatorUserMediaSuccessCallback>, PassRefPtr<NavigatorUserMediaErrorCallback>);
7474
7575 void parseOptions(const String& options);
7676

@@private:
8080 bool m_cameraPreferenceUser;
8181 bool m_cameraPreferenceEnvironment;
8282
83  UserMediaClient* m_client;
 83 UserMediaController* m_controller;
8484
8585 RefPtr<NavigatorUserMediaSuccessCallback> m_successCallback;
8686 RefPtr<NavigatorUserMediaErrorCallback> m_errorCallback;

Source/WebCore/page/Page.cpp

8282#include "GeolocationController.h"
8383#endif
8484
85 #if ENABLE(MEDIA_STREAM)
86 #include "UserMediaClient.h"
87 #endif
88 
8985namespace WebCore {
9086
9187static HashSet<Page*>* allPages;

@@Page::Page(PageClients& pageClients)
144140#if ENABLE(INPUT_SPEECH)
145141 , m_speechInputClient(pageClients.speechInputClient)
146142#endif
147 #if ENABLE(MEDIA_STREAM)
148  , m_userMediaClient(pageClients.userMediaClient)
149 #endif
150143 , m_settings(Settings::create(this))
151144 , m_progress(ProgressTracker::create())
152145 , m_backForwardController(BackForwardController::create(this, pageClients.backForwardClient))

@@Page::~Page()
208201 m_inspectorController->inspectedPageDestroyed();
209202#endif
210203
211 #if ENABLE(MEDIA_STREAM)
212  if (m_userMediaClient)
213  m_userMediaClient->pageDestroyed();
214 #endif
215 
216204 if (m_scrollingCoordinator)
217205 m_scrollingCoordinator->pageDestroyed();
218206

@@Page::PageClients::PageClients()
10981086 , geolocationClient(0)
10991087 , speechInputClient(0)
11001088 , notificationClient(0)
1101  , userMediaClient(0)
11021089{
11031090}
11041091

Source/WebCore/page/Page.h

@@namespace WebCore {
8585 class Settings;
8686 class SpeechInput;
8787 class SpeechInputClient;
88  class UserMediaClient;
8988 class StorageNamespace;
9089#if ENABLE(NOTIFICATIONS)
9190 class NotificationPresenter;

@@namespace WebCore {
119118 RefPtr<BackForwardList> backForwardClient;
120119 SpeechInputClient* speechInputClient;
121120 NotificationPresenter* notificationClient;
122  UserMediaClient* userMediaClient;
123121 };
124122
125123 Page(PageClients&);

@@namespace WebCore {
189187#if ENABLE(INPUT_SPEECH)
190188 SpeechInput* speechInput();
191189#endif
192 #if ENABLE(MEDIA_STREAM)
193  UserMediaClient* userMediaClient() const { return m_userMediaClient; }
194 #endif
195190 ScrollingCoordinator* scrollingCoordinator();
196191
197192 Settings* settings() const { return m_settings.get(); }

@@namespace WebCore {
389384 SpeechInputClient* m_speechInputClient;
390385 OwnPtr<SpeechInput> m_speechInput;
391386#endif
392 #if ENABLE(MEDIA_STREAM)
393  UserMediaClient* m_userMediaClient;
394 #endif
395387 RefPtr<ScrollingCoordinator> m_scrollingCoordinator;
396388
397389 OwnPtr<Settings> m_settings;

Source/WebKit/chromium/src/WebViewImpl.cpp

@@WebViewImpl::WebViewImpl(WebViewClient* client)
405405 pageClients.notificationClient = notificationPresenterImpl();
406406#endif
407407 pageClients.backForwardClient = BackForwardListChromium::create(this);
408 #if ENABLE(MEDIA_STREAM)
409  pageClients.userMediaClient = &m_userMediaClientImpl;
410 #endif
411408
412409 m_page = adoptPtr(new Page(pageClients));
 410#if ENABLE(MEDIA_STREAM)
 411 provideUserMediaTo(m_page.get(), &m_userMediaClientImpl);
 412#endif
413413 provideDeviceOrientationTo(m_page.get(), m_deviceOrientationClientProxy.get());
414414 m_geolocationClientProxy->setController(m_page->geolocationController());
415415