Skip to content

Commit f40e3d3

Browse files
committed
Fix https webpage loads, and add unit test for this failure case. Fix marcuswestin#256
1 parent ee08af5 commit f40e3d3

File tree

6 files changed

+34
-11
lines changed

6 files changed

+34
-11
lines changed

Tests/WebViewJavascriptBridgeTests/BridgeTests.m

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
static NSString *const echoHandler = @"echoHandler";
1515

1616
@interface BridgeTests : XCTestCase
17-
17+
@end
18+
@interface TestWebPageLoadDelegate : NSObject<UIWebViewDelegate>
19+
@property XCTestExpectation* expectation;
1820
@end
1921

2022
@implementation BridgeTests {
@@ -57,7 +59,7 @@ static void loadEchoSample(id webView) {
5759
[(UIWebView*)webView loadRequest:request];
5860
}
5961

60-
const NSTimeInterval timeoutSec = 100;
62+
const NSTimeInterval timeoutSec = 5;
6163

6264
- (void)testInitialization {
6365
[self classSpecificTestInitialization:_uiWebView];
@@ -171,4 +173,26 @@ - (void)classSpecificTestJavascriptReceiveResponseWithoutSafetyTimeout:(id)webVi
171173
[callbackInvocked fulfill];
172174
}];
173175
}
176+
177+
- (void)testWebpageLoad {
178+
TestWebPageLoadDelegate* delegate = [self classSpecificTestWebpageLoad:_uiWebView]; // to retain it
179+
// [self classSpecificTestWebpageLoad:_wkWebView];
180+
[self waitForExpectationsWithTimeout:timeoutSec handler:NULL];
181+
NSLog(@"Retain delegate %@", delegate);
182+
}
183+
- (TestWebPageLoadDelegate*)classSpecificTestWebpageLoad:(id)webView {
184+
WebViewJavascriptBridge* bridge = [self bridgeForWebView:webView];
185+
TestWebPageLoadDelegate* delegate = [TestWebPageLoadDelegate new];
186+
delegate.expectation = [self expectationWithDescription:@"Webpage loaded"];
187+
[bridge setWebViewDelegate:delegate];
188+
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"https://example.com"]];
189+
[(UIWebView*)webView loadRequest:request];
190+
return delegate;
191+
}
192+
@end
193+
194+
@implementation TestWebPageLoadDelegate
195+
- (void)webViewDidFinishLoad:(UIWebView *)webView {
196+
[self.expectation fulfill];
197+
}
174198
@end

WebViewJavascriptBridge/WKWebViewJavascriptBridge.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,7 @@ - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigati
134134
NSURL *url = navigationAction.request.URL;
135135
__strong typeof(_webViewDelegate) strongDelegate = _webViewDelegate;
136136

137-
if ([_base isCorrectProcotocolScheme:url]) {
137+
if ([_base isWebViewJavascriptBridgeURL:url]) {
138138
if ([_base isBridgeLoadedURL:url]) {
139139
[_base injectJavascriptFile];
140140
} else if ([_base isQueueMessageURL:url]) {

WebViewJavascriptBridge/WebViewJavascriptBridge.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
@interface WebViewJavascriptBridge : WVJB_WEBVIEW_DELEGATE_INTERFACE
3434

3535

36-
+ (instancetype)bridgeForWebView:(id)webView DEPRECATED_MSG_ATTRIBUTE("Use bridge instead");
36+
+ (instancetype)bridgeForWebView:(id)webView;
3737
+ (instancetype)bridge:(id)webView;
3838

3939
+ (void)enableLogging;

WebViewJavascriptBridge/WebViewJavascriptBridge.m

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ - (void)webView:(WebView *)webView decidePolicyForNavigationAction:(NSDictionary
123123
if (webView != _webView) { return; }
124124

125125
NSURL *url = [request URL];
126-
if ([_base isCorrectProcotocolScheme:url]) {
126+
if ([_base isWebViewJavascriptBridgeURL:url]) {
127127
if ([_base isBridgeLoadedURL:url]) {
128128
[_base injectJavascriptFile];
129129
} else if ([_base isQueueMessageURL:url]) {
@@ -180,7 +180,7 @@ - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)
180180

181181
NSURL *url = [request URL];
182182
__strong WVJB_WEBVIEW_DELEGATE_TYPE* strongDelegate = _webViewDelegate;
183-
if ([_base isCorrectProcotocolScheme:url]) {
183+
if ([_base isWebViewJavascriptBridgeURL:url]) {
184184
if ([_base isBridgeLoadedURL:url]) {
185185
[_base injectJavascriptFile];
186186
} else if ([_base isQueueMessageURL:url]) {

WebViewJavascriptBridge/WebViewJavascriptBridgeBase.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ typedef NSDictionary WVJBMessage;
3434
- (void)sendData:(id)data responseCallback:(WVJBResponseCallback)responseCallback handlerName:(NSString*)handlerName;
3535
- (void)flushMessageQueue:(NSString *)messageQueueString;
3636
- (void)injectJavascriptFile;
37-
- (BOOL)isCorrectProcotocolScheme:(NSURL*)url;
37+
- (BOOL)isWebViewJavascriptBridgeURL:(NSURL*)url;
3838
- (BOOL)isQueueMessageURL:(NSURL*)urll;
3939
- (BOOL)isBridgeLoadedURL:(NSURL*)urll;
4040
- (void)logUnkownMessage:(NSURL*)url;

WebViewJavascriptBridge/WebViewJavascriptBridgeBase.m

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,12 +122,11 @@ - (void)injectJavascriptFile {
122122
}
123123
}
124124

125-
- (BOOL)isCorrectProcotocolScheme:(NSURL*)url {
126-
if([[url scheme] isEqualToString:kCustomProtocolScheme]){
127-
return YES;
128-
} else {
125+
- (BOOL)isWebViewJavascriptBridgeURL:(NSURL*)url {
126+
if (![[url scheme] isEqualToString:kCustomProtocolScheme]){
129127
return NO;
130128
}
129+
return ([self isBridgeLoadedURL:url] || [self isQueueMessageURL:url]);
131130
}
132131

133132
- (BOOL)isQueueMessageURL:(NSURL*)url {

0 commit comments

Comments
 (0)