109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)/*
209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Copyright (C) 2014 Google Inc. All rights reserved.
309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) *
409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * modification, are permitted provided that the following conditions
609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * are met:
709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
1009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in the
1109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) *    documentation and/or other materials provided with the distribution.
1209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) *
1309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
1409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
1609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL GOOGLE INC. OR
1709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
1809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
1909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
2009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
2109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
2309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) */
2509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "config.h"
2709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
2809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebMediaDeviceInfo.h"
2909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "public/platform/WebString.h"
3109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/PassRefPtr.h"
3209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "wtf/RefCounted.h"
3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)namespace blink {
3509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)class WebMediaDeviceInfoPrivate FINAL : public RefCounted<WebMediaDeviceInfoPrivate> {
3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)public:
3809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    static PassRefPtr<WebMediaDeviceInfoPrivate> create(const WebString& deviceId, WebMediaDeviceInfo::MediaDeviceKind, const WebString& label, const WebString& groupId);
3909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const WebString& deviceId() const { return m_deviceId; }
4109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebMediaDeviceInfo::MediaDeviceKind kind() const { return m_kind; }
4209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const WebString& label() const { return m_label; }
4309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    const WebString& groupId() const { return m_groupId; }
4409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)private:
4609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebMediaDeviceInfoPrivate(const WebString& deviceId, WebMediaDeviceInfo::MediaDeviceKind, const WebString& label, const WebString& groupId);
4709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
4809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebString m_deviceId;
4909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebMediaDeviceInfo::MediaDeviceKind m_kind;
5009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebString m_label;
5109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    WebString m_groupId;
5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)};
5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)PassRefPtr<WebMediaDeviceInfoPrivate> WebMediaDeviceInfoPrivate::create(const WebString& deviceId, WebMediaDeviceInfo::MediaDeviceKind kind, const WebString& label, const WebString& groupId)
5509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
5609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return adoptRef(new WebMediaDeviceInfoPrivate(deviceId, kind, label, groupId));
5709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
5809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
5909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebMediaDeviceInfoPrivate::WebMediaDeviceInfoPrivate(const WebString& deviceId, WebMediaDeviceInfo::MediaDeviceKind kind, const WebString& label, const WebString& groupId)
6009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    : m_deviceId(deviceId)
6109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_kind(kind)
6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_label(label)
6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    , m_groupId(groupId)
6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
6509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
6609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
6709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void WebMediaDeviceInfo::assign(const WebMediaDeviceInfo& other)
6809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
6909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_private = other.m_private;
7009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
7109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
7209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void WebMediaDeviceInfo::reset()
7309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
7409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_private.reset();
7509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
7609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
7709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)void WebMediaDeviceInfo::initialize(const WebString& deviceId, WebMediaDeviceInfo::MediaDeviceKind kind, const WebString& label, const WebString& groupId)
7809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
7909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    m_private = WebMediaDeviceInfoPrivate::create(deviceId, kind, label, groupId);
8009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
8109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebString WebMediaDeviceInfo::deviceId() const
8309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
8409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ASSERT(!m_private.isNull());
8509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return m_private->deviceId();
8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebMediaDeviceInfo::MediaDeviceKind WebMediaDeviceInfo::kind() const
8909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
9009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ASSERT(!m_private.isNull());
9109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return m_private->kind();
9209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
9309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
9409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebString WebMediaDeviceInfo::label() const
9509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ASSERT(!m_private.isNull());
9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return m_private->label();
9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
9909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
10009380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)WebString WebMediaDeviceInfo::groupId() const
10109380295ba73501a205346becac22c6978e4671dTorne (Richard Coles){
10209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    ASSERT(!m_private.isNull());
10309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)    return m_private->groupId();
10409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)}
10509380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)} // namespace blink
10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)
108