Changeset 119742 in webkit


Ignore:
Timestamp:
Jun 7, 2012 11:37:39 AM (12 years ago)
Author:
fischman@chromium.org
Message:

Plumb CORS attribute information from HTMLMediaElement to media players so it can be used
https://bugs.webkit.org/show_bug.cgi?id=88349

Reviewed by Adam Barth.

Source/WebCore:

Test: http/tests/security/video-cross-origin-readback.html

  • html/HTMLMediaElement.cpp:

(WebCore::HTMLMediaElement::mediaPlayerCORSMode):
(WebCore):

  • html/HTMLMediaElement.h:

(HTMLMediaElement):

  • html/canvas/CanvasRenderingContext.cpp:

(WebCore::CanvasRenderingContext::wouldTaintOrigin):

  • platform/graphics/MediaPlayer.cpp:

(WebCore::MediaPlayer::didPassCORSAccessCheck):
(WebCore):

  • platform/graphics/MediaPlayer.h:

(WebCore::MediaPlayerClient::mediaPlayerCORSMode):
(MediaPlayer):

  • platform/graphics/MediaPlayerPrivate.h:

(WebCore::MediaPlayerPrivateInterface::didPassCORSAccessCheck):
(MediaPlayerPrivateInterface):

Source/WebKit/chromium:

  • public/WebMediaPlayer.h:

(WebMediaPlayer):

  • src/AssertMatchingEnums.cpp:
  • src/WebMediaPlayerClientImpl.cpp:

(WebKit::WebMediaPlayerClientImpl::loadInternal):
(WebKit::WebMediaPlayerClientImpl::didPassCORSAccessCheck):
(WebKit):

  • src/WebMediaPlayerClientImpl.h:

(WebMediaPlayerClientImpl):

LayoutTests:

  • http/tests/security/resources/video-cross-origin-allow.php: Added.
  • http/tests/security/video-cross-origin-readback-expected.txt: Added.
  • http/tests/security/video-cross-origin-readback.html: Added.
  • platform/efl/Skipped:
  • platform/gtk/TestExpectations:
  • platform/mac/Skipped:
  • platform/qt/Skipped:
  • platform/win/Skipped:
  • platform/wk2/Skipped:
