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

Side by Side Diff: third_party/WebKit/Source/core/html/shadow/MediaControlElements.cpp

Issue 2456993003: Improve caption button behavior for video player. (Closed)
Patch Set: Addresss feedback Created 4 years, 1 month 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 /* 1 /*
2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved. 2 * Copyright (C) 2008, 2009, 2010, 2011 Apple Inc. All rights reserved.
3 * Copyright (C) 2012 Google Inc. All rights reserved. 3 * Copyright (C) 2012 Google Inc. All rights reserved.
4 * 4 *
5 * Redistribution and use in source and binary forms, with or without 5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions 6 * modification, are permitted provided that the following conditions
7 * are met: 7 * are met:
8 * 8 *
9 * 1. Redistributions of source code must retain the above copyright 9 * 1. Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer. 10 * notice, this list of conditions and the following disclaimer.
(...skipping 402 matching lines...) Expand 10 before | Expand all | Expand 10 after
413 413
414 void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType() { 414 void MediaControlToggleClosedCaptionsButtonElement::updateDisplayType() {
415 bool captionsVisible = mediaElement().textTracksVisible(); 415 bool captionsVisible = mediaElement().textTracksVisible();
416 setDisplayType(captionsVisible ? MediaHideClosedCaptionsButton 416 setDisplayType(captionsVisible ? MediaHideClosedCaptionsButton
417 : MediaShowClosedCaptionsButton); 417 : MediaShowClosedCaptionsButton);
418 } 418 }
419 419
420 void MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler( 420 void MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler(
421 Event* event) { 421 Event* event) {
422 if (event->type() == EventTypeNames::click) { 422 if (event->type() == EventTypeNames::click) {
423 mediaControls().toggleTextTrackList(); 423 if (mediaElement().textTracks()->length() == 1) {
424 // If only one track exists, toggle it on/off
425 if (mediaElement().textTracks()->hasShowingTracks()) {
426 mediaControls().disableShowingTextTracks();
427 } else {
428 mediaControls().showTextTrackAtIndex(0);
429 }
430 } else {
431 mediaControls().toggleTextTrackList();
432 }
433
424 updateDisplayType(); 434 updateDisplayType();
425 event->setDefaultHandled(); 435 event->setDefaultHandled();
426 } 436 }
427 437
428 MediaControlInputElement::defaultEventHandler(event); 438 MediaControlInputElement::defaultEventHandler(event);
429 } 439 }
430 440
431 WebLocalizedString::Name 441 WebLocalizedString::Name
432 MediaControlToggleClosedCaptionsButtonElement::getOverflowStringName() { 442 MediaControlToggleClosedCaptionsButtonElement::getOverflowStringName() {
433 return WebLocalizedString::OverflowMenuCaptions; 443 return WebLocalizedString::OverflowMenuCaptions;
(...skipping 15 matching lines...) Expand all
449 return element; 459 return element;
450 } 460 }
451 461
452 void MediaControlTextTrackListElement::defaultEventHandler(Event* event) { 462 void MediaControlTextTrackListElement::defaultEventHandler(Event* event) {
453 if (event->type() == EventTypeNames::change) { 463 if (event->type() == EventTypeNames::change) {
454 // Identify which input element was selected and set track to showing 464 // Identify which input element was selected and set track to showing
455 Node* target = event->target()->toNode(); 465 Node* target = event->target()->toNode();
456 if (!target || !target->isElementNode()) 466 if (!target || !target->isElementNode())
457 return; 467 return;
458 468
459 disableShowingTextTracks(); 469 mediaControls().disableShowingTextTracks();
460 int trackIndex = 470 int trackIndex =
461 toElement(target)->getIntegralAttribute(trackIndexAttrName()); 471 toElement(target)->getIntegralAttribute(trackIndexAttrName());
462 if (trackIndex != trackIndexOffValue) { 472 if (trackIndex != trackIndexOffValue) {
463 DCHECK_GE(trackIndex, 0); 473 DCHECK_GE(trackIndex, 0);
464 showTextTrackAtIndex(trackIndex); 474 mediaControls().showTextTrackAtIndex(trackIndex);
465 mediaElement().disableAutomaticTextTrackSelection(); 475 mediaElement().disableAutomaticTextTrackSelection();
466 } 476 }
467 477
468 event->setDefaultHandled(); 478 event->setDefaultHandled();
469 } 479 }
470 MediaControlDivElement::defaultEventHandler(event); 480 MediaControlDivElement::defaultEventHandler(event);
471 } 481 }
472 482
473 void MediaControlTextTrackListElement::setVisible(bool visible) { 483 void MediaControlTextTrackListElement::setVisible(bool visible) {
474 if (visible) { 484 if (visible) {
475 setIsWanted(true); 485 setIsWanted(true);
476 refreshTextTrackListMenu(); 486 refreshTextTrackListMenu();
477 } else { 487 } else {
478 setIsWanted(false); 488 setIsWanted(false);
479 } 489 }
480 } 490 }
481 491
482 void MediaControlTextTrackListElement::showTextTrackAtIndex(
483 unsigned indexToEnable) {
484 TextTrackList* trackList = mediaElement().textTracks();
485 if (indexToEnable >= trackList->length())
486 return;
487 TextTrack* track = trackList->anonymousIndexedGetter(indexToEnable);
488 if (track && track->canBeRendered())
489 track->setMode(TextTrack::showingKeyword());
490 }
491
492 void MediaControlTextTrackListElement::disableShowingTextTracks() {
493 TextTrackList* trackList = mediaElement().textTracks();
494 for (unsigned i = 0; i < trackList->length(); ++i) {
495 TextTrack* track = trackList->anonymousIndexedGetter(i);
496 if (track->mode() == TextTrack::showingKeyword())
497 track->setMode(TextTrack::disabledKeyword());
498 }
499 }
500
501 String MediaControlTextTrackListElement::getTextTrackLabel(TextTrack* track) { 492 String MediaControlTextTrackListElement::getTextTrackLabel(TextTrack* track) {
502 if (!track) 493 if (!track) {
503 return mediaElement().locale().queryString( 494 return mediaElement().locale().queryString(
504 WebLocalizedString::TextTracksOff); 495 WebLocalizedString::TextTracksOff);
496 }
505 497
506 String trackLabel = track->label(); 498 String trackLabel = track->label();
507 499
508 if (trackLabel.isEmpty()) 500 if (trackLabel.isEmpty())
501 trackLabel = track->language();
502
503 if (trackLabel.isEmpty()) {
509 trackLabel = String(mediaElement().locale().queryString( 504 trackLabel = String(mediaElement().locale().queryString(
510 WebLocalizedString::TextTracksNoLabel)); 505 WebLocalizedString::TextTracksNoLabel,
506 String::number(track->trackIndex() + 1)));
507 }
511 508
512 return trackLabel; 509 return trackLabel;
513 } 510 }
514 511
515 // TextTrack parameter when passed in as a nullptr, creates the "Off" list item 512 // TextTrack parameter when passed in as a nullptr, creates the "Off" list item
516 // in the track list. 513 // in the track list.
517 Element* MediaControlTextTrackListElement::createTextTrackListItem( 514 Element* MediaControlTextTrackListElement::createTextTrackListItem(
518 TextTrack* track) { 515 TextTrack* track) {
519 int trackIndex = track ? track->trackIndex() : trackIndexOffValue; 516 int trackIndex = track ? track->trackIndex() : trackIndexOffValue;
520 HTMLLabelElement* trackItem = HTMLLabelElement::create(document()); 517 HTMLLabelElement* trackItem = HTMLLabelElement::create(document());
(...skipping 504 matching lines...) Expand 10 before | Expand all | Expand 10 after
1025 MediaControlCurrentTimeDisplayElement* 1022 MediaControlCurrentTimeDisplayElement*
1026 MediaControlCurrentTimeDisplayElement::create(MediaControls& mediaControls) { 1023 MediaControlCurrentTimeDisplayElement::create(MediaControls& mediaControls) {
1027 MediaControlCurrentTimeDisplayElement* element = 1024 MediaControlCurrentTimeDisplayElement* element =
1028 new MediaControlCurrentTimeDisplayElement(mediaControls); 1025 new MediaControlCurrentTimeDisplayElement(mediaControls);
1029 element->setShadowPseudoId( 1026 element->setShadowPseudoId(
1030 AtomicString("-webkit-media-controls-current-time-display")); 1027 AtomicString("-webkit-media-controls-current-time-display"));
1031 return element; 1028 return element;
1032 } 1029 }
1033 1030
1034 } // namespace blink 1031 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698