OLD | NEW |
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 18 matching lines...) Expand all Loading... |
29 | 29 |
30 #include "core/html/shadow/MediaControlElements.h" | 30 #include "core/html/shadow/MediaControlElements.h" |
31 | 31 |
32 #include "bindings/core/v8/ExceptionStatePlaceholder.h" | 32 #include "bindings/core/v8/ExceptionStatePlaceholder.h" |
33 #include "core/InputTypeNames.h" | 33 #include "core/InputTypeNames.h" |
34 #include "core/dom/ClientRect.h" | 34 #include "core/dom/ClientRect.h" |
35 #include "core/dom/Text.h" | 35 #include "core/dom/Text.h" |
36 #include "core/dom/shadow/ShadowRoot.h" | 36 #include "core/dom/shadow/ShadowRoot.h" |
37 #include "core/events/MouseEvent.h" | 37 #include "core/events/MouseEvent.h" |
38 #include "core/frame/LocalFrame.h" | 38 #include "core/frame/LocalFrame.h" |
| 39 #include "core/html/HTMLAnchorElement.h" |
39 #include "core/html/HTMLLabelElement.h" | 40 #include "core/html/HTMLLabelElement.h" |
40 #include "core/html/HTMLMediaSource.h" | 41 #include "core/html/HTMLMediaSource.h" |
41 #include "core/html/HTMLSpanElement.h" | 42 #include "core/html/HTMLSpanElement.h" |
42 #include "core/html/HTMLVideoElement.h" | 43 #include "core/html/HTMLVideoElement.h" |
43 #include "core/html/TimeRanges.h" | 44 #include "core/html/TimeRanges.h" |
44 #include "core/html/shadow/MediaControls.h" | 45 #include "core/html/shadow/MediaControls.h" |
45 #include "core/html/track/TextTrackList.h" | 46 #include "core/html/track/TextTrackList.h" |
46 #include "core/input/EventHandler.h" | 47 #include "core/input/EventHandler.h" |
47 #include "core/layout/api/LayoutSliderItem.h" | 48 #include "core/layout/api/LayoutSliderItem.h" |
48 #include "platform/EventDispatchForbiddenScope.h" | 49 #include "platform/EventDispatchForbiddenScope.h" |
(...skipping 576 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
625 | 626 |
626 MediaControlDivElement::defaultEventHandler(event); | 627 MediaControlDivElement::defaultEventHandler(event); |
627 } | 628 } |
628 | 629 |
629 // ---------------------------- | 630 // ---------------------------- |
630 MediaControlDownloadButtonElement::MediaControlDownloadButtonElement(MediaContro
ls& mediaControls) | 631 MediaControlDownloadButtonElement::MediaControlDownloadButtonElement(MediaContro
ls& mediaControls) |
631 : MediaControlInputElement(mediaControls, MediaDownloadButton) | 632 : MediaControlInputElement(mediaControls, MediaDownloadButton) |
632 { | 633 { |
633 } | 634 } |
634 | 635 |
635 MediaControlDownloadButtonElement* MediaControlDownloadButtonElement::create(Med
iaControls& mediaControls, Document* document) | 636 MediaControlDownloadButtonElement* MediaControlDownloadButtonElement::create(Med
iaControls& mediaControls) |
636 { | 637 { |
637 MediaControlDownloadButtonElement* button = new MediaControlDownloadButtonEl
ement(mediaControls); | 638 MediaControlDownloadButtonElement* button = new MediaControlDownloadButtonEl
ement(mediaControls); |
638 button->ensureUserAgentShadowRoot(); | 639 button->ensureUserAgentShadowRoot(); |
639 button->setType(InputTypeNames::button); | 640 button->setType(InputTypeNames::button); |
640 button->setShadowPseudoId(AtomicString("-internal-download-button")); | 641 button->setShadowPseudoId(AtomicString("-internal-download-button")); |
641 button->setIsWanted(false); | 642 button->setIsWanted(false); |
642 return button; | 643 return button; |
643 } | 644 } |
644 | 645 |
645 WebLocalizedString::Name MediaControlDownloadButtonElement::getOverflowStringNam
e() | 646 WebLocalizedString::Name MediaControlDownloadButtonElement::getOverflowStringNam
e() |
646 { | 647 { |
647 return WebLocalizedString::OverflowMenuDownload; | 648 return WebLocalizedString::OverflowMenuDownload; |
648 } | 649 } |
649 | 650 |
650 bool MediaControlDownloadButtonElement::shouldDisplayDownloadButton() | 651 bool MediaControlDownloadButtonElement::shouldDisplayDownloadButton() |
651 { | 652 { |
652 const KURL& url = mediaElement().currentSrc(); | 653 const KURL& url = mediaElement().currentSrc(); |
653 if (!HTMLMediaElement::isMediaStreamURL(url.getString()) && !url.protocolIs(
"blob") && !HTMLMediaSource::lookup(url)) { | 654 |
| 655 if (!url.isNull() && !url.isEmpty() && !HTMLMediaElement::isMediaStreamURL(u
rl.getString()) && !url.protocolIs("blob") && !HTMLMediaSource::lookup(url)) { |
654 return true; | 656 return true; |
655 } | 657 } |
656 return false; | 658 return false; |
657 } | 659 } |
658 | 660 |
659 void MediaControlDownloadButtonElement::defaultEventHandler(Event* event) | 661 void MediaControlDownloadButtonElement::defaultEventHandler(Event* event) |
660 { | 662 { |
661 // TODO(kdsilva): The implementation will be finished as part of | 663 const KURL& url = mediaElement().currentSrc(); |
662 // https://crbug.com/601247 | 664 if (event->type() == EventTypeNames::click && !(url.isNull() || url.isEmpty(
))) { |
| 665 if (!m_anchor) { |
| 666 HTMLAnchorElement* anchor = HTMLAnchorElement::create(document()); |
| 667 anchor->setAttribute(HTMLNames::downloadAttr, ""); |
| 668 m_anchor = anchor; |
| 669 } |
| 670 m_anchor->setURL(url); |
| 671 m_anchor->dispatchSimulatedClick(event); |
| 672 } |
| 673 MediaControlInputElement::defaultEventHandler(event); |
| 674 } |
| 675 |
| 676 DEFINE_TRACE(MediaControlDownloadButtonElement) |
| 677 { |
| 678 visitor->trace(m_anchor); |
| 679 MediaControlInputElement::trace(visitor); |
663 } | 680 } |
664 | 681 |
665 // ---------------------------- | 682 // ---------------------------- |
666 | 683 |
667 MediaControlTimelineElement::MediaControlTimelineElement(MediaControls& mediaCon
trols) | 684 MediaControlTimelineElement::MediaControlTimelineElement(MediaControls& mediaCon
trols) |
668 : MediaControlInputElement(mediaControls, MediaSlider) | 685 : MediaControlInputElement(mediaControls, MediaSlider) |
669 { | 686 { |
670 } | 687 } |
671 | 688 |
672 MediaControlTimelineElement* MediaControlTimelineElement::create(MediaControls&
mediaControls) | 689 MediaControlTimelineElement* MediaControlTimelineElement::create(MediaControls&
mediaControls) |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
976 } | 993 } |
977 | 994 |
978 MediaControlCurrentTimeDisplayElement* MediaControlCurrentTimeDisplayElement::cr
eate(MediaControls& mediaControls) | 995 MediaControlCurrentTimeDisplayElement* MediaControlCurrentTimeDisplayElement::cr
eate(MediaControls& mediaControls) |
979 { | 996 { |
980 MediaControlCurrentTimeDisplayElement* element = new MediaControlCurrentTime
DisplayElement(mediaControls); | 997 MediaControlCurrentTimeDisplayElement* element = new MediaControlCurrentTime
DisplayElement(mediaControls); |
981 element->setShadowPseudoId(AtomicString("-webkit-media-controls-current-time
-display")); | 998 element->setShadowPseudoId(AtomicString("-webkit-media-controls-current-time
-display")); |
982 return element; | 999 return element; |
983 } | 1000 } |
984 | 1001 |
985 } // namespace blink | 1002 } // namespace blink |
OLD | NEW |