Add API to mute/unmute a page.
authoradachan@apple.com <adachan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Oct 2014 18:56:42 +0000 (18:56 +0000)
committeradachan@apple.com <adachan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 29 Oct 2014 18:56:42 +0000 (18:56 +0000)
https://bugs.webkit.org/show_bug.cgi?id=138150

Reviewed by Eric Carlson.

No new tests, since it's difficult to test whether the Page has indeed been muted.

* dom/Document.cpp:
(WebCore::Document::setMuted):
Go through each AudioProducer and call setMuted() on it.
* dom/Document.h:
* page/AudioProducer.h:
Add setMuted(bool). HTMLMediaElement, the only derived class of AudioProducer so far,
has already implemented setMuted().
* page/Page.cpp:
(WebCore::Page::setMuted):
Go through all its frames and call setMuted() on each frame's Document.
* page/Page.h:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@175336 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/dom/Document.cpp
Source/WebCore/dom/Document.h
Source/WebCore/page/AudioProducer.h
Source/WebCore/page/Page.cpp
Source/WebCore/page/Page.h

index ac69c3f..d57e481 100644 (file)
@@ -1,3 +1,24 @@
+2014-10-28  Ada Chan  <adachan@apple.com>
+
+        Add API to mute/unmute a page.
+        https://bugs.webkit.org/show_bug.cgi?id=138150
+
+        Reviewed by Eric Carlson.
+
+        No new tests, since it's difficult to test whether the Page has indeed been muted.
+
+        * dom/Document.cpp:
+        (WebCore::Document::setMuted):
+        Go through each AudioProducer and call setMuted() on it.
+        * dom/Document.h:
+        * page/AudioProducer.h:
+        Add setMuted(bool). HTMLMediaElement, the only derived class of AudioProducer so far,
+        has already implemented setMuted().
+        * page/Page.cpp:
+        (WebCore::Page::setMuted):
+        Go through all its frames and call setMuted() on each frame's Document.
+        * page/Page.h:
+
 2014-10-29  Tim Horton  <timothy_horton@apple.com>
 
         Implement action menus for data detected items
index 0da0360..aea1edb 100644 (file)
@@ -3304,6 +3304,12 @@ void Document::updateIsPlayingAudio()
         page()->updateIsPlayingAudio();
 }
 
+void Document::setMuted(bool muted)
+{
+    for (auto audioProducer : m_audioProducers)
+        audioProducer->setMuted(muted);
+}
+
 void Document::styleResolverChanged(StyleResolverUpdateFlag updateFlag)
 {
     if (m_optimizedStyleSheetUpdateTimer.isActive())
index cd384fc..4273bda 100644 (file)
@@ -1292,6 +1292,7 @@ public:
     void removeAudioProducer(AudioProducer*);
     bool isPlayingAudio() const { return m_isPlayingAudio; }
     void updateIsPlayingAudio();
+    void setMuted(bool);
 
 protected:
     enum ConstructionFlags { Synthesized = 1, NonRenderedPlaceholder = 1 << 1 };
index 43f01fc..e0212bc 100644 (file)
@@ -31,6 +31,7 @@ namespace WebCore {
 class AudioProducer {
 public:
     virtual bool isPlayingAudio() = 0;
+    virtual void setMuted(bool) = 0;
 
 protected:
     virtual ~AudioProducer() { }
index 3ada7ed..7213fb5 100644 (file)
@@ -1211,6 +1211,12 @@ void Page::updateIsPlayingAudio()
     chrome().client().isPlayingAudioDidChange(m_isPlayingAudio);
 }
 
+void Page::setMuted(bool muted)
+{
+    for (Frame* frame = &mainFrame(); frame; frame = frame->tree().traverseNext())
+        frame->document()->setMuted(muted);
+}
+
 #if !ASSERT_DISABLED
 void Page::checkSubframeCountConsistency() const
 {
index c927e21..c4d3c50 100644 (file)
@@ -438,6 +438,7 @@ public:
 
     bool isPlayingAudio() const { return m_isPlayingAudio; }
     void updateIsPlayingAudio();
+    void setMuted(bool);
 
 private:
     WEBCORE_EXPORT void initGroup();