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

Side by Side Diff: chrome/browser/ui/tabs/tab_utils.cc

Issue 1857033003: Implement tab indicator for WebUSB. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Don't try to update tab indicator on Android. Created 4 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "chrome/browser/ui/tabs/tab_utils.h" 5 #include "chrome/browser/ui/tabs/tab_utils.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/command_line.h" 9 #include "base/command_line.h"
10 #include "base/strings/string16.h" 10 #include "base/strings/string16.h"
11 #include "build/build_config.h" 11 #include "build/build_config.h"
12 #include "chrome/browser/media/media_capture_devices_dispatcher.h" 12 #include "chrome/browser/media/media_capture_devices_dispatcher.h"
13 #include "chrome/browser/media/media_stream_capture_indicator.h" 13 #include "chrome/browser/media/media_stream_capture_indicator.h"
14 #include "chrome/browser/themes/theme_properties.h" 14 #include "chrome/browser/themes/theme_properties.h"
15 #include "chrome/browser/ui/tabs/tab_strip_model.h" 15 #include "chrome/browser/ui/tabs/tab_strip_model.h"
16 #include "chrome/browser/usb/usb_tab_helper.h"
16 #include "chrome/common/chrome_switches.h" 17 #include "chrome/common/chrome_switches.h"
17 #include "chrome/grit/generated_resources.h" 18 #include "chrome/grit/generated_resources.h"
18 #include "content/public/browser/web_contents.h" 19 #include "content/public/browser/web_contents.h"
19 #include "ui/base/l10n/l10n_util.h" 20 #include "ui/base/l10n/l10n_util.h"
20 #include "ui/base/theme_provider.h" 21 #include "ui/base/theme_provider.h"
21 #include "ui/gfx/animation/multi_animation.h" 22 #include "ui/gfx/animation/multi_animation.h"
22 #include "ui/gfx/image/image.h" 23 #include "ui/gfx/image/image.h"
23 #include "ui/gfx/vector_icons_public.h" 24 #include "ui/gfx/vector_icons_public.h"
24 #include "ui/native_theme/common_theme.h" 25 #include "ui/native_theme/common_theme.h"
25 #include "ui/native_theme/native_theme.h" 26 #include "ui/native_theme/native_theme.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 if (indicator.get()) { 156 if (indicator.get()) {
156 if (indicator->IsBeingMirrored(contents)) 157 if (indicator->IsBeingMirrored(contents))
157 return TabAlertState::TAB_CAPTURING; 158 return TabAlertState::TAB_CAPTURING;
158 if (indicator->IsCapturingUserMedia(contents)) 159 if (indicator->IsCapturingUserMedia(contents))
159 return TabAlertState::MEDIA_RECORDING; 160 return TabAlertState::MEDIA_RECORDING;
160 } 161 }
161 162
162 if (contents->IsBluetoothDeviceConnected()) 163 if (contents->IsBluetoothDeviceConnected())
163 return TabAlertState::BLUETOOTH_CONNECTED; 164 return TabAlertState::BLUETOOTH_CONNECTED;
164 165
166 UsbTabHelper* usb_tab_helper = UsbTabHelper::FromWebContents(contents);
167 if (usb_tab_helper && usb_tab_helper->IsDeviceConnected())
168 return TabAlertState::USB_CONNECTED;
169
165 if (contents->IsAudioMuted()) 170 if (contents->IsAudioMuted())
166 return TabAlertState::AUDIO_MUTING; 171 return TabAlertState::AUDIO_MUTING;
167 if (contents->WasRecentlyAudible()) 172 if (contents->WasRecentlyAudible())
168 return TabAlertState::AUDIO_PLAYING; 173 return TabAlertState::AUDIO_PLAYING;
169 174
170 return TabAlertState::NONE; 175 return TabAlertState::NONE;
171 } 176 }
172 177
173 gfx::Image GetTabAlertIndicatorImage(TabAlertState alert_state, 178 gfx::Image GetTabAlertIndicatorImage(TabAlertState alert_state,
174 SkColor button_color) { 179 SkColor button_color) {
175 #if defined(OS_MACOSX) 180 #if defined(OS_MACOSX)
176 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance(); 181 ui::ResourceBundle* rb = &ui::ResourceBundle::GetSharedInstance();
177 switch (alert_state) { 182 switch (alert_state) {
178 case TabAlertState::AUDIO_PLAYING: 183 case TabAlertState::AUDIO_PLAYING:
179 return rb->GetNativeImageNamed(IDR_TAB_AUDIO_INDICATOR); 184 return rb->GetNativeImageNamed(IDR_TAB_AUDIO_INDICATOR);
180 case TabAlertState::AUDIO_MUTING: 185 case TabAlertState::AUDIO_MUTING:
181 return rb->GetNativeImageNamed(IDR_TAB_AUDIO_MUTING_INDICATOR); 186 return rb->GetNativeImageNamed(IDR_TAB_AUDIO_MUTING_INDICATOR);
182 case TabAlertState::MEDIA_RECORDING: 187 case TabAlertState::MEDIA_RECORDING:
183 return rb->GetNativeImageNamed(IDR_TAB_RECORDING_INDICATOR); 188 return rb->GetNativeImageNamed(IDR_TAB_RECORDING_INDICATOR);
184 case TabAlertState::TAB_CAPTURING: 189 case TabAlertState::TAB_CAPTURING:
185 return rb->GetNativeImageNamed(IDR_TAB_CAPTURE_INDICATOR); 190 return rb->GetNativeImageNamed(IDR_TAB_CAPTURE_INDICATOR);
186 case TabAlertState::BLUETOOTH_CONNECTED: 191 case TabAlertState::BLUETOOTH_CONNECTED:
187 return rb->GetNativeImageNamed(IDR_TAB_BLUETOOTH_INDICATOR); 192 return rb->GetNativeImageNamed(IDR_TAB_BLUETOOTH_INDICATOR);
193 case TabAlertState::USB_CONNECTED:
194 return rb->GetNativeImageNamed(IDR_TAB_USB_INDICATOR);
188 case TabAlertState::NONE: 195 case TabAlertState::NONE:
189 break; 196 break;
190 } 197 }
191 #else 198 #else
192 gfx::VectorIconId icon_id = gfx::VectorIconId::VECTOR_ICON_NONE; 199 gfx::VectorIconId icon_id = gfx::VectorIconId::VECTOR_ICON_NONE;
193 switch (alert_state) { 200 switch (alert_state) {
194 case TabAlertState::AUDIO_PLAYING: 201 case TabAlertState::AUDIO_PLAYING:
195 icon_id = gfx::VectorIconId::TAB_AUDIO; 202 icon_id = gfx::VectorIconId::TAB_AUDIO;
196 break; 203 break;
197 case TabAlertState::AUDIO_MUTING: 204 case TabAlertState::AUDIO_MUTING:
198 icon_id = gfx::VectorIconId::TAB_AUDIO_MUTING; 205 icon_id = gfx::VectorIconId::TAB_AUDIO_MUTING;
199 break; 206 break;
200 case TabAlertState::MEDIA_RECORDING: 207 case TabAlertState::MEDIA_RECORDING:
201 icon_id = gfx::VectorIconId::TAB_MEDIA_RECORDING; 208 icon_id = gfx::VectorIconId::TAB_MEDIA_RECORDING;
202 break; 209 break;
203 case TabAlertState::TAB_CAPTURING: 210 case TabAlertState::TAB_CAPTURING:
204 icon_id = gfx::VectorIconId::TAB_MEDIA_CAPTURING; 211 icon_id = gfx::VectorIconId::TAB_MEDIA_CAPTURING;
205 break; 212 break;
206 case TabAlertState::BLUETOOTH_CONNECTED: 213 case TabAlertState::BLUETOOTH_CONNECTED:
207 icon_id = gfx::VectorIconId::TAB_BLUETOOTH_CONNECTED; 214 icon_id = gfx::VectorIconId::TAB_BLUETOOTH_CONNECTED;
208 break; 215 break;
216 case TabAlertState::USB_CONNECTED:
217 icon_id = gfx::VectorIconId::TAB_USB_CONNECTED;
218 break;
209 case TabAlertState::NONE: 219 case TabAlertState::NONE:
210 break; 220 break;
211 } 221 }
212 if (icon_id != gfx::VectorIconId::VECTOR_ICON_NONE) 222 if (icon_id != gfx::VectorIconId::VECTOR_ICON_NONE)
213 return gfx::Image(gfx::CreateVectorIcon(icon_id, 16, button_color)); 223 return gfx::Image(gfx::CreateVectorIcon(icon_id, 16, button_color));
214 #endif 224 #endif
215 NOTREACHED(); 225 NOTREACHED();
216 return gfx::Image(); 226 return gfx::Image();
217 } 227 }
218 228
219 gfx::Image GetTabAlertIndicatorAffordanceImage(TabAlertState alert_state, 229 gfx::Image GetTabAlertIndicatorAffordanceImage(TabAlertState alert_state,
220 SkColor button_color) { 230 SkColor button_color) {
221 switch (alert_state) { 231 switch (alert_state) {
222 case TabAlertState::AUDIO_PLAYING: 232 case TabAlertState::AUDIO_PLAYING:
223 return GetTabAlertIndicatorImage(TabAlertState::AUDIO_MUTING, 233 return GetTabAlertIndicatorImage(TabAlertState::AUDIO_MUTING,
224 button_color); 234 button_color);
225 case TabAlertState::AUDIO_MUTING: 235 case TabAlertState::AUDIO_MUTING:
226 case TabAlertState::NONE: 236 case TabAlertState::NONE:
227 case TabAlertState::MEDIA_RECORDING: 237 case TabAlertState::MEDIA_RECORDING:
228 case TabAlertState::TAB_CAPTURING: 238 case TabAlertState::TAB_CAPTURING:
229 case TabAlertState::BLUETOOTH_CONNECTED: 239 case TabAlertState::BLUETOOTH_CONNECTED:
240 case TabAlertState::USB_CONNECTED:
230 return GetTabAlertIndicatorImage(alert_state, button_color); 241 return GetTabAlertIndicatorImage(alert_state, button_color);
231 } 242 }
232 NOTREACHED(); 243 NOTREACHED();
233 return GetTabAlertIndicatorImage(alert_state, button_color); 244 return GetTabAlertIndicatorImage(alert_state, button_color);
234 } 245 }
235 246
236 scoped_ptr<gfx::Animation> CreateTabAlertIndicatorFadeAnimation( 247 scoped_ptr<gfx::Animation> CreateTabAlertIndicatorFadeAnimation(
237 TabAlertState alert_state) { 248 TabAlertState alert_state) {
238 if (alert_state == TabAlertState::MEDIA_RECORDING || 249 if (alert_state == TabAlertState::MEDIA_RECORDING ||
239 alert_state == TabAlertState::TAB_CAPTURING) { 250 alert_state == TabAlertState::TAB_CAPTURING) {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
277 IDS_TOOLTIP_TAB_ALERT_STATE_MEDIA_RECORDING)); 288 IDS_TOOLTIP_TAB_ALERT_STATE_MEDIA_RECORDING));
278 break; 289 break;
279 case TabAlertState::TAB_CAPTURING: 290 case TabAlertState::TAB_CAPTURING:
280 result.append( 291 result.append(
281 l10n_util::GetStringUTF16(IDS_TOOLTIP_TAB_ALERT_STATE_TAB_CAPTURING)); 292 l10n_util::GetStringUTF16(IDS_TOOLTIP_TAB_ALERT_STATE_TAB_CAPTURING));
282 break; 293 break;
283 case TabAlertState::BLUETOOTH_CONNECTED: 294 case TabAlertState::BLUETOOTH_CONNECTED:
284 result.append(l10n_util::GetStringUTF16( 295 result.append(l10n_util::GetStringUTF16(
285 IDS_TOOLTIP_TAB_ALERT_STATE_BLUETOOTH_CONNECTED)); 296 IDS_TOOLTIP_TAB_ALERT_STATE_BLUETOOTH_CONNECTED));
286 break; 297 break;
298 case TabAlertState::USB_CONNECTED:
299 result.append(
300 l10n_util::GetStringUTF16(IDS_TOOLTIP_TAB_ALERT_STATE_USB_CONNECTED));
301 break;
287 case TabAlertState::NONE: 302 case TabAlertState::NONE:
288 NOTREACHED(); 303 NOTREACHED();
289 break; 304 break;
290 } 305 }
291 return result; 306 return result;
292 } 307 }
293 308
294 bool AreExperimentalMuteControlsEnabled() { 309 bool AreExperimentalMuteControlsEnabled() {
295 return base::CommandLine::ForCurrentProcess()->HasSwitch( 310 return base::CommandLine::ForCurrentProcess()->HasSwitch(
296 switches::kEnableTabAudioMuting); 311 switches::kEnableTabAudioMuting);
297 } 312 }
298 313
299 bool CanToggleAudioMute(content::WebContents* contents) { 314 bool CanToggleAudioMute(content::WebContents* contents) {
300 switch (GetTabAlertStateForContents(contents)) { 315 switch (GetTabAlertStateForContents(contents)) {
301 case TabAlertState::NONE: 316 case TabAlertState::NONE:
302 case TabAlertState::AUDIO_PLAYING: 317 case TabAlertState::AUDIO_PLAYING:
303 case TabAlertState::AUDIO_MUTING: 318 case TabAlertState::AUDIO_MUTING:
304 return true; 319 return true;
305 case TabAlertState::MEDIA_RECORDING: 320 case TabAlertState::MEDIA_RECORDING:
306 case TabAlertState::TAB_CAPTURING: 321 case TabAlertState::TAB_CAPTURING:
307 case TabAlertState::BLUETOOTH_CONNECTED: 322 case TabAlertState::BLUETOOTH_CONNECTED:
323 case TabAlertState::USB_CONNECTED:
308 return false; 324 return false;
309 } 325 }
310 NOTREACHED(); 326 NOTREACHED();
311 return false; 327 return false;
312 } 328 }
313 329
314 TabMutedReason GetTabAudioMutedReason(content::WebContents* contents) { 330 TabMutedReason GetTabAudioMutedReason(content::WebContents* contents) {
315 LastMuteMetadata::CreateForWebContents(contents); // Ensures metadata exists. 331 LastMuteMetadata::CreateForWebContents(contents); // Ensures metadata exists.
316 LastMuteMetadata* const metadata = 332 LastMuteMetadata* const metadata =
317 LastMuteMetadata::FromWebContents(contents); 333 LastMuteMetadata::FromWebContents(contents);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
375 const std::vector<int>& indices) { 391 const std::vector<int>& indices) {
376 for (std::vector<int>::const_iterator i = indices.begin(); i != indices.end(); 392 for (std::vector<int>::const_iterator i = indices.begin(); i != indices.end();
377 ++i) { 393 ++i) {
378 if (!tab_strip.GetWebContentsAt(*i)->IsAudioMuted()) 394 if (!tab_strip.GetWebContentsAt(*i)->IsAudioMuted())
379 return false; 395 return false;
380 } 396 }
381 return true; 397 return true;
382 } 398 }
383 399
384 } // namespace chrome 400 } // namespace chrome
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698