Chromium Code Reviews| Index: chrome/browser/apps/guest_view/web_view_browsertest.cc |
| diff --git a/chrome/browser/apps/guest_view/web_view_browsertest.cc b/chrome/browser/apps/guest_view/web_view_browsertest.cc |
| index 5a5819b8aae64eec1dd74d94c143052736d4eed2..8b5bdc2fa131991c2f2b470b5e712d2e179aece1 100644 |
| --- a/chrome/browser/apps/guest_view/web_view_browsertest.cc |
| +++ b/chrome/browser/apps/guest_view/web_view_browsertest.cc |
| @@ -745,6 +745,70 @@ class WebViewDPITest : public WebViewTest { |
| static float scale() { return 2.0f; } |
| }; |
| +class WebContentsAudioMutedObserver : public content::WebContentsObserver { |
| + public: |
| + WebContentsAudioMutedObserver(content::WebContents* web_contents, |
| + const base::Closure& muted_callback) |
| + : WebContentsObserver(web_contents), |
| + muted_callback_(muted_callback), |
| + muting_update_observed_(false) { |
| + } |
| + |
| + // WebContentsObserver. |
| + void DidUpdateAudioMutingState(bool muted) override { |
| + muting_update_observed_ = true; |
| + muted_callback_.Run(); |
| + } |
| + |
| + bool muting_update_observed() { return muting_update_observed_; } |
| + |
| + private: |
| + base::Closure muted_callback_; |
| + bool muting_update_observed_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(WebContentsAudioMutedObserver); |
| +}; |
| + |
| +IN_PROC_BROWSER_TEST_F(WebViewTest, AudioMutesWhileAttached) { |
| + LoadAppWithGuest("web_view/simple"); |
| + |
| + content::WebContents* embedder = GetEmbedderWebContents(); |
| + content::WebContents* guest = GetGuestWebContents(); |
| + |
| + EXPECT_FALSE(embedder->IsAudioMuted()); |
| + EXPECT_FALSE(guest->IsAudioMuted()); |
| + |
| + embedder->SetAudioMuted(true); |
| + EXPECT_TRUE(embedder->IsAudioMuted()); |
| + EXPECT_TRUE(guest->IsAudioMuted()); |
| + |
| + embedder->SetAudioMuted(false); |
| + EXPECT_FALSE(embedder->IsAudioMuted()); |
| + EXPECT_FALSE(guest->IsAudioMuted()); |
|
Charlie Reis
2016/01/06 22:13:51
Is it possible to mute a guest without muting the
wjmaclean
2016/01/06 22:36:09
At present there is no pathway to mute a guest dir
Charlie Reis
2016/01/07 00:11:02
Acknowledged.
|
| +} |
| + |
| +IN_PROC_BROWSER_TEST_F(WebViewTest, AudioMutesOnAttach) { |
| + LoadAndLaunchPlatformApp("web_view/app_creates_webview", |
| + "WebViewTest.LAUNCHED"); |
| + content::WebContents* embedder = GetEmbedderWebContents(); |
| + embedder->SetAudioMuted(true); |
| + EXPECT_TRUE(embedder->IsAudioMuted()); |
| + |
| + SendMessageToEmbedder("create-guest"); |
| + content::WebContents* guest = |
| + GetGuestViewManager()->WaitForSingleGuestCreated(); |
| + |
| + EXPECT_TRUE(embedder->IsAudioMuted()); |
| + scoped_refptr<content::MessageLoopRunner> loop_runner( |
| + new content::MessageLoopRunner); |
| + WebContentsAudioMutedObserver observer(guest, loop_runner->QuitClosure()); |
| + // If the guest hasn't attached yet, it may not have received the muting |
| + // update, in which case we should wait until it does. |
| + if (!guest->IsAudioMuted() && !observer.muting_update_observed()) |
|
Charlie Reis
2016/01/06 22:13:51
observer.muting_update_observed() can't be true he
wjmaclean
2016/01/06 22:36:09
I suspect you're right, but I left the check in fo
|
| + loop_runner->Run(); |
|
Charlie Reis
2016/01/06 22:13:51
nit: Most of the test observer classes I'm familia
wjmaclean
2016/01/06 22:36:09
Sure, I can do that.
|
| + EXPECT_TRUE(guest->IsAudioMuted()); |
| +} |
| + |
| // This test verifies that hiding the guest triggers WebContents::WasHidden(). |
| IN_PROC_BROWSER_TEST_F(WebViewVisibilityTest, GuestVisibilityChanged) { |
| LoadAppWithGuest("web_view/visibility_changed"); |