Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement HTMLMediaElement muted and defaultMuted attributes #22347

Merged
merged 1 commit into from Feb 25, 2019

Conversation

7 participants
@stevesweetney
Copy link
Contributor

commented Dec 1, 2018

PR for issue #22291


  • ./mach build -d does not report any errors
  • ./mach test-tidy does not report any errors
  • These changes fix #22291 (github issue number if applicable).
  • There are tests for these changes OR

This change is Reviewable

@highfive

This comment has been minimized.

Copy link

commented Dec 1, 2018

Thanks for the pull request, and welcome! The Servo team is excited to review your changes, and you should hear from @asajeffrey (or someone else) soon.

@highfive

This comment has been minimized.

Copy link

commented Dec 1, 2018

Heads up! This PR modifies the following files:

  • @asajeffrey: components/script/dom/webidls/HTMLMediaElement.webidl, components/script/dom/htmlmediaelement.rs
  • @KiChjang: components/script/dom/webidls/HTMLMediaElement.webidl, components/script/dom/htmlmediaelement.rs
@highfive

This comment has been minimized.

Copy link

commented Dec 1, 2018

warning Warning warning

  • These commits modify script code, but no tests are modified. Please consider adding a test!
@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Dec 1, 2018

Does not build! Will fix soon

@ferjm
Copy link
Member

left a comment

Thanks for working on this!

I realize that you might already fixed this, but I added a couple of comments of things that may be causing the build issues that you are seeing.

