Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Side by Side Diff: content/browser/media/capture/web_contents_tracker.cc

Issue 1135823004: Implement all resolution change policies for desktop and tab capture. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@resolution_change_policy_constraints_ITEM1_CR1
Patch Set: REBASE Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/media/capture/web_contents_tracker.h" 5 #include "content/browser/media/capture/web_contents_tracker.h"
6 6
7 #include "base/thread_task_runner_handle.h" 7 #include "base/thread_task_runner_handle.h"
8 #include "content/browser/frame_host/render_frame_host_impl.h" 8 #include "content/browser/frame_host/render_frame_host_impl.h"
9 #include "content/browser/renderer_host/render_widget_host_impl.h" 9 #include "content/browser/renderer_host/render_widget_host_impl.h"
10 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
(...skipping 26 matching lines...) Expand all
37 BrowserThread::UI, FROM_HERE, 37 BrowserThread::UI, FROM_HERE,
38 base::Bind(&WebContentsTracker::StartObservingWebContents, this, 38 base::Bind(&WebContentsTracker::StartObservingWebContents, this,
39 render_process_id, main_render_frame_id)); 39 render_process_id, main_render_frame_id));
40 } 40 }
41 } 41 }
42 42
43 void WebContentsTracker::Stop() { 43 void WebContentsTracker::Stop() {
44 DCHECK(task_runner_->BelongsToCurrentThread()); 44 DCHECK(task_runner_->BelongsToCurrentThread());
45 45
46 callback_.Reset(); 46 callback_.Reset();
47 resize_callback_.Reset();
47 48
48 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) { 49 if (BrowserThread::CurrentlyOn(BrowserThread::UI)) {
49 WebContentsObserver::Observe(NULL); 50 WebContentsObserver::Observe(NULL);
50 } else { 51 } else {
51 BrowserThread::PostTask( 52 BrowserThread::PostTask(
52 BrowserThread::UI, FROM_HERE, 53 BrowserThread::UI, FROM_HERE,
53 base::Bind(&WebContentsTracker::Observe, this, 54 base::Bind(&WebContentsTracker::Observe, this,
54 static_cast<WebContents*>(NULL))); 55 static_cast<WebContents*>(NULL)));
55 } 56 }
56 } 57 }
(...skipping 14 matching lines...) Expand all
71 if (!rwh) { 72 if (!rwh) {
72 RenderFrameHostImpl* const rfh = 73 RenderFrameHostImpl* const rfh =
73 static_cast<RenderFrameHostImpl*>(wc->GetMainFrame()); 74 static_cast<RenderFrameHostImpl*>(wc->GetMainFrame());
74 if (rfh) 75 if (rfh)
75 rwh = rfh->GetRenderWidgetHost(); 76 rwh = rfh->GetRenderWidgetHost();
76 } 77 }
77 78
78 return rwh; 79 return rwh;
79 } 80 }
80 81
82 void WebContentsTracker::SetResizeChangeCallback(
83 const base::Closure& callback) {
84 DCHECK(!task_runner_.get() || task_runner_->BelongsToCurrentThread());
85 resize_callback_ = callback;
86 }
87
81 void WebContentsTracker::OnPossibleTargetChange(bool force_callback_run) { 88 void WebContentsTracker::OnPossibleTargetChange(bool force_callback_run) {
82 DCHECK_CURRENTLY_ON(BrowserThread::UI); 89 DCHECK_CURRENTLY_ON(BrowserThread::UI);
83 90
84 RenderWidgetHost* const rwh = GetTargetRenderWidgetHost(); 91 RenderWidgetHost* const rwh = GetTargetRenderWidgetHost();
85 if (rwh == last_target_ && !force_callback_run) 92 if (rwh == last_target_ && !force_callback_run)
86 return; 93 return;
87 DVLOG(1) << "Will report target change from RenderWidgetHost@" << last_target_ 94 DVLOG(1) << "Will report target change from RenderWidgetHost@" << last_target_
88 << " to RenderWidgetHost@" << rwh; 95 << " to RenderWidgetHost@" << rwh;
89 last_target_ = rwh; 96 last_target_ = rwh;
90 97
91 if (task_runner_->BelongsToCurrentThread()) { 98 if (task_runner_->BelongsToCurrentThread()) {
92 MaybeDoCallback(rwh); 99 MaybeDoCallback(rwh != nullptr);
93 } else { 100 return;
94 task_runner_->PostTask(
95 FROM_HERE,
96 base::Bind(&WebContentsTracker::MaybeDoCallback, this, rwh));
97 } 101 }
102
103 task_runner_->PostTask(
104 FROM_HERE,
105 base::Bind(&WebContentsTracker::MaybeDoCallback, this, rwh != nullptr));
98 } 106 }
99 107
100 void WebContentsTracker::MaybeDoCallback(RenderWidgetHost* rwh) { 108 void WebContentsTracker::MaybeDoCallback(bool was_still_tracking) {
101 DCHECK(task_runner_->BelongsToCurrentThread()); 109 DCHECK(task_runner_->BelongsToCurrentThread());
102 110
103 if (!callback_.is_null()) 111 if (!callback_.is_null())
104 callback_.Run(rwh); 112 callback_.Run(was_still_tracking);
113 if (was_still_tracking)
114 MaybeDoResizeCallback();
115 }
116
117 void WebContentsTracker::MaybeDoResizeCallback() {
118 DCHECK(task_runner_->BelongsToCurrentThread());
119
120 if (!resize_callback_.is_null())
121 resize_callback_.Run();
105 } 122 }
106 123
107 void WebContentsTracker::StartObservingWebContents(int render_process_id, 124 void WebContentsTracker::StartObservingWebContents(int render_process_id,
108 int main_render_frame_id) { 125 int main_render_frame_id) {
109 DCHECK_CURRENTLY_ON(BrowserThread::UI); 126 DCHECK_CURRENTLY_ON(BrowserThread::UI);
110 127
111 Observe(WebContents::FromRenderFrameHost(RenderFrameHost::FromID( 128 Observe(WebContents::FromRenderFrameHost(RenderFrameHost::FromID(
112 render_process_id, main_render_frame_id))); 129 render_process_id, main_render_frame_id)));
113 DVLOG_IF(1, !web_contents()) 130 DVLOG_IF(1, !web_contents())
114 << "Could not find WebContents associated with main RenderFrameHost " 131 << "Could not find WebContents associated with main RenderFrameHost "
115 << "referenced by render_process_id=" << render_process_id 132 << "referenced by render_process_id=" << render_process_id
116 << ", routing_id=" << main_render_frame_id; 133 << ", routing_id=" << main_render_frame_id;
117 134
118 OnPossibleTargetChange(true); 135 OnPossibleTargetChange(true);
119 } 136 }
120 137
121 void WebContentsTracker::RenderFrameDeleted( 138 void WebContentsTracker::RenderFrameDeleted(
122 RenderFrameHost* render_frame_host) { 139 RenderFrameHost* render_frame_host) {
123 OnPossibleTargetChange(false); 140 OnPossibleTargetChange(false);
124 } 141 }
125 142
126 void WebContentsTracker::RenderFrameHostChanged(RenderFrameHost* old_host, 143 void WebContentsTracker::RenderFrameHostChanged(RenderFrameHost* old_host,
127 RenderFrameHost* new_host) { 144 RenderFrameHost* new_host) {
128 OnPossibleTargetChange(false); 145 OnPossibleTargetChange(false);
129 } 146 }
130 147
148 void WebContentsTracker::MainFrameWasResized(bool width_changed) {
149 DCHECK_CURRENTLY_ON(BrowserThread::UI);
150
151 if (task_runner_->BelongsToCurrentThread()) {
152 MaybeDoResizeCallback();
153 return;
154 }
155
156 task_runner_->PostTask(
157 FROM_HERE,
158 base::Bind(&WebContentsTracker::MaybeDoResizeCallback, this));
159 }
160
131 void WebContentsTracker::WebContentsDestroyed() { 161 void WebContentsTracker::WebContentsDestroyed() {
132 Observe(NULL); 162 Observe(NULL);
133 OnPossibleTargetChange(false); 163 OnPossibleTargetChange(false);
134 } 164 }
135 165
136 void WebContentsTracker::DidShowFullscreenWidget(int routing_id) { 166 void WebContentsTracker::DidShowFullscreenWidget(int routing_id) {
137 OnPossibleTargetChange(false); 167 OnPossibleTargetChange(false);
138 } 168 }
139 169
140 void WebContentsTracker::DidDestroyFullscreenWidget(int routing_id) { 170 void WebContentsTracker::DidDestroyFullscreenWidget(int routing_id) {
141 OnPossibleTargetChange(false); 171 OnPossibleTargetChange(false);
142 } 172 }
143 173
144 } // namespace content 174 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698