Changeset 116242 in webkit


Ignore:
Timestamp:
May 6, 2012 3:06:47 PM (12 years ago)
Author:
enne@google.com
Message:

[chromium] Allow WebMediaPlayerClientImpl to switch clients
https://bugs.webkit.org/show_bug.cgi?id=85093

Reviewed by James Robinson.

WebVideoFrameProviderClient has a 1:1 relationship with a
WebVideoFrameProvider. The client here is CCVideoLayerImpl and the
provider is WebMediaPlayerClientImpl. If the provider gets a new
client, then the old client needs to be informed to stop using the
provider.

If this doesn't happen, then the old client will have an unsafe
pointer to the provider, will not get informed if the provider gets
deleted, and the client will crash when it dereferences the provider
pointer trying to tell the provider that its client is going away.

Test: WebMediaPlayerClientImplTest.InitialNullVideoClient

WebMediaPlayerClientImplTest.SetAndUnsetVideoClient
WebMediaPlayerClientImplTest.DestroyProvider
WebMediaPlayerClientImplTest.SetMultipleVideoClients

  • WebKit.gypi:
  • src/WebMediaPlayerClientImpl.cpp:

(WebKit::WebMediaPlayerClientImpl::setVideoFrameProviderClient):

  • src/WebMediaPlayerClientImpl.h:

(WebMediaPlayerClientImpl):

  • tests/WebMediaPlayerClientImplTest.cpp: Added.

(WebKit):
(FakeWebMediaPlayerClientImpl):
(WebKit::FakeWebMediaPlayerClientImpl::create):
(WebKit::FakeWebMediaPlayerClientImpl::FakeWebMediaPlayerClientImpl):
(FakeVideoFrameProviderClient):
(WebKit::FakeVideoFrameProviderClient::create):
(WebKit::FakeVideoFrameProviderClient::~FakeVideoFrameProviderClient):
(WebKit::FakeVideoFrameProviderClient::didReceiveFrame):
(WebKit::FakeVideoFrameProviderClient::didUpdateMatrix):
(WebKit::FakeVideoFrameProviderClient::stopUsingProvider):
(WebKit::FakeVideoFrameProviderClient::provider):
(WebKit::FakeVideoFrameProviderClient::FakeVideoFrameProviderClient):
(WebKit::TEST):

Location:
trunk/Source/WebKit/chromium
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/chromium/ChangeLog

    r116239 r116242  
     12012-05-06  Adrienne Walker  <enne@google.com>
     2
     3        [chromium] Allow WebMediaPlayerClientImpl to switch clients
     4        https://bugs.webkit.org/show_bug.cgi?id=85093
     5
     6        Reviewed by James Robinson.
     7
     8        WebVideoFrameProviderClient has a 1:1 relationship with a
     9        WebVideoFrameProvider. The client here is CCVideoLayerImpl and the
     10        provider is WebMediaPlayerClientImpl.  If the provider gets a new
     11        client, then the old client needs to be informed to stop using the
     12        provider.
     13
     14        If this doesn't happen, then the old client will have an unsafe
     15        pointer to the provider, will not get informed if the provider gets
     16        deleted, and the client will crash when it dereferences the provider
     17        pointer trying to tell the provider that its client is going away.
     18
     19        Test: WebMediaPlayerClientImplTest.InitialNullVideoClient
     20              WebMediaPlayerClientImplTest.SetAndUnsetVideoClient
     21              WebMediaPlayerClientImplTest.DestroyProvider
     22              WebMediaPlayerClientImplTest.SetMultipleVideoClients
     23
     24        * WebKit.gypi:
     25        * src/WebMediaPlayerClientImpl.cpp:
     26        (WebKit::WebMediaPlayerClientImpl::setVideoFrameProviderClient):
     27        * src/WebMediaPlayerClientImpl.h:
     28        (WebMediaPlayerClientImpl):
     29        * tests/WebMediaPlayerClientImplTest.cpp: Added.
     30        (WebKit):
     31        (FakeWebMediaPlayerClientImpl):
     32        (WebKit::FakeWebMediaPlayerClientImpl::create):
     33        (WebKit::FakeWebMediaPlayerClientImpl::FakeWebMediaPlayerClientImpl):
     34        (FakeVideoFrameProviderClient):
     35        (WebKit::FakeVideoFrameProviderClient::create):
     36        (WebKit::FakeVideoFrameProviderClient::~FakeVideoFrameProviderClient):
     37        (WebKit::FakeVideoFrameProviderClient::didReceiveFrame):
     38        (WebKit::FakeVideoFrameProviderClient::didUpdateMatrix):
     39        (WebKit::FakeVideoFrameProviderClient::stopUsingProvider):
     40        (WebKit::FakeVideoFrameProviderClient::provider):
     41        (WebKit::FakeVideoFrameProviderClient::FakeVideoFrameProviderClient):
     42        (WebKit::TEST):
     43
    1442012-05-06  Sheriff Bot  <webkit.review.bot@gmail.com>
    245
  • trunk/Source/WebKit/chromium/WebKit.gypi

    r115733 r116242  
    136136            'tests/WebFrameTest.cpp',
    137137            'tests/WebLayerTest.cpp',
     138            'tests/WebMediaPlayerClientImplTest.cpp',
    138139            'tests/WebPageNewSerializerTest.cpp',
    139140            'tests/WebPageSerializerTest.cpp',
  • trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp

    r115771 r116242  
    688688{
    689689    MutexLocker locker(m_compositingMutex);
     690    if (m_videoFrameProviderClient)
     691        m_videoFrameProviderClient->stopUsingProvider();
    690692    m_videoFrameProviderClient = client;
    691693    if (m_webMediaPlayer)
  • trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h

    r115771 r116242  
    170170    virtual void didUpdateMatrix(const float*);
    171171
     172protected:
     173    WebMediaPlayerClientImpl();
    172174private:
    173     WebMediaPlayerClientImpl();
    174175    void startDelayedLoad();
    175176    void loadInternal();
Note: See TracChangeset for help on using the changeset viewer.