Changeset 207423 in webkit


Ignore:
Timestamp:
Oct 17, 2016 12:54:04 PM (7 years ago)
Author:
commit-queue@webkit.org
Message:

[Modern Media Controls] Add a MediaControlsHost API to retrieve images as base64
https://bugs.webkit.org/show_bug.cgi?id=163502
<rdar://problem/28792017>

Patch by Antoine Quint <Antoine Quint> on 2016-10-17
Reviewed by Darin Adler.

Add a new base64StringForIconAndPlatform() method to MediaControlsHost such that we
may load images from the modern-media-controls directory in the WebCore.framework bundle.
We use this new method in the iconService singleton when a mediaControlsHost is set,
which will be set in a later patch.

  • Modules/mediacontrols/MediaControlsHost.cpp:

(WebCore::MediaControlsHost::base64StringForIconAndPlatform):

  • Modules/mediacontrols/MediaControlsHost.h:
  • Modules/mediacontrols/MediaControlsHost.idl:
  • Modules/modern-media-controls/controls/icon-service.js:

(const.iconService.new.IconService.prototype.urlForIconNameAndLayoutTraits):
(const.iconService.new.IconService):

  • rendering/RenderTheme.h:

(WebCore::RenderTheme::mediaControlsBase64StringForIconAndPlatform):
(WebCore::RenderTheme::mediaControlsScript): Deleted.

  • rendering/RenderThemeMac.h:
  • rendering/RenderThemeMac.mm:

(WebCore::RenderThemeMac::mediaControlsBase64StringForIconAndPlatform):

