Changeset 165125 in webkit


Ignore:
Timestamp:
Mar 5, 2014 1:37:38 PM (10 years ago)
Author:
eric.carlson@apple.com
Message:

[iOS] Show external device name/type in placeholder
https://bugs.webkit.org/show_bug.cgi?id=129723

Reviewed by Jer Noble.

Source/WebCore:

Make the name and type of the external device available to the JS based controls.

  • Modules/mediacontrols/MediaControlsHost.cpp:

(WebCore::MediaControlsHost::externalDeviceDisplayName):
(WebCore::MediaControlsHost::externalDeviceType):

  • Modules/mediacontrols/MediaControlsHost.h:
  • Modules/mediacontrols/MediaControlsHost.idl:
  • Modules/mediacontrols/mediaControlsiOS.js:

(ControllerIOS.prototype.updateWirelessPlaybackStatus): Display device type-specific infomation

in the placeholder image.

  • WebCore.exp.in: Export new WebKitSystemInterface functions.
  • platform/graphics/MediaPlayer.cpp:

(WebCore::MediaPlayer::wirelessPlaybackTargetName): Added.
(WebCore::MediaPlayer::wirelessPlaybackTargetType): Ditto.

  • platform/graphics/MediaPlayer.h:
  • platform/graphics/MediaPlayerPrivate.h:
  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
  • platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:

(WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): Added.
(WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName): Ditto.

  • platform/ios/WebCoreSystemInterfaceIOS.mm:
  • platform/mac/WebCoreSystemInterface.h:
  • platform/mac/WebCoreSystemInterface.mm:

Source/WebKit/mac:

  • WebCoreSupport/WebSystemInterface.mm:

(InitWebCoreSystemInterface):

WebKitLibraries:

  • WebKitSystemInterface.h:
  • libWebKitSystemInterfaceLion.a:
  • libWebKitSystemInterfaceMavericks.a:
  • libWebKitSystemInterfaceMountainLion.a:
