15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/*
25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved.
35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions
65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met:
75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1.  Redistributions of source code must retain the above copyright
85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer.
95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2.  Redistributions in binary form must reproduce the above copyright
105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     notice, this list of conditions and the following disclaimer in the
115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *     documentation and/or other materials provided with the distribution.
125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) *
135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS'' AND ANY
145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS BE LIABLE FOR ANY
175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */
245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#ifndef UserMediaController_h
265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#define UserMediaController_h
275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
28f91f5fa1608c2cdd9af1842fb5dadbe78275be2aBo Liu#include "core/frame/LocalFrame.h"
2953e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "modules/mediastream/UserMediaClient.h"
3053e740f4a82e17f3ae59772501622dc354e42336Torne (Richard Coles)#include "wtf/PassOwnPtr.h"
315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
32c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink {
335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class MediaDevicesRequest;
35591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdochclass UserMediaRequest;
36591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch
375d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)class UserMediaController FINAL : public NoBaseWillBeGarbageCollected<UserMediaController>, public WillBeHeapSupplement<LocalFrame> {
385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    WILL_BE_USING_GARBAGE_COLLECTED_MIXIN(UserMediaController);
395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    DECLARE_EMPTY_VIRTUAL_DESTRUCTOR_WILL_BE_REMOVED(UserMediaController);
405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)public:
415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    UserMediaClient* client() const { return m_client; }
4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
44197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void requestUserMedia(UserMediaRequest*);
455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    void cancelUserMediaRequest(UserMediaRequest*);
465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
47197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch    void requestMediaDevices(MediaDevicesRequest*);
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    void cancelMediaDevicesRequest(MediaDevicesRequest*);
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
507242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    void requestSources(MediaStreamTrackSourcesRequest*);
517242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
525d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    static PassOwnPtrWillBeRawPtr<UserMediaController> create(UserMediaClient*);
53926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles)    static const char* supplementName();
545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    static UserMediaController* from(LocalFrame* frame) { return static_cast<UserMediaController*>(WillBeHeapSupplement<LocalFrame>::from(frame, supplementName())); }
555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
565d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)    virtual void trace(Visitor* visitor) OVERRIDE { WillBeHeapSupplement<LocalFrame>::trace(visitor); }
57a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch
585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)protected:
595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    explicit UserMediaController(UserMediaClient*);
605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)private:
625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    UserMediaClient* m_client;
635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)};
645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
65197021e6b966cfb06891637935ef33fff06433d1Ben Murdochinline void UserMediaController::requestUserMedia(UserMediaRequest* request)
665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
67591b958dee2cf159d33a0b931e6231072eaf38d5Ben Murdoch    m_client->requestUserMedia(request);
685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)inline void UserMediaController::cancelUserMediaRequest(UserMediaRequest* request)
715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){
725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)    m_client->cancelUserMediaRequest(request);
735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}
745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
75197021e6b966cfb06891637935ef33fff06433d1Ben Murdochinline void UserMediaController::requestMediaDevices(MediaDevicesRequest* request)
7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_client->requestMediaDevices(request);
7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)inline void UserMediaController::cancelMediaDevicesRequest(MediaDevicesRequest* request)
8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_client->cancelMediaDevicesRequest(request);
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
857242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucciinline void UserMediaController::requestSources(MediaStreamTrackSourcesRequest* request)
867242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci{
877242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci    m_client->requestSources(request);
887242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci}
897242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci
90c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink
915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)
925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#endif // UserMediaController_h
93