@@ -1263,6 +1266,11 @@ impl HTMLMediaElementMethods for HTMLMediaElement {
// https://html.spec.whatwg.org/multipage/#dom-media-autoplay
make_bool_setter!(SetAutoplay, "autoplay");

// https://html.spec.whatwg.org/multipage/#dom-media-defaultmuted
make_bool_getter!(DefaultMuted, "muted");

This comment has been minimized.

Copy link
@ferjm

ferjm Dec 4, 2018

Member

The make_bool_getter! and make_bool_setter! macros implement the getter and setter of HTML attributes. (You can see its implementation here). In this case, defaultMuted is not a HTML attribute of the <video> or <audio> elements, but a property of the HTMLMediaElementJS object, so we don't need to use these macros here. We have to implement the getter and setter manually, just like you did with muted.

This comment has been minimized.

Copy link
@ferjm

ferjm Dec 4, 2018

Member

Actually, I was wrong about this :\ muted is indeed an attribute of the html tag. Add servo/html5ever#358 is what needed to be done. Sorry about the temporary confussion.

@ferjm

This comment has been minimized.

Copy link
Member

commented Dec 18, 2018

@stevesweetney how are things going with this PR? Do you need any further help to progress?

@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Dec 18, 2018

Hey @ferjm ,
Sorry for taking so long with the PR and thanks for following up on this.
I'd like to test servo with master branch from https://github.com/servo/html5ever since it has the necessary additions for the muted html attribute.
How can I do this?
So far I have tried adding:

[patch.crates-io]
html5ever = { git = 'https://github.com/servo/html5ever' }

to the Cargo.toml at the root of this repo.

@ferjm

This comment has been minimized.

Copy link
Member

commented Dec 19, 2018

[patch.crates-io]
html5ever = { git = 'https://github.com/servo/html5ever' }

I think this should do the trick if you use double " instead of single quotes '

@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Dec 19, 2018

Yup that worked. Just needed to run ./mach cargo-update -p html5ever

After updating there are some compatibility issues and changes in the api going from from markup5ever 0.7.1 to markup5ever 0.7.5

I'm not sure where to go from here

@jdm

This comment has been minimized.

Copy link
Member

commented Jan 7, 2019

@stevesweetney What were the API changes that you encountered?

@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Jan 8, 2019

This what appears when using the html5ever patch above and attempting to build:

$ ./mach build -d
   Compiling script v0.0.1 (/home/steve/rust-projects/servo/components/script)                                                                
error[E0277]: the trait bound `html5ever::QualName: malloc_size_of::MallocSizeOf` is not satisfied                                            
   --> components/script/dom/document.rs:264:1                                                                                                
    |                                                                                                                                         
264 | #[dom_struct]                                                                                                                           
    | ^^^^^^^^^^^^^ the trait `malloc_size_of::MallocSizeOf` is not implemented for `html5ever::QualName`                                     
    |                                                                                                                                         
    = note: required because of the requirements on the impl of `malloc_size_of::MallocSizeOf` for `std::collections::HashMap<html5ever::QualName, dom::bindings::root::Dom<dom::htmlcollection::HTMLCollection>>`
    = note: required because of the requirements on the impl of `malloc_size_of::MallocSizeOf` for `dom::bindings::cell::DomRefCell<std::collections::HashMap<html5ever::QualName, dom::bindings::root::Dom<dom::htmlcollection::HTMLCollection>>>`
    = note: required by `malloc_size_of::MallocSizeOf::size_of`                                                                               
                                                                                                                                              
error[E0277]: the trait bound `&dom::node::Node: markup5ever::serialize::Serialize` is not satisfied                                          
    --> components/script/dom/element.rs:1128:15                                                                                              
     |                                                                                                                                        
1128 |         match xmlSerialize::serialize(                                                                                                 
     |               ^^^^^^^^^^^^^^^^^^^^^^^ the trait `markup5ever::serialize::Serialize` is not implemented for `&dom::node::Node`          
     |                                                                                                                                        
     = note: required by `xml5ever::serialize::serialize`                                                                                     
                                                                                                                                              
error[E0308]: mismatched types                                                                                                                
    --> components/script/dom/element.rs:2319:59                                                                                              
     |                                                                                                                                        
2319 |             return self.xmlSerialize(XmlChildrenOnly(Some(qname)));                                                                    
     |                                                           ^^^^^ expected struct `markup5ever::interface::QualName`, found struct `html5ever::QualName`
     |                                                                                                                                        
     = note: expected type `markup5ever::interface::QualName`                                                                                 
                found type `html5ever::QualName`                                                                                              
note: Perhaps two different versions of crate `markup5ever` are being used?                                                                   
    --> components/script/dom/element.rs:2319:59                                                                                              
     |                                                                                                                                        
2319 |             return self.xmlSerialize(XmlChildrenOnly(Some(qname)));                                                                    
     |                                                           ^^^^^                                                                        
                                                                                                                                              
error[E0277]: the trait bound `html5ever::QualName: malloc_size_of::MallocSizeOf` is not satisfied                                            
   --> components/script/dom/htmlcollection.rs:219:31                                                                                         
    |                                                                                                                                         
219 |         #[derive(JSTraceable, MallocSizeOf)]                                                                                            
    |                               ^^^^^^^^^^^^ the trait `malloc_size_of::MallocSizeOf` is not implemented for `html5ever::QualName`        
    |                                                                                                                                         
    = note: required by `malloc_size_of::MallocSizeOf::size_of`                                                                               
                                                                                                                                              
error[E0308]: mismatched types                                                                                                                
   --> components/script/dom/servoparser/mod.rs:614:65                                                                                        
    |                                                                                                                                         
614 |             Tokenizer::Xml(ref mut tokenizer) => tokenizer.feed(input),                                                                 
    |                                                                 ^^^^^ expected struct `markup5ever::util::buffer_queue::BufferQueue`, found struct `html5ever::tokenizer::BufferQueue`
    |                                                                                                                                         
    = note: expected type `&mut markup5ever::util::buffer_queue::BufferQueue`                                                                 
               found type `&mut html5ever::tokenizer::BufferQueue`                                                                            
note: Perhaps two different versions of crate `markup5ever` are being used?                                                                   
   --> components/script/dom/servoparser/mod.rs:614:65                                                                                        
    |                                                                                                                                         
614 |             Tokenizer::Xml(ref mut tokenizer) => tokenizer.feed(input),                                                                 
    |                                                                 ^^^^^                                                                   
                                                                                                                                              
error[E0277]: the trait bound `html5ever::QualName: malloc_size_of::MallocSizeOf` is not satisfied                                            
  --> components/script/dom/servoparser/async_html.rs:43:30                                                                                   
   |                                                                                                                                          
43 | #[derive(Clone, JSTraceable, MallocSizeOf)]                                                                                              
   |                              ^^^^^^^^^^^^ the trait `malloc_size_of::MallocSizeOf` is not implemented for `html5ever::QualName`          
   |                                                                                                                                          
   = note: required because of the requirements on the impl of `malloc_size_of::MallocSizeOf` for `std::option::Option<html5ever::QualName>`  
   = note: required by `malloc_size_of::MallocSizeOf::size_of`                                                                                
                                                                                                                                              
error[E0277]: the trait bound `html5ever::QualName: malloc_size_of::MallocSizeOf` is not satisfied                                            
  --> components/script/dom/servoparser/async_html.rs:55:23                                                                                   
   |                                                                                                                                          
55 | #[derive(JSTraceable, MallocSizeOf)]                                                                                                     
   |                       ^^^^^^^^^^^^ the trait `malloc_size_of::MallocSizeOf` is not implemented for `html5ever::QualName`                 
   |                                                                                                                                          
   = note: required by `malloc_size_of::MallocSizeOf::size_of`                                                                                
                                                                                                                                              
error[E0277]: the trait bound `html5ever::QualName: malloc_size_of::MallocSizeOf` is not satisfied                                            
  --> components/script/dom/servoparser/async_html.rs:61:23                                                                                   
   |                                                                                                                                          
61 | #[derive(JSTraceable, MallocSizeOf)]                                                                                                     
   |                       ^^^^^^^^^^^^ the trait `malloc_size_of::MallocSizeOf` is not implemented for `html5ever::QualName`                 
   |                                                                                                                                          
   = note: required by `malloc_size_of::MallocSizeOf::size_of`                                                                                
                                                                                                                                              
error[E0277]: the trait bound `dom::servoparser::Sink: markup5ever::interface::tree_builder::TreeSink` is not satisfied                       
  --> components/script/dom/servoparser/xml.rs:36:18                                                                                          
   |                                                                                                                                          
36 |         let tb = XmlTreeBuilder::new(sink, Default::default());                                                                          
   |                  ^^^^^^^^^^^^^^^^^^^ the trait `markup5ever::interface::tree_builder::TreeSink` is not implemented for `dom::servoparser::Sink`
   |                                                                                                                                          
   = note: required by `<xml5ever::tree_builder::XmlTreeBuilder<Handle, Sink>>::new`                                                          
                                                                                                                                              
error[E0277]: the trait bound `dom::servoparser::Sink: markup5ever::interface::tree_builder::TreeSink` is not satisfied                       
  --> components/script/dom/servoparser/xml.rs:37:19                                                                                          
   |                                                                                                                                          
37 |         let tok = XmlTokenizer::new(tb, Default::default());                                                                             
   |                   ^^^^^^^^^^^^^^^^^ the trait `markup5ever::interface::tree_builder::TreeSink` is not implemented for `dom::servoparser::Sink`
   |                                                                                                                                          
   = note: required because of the requirements on the impl of `xml5ever::tokenizer::interface::TokenSink` for `xml5ever::tree_builder::XmlTreeBuilder<_, dom::servoparser::Sink>`
   = note: required by `<xml5ever::tokenizer::XmlTokenizer<Sink>>::new`                                                                       
                                                                                                                                              
error[E0599]: no method named `feed` found for type `xml5ever::tokenizer::XmlTokenizer<xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink>>` in the current scope
  --> components/script/dom/servoparser/xml.rs:45:28                                                                                          
   |                                                                                                                                          
45 |                 self.inner.feed(chunk);                                                                                                  
   |                            ^^^^                                                                                                          
   |                                                                                                                                          
   = note: the method `feed` exists but the following trait bounds were not satisfied:                                                        
           `xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink> : xml5ever::tokenizer::interface::TokenSink`
                                                                                                                                              
error[E0599]: no method named `run` found for type `xml5ever::tokenizer::XmlTokenizer<xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink>>` in the current scope
  --> components/script/dom/servoparser/xml.rs:51:24                                                                                          
   |                                                                                                                                          
51 |             self.inner.run();                                                                                                            
   |                        ^^^                                                                                                               
   |                                                                                                                                          
   = note: the method `run` exists but the following trait bounds were not satisfied:                                                         
           `xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink> : xml5ever::tokenizer::interface::TokenSink`
                                                                                                                                              
error[E0599]: no method named `end` found for type `xml5ever::tokenizer::XmlTokenizer<xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink>>` in the current scope
  --> components/script/dom/servoparser/xml.rs:60:20                                                                                          
   |                                                                                                                                          
60 |         self.inner.end()                                                                                                                 
   |                    ^^^                                                                                                                   
   |                                                                                                                                          
   = note: the method `end` exists but the following trait bounds were not satisfied:                                                         
           `xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink> : xml5ever::tokenizer::interface::TokenSink`
                                                                                                                                              
error[E0599]: no method named `trace_handles` found for type `&xml5ever::tree_builder::XmlTreeBuilder<dom::bindings::root::Dom<dom::node::Node>, dom::servoparser::Sink>` in the current scope
  --> components/script/dom/servoparser/xml.rs:85:22                                                                                          
   |                                                                                                                                          
85 |         tree_builder.trace_handles(&tracer);                                                                                             
   |                      ^^^^^^^^^^^^^                                                                                                       
   |                                                                                                                                          
   = note: the method `trace_handles` exists but the following trait bounds were not satisfied:                                               
           `dom::servoparser::Sink : markup5ever::interface::tree_builder::TreeSink`                                                          
           `dom::servoparser::Sink : markup5ever::interface::tree_builder::TreeSink`                                                          
                                                                                                                                              
error: aborting due to 14 previous errors                                                                                                     
                                                                                                                                              
Some errors occurred: E0277, E0308, E0599.                                                                                                    
For more information about an error, try `rustc --explain E0277`.                                                                             
error: Could not compile `script`.                                                                                                            

To learn more, run the command again with --verbose.
Build FAILED in 0:01:58
@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Jan 8, 2019

I'm wondering if I should remove the patch take @ferjm suggestion to use the implement the getter and setter manually for the muted attribute just for now and leave a todo to eventually use the make_bool_getter! and make_bool_setter! macros?

@jdm

This comment has been minimized.

Copy link
Member

commented Jan 8, 2019

I think that's worth a try to allow you to make progress.

@ferjm

This comment has been minimized.

Copy link
Member

commented Jan 8, 2019

I don't know if this helps, but #22563 is updating markup5ever to 0.7.5.

@stevesweetney stevesweetney reopened this Jan 12, 2019

@stevesweetney stevesweetney force-pushed the stevesweetney:master branch from 65a9533 to b0a4f55 Jan 12, 2019

@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Jan 12, 2019

@ferjm You're right that PR did help

@ferjm
Copy link
Member

left a comment

Good start! We still need to make a few changes before merging. I added some comments inline.

Make sure that you run all the tests from tests/wpt/web-platform-tests/html/semantics/embedded-content/media-elements/ and update the test expectations accordingly, as there are some of them affected by this patch (i.e. /html/semantics/embedded-content/media-elements/event_volumechange.html). We will also need to update the expectations for html/dom/interfaces.https.html.

Thanks!

}

// https://html.spec.whatwg.org/multipage/#dom-media-muted
fn SetMuted(&self, value: bool) {

This comment has been minimized.

Copy link
@ferjm

ferjm Jan 14, 2019

Member

Let's bail out here if self.muted.get() == value


// https://html.spec.whatwg.org/multipage/#dom-media-muted
fn SetMuted(&self, value: bool) {
self.muted.set(value);

This comment has been minimized.

Copy link
@ferjm

ferjm Jan 14, 2019

Member

Apart from setting the value of the mute property, we need to set the same value in the media backend. To do that, we need to expose a new method in the servo-media Player trait (i.e. set_mute) which implementation should use the GStreamer set_mute method.

window
.task_manager()
.media_element_task_source()
.queue_simple_event(self.upcast(), atom!("volumechange"), &window);

This comment has been minimized.

Copy link
@ferjm

ferjm Jan 14, 2019

Member

We need to implement the following piece from the spec here:

Then, if the media element is not allowed to play, the user agent must run the internal pause steps for the media element

This comment has been minimized.

Copy link
@ferjm

ferjm Jan 14, 2019

Member

This is also missing from the SetVolume method. It would be really nice if you could also add the check there.

@ferjm

This comment has been minimized.

Copy link
Member

commented Jan 30, 2019

@stevesweetney how are things going here? Let me know if you need any help with the remaining work, please.

@stevesweetney

This comment has been minimized.

Copy link
Contributor Author

commented Jan 30, 2019

@ferjm Hey, I'm still continuing work on this. Could you clarify this part for me

We need to implement the following piece from the spec here:

Then, if the media element is not allowed to play, the user agent must run the internal pause steps for the media element

How do I check to see if the media element is allowed to play?
Thanks

@ferjm

This comment has been minimized.

Copy link
Member

commented Jan 31, 2019

Hmm... the spec does not define any specific constraints why an element shouldn't be allowed to play and it leaves that decision to the UA. Let's always allow playback for now, but let's create a placeholder function for that: fn is_allowed_to_play(&self) -> bool { true }.

This is out of the scope of this issues, but it would be great if you could also address this comment as well.

@ferjm

This comment has been minimized.

Copy link
Member

commented Feb 18, 2019

We need to update the expectations for /html/dom/interfaces.https.html as well.

 (view as text)

{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: document.createElement(\"video\") must inherit property \"muted\" with the proper type", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78229, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: document.createElement(\"video\") must inherit property \"defaultMuted\" with the proper type", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78230, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: document.createElement(\"audio\") must inherit property \"muted\" with the proper type", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78283, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: document.createElement(\"audio\") must inherit property \"defaultMuted\" with the proper type", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78284, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: new Audio() must inherit property \"muted\" with the proper type", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78331, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: new Audio() must inherit property \"defaultMuted\" with the proper type", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78332, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: attribute muted", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78424, 
    "action": "test_result", 
    "expected": "FAIL"
}
{
    "status": "PASS", 
    "group": "default", 
    "message": null, 
    "stack": null, 
    "subtest": "HTMLMediaElement interface: attribute defaultMuted", 
    "test": "/html/dom/interfaces.https.html?include=HTML.*", 
    "line": 78425, 
    "action": "test_result", 
    "expected": "FAIL"
}

@stevesweetney stevesweetney force-pushed the stevesweetney:master branch from e6f7b69 to 02d3328 Feb 18, 2019

@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 22, 2019

@stevesweetney: 🔑 Insufficient privileges: not in try users

1 similar comment
@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 22, 2019

@stevesweetney: 🔑 Insufficient privileges: not in try users

@CYBAI

This comment has been minimized.

Copy link
Collaborator

commented Feb 25, 2019

@bors-servo try=wpt

@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

⌛️ Trying commit 02d3328 with merge bc2d282...

bors-servo added a commit that referenced this pull request Feb 25, 2019

Auto merge of #22347 - stevesweetney:master, r=<try>
Implement HTMLMediaElement muted and defaultMuted attributes

<!-- Please describe your changes on the following line: -->
PR for issue  #22291

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix  #22291 (github issue number if applicable).
- [X] There are tests for these changes OR

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22347)
<!-- Reviewable:end -->
@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

☀️ Test successful - linux-rel-css, linux-rel-wpt, status-taskcluster
State: approved= try=True

@ferjm

This comment has been minimized.

Copy link
Member

commented Feb 25, 2019

I filed #22935 as a follow-up.

@stevesweetney Thanks for your work here!

@bors-servo r+

@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

📌 Commit 02d3328 has been approved by ferjm

@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

⌛️ Testing commit 02d3328 with merge 13e4834...

bors-servo added a commit that referenced this pull request Feb 25, 2019

Auto merge of #22347 - stevesweetney:master, r=ferjm
Implement HTMLMediaElement muted and defaultMuted attributes

<!-- Please describe your changes on the following line: -->
PR for issue  #22291

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix  #22291 (github issue number if applicable).
- [X] There are tests for these changes OR

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22347)
<!-- Reviewable:end -->
@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

💔 Test failed - mac-rel-css1

@ferjm

This comment has been minimized.

Copy link
Member

commented Feb 25, 2019

@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

⌛️ Testing commit 02d3328 with merge a28e15e...

bors-servo added a commit that referenced this pull request Feb 25, 2019

Auto merge of #22347 - stevesweetney:master, r=ferjm
Implement HTMLMediaElement muted and defaultMuted attributes

<!-- Please describe your changes on the following line: -->
PR for issue  #22291

---
<!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: -->
- [X] `./mach build -d` does not report any errors
- [X] `./mach test-tidy` does not report any errors
- [X] These changes fix  #22291 (github issue number if applicable).
- [X] There are tests for these changes OR

<!-- Also, please make sure that "Allow edits from maintainers" checkbox is checked, so that we can help you if you get stuck somewhere along the way.-->

<!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. -->

<!-- Reviewable:start -->
---
This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/22347)
<!-- Reviewable:end -->
@bors-servo

This comment has been minimized.

Copy link
Contributor

commented Feb 25, 2019

@bors-servo bors-servo merged commit 02d3328 into servo:master Feb 25, 2019

4 checks passed

Taskcluster (pull_request) TaskGroup: success
Details
Travis CI - Pull Request Build Passed
Details
continuous-integration/appveyor/pr AppVeyor build succeeded
Details
homu Test successful
Details

Media playback automation moved this from In progress to Done Feb 25, 2019

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.