| Index: content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| diff --git a/content/browser/renderer_host/media/web_contents_video_capture_device.cc b/content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| index 5920ec83a7dd3a24deebc0dc9a7d688a6253151b..0240f8b4498a54e2028611ad07cf54b06fef2e83 100644
|
| --- a/content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| +++ b/content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| @@ -56,6 +56,7 @@
|
| #include "base/threading/thread.h"
|
| #include "base/time.h"
|
| #include "content/browser/renderer_host/media/web_contents_capture_util.h"
|
| +#include "content/browser/web_contents/web_contents_impl.h"
|
| #include "content/public/browser/browser_thread.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| @@ -162,6 +163,17 @@ class BackingStoreCopier : public WebContentsObserver {
|
| void StartCopy(int frame_number, int desired_width, int desired_height,
|
| const DoneCB& done_cb);
|
|
|
| + virtual void DidShowFullscreenWidget(int routing_id) OVERRIDE {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + fullscreen_widget_id_ = routing_id;
|
| + }
|
| +
|
| + virtual void DidDestroyFullscreenWidget(int routing_id) OVERRIDE {
|
| + DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| + DCHECK_EQ(fullscreen_widget_id_, routing_id);
|
| + fullscreen_widget_id_ = MSG_ROUTING_NONE;
|
| + }
|
| +
|
| private:
|
| void LookUpAndObserveWebContents();
|
|
|
| @@ -173,6 +185,10 @@ class BackingStoreCopier : public WebContentsObserver {
|
| const int render_process_id_;
|
| const int render_view_id_;
|
|
|
| + // Routing ID of any active fullscreen render widget or MSG_ROUTING_NONE
|
| + // otherwise.
|
| + int fullscreen_widget_id_;
|
| +
|
| // Last known RenderView size.
|
| gfx::Size last_view_size_;
|
|
|
| @@ -272,7 +288,7 @@ class VideoFrameDeliverer {
|
| BackingStoreCopier::BackingStoreCopier(int render_process_id,
|
| int render_view_id)
|
| : render_process_id_(render_process_id), render_view_id_(render_view_id),
|
| - rwh_for_testing_(NULL) {}
|
| + fullscreen_widget_id_(MSG_ROUTING_NONE), rwh_for_testing_(NULL) {}
|
|
|
| void BackingStoreCopier::LookUpAndObserveWebContents() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| @@ -295,6 +311,11 @@ void BackingStoreCopier::LookUpAndObserveWebContents() {
|
| Observe(rvh ? WebContents::FromRenderViewHost(rvh) : NULL);
|
| DVLOG_IF(1, !web_contents())
|
| << "WebContents::FromRenderViewHost(" << rvh << ") returned NULL.";
|
| +
|
| + if (fullscreen_widget_id_ == MSG_ROUTING_NONE && web_contents()) {
|
| + fullscreen_widget_id_ = static_cast<WebContentsImpl*>(web_contents())->
|
| + GetFullscreenWidgetRoutingID();
|
| + }
|
| }
|
|
|
| void BackingStoreCopier::SetRenderWidgetHostForTesting(
|
| @@ -322,7 +343,15 @@ void BackingStoreCopier::StartCopy(int frame_number,
|
| return;
|
| }
|
| }
|
| - rwh = web_contents()->GetRenderViewHost();
|
| +
|
| + if (fullscreen_widget_id_ != MSG_ROUTING_NONE) {
|
| + RenderProcessHost* process = web_contents()->GetRenderProcessHost();
|
| + rwh = process ? process->GetRenderWidgetHostByID(fullscreen_widget_id_)
|
| + : NULL;
|
| + } else {
|
| + rwh = web_contents()->GetRenderViewHost();
|
| + }
|
| +
|
| if (!rwh) {
|
| // Transient failure state (e.g., a RenderView is being replaced).
|
| done_cb.Run(TRANSIENT_ERROR,
|
|
|