| Index: Source/web/WebPluginContainerImpl.cpp
|
| diff --git a/Source/web/WebPluginContainerImpl.cpp b/Source/web/WebPluginContainerImpl.cpp
|
| index 87d1b1307076c89a9763040033ca8744915063c9..d1535af7164b7e38fb3675dd0c508d9d09a57dbc 100644
|
| --- a/Source/web/WebPluginContainerImpl.cpp
|
| +++ b/Source/web/WebPluginContainerImpl.cpp
|
| @@ -407,11 +407,11 @@ void WebPluginContainerImpl::reportGeometry()
|
| if (!parent() || !m_element->layoutObject())
|
| return;
|
|
|
| - IntRect windowRect, clipRect;
|
| + IntRect windowRect, clipRect, unobscuredRect;
|
| Vector<IntRect> cutOutRects;
|
| - calculateGeometry(frameRect(), windowRect, clipRect, cutOutRects);
|
| + calculateGeometry(windowRect, clipRect, unobscuredRect, cutOutRects);
|
|
|
| - m_webPlugin->updateGeometry(windowRect, clipRect, cutOutRects, isVisible());
|
| + m_webPlugin->updateGeometry(windowRect, clipRect, unobscuredRect, cutOutRects, isVisible());
|
|
|
| if (m_scrollbarGroup) {
|
| m_scrollbarGroup->scrollAnimator()->contentsResized();
|
| @@ -965,28 +965,13 @@ void WebPluginContainerImpl::focusPlugin()
|
| containingFrame.document()->setFocusedElement(m_element);
|
| }
|
|
|
| -void WebPluginContainerImpl::calculateGeometry(const IntRect& frameRect,
|
| - IntRect& windowRect,
|
| - IntRect& clipRect,
|
| - Vector<IntRect>& cutOutRects)
|
| +void WebPluginContainerImpl::calculateGeometry(IntRect& windowRect, IntRect& clipRect, IntRect& unobscuredRect, Vector<IntRect>& cutOutRects)
|
| {
|
| - windowRect = toFrameView(parent())->contentsToRootFrame(frameRect);
|
| + windowRect = toFrameView(parent())->contentsToRootFrame(frameRect());
|
|
|
| // Calculate a clip-rect so that we don't overlap the scrollbars, etc.
|
| - clipRect = windowClipRect();
|
| - clipRect.move(-windowRect.x(), -windowRect.y());
|
| -
|
| - getPluginOcclusions(m_element, this->parent(), frameRect, cutOutRects);
|
| - // Convert to the plugin position.
|
| - for (size_t i = 0; i < cutOutRects.size(); i++)
|
| - cutOutRects[i].move(-frameRect.x(), -frameRect.y());
|
| -}
|
| -
|
| -IntRect WebPluginContainerImpl::windowClipRect() const
|
| -{
|
| - // Start by clipping to our bounds.
|
| - IntRect clipRect =
|
| - convertToContainingWindow(IntRect(0, 0, width(), height()));
|
| + clipRect = convertToContainingWindow(IntRect(0, 0, width(), height()));
|
| + unobscuredRect = clipRect;
|
|
|
| // document().layoutView() can be 0 when we receive messages from the
|
| // plugins while we are destroying a frame.
|
| @@ -994,11 +979,19 @@ IntRect WebPluginContainerImpl::windowClipRect() const
|
| if (m_element->layoutObject()->document().layoutView()) {
|
| // Take our element and get the clip rect from the enclosing layer and
|
| // frame view.
|
| - clipRect.intersect(
|
| - m_element->document().view()->windowClipRectForFrameOwner(m_element));
|
| + IntRect elementUnobscuredRect;
|
| + IntRect elementWindowClipRect = m_element->document().view()->clipRectsForFrameOwner(m_element, &elementUnobscuredRect);
|
| + clipRect.intersect(elementWindowClipRect);
|
| + unobscuredRect.intersect(elementUnobscuredRect);
|
| }
|
|
|
| - return clipRect;
|
| + clipRect.move(-windowRect.x(), -windowRect.y());
|
| + unobscuredRect.move(-windowRect.x(), -windowRect.y());
|
| +
|
| + getPluginOcclusions(m_element, this->parent(), frameRect(), cutOutRects);
|
| + // Convert to the plugin position.
|
| + for (size_t i = 0; i < cutOutRects.size(); i++)
|
| + cutOutRects[i].move(-frameRect().x(), -frameRect().y());
|
| }
|
|
|
| bool WebPluginContainerImpl::pluginShouldPersist() const
|
|
|