Location:
trunk
Files:
21 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r165124 r165125  
     12014-03-05  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [iOS] Show external device name/type in placeholder
     4        https://bugs.webkit.org/show_bug.cgi?id=129723
     5
     6        Reviewed by Jer Noble.
     7
     8        Make the name and type of the external device available to the JS based controls.
     9        * Modules/mediacontrols/MediaControlsHost.cpp:
     10        (WebCore::MediaControlsHost::externalDeviceDisplayName):
     11        (WebCore::MediaControlsHost::externalDeviceType):
     12        * Modules/mediacontrols/MediaControlsHost.h:
     13        * Modules/mediacontrols/MediaControlsHost.idl:
     14
     15        * Modules/mediacontrols/mediaControlsiOS.js:
     16        (ControllerIOS.prototype.updateWirelessPlaybackStatus): Display device type-specific infomation
     17            in the placeholder image.
     18
     19        * WebCore.exp.in: Export new WebKitSystemInterface functions.
     20
     21        * platform/graphics/MediaPlayer.cpp:
     22        (WebCore::MediaPlayer::wirelessPlaybackTargetName): Added.
     23        (WebCore::MediaPlayer::wirelessPlaybackTargetType): Ditto.
     24        * platform/graphics/MediaPlayer.h:
     25        * platform/graphics/MediaPlayerPrivate.h:
     26
     27        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h:
     28        * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
     29        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType): Added.
     30        (WebCore::MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName): Ditto.
     31
     32        * platform/ios/WebCoreSystemInterfaceIOS.mm:
     33        * platform/mac/WebCoreSystemInterface.h:
     34        * platform/mac/WebCoreSystemInterface.mm:
     35
    1362014-03-05  Benjamin Poulain  <bpoulain@apple.com>
    237
  • trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp

    r164129 r165125  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    3333#include "Element.h"
    3434#include "HTMLMediaElement.h"
     35#include "Logging.h"
    3536#include "MediaControlElements.h"
    3637#include "Page.h"
     
    164165}
    165166
    166 }
    167 
     167String MediaControlsHost::externalDeviceDisplayName() const
     168{
     169#if ENABLE(IOS_AIRPLAY)
     170    MediaPlayer* player = m_mediaElement->player();
     171    if (!player) {
     172        LOG(Media, "MediaControlsHost::externalDeviceDisplayName - returning \"\" because player is NULL");
     173        return emptyString();
     174    }
     175   
     176    String name = player->wirelessPlaybackTargetName();
     177    LOG(Media, "MediaControlsHost::externalDeviceDisplayName - returning \"%s\"", name.utf8().data());
     178   
     179    return name;
     180#else
     181    return emptyString();
    168182#endif
     183}
     184
     185String MediaControlsHost::externalDeviceType() const
     186{
     187    DEFINE_STATIC_LOCAL(String, none, (ASCIILiteral("none")));
     188    String type = none;
     189   
     190#if ENABLE(IOS_AIRPLAY)
     191    DEFINE_STATIC_LOCAL(String, airplay, (ASCIILiteral("airplay")));
     192    DEFINE_STATIC_LOCAL(String, tvout, (ASCIILiteral("tvout")));
     193   
     194    MediaPlayer* player = m_mediaElement->player();
     195    if (!player) {
     196        LOG(Media, "MediaControlsHost::externalDeviceType - returning \"none\" because player is NULL");
     197        return none;
     198    }
     199   
     200    switch (player->wirelessPlaybackTargetType()) {
     201    case MediaPlayer::TargetTypeNone:
     202        type = none;
     203        break;
     204    case MediaPlayer::TargetTypeAirPlay:
     205        type = airplay;
     206        break;
     207    case MediaPlayer::TargetTypeTVOut:
     208        type = tvout;
     209        break;
     210    }
     211#endif
     212   
     213    LOG(Media, "MediaControlsHost::externalDeviceType - returning \"%s\"", type.utf8().data());
     214   
     215    return type;
     216}
     217   
     218}
     219
     220#endif
  • trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h

    r164129 r165125  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    6363    bool userGestureRequired() const;
    6464
     65    String externalDeviceDisplayName() const;
     66    String externalDeviceType() const;
     67
    6568private:
    6669    MediaControlsHost(HTMLMediaElement*);
  • trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl

    r164129 r165125  
    11/*
    2  * Copyright (C) 2013 Apple Inc. All rights reserved.
     2 * Copyright (C) 2013, 2014 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
     26enum DeviceType {
     27    "none",
     28    "airplay",
     29    "tvout"
     30};
     31
    2632[
    2733    NoInterfaceObject,
     
    4046    readonly attribute boolean supportsFullscreen;
    4147    readonly attribute boolean userGestureRequired;
     48
     49    readonly attribute DOMString externalDeviceDisplayName;
     50    readonly attribute DeviceType externalDeviceType;
    4251};
  • trunk/Source/WebCore/Modules/mediacontrols/mediaControlsiOS.js

    r164661 r165125  
    6969    localizedStrings: {
    7070        // FIXME: Move localization to ext strings file <http://webkit.org/b/120956>
    71         '##DEVICE_TYPE##': 'AirPlay',
    72         '##DEVICE_NAME##': 'This video is playing on "##DEVICE_NAME##".',
     71        '##AIRPLAY_DEVICE_TYPE##': 'AirPlay',
     72        '##AIRPLAY_DEVICE_NAME##': 'This video is playing on "##DEVICE_NAME##".',
     73
     74        '##TVOUT_DEVICE_TYPE##': 'TV Connected',
     75        '##TVOUT_DEVICE_NAME##': 'This video is playing on the TV.',
    7376    },
    7477
     
    113116            var backgroundImageSVG = "url('" + ControllerIOS.gWirelessImage + "')";
    114117
    115             var deviceType = this.UIString('##DEVICE_TYPE##');
     118            var deviceName = "";
     119            var deviceType = "";
     120            var type = this.host.externalDeviceType;
     121            if (type == "airplay") {
     122                deviceType = this.UIString('##AIRPLAY_DEVICE_TYPE##');
     123                deviceName = this.UIString('##AIRPLAY_DEVICE_NAME##').replace('##DEVICE_NAME##', this.host.externalDeviceDisplayName);
     124            } else if (type == "tvout") {
     125                deviceType = this.UIString('##TVOUT_DEVICE_TYPE##');
     126                deviceName = this.UIString('##TVOUT_DEVICE_NAME##');
     127            }
     128           
    116129            backgroundImageSVG = backgroundImageSVG.replace('##DEVICE_TYPE##', deviceType);
    117 
    118             // FIXME: Get the device type and name from the host.
    119             var deviceName = "unknown";
    120             var deviceName = this.UIString('##DEVICE_NAME##').replace('##DEVICE_NAME##', deviceName);;
    121130            backgroundImageSVG = backgroundImageSVG.replace('##DEVICE_NAME##', deviceName);
    122131
  • trunk/Source/WebCore/WebCore.exp.in

    r165124 r165125  
    19711971_wkDeleteHTTPCookie
    19721972_wkDestroyRenderingResources
     1973_wkExernalDeviceDisplayNameForPlayer
     1974_wkExernalDeviceTypeForPlayer
    19731975_wkGetCFURLResponseHTTPResponse
    19741976_wkGetCFURLResponseMIMEType
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp

    r164527 r165125  
    852852}
    853853
     854String MediaPlayer::wirelessPlaybackTargetName() const
     855{
     856    return m_private->wirelessPlaybackTargetName();
     857}
     858
     859MediaPlayer::WirelessPlaybackTargetType MediaPlayer::wirelessPlaybackTargetType() const
     860{
     861    return m_private->wirelessPlaybackTargetType();
     862}
     863
    854864void MediaPlayer::showPlaybackTargetPicker()
    855865{
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.h

    r164527 r165125  
    450450#if ENABLE(IOS_AIRPLAY)
    451451    bool isCurrentPlaybackTargetWireless() const;
     452
     453    enum WirelessPlaybackTargetType { TargetTypeNone, TargetTypeAirPlay, TargetTypeTVOut };
     454    WirelessPlaybackTargetType wirelessPlaybackTargetType() const;
     455
     456    String wirelessPlaybackTargetName() const;
     457
    452458    void showPlaybackTargetPicker();
    453459
  • trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h

    r164514 r165125  
    146146#if ENABLE(IOS_AIRPLAY)
    147147    virtual bool isCurrentPlaybackTargetWireless() const { return false; }
     148
     149    virtual String wirelessPlaybackTargetName() const { return emptyString(); }
     150    virtual MediaPlayer::WirelessPlaybackTargetType wirelessPlaybackTargetType() const { return MediaPlayer::TargetTypeNone; }
     151
    148152    virtual void showPlaybackTargetPicker() { }
    149153
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.h

    r165000 r165125  
    229229#if ENABLE(IOS_AIRPLAY)
    230230    virtual bool isCurrentPlaybackTargetWireless() const override;
     231    virtual String wirelessPlaybackTargetName() const override;
     232    virtual MediaPlayer::WirelessPlaybackTargetType wirelessPlaybackTargetType() const override;
    231233    virtual bool wirelessVideoPlaybackDisabled() const override;
    232234    virtual void setWirelessVideoPlaybackDisabled(bool) override;
  • trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm

    r165000 r165125  
    8888#endif
    8989
    90 
    9190SOFT_LINK_FRAMEWORK_OPTIONAL(AVFoundation)
    9291SOFT_LINK_FRAMEWORK_OPTIONAL(CoreMedia)
     
    19161915    LOG(Media, "MediaPlayerPrivateAVFoundationObjC::isCurrentPlaybackTargetWireless(%p) - returning %s", this, boolString(wirelessTarget));
    19171916    return wirelessTarget;
     1917}
     1918
     1919MediaPlayer::WirelessPlaybackTargetType MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetType() const
     1920{
     1921    if (!m_avPlayer)
     1922        return MediaPlayer::TargetTypeNone;
     1923
     1924    switch (wkExernalDeviceTypeForPlayer(m_avPlayer.get())) {
     1925    case wkExternalPlaybackTypeNone:
     1926        return MediaPlayer::TargetTypeNone;
     1927    case wkExternalPlaybackTypeAirPlay:
     1928        return MediaPlayer::TargetTypeAirPlay;
     1929    case wkExternalPlaybackTypeTVOut:
     1930        return MediaPlayer::TargetTypeTVOut;
     1931    }
     1932
     1933    ASSERT_NOT_REACHED();
     1934    return MediaPlayer::TargetTypeNone;
     1935}
     1936
     1937String MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName() const
     1938{
     1939    if (!m_avPlayer)
     1940        return emptyString();
     1941   
     1942    String wirelessTargetName = wkExernalDeviceDisplayNameForPlayer(m_avPlayer.get());
     1943    LOG(Media, "MediaPlayerPrivateAVFoundationObjC::wirelessPlaybackTargetName(%p) - returning %s", this, wirelessTargetName.utf8().data());
     1944
     1945    return wirelessTargetName;
    19181946}
    19191947
  • trunk/Source/WebCore/platform/ios/WebCoreSystemInterfaceIOS.mm

    r165080 r165125  
    148148CFStringRef (*wkGetPlatformNameForNavigator)(void);
    149149CFStringRef (*wkGetVendorNameForNavigator)(void);
     150
     151int (*wkExernalDeviceTypeForPlayer)(AVPlayer *);
     152NSString *(*wkExernalDeviceDisplayNameForPlayer)(AVPlayer *);
  • trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.h

    r165080 r165125  
    9595
    9696OBJC_CLASS AVAsset;
     97OBJC_CLASS AVPlayer;
    9798OBJC_CLASS CALayer;
    9899OBJC_CLASS NSArray;
     
    370371extern CFStringRef (*wkCachePartitionKey)(void);
    371372#endif
     373
     374typedef enum {
     375    wkExternalPlaybackTypeNone,
     376    wkExternalPlaybackTypeAirPlay,
     377    wkExternalPlaybackTypeTVOut,
     378} wkExternalPlaybackType;
     379extern int (*wkExernalDeviceTypeForPlayer)(AVPlayer *);
     380extern NSString *(*wkExernalDeviceDisplayNameForPlayer)(AVPlayer *);
     381
    372382}
    373383
  • trunk/Source/WebCore/platform/mac/WebCoreSystemInterface.mm

    r163657 r165125  
    213213CFStringRef (*wkCachePartitionKey)(void);
    214214#endif
     215
     216int (*wkExernalDeviceTypeForPlayer)(AVPlayer *);
     217NSString *(*wkExernalDeviceDisplayNameForPlayer)(AVPlayer *);
  • trunk/Source/WebKit/mac/ChangeLog

    r165118 r165125  
     12014-03-05  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [iOS] Show external device name/type in placeholder
     4        https://bugs.webkit.org/show_bug.cgi?id=129723
     5
     6        Reviewed by Jer Noble.
     7
     8        * WebCoreSupport/WebSystemInterface.mm:
     9        (InitWebCoreSystemInterface):
     10
    1112014-03-05  Simon Fraser  <simon.fraser@apple.com>
    212
  • trunk/Source/WebKit/mac/WebCoreSupport/WebSystemInterface.mm

    r165080 r165125  
    245245#endif
    246246
     247    INIT(ExernalDeviceTypeForPlayer);
     248    INIT(ExernalDeviceDisplayNameForPlayer);
     249
    247250    didInit = true;
    248251}
  • trunk/WebKitLibraries/ChangeLog

    r164516 r165125  
     12014-03-05  Eric Carlson  <eric.carlson@apple.com>
     2
     3        [iOS] Show external device name/type in placeholder
     4        https://bugs.webkit.org/show_bug.cgi?id=129723
     5
     6        Reviewed by Jer Noble.
     7
     8        * WebKitSystemInterface.h:
     9        * libWebKitSystemInterfaceLion.a:
     10        * libWebKitSystemInterfaceMavericks.a:
     11        * libWebKitSystemInterfaceMountainLion.a:
     12
    1132014-02-21  Jeffrey Pfau  <jpfau@apple.com>
    214
  • trunk/WebKitLibraries/WebKitSystemInterface.h

    r165014 r165125  
    2222
    2323@class AVAsset;
     24@class AVPlayer;
    2425@class QTMovie;
    2526@class QTMovieView;
     
    549550#endif
    550551
     552typedef enum {
     553    WKExternalPlaybackTypeNone,
     554    WKExternalPlaybackTypeAirPlay,
     555    WKExternalPlaybackTypeTVOut,
     556} WKExternalPlaybackType;
     557
     558int WKExernalDeviceTypeForPlayer(AVPlayer *);
     559NSString *WKExernalDeviceDisplayNameForPlayer(AVPlayer *);
     560
    551561#ifdef __cplusplus
    552562}
Note: See TracChangeset for help on using the changeset viewer.