Chromium Code Reviews| Index: content/browser/web_contents/web_contents_impl.cc |
| diff --git a/content/browser/web_contents/web_contents_impl.cc b/content/browser/web_contents/web_contents_impl.cc |
| index f9ba939d844ad18acc9ababcfad18f576437144e..ba1faa7ae09dbe1d5f53f4bec8bec92123c767cf 100644 |
| --- a/content/browser/web_contents/web_contents_impl.cc |
| +++ b/content/browser/web_contents/web_contents_impl.cc |
| @@ -925,6 +925,9 @@ void WebContentsImpl::IncrementCapturerCount(const gfx::Size& capture_size) { |
| preferred_size_for_capture_ = capture_size; |
| OnPreferredSizeChanged(preferred_size_); |
| } |
| + |
| + // Ensure that all views are un-occluded before capture begins. |
| + WasUnOccluded(); |
|
ccameron
2015/01/16 19:01:11
I think there's a bug here where we will get into
|
| } |
| void WebContentsImpl::DecrementCapturerCount() { |
| @@ -1025,14 +1028,11 @@ base::TimeTicks WebContentsImpl::GetLastActiveTime() const { |
| void WebContentsImpl::WasShown() { |
| controller_.SetActive(true); |
| - std::set<RenderWidgetHostView*> widgets = GetRenderWidgetHostViewsInTree(); |
| - for (std::set<RenderWidgetHostView*>::iterator iter = widgets.begin(); |
| - iter != widgets.end(); |
| - iter++) { |
| - if (*iter) { |
| - (*iter)->Show(); |
| + for (RenderWidgetHostView* view : GetRenderWidgetHostViewsInTree()) { |
| + if (view) { |
| + view->Show(); |
| #if defined(OS_MACOSX) |
| - (*iter)->SetActive(true); |
| + view->SetActive(true); |
| #endif |
| } |
| } |
| @@ -1066,12 +1066,9 @@ void WebContentsImpl::WasHidden() { |
| // removes the |GetRenderViewHost()|; then when we actually destroy the |
| // window, OnWindowPosChanged() notices and calls WasHidden() (which |
| // calls us). |
| - std::set<RenderWidgetHostView*> widgets = GetRenderWidgetHostViewsInTree(); |
| - for (std::set<RenderWidgetHostView*>::iterator iter = widgets.begin(); |
| - iter != widgets.end(); |
| - iter++) { |
| - if (*iter) |
| - (*iter)->Hide(); |
| + for (RenderWidgetHostView* view : GetRenderWidgetHostViewsInTree()) { |
| + if (view) |
| + view->Hide(); |
| } |
| // Release any video power save blockers held as video is not visible. |
| @@ -1083,6 +1080,23 @@ void WebContentsImpl::WasHidden() { |
| should_normally_be_visible_ = false; |
| } |
| +void WebContentsImpl::WasOccluded() { |
| + if (capturer_count_ > 0) |
| + return; |
| + |
| + for (RenderWidgetHostView* view : GetRenderWidgetHostViewsInTree()) { |
| + if (view) |
| + view->WasOccluded(); |
| + } |
| +} |
| + |
| +void WebContentsImpl::WasUnOccluded() { |
| + for (RenderWidgetHostView* view : GetRenderWidgetHostViewsInTree()) { |
| + if (view) |
| + view->WasUnOccluded(); |
| + } |
| +} |
| + |
| bool WebContentsImpl::NeedToFireBeforeUnload() { |
| // TODO(creis): Should we fire even for interstitial pages? |
| return WillNotifyDisconnection() && |