Chromium Code Reviews| Index: Source/core/layout/LayoutMedia.cpp |
| diff --git a/Source/core/layout/LayoutMedia.cpp b/Source/core/layout/LayoutMedia.cpp |
| index 374c4b1889cb25e1e8043d9c099085f857c5906d..664ab2055fdddaf6043b83c4e7a6ff226197b390 100644 |
| --- a/Source/core/layout/LayoutMedia.cpp |
| +++ b/Source/core/layout/LayoutMedia.cpp |
| @@ -35,6 +35,8 @@ namespace blink { |
| LayoutMedia::LayoutMedia(HTMLMediaElement* video) |
| : LayoutImage(video) |
| + , m_registeredForPositionChangeNotifications(false) |
| + , m_wantPositionChangeNotifications(false) |
| { |
| setImageResource(LayoutImageResource::create()); |
| } |
| @@ -119,4 +121,61 @@ void LayoutMedia::paintReplaced(const PaintInfo&, const LayoutPoint&) |
| { |
| } |
| +void LayoutMedia::willBeDestroyed() |
| +{ |
| + updatePositionChangeRegistration(false); |
| + LayoutImage::willBeDestroyed(); |
| +} |
| + |
| +void LayoutMedia::insertedIntoTree() |
| +{ |
| + LayoutImage::insertedIntoTree(); |
| + |
| + // Note that if we don't want them and aren't registered, then this |
| + // will do nothing. |
| + updatePositionChangeRegistration(m_wantPositionChangeNotifications); |
| +} |
| + |
| +void LayoutMedia::willBeRemovedFromTree() |
| +{ |
| + // Note that if we don't want them and/or aren't registered, then this |
| + // will do nothing. |
| + updatePositionChangeRegistration(false); |
| + |
| + LayoutImage::willBeRemovedFromTree(); |
| +} |
| + |
| +void LayoutMedia::notifyPositionMayHaveChanged() |
| +{ |
| + // Tell our element about it. |
| + HTMLMediaElement* element = mediaElement(); |
| + if (element) |
|
ojan
2015/09/01 20:20:11
Nit: Typical blink style is to do the following, s
liberato (no reviews please)
2015/09/04 06:49:46
never thought of that, thanks!
|
| + element->notifyPositionMayHaveChanged(); |
|
ojan
2015/09/01 20:20:11
How about having the LayoutMedia store a bit as to
liberato (no reviews please)
2015/09/04 06:49:46
i implemented the logic as you suggest. however,
|
| +} |
| + |
| +void LayoutMedia::updatePositionChangeRegistration(bool doRegister) |
| +{ |
| + // If we don't have a view, then take no action. |
| + if (!view()) |
| + return; |
| + |
| + // If our registration state matches the incoming state, then no work |
| + // is needed. |
| + if (doRegister == m_registeredForPositionChangeNotifications) |
| + return; |
| + |
| + if (doRegister) |
| + view()->registerMediaForPositionChangeNotification(this); |
| + else |
| + view()->unregisterMediaForPositionChangeNotification(this); |
| + |
| + m_registeredForPositionChangeNotifications = doRegister; |
| +} |
| + |
| +void LayoutMedia::setRequestPositionUpdates(bool want) |
| +{ |
| + m_wantPositionChangeNotifications = want; |
| + updatePositionChangeRegistration(m_wantPositionChangeNotifications); |
| +} |
| + |
| } // namespace blink |