Rename WebKit2 API tests after directory rename
[WebKit-https.git] / Tools / TestWebKitAPI / Tests / WebKitLegacy / ios / AudioSessionCategoryIOS.mm
1 /*
2  * Copyright (C) 2015 Apple Inc. All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without
5  * modification, are permitted provided that the following conditions
6  * are met:
7  * 1. Redistributions of source code must retain the above copyright
8  *    notice, this list of conditions and the following disclaimer.
9  * 2. Redistributions in binary form must reproduce the above copyright
10  *    notice, this list of conditions and the following disclaimer in the
11  *    documentation and/or other materials provided with the distribution.
12  *
13  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
24  */
25
26 #import "config.h"
27
28 #if PLATFORM(IOS)
29
30 #import "PlatformUtilities.h"
31 #import <AVFoundation/AVAudioSession.h>
32 #import <UIKit/UIKit.h>
33 #import <WebCore/Settings.h>
34 #import <WebKit/WebKitLegacy.h>
35 #import <wtf/RetainPtr.h>
36 #import <wtf/SoftLinking.h>
37
38 SOFT_LINK_FRAMEWORK(AVFoundation)
39 SOFT_LINK_CLASS(AVFoundation, AVAudioSession)
40 SOFT_LINK_CONSTANT(AVFoundation, AVAudioSessionCategoryAmbient, NSString *)
41 SOFT_LINK_CONSTANT(AVFoundation, AVAudioSessionCategoryPlayback, NSString *)
42
43 static bool didBeginPlaying = false;
44
45 @interface AudioSessionCategoryUIWebViewDelegate : NSObject <UIWebViewDelegate>
46 @end
47
48 @implementation AudioSessionCategoryUIWebViewDelegate
49 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
50 {
51     if ([request.URL.scheme isEqualToString:@"callback"] && [request.URL.resourceSpecifier isEqualToString:@"playing"]) {
52         didBeginPlaying = true;
53         return NO;
54     }
55
56     return YES;
57 }
58 @end
59
60 namespace TestWebKitAPI {
61
62 TEST(WebKitLegacy, AudioSessionCategoryIOS)
63 {
64     WebCore::Settings::setShouldManageAudioSessionCategory(true);
65     RetainPtr<UIWindow> uiWindow = adoptNS([[UIWindow alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
66     RetainPtr<UIWebView> uiWebView = adoptNS([[UIWebView alloc] initWithFrame:NSMakeRect(0, 0, 800, 600)]);
67     [uiWindow addSubview:uiWebView.get()];
68
69     uiWebView.get().mediaPlaybackRequiresUserAction = NO;
70     uiWebView.get().allowsInlineMediaPlayback = YES;
71
72     RetainPtr<AudioSessionCategoryUIWebViewDelegate> uiDelegate = adoptNS([[AudioSessionCategoryUIWebViewDelegate alloc] init]);
73     uiWebView.get().delegate = uiDelegate.get();
74
75     [uiWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"video-with-audio" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]];
76
77     Util::run(&didBeginPlaying);
78
79     EXPECT_WK_STREQ(getAVAudioSessionCategoryPlayback(), [[getAVAudioSessionClass() sharedInstance] category]);
80
81     didBeginPlaying = false;
82
83     [uiWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"video-without-audio" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]];
84
85     Util::run(&didBeginPlaying);
86
87     EXPECT_WK_STREQ(getAVAudioSessionCategoryAmbient(), [[getAVAudioSessionClass() sharedInstance] category]);
88
89     didBeginPlaying = false;
90
91     [uiWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"video-with-muted-audio" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]];
92
93     Util::run(&didBeginPlaying);
94
95     EXPECT_WK_STREQ(getAVAudioSessionCategoryAmbient(), [[getAVAudioSessionClass() sharedInstance] category]);
96
97     didBeginPlaying = false;
98
99     [uiWebView loadRequest:[NSURLRequest requestWithURL:[[NSBundle mainBundle] URLForResource:@"video-with-muted-audio-and-webaudio" withExtension:@"html" subdirectory:@"TestWebKitAPI.resources"]]];
100
101     Util::run(&didBeginPlaying);
102
103     EXPECT_WK_STREQ(getAVAudioSessionCategoryAmbient(), [[getAVAudioSessionClass() sharedInstance] category]);
104 }
105
106 }
107
108 #endif