Changeset 115529 in webkit


Ignore:
Timestamp:
Apr 27, 2012 7:55:49 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

    r115527 r115529  
     12012-04-27  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-04-27  Tony Chang  <tony@chromium.org>
    245
  • trunk/Source/WebKit/chromium/WebKit.gypi

    r115386 r115529  
    135135            'tests/WebFrameTest.cpp',
    136136            'tests/WebLayerTest.cpp',
     137            'tests/WebMediaPlayerClientImplTest.cpp',
    137138            'tests/WebPageNewSerializerTest.cpp',
    138139            'tests/WebPageSerializerTest.cpp',
  • trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.cpp

    r114390 r115529  
    673673{
    674674    MutexLocker locker(m_compositingMutex);
     675    if (m_videoFrameProviderClient)
     676        m_videoFrameProviderClient->stopUsingProvider();
    675677    m_videoFrameProviderClient = client;
    676678    if (m_webMediaPlayer)
  • trunk/Source/WebKit/chromium/src/WebMediaPlayerClientImpl.h

    r114390 r115529  
    166166    virtual void didUpdateMatrix(const float*);
    167167
     168protected:
     169    WebMediaPlayerClientImpl();
    168170private:
    169     WebMediaPlayerClientImpl();
    170171    void startDelayedLoad();
    171172    void loadInternal();
Note: See TracChangeset for help on using the changeset viewer.