OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "config.h" |
| 6 #include "core/html/shadow/MediaControls.h" |
| 7 |
| 8 #include "core/HTMLNames.h" |
| 9 #include "core/css/StylePropertySet.h" |
| 10 #include "core/dom/Document.h" |
| 11 #include "core/dom/ElementTraversal.h" |
| 12 #include "core/html/HTMLVideoElement.h" |
| 13 #include "core/testing/DummyPageHolder.h" |
| 14 #include <gtest/gtest.h> |
| 15 |
| 16 namespace blink { |
| 17 |
| 18 namespace { |
| 19 |
| 20 Element* getElementByShadowPseudoId(Node& rootNode, const char* shadowPseudoId) |
| 21 { |
| 22 for (Element& element : ElementTraversal::descendantsOf(rootNode)) { |
| 23 if (element.fastGetAttribute(HTMLNames::pseudoAttr) == shadowPseudoId) |
| 24 return &element; |
| 25 } |
| 26 return nullptr; |
| 27 } |
| 28 |
| 29 bool isElementVisible(Element& element) |
| 30 { |
| 31 const StylePropertySet* inlineStyle = element.inlineStyle(); |
| 32 |
| 33 if (!inlineStyle) |
| 34 return true; |
| 35 |
| 36 if (inlineStyle->getPropertyValue(CSSPropertyDisplay) == "none") |
| 37 return false; |
| 38 |
| 39 if (inlineStyle->hasProperty(CSSPropertyOpacity) |
| 40 && inlineStyle->getPropertyValue(CSSPropertyOpacity).toDouble() == 0.0) |
| 41 return false; |
| 42 |
| 43 if (inlineStyle->getPropertyValue(CSSPropertyVisibility) == "hidden") |
| 44 return false; |
| 45 |
| 46 if (Element* parent = element.parentElement()) |
| 47 return isElementVisible(*parent); |
| 48 |
| 49 return true; |
| 50 } |
| 51 |
| 52 } // namespace |
| 53 |
| 54 class MediaControlsTest : public testing::Test { |
| 55 protected: |
| 56 virtual void SetUp() |
| 57 { |
| 58 m_pageHolder = DummyPageHolder::create(IntSize(800, 600)); |
| 59 Document& document = m_pageHolder->document(); |
| 60 document.write("<video controls>"); |
| 61 HTMLVideoElement& video = toHTMLVideoElement(*document.querySelector("vi
deo", ASSERT_NO_EXCEPTION)); |
| 62 m_mediaControls = video.mediaControls(); |
| 63 } |
| 64 |
| 65 MediaControls& mediaControls() { return *m_mediaControls; } |
| 66 |
| 67 private: |
| 68 OwnPtr<DummyPageHolder> m_pageHolder; |
| 69 MediaControls* m_mediaControls; |
| 70 }; |
| 71 |
| 72 TEST_F(MediaControlsTest, HideAndShow) |
| 73 { |
| 74 Element* panel = getElementByShadowPseudoId(mediaControls(), "-webkit-media-
controls-panel"); |
| 75 ASSERT_NE(nullptr, panel); |
| 76 |
| 77 ASSERT_TRUE(isElementVisible(*panel)); |
| 78 mediaControls().hide(); |
| 79 ASSERT_FALSE(isElementVisible(*panel)); |
| 80 mediaControls().show(); |
| 81 ASSERT_TRUE(isElementVisible(*panel)); |
| 82 } |
| 83 |
| 84 TEST_F(MediaControlsTest, Reset) |
| 85 { |
| 86 Element* panel = getElementByShadowPseudoId(mediaControls(), "-webkit-media-
controls-panel"); |
| 87 ASSERT_NE(nullptr, panel); |
| 88 |
| 89 ASSERT_TRUE(isElementVisible(*panel)); |
| 90 mediaControls().reset(); |
| 91 ASSERT_TRUE(isElementVisible(*panel)); |
| 92 } |
| 93 |
| 94 TEST_F(MediaControlsTest, HideAndReset) |
| 95 { |
| 96 Element* panel = getElementByShadowPseudoId(mediaControls(), "-webkit-media-
controls-panel"); |
| 97 ASSERT_NE(nullptr, panel); |
| 98 |
| 99 ASSERT_TRUE(isElementVisible(*panel)); |
| 100 mediaControls().hide(); |
| 101 ASSERT_FALSE(isElementVisible(*panel)); |
| 102 mediaControls().reset(); |
| 103 ASSERT_FALSE(isElementVisible(*panel)); |
| 104 } |
| 105 |
| 106 } // namespace blink |
OLD | NEW |