Location:
trunk
Files:
11 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service-expected.txt

    r206864 r207423  
    55
    66Checking path to images is computed according to traits
    7 PASS iconService.urlForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS).includes("macOS/pause") is true
    8 PASS iconService.urlForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS).includes("iOS/pause") is true
    9 PASS iconService.urlForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS | LayoutTraits.Fullscreen).includes("macOS/pause-fullscreen") is true
     7PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS).src.includes("macOS/pause@") is true
     8PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS).src.includes("iOS/pause@") is true
     9PASS iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS | LayoutTraits.Fullscreen).src.includes("macOS/pause-fullscreen@") is true
    1010
    1111Checking requested images are cached
  • trunk/LayoutTests/media/modern-media-controls/icon-service/icon-service.html

    r206864 r207423  
    1111
    1212debug("Checking path to images is computed according to traits");
    13 shouldBeTrue('iconService.urlForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS).includes("macOS/pause")');
    14 shouldBeTrue('iconService.urlForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS).includes("iOS/pause")');
    15 shouldBeTrue('iconService.urlForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS | LayoutTraits.Fullscreen).includes("macOS/pause-fullscreen")');
     13shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS).src.includes("macOS/pause@")');
     14shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.iOS).src.includes("iOS/pause@")');
     15shouldBeTrue('iconService.imageForIconNameAndLayoutTraits(Icons.Pause, LayoutTraits.macOS | LayoutTraits.Fullscreen).src.includes("macOS/pause-fullscreen@")');
    1616
    1717debug("");
  • trunk/Source/WebCore/ChangeLog

    r207421 r207423  
     12016-10-17  Antoine Quint  <graouts@apple.com>
     2
     3        [Modern Media Controls] Add a MediaControlsHost API to retrieve images as base64
     4        https://bugs.webkit.org/show_bug.cgi?id=163502
     5        <rdar://problem/28792017>
     6
     7        Reviewed by Darin Adler.
     8
     9        Add a new `base64StringForIconAndPlatform()` method to MediaControlsHost such that we
     10        may load images from the modern-media-controls directory in the WebCore.framework bundle.
     11        We use this new method in the iconService singleton when a `mediaControlsHost` is set,
     12        which will be set in a later patch.
     13
     14        * Modules/mediacontrols/MediaControlsHost.cpp:
     15        (WebCore::MediaControlsHost::base64StringForIconAndPlatform):
     16        * Modules/mediacontrols/MediaControlsHost.h:
     17        * Modules/mediacontrols/MediaControlsHost.idl:
     18        * Modules/modern-media-controls/controls/icon-service.js:
     19        (const.iconService.new.IconService.prototype.urlForIconNameAndLayoutTraits):
     20        (const.iconService.new.IconService):
     21        * rendering/RenderTheme.h:
     22        (WebCore::RenderTheme::mediaControlsBase64StringForIconAndPlatform):
     23        (WebCore::RenderTheme::mediaControlsScript): Deleted.
     24        * rendering/RenderThemeMac.h:
     25        * rendering/RenderThemeMac.mm:
     26        (WebCore::RenderThemeMac::mediaControlsBase64StringForIconAndPlatform):
     27
    1282016-10-17  Antoine Quint  <graouts@apple.com>
    229
  • trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.cpp

    r207421 r207423  
    293293}
    294294
     295String MediaControlsHost::base64StringForIconAndPlatform(const String& iconName, const String& platform) const
     296{
     297    Page* page = m_mediaElement->document().page();
     298    if (!page)
     299        return emptyString();
     300    return RenderTheme::themeForPage(page)->mediaControlsBase64StringForIconAndPlatform(iconName, platform);
     301}
     302
    295303}
    296304
  • trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.h

    r207421 r207423  
    8484
    8585    String shadowRootCSSText() const;
     86    String base64StringForIconAndPlatform(const String& iconName, const String& platform) const;
    8687
    8788private:
  • trunk/Source/WebCore/Modules/mediacontrols/MediaControlsHost.idl

    r207421 r207423  
    6262
    6363    [EnabledAtRuntime=ModernMediaControls] readonly attribute DOMString shadowRootCSSText;
     64    [EnabledAtRuntime=ModernMediaControls] DOMString base64StringForIconAndPlatform(DOMString iconName, DOMString platform);
    6465};
  • trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js

    r207024 r207423  
    5353    }
    5454
     55    // Public
     56
    5557    imageForIconNameAndLayoutTraits(iconName, layoutTraits)
    5658    {
    57         const path = this.urlForIconNameAndLayoutTraits(iconName, layoutTraits);
    58        
     59        const [fileName, platform] = this._fileNameAndPlatformForIconNameAndLayoutTraits(iconName, layoutTraits);
     60        const path = `${platform}/${fileName}.png`;
     61
    5962        let image = this.images[path];
    6063        if (image)
     
    6265
    6366        image = this.images[path] = new Image;
    64         image.src = path;
     67
     68        if (this.mediaControlsHost)
     69            image.src = "data:image/png;base64," + this.mediaControlsHost.base64StringForIconAndPlatform(fileName, platform);
     70        else
     71            image.src = `${this.directoryPath}/${path}`;
     72
    6573        return image;
    6674    }
    6775
    68     urlForIconNameAndLayoutTraits(iconName, layoutTraits)
     76    // Private
     77
     78    _fileNameAndPlatformForIconNameAndLayoutTraits(iconName, layoutTraits)
    6979    {
    7080        let platform;
     
    7989            iconName += "-fullscreen";
    8090
    81         return `${this.directoryPath}/${platform}/${iconName}@${window.devicePixelRatio}x.png`;
     91        const fileName = `${iconName}@${window.devicePixelRatio}x`;
     92
     93        return [fileName, platform];
    8294    }
    8395
  • trunk/Source/WebCore/Modules/modern-media-controls/controls/start-button.js

    r207015 r207423  
    3737
    3838        const image = this.element.appendChild(new Image);
    39         image.src = iconService.urlForIconNameAndLayoutTraits(Icons.Start, this.layoutTraits);
     39        image.src = iconService.imageForIconNameAndLayoutTraits(Icons.Start, this.layoutTraits).src;
    4040    }
    4141
  • trunk/Source/WebCore/rendering/RenderTheme.h

    r205980 r207423  
    102102    virtual String extraMediaControlsStyleSheet() { return String(); }
    103103    virtual String mediaControlsScript() { return String(); }
     104    virtual String mediaControlsBase64StringForIconAndPlatform(const String&, const String&) { return String(); }
    104105#endif
    105106#if ENABLE(FULLSCREEN_API)
  • trunk/Source/WebCore/rendering/RenderThemeMac.h

    r205980 r207423  
    109109    String mediaControlsStyleSheet() override;
    110110    String mediaControlsScript() override;
     111    String mediaControlsBase64StringForIconAndPlatform(const String&, const String&) override;
    111112#endif
    112113
  • trunk/Source/WebCore/rendering/RenderThemeMac.mm

    r207418 r207423  
    273273}
    274274
     275String RenderThemeMac::mediaControlsBase64StringForIconAndPlatform(const String& iconName, const String& platform)
     276{
     277#if ENABLE(MEDIA_CONTROLS_SCRIPT)
     278    if (!RuntimeEnabledFeatures::sharedFeatures().modernMediaControlsEnabled())
     279        return emptyString();
     280
     281    String directory = "modern-media-controls/images/" + platform;
     282    NSBundle *bundle = [NSBundle bundleForClass:[WebCoreRenderThemeBundle class]];
     283    return [[NSData dataWithContentsOfFile:[bundle pathForResource:iconName ofType:@"png" inDirectory:directory]] base64EncodedStringWithOptions:0];
     284#else
     285    return emptyString();
     286#endif
     287}
     288
    275289#endif // ENABLE(VIDEO)
    276290
Note: See TracChangeset for help on using the changeset viewer.