Location:
trunk
Files:
3 added
19 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r119741 r119742  
     12012-06-07  Ami Fischman  <fischman@chromium.org>
     2
     3        Plumb CORS attribute information from HTMLMediaElement to media players so it can be used
     4        https://bugs.webkit.org/show_bug.cgi?id=88349
     5
     6        Reviewed by Adam Barth.
     7
     8        * http/tests/security/resources/video-cross-origin-allow.php: Added.
     9        * http/tests/security/video-cross-origin-readback-expected.txt: Added.
     10        * http/tests/security/video-cross-origin-readback.html: Added.
     11        * platform/efl/Skipped:
     12        * platform/gtk/TestExpectations:
     13        * platform/mac/Skipped:
     14        * platform/qt/Skipped:
     15        * platform/win/Skipped:
     16        * platform/wk2/Skipped:
     17
    1182012-06-07  Stephen White  <senorblanco@chromium.org>
    219
  • trunk/LayoutTests/platform/efl/Skipped

    r119659 r119742  
    302302fast/images/exif-orientation.html
    303303fast/images/exif-orientation-css.html
     304
     305# No CORS support for media elements is implemented yet.
     306http/tests/security/video-cross-origin-readback.html
    304307
    305308# --------------------------------
  • trunk/LayoutTests/platform/gtk/TestExpectations

    r119731 r119742  
    316316// CSS Variables are not yet enabled.
    317317BUGWK85580 SKIP : fast/css/variables = PASS FAIL
     318
     319// No CORS support for media elements is implemented yet.
     320BUGWKGTK SKIP : http/tests/security/video-cross-origin-readback.html = FAIL
    318321
    319322//////////////////////////////////////////////////////////////////////////////////////////
  • trunk/LayoutTests/platform/mac/Skipped

    r119722 r119742  
    814814fast/sub-pixel/file-upload-control-at-fractional-offset.html
    815815
     816# No CORS support for media elements is implemented yet.
     817http/tests/security/video-cross-origin-readback.html
     818
    816819# media/audio-repaint.html sometimes fails on Lion Debug (Tests)
    817820# https://bugs.webkit.org/show_bug.cgi?id=84357
  • trunk/LayoutTests/platform/qt/Skipped

    r119728 r119742  
    433433fast/events/page-visibility-iframe-propagation-test.html
    434434fast/events/page-visibility-transition-test.html
     435
     436# No CORS support for media elements is implemented yet.
     437http/tests/security/video-cross-origin-readback.html
    435438
    436439# =========================================================================== #
  • trunk/LayoutTests/platform/win/Skipped

    r119722 r119742  
    17521752fast/sub-pixel/selection/selection-gaps-at-fractional-offsets.html
    17531753fast/sub-pixel/file-upload-control-at-fractional-offset.html
     1754
     1755# No CORS support for media elements is implemented yet.
     1756http/tests/security/video-cross-origin-readback.html
    17541757
    17551758# http://webkit.org/b/82886
  • trunk/LayoutTests/platform/wk2/Skipped

    r119659 r119742  
    10561056editing/inserting/typing-space-to-trigger-smart-link.html
    10571057
     1058# No CORS support for media elements is implemented yet.
     1059http/tests/security/video-cross-origin-readback.html
     1060
    10581061### END OF (2) Classified failures without bug reports (yet)
    10591062########################################
  • trunk/Source/WebCore/ChangeLog

    r119740 r119742  
     12012-06-07  Ami Fischman  <fischman@chromium.org>
     2
     3        Plumb CORS attribute information from HTMLMediaElement to media players so it can be used
     4        https://bugs.webkit.org/show_bug.cgi?id=88349
     5
     6        Reviewed by Adam Barth.
     7
     8        Test: http/tests/security/video-cross-origin-readback.html
     9
     10        * html/HTMLMediaElement.cpp:
     11        (WebCore::HTMLMediaElement::mediaPlayerCORSMode):
     12        (WebCore):
     13        * html/HTMLMediaElement.h:
     14        (HTMLMediaElement):
     15        * html/canvas/CanvasRenderingContext.cpp:
     16        (WebCore::CanvasRenderingContext::wouldTaintOrigin):
     17        * platform/graphics/MediaPlayer.cpp:
     18        (WebCore::MediaPlayer::didPassCORSAccessCheck):
     19        (WebCore):
     20        * platform/graphics/MediaPlayer.h:
     21        (WebCore::MediaPlayerClient::mediaPlayerCORSMode):
     22        (MediaPlayer):
     23        * platform/graphics/MediaPlayerPrivate.h:
     24        (WebCore::MediaPlayerPrivateInterface::didPassCORSAccessCheck):
     25        (MediaPlayerPrivateInterface):
     26
    1272012-06-07  Mark Hahnenberg  <mhahnenberg@apple.com>
    228
  • trunk/Source/WebCore/html/HTMLMediaElement.cpp

    r119712 r119742  
    44574457}
    44584458
     4459MediaPlayerClient::CORSMode HTMLMediaElement::mediaPlayerCORSMode() const
     4460{
     4461    if (!fastHasAttribute(HTMLNames::crossoriginAttr))
     4462        return Unspecified;
     4463    if (equalIgnoringCase(fastGetAttribute(HTMLNames::crossoriginAttr), "use-credentials"))
     4464        return UseCredentials;
     4465    return Anonymous;
     4466}
     4467
    44594468bool HTMLMediaElement::mediaPlayerNeedsSiteSpecificHacks() const
    44604469{
  • trunk/Source/WebCore/html/HTMLMediaElement.h

    r119712 r119742  
    428428    virtual String mediaPlayerReferrer() const OVERRIDE;
    429429    virtual String mediaPlayerUserAgent() const OVERRIDE;
     430    virtual CORSMode mediaPlayerCORSMode() const OVERRIDE;
    430431
    431432    virtual bool mediaPlayerNeedsSiteSpecificHacks() const OVERRIDE;
  • trunk/Source/WebCore/html/canvas/CanvasRenderingContext.cpp

    r119712 r119742  
    7878        return false;
    7979
    80     if (wouldTaintOrigin(video->currentSrc()))
     80    if (!video->hasSingleSecurityOrigin())
    8181        return true;
    8282
    83     if (!video->hasSingleSecurityOrigin())
     83    if (!(video->player() && video->player()->didPassCORSAccessCheck()) && wouldTaintOrigin(video->currentSrc()))
    8484        return true;
     85
    8586#else
    8687    UNUSED_PARAM(video);
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.cpp

    r119712 r119742  
    835835}
    836836
     837bool MediaPlayer::didPassCORSAccessCheck() const
     838{
     839    return m_private->didPassCORSAccessCheck();
     840}
     841
    837842MediaPlayer::MovieLoadType MediaPlayer::movieLoadType() const
    838843{
  • trunk/Source/WebCore/platform/graphics/MediaPlayer.h

    r119712 r119742  
    102102class MediaPlayerClient {
    103103public:
     104    enum CORSMode { Unspecified, Anonymous, UseCredentials };
     105
    104106    virtual ~MediaPlayerClient() { }
    105107
     
    179181    virtual String mediaPlayerReferrer() const { return String(); }
    180182    virtual String mediaPlayerUserAgent() const { return String(); }
     183    virtual CORSMode mediaPlayerCORSMode() const { return Unspecified; }
    181184};
    182185
     
    354357
    355358    bool hasSingleSecurityOrigin() const;
     359
     360    bool didPassCORSAccessCheck() const;
    356361
    357362    float mediaTimeForTimeValue(float) const;
  • trunk/Source/WebCore/platform/graphics/MediaPlayerPrivate.h

    r119712 r119742  
    136136    virtual bool hasSingleSecurityOrigin() const { return false; }
    137137
     138    virtual bool didPassCORSAccessCheck() const { return false; }
     139
    138140    virtual MediaPlayer::MovieLoadType movieLoadType() const { return MediaPlayer::Unknown; }
    139141
  • trunk/Source/WebKit/chromium/ChangeLog

    r119732 r119742  
     12012-06-07  Ami Fischman  <fischman@chromium.org>
     2
     3        Plumb CORS attribute information from HTMLMediaElement to media players so it can be used
     4        https://bugs.webkit.org/show_bug.cgi?id=88349
     5
     6        Reviewed by Adam Barth.
     7
     8        * public/WebMediaPlayer.h:
     9        (WebMediaPlayer):
     10        * src/AssertMatchingEnums.cpp:
     11        * src/WebMediaPlayerClientImpl.cpp:
     12        (WebKit::WebMediaPlayerClientImpl::loadInternal):
     13        (WebKit::WebMediaPlayerClientImpl::didPassCORSAccessCheck):
     14        (WebKit):
     15        * src/WebMediaPlayerClientImpl.h:
     16        (WebMediaPlayerClientImpl):
     17
    1182012-06-07  Daniel Erat  <derat@chromium.org>
    219
  • trunk/Source/WebKit/chromium/public/WebMediaPlayer.h

    r119712 r119742  
    109109    virtual ~WebMediaPlayer() {}
    110110
    111     virtual void load(const WebURL&) = 0;
     111    virtual void load(const WebURL&, CORSMode) = 0;
    112112    virtual void cancelLoad() = 0;
    113113
     
    155155
    156156    virtual bool hasSingleSecurityOrigin() const = 0;
     157    virtual bool didPassCORSAccessCheck() const = 0;
    157158    virtual MovieLoadType movieLoadType() const = 0;
    158159
  • trunk/Source/WebKit/chromium/src/AssertMatchingEnums.cpp

    r119712 r119742  
    582582COMPILE_ASSERT_MATCHING_ENUM(WebURLResponse::HTTP_1_0, ResourceResponse::HTTP_1_0);
    583583COMPILE_ASSERT_MATCHING_ENUM(WebURLResponse::HTTP_1_1, ResourceResponse::HTTP_1_1);
     584
     585COMPILE_ASSERT_MATCHING_ENUM(WebMediaPlayer::CORSModeUnspecified, MediaPlayerClient::Unspecified);
     586COMPILE_ASSERT_MATCHING_ENUM(WebMediaPlayer::CORSModeAnonymous, MediaPlayerClient::Anonymous);
     587COMPILE_ASSERT_MATCHING_ENUM(WebMediaPlayer::CORSModeUseCredentials, MediaPlayerClient::UseCredentials);
  • trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp

    r119712 r119742  
    319319        m_audioSourceProvider.wrap(m_webMediaPlayer->audioSourceProvider());
    320320#endif
    321         m_webMediaPlayer->load(KURL(ParsedURLString, m_url));
     321        m_webMediaPlayer->load(
     322            KURL(ParsedURLString, m_url),
     323            static_cast<WebMediaPlayer::CORSMode>(m_mediaPlayer->mediaPlayerClient()->mediaPlayerCORSMode()));
    322324    }
    323325}
     
    660662    if (m_webMediaPlayer)
    661663        return m_webMediaPlayer->hasSingleSecurityOrigin();
     664    return false;
     665}
     666
     667bool WebMediaPlayerClientImpl::didPassCORSAccessCheck() const
     668{
     669    if (m_webMediaPlayer)
     670        return m_webMediaPlayer->didPassCORSAccessCheck();
    662671    return false;
    663672}
  • trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h

    r119712 r119742  
    132132    virtual void setPreload(WebCore::MediaPlayer::Preload);
    133133    virtual bool hasSingleSecurityOrigin() const;
     134    virtual bool didPassCORSAccessCheck() const;
    134135    virtual WebCore::MediaPlayer::MovieLoadType movieLoadType() const;
    135136    virtual float mediaTimeForTimeValue(float timeValue) const;
Note: See TracChangeset for help on using the changeset viewer.