OLD | NEW |
1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #import "ios/web/web_state/ui/crw_web_controller.h" | 5 #import "ios/web/web_state/ui/crw_web_controller.h" |
6 | 6 |
7 #import <WebKit/WebKit.h> | 7 #import <WebKit/WebKit.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
66 // sourceURL passed to webController:shouldBlockPopupWithURL:sourceURL: | 66 // sourceURL passed to webController:shouldBlockPopupWithURL:sourceURL: |
67 // Used for testing. | 67 // Used for testing. |
68 @property(nonatomic, assign) GURL sourceURL; | 68 @property(nonatomic, assign) GURL sourceURL; |
69 // Whether or not the delegate should block popups. | 69 // Whether or not the delegate should block popups. |
70 @property(nonatomic, assign) BOOL blockPopups; | 70 @property(nonatomic, assign) BOOL blockPopups; |
71 // A web controller that will be returned by webPageOrdered... methods. | 71 // A web controller that will be returned by webPageOrdered... methods. |
72 @property(nonatomic, assign) CRWWebController* childWebController; | 72 @property(nonatomic, assign) CRWWebController* childWebController; |
73 // Blocked popup info received in |webController:didBlockPopup:| call. | 73 // Blocked popup info received in |webController:didBlockPopup:| call. |
74 // nullptr if that delegate method was not called. | 74 // nullptr if that delegate method was not called. |
75 @property(nonatomic, readonly) web::BlockedPopupInfo* blockedPopupInfo; | 75 @property(nonatomic, readonly) web::BlockedPopupInfo* blockedPopupInfo; |
76 // SSL info received in |presentSSLError:forSSLStatus:recoverable:callback:| | |
77 // call. | |
78 @property(nonatomic, readonly) net::SSLInfo SSLInfo; | |
79 // SSL status received in |presentSSLError:forSSLStatus:recoverable:callback:| | |
80 // call. | |
81 @property(nonatomic, readonly) web::SSLStatus SSLStatus; | |
82 // Recoverable flag received in | |
83 // |presentSSLError:forSSLStatus:recoverable:callback:| call. | |
84 @property(nonatomic, readonly) BOOL recoverable; | |
85 // Callback received in |presentSSLError:forSSLStatus:recoverable:callback:| | |
86 // call. | |
87 @property(nonatomic, readonly) SSLErrorCallback shouldContinueCallback; | |
88 @end | 76 @end |
89 | 77 |
90 // Stub implementation for CRWWebUserInterfaceDelegate protocol. | 78 // Stub implementation for CRWWebUserInterfaceDelegate protocol. |
91 @interface CRWWebUserInterfaceDelegateStub | 79 @interface CRWWebUserInterfaceDelegateStub |
92 : OCMockComplexTypeHelper<CRWWebUserInterfaceDelegate> | 80 : OCMockComplexTypeHelper<CRWWebUserInterfaceDelegate> |
93 @end | 81 @end |
94 | 82 |
95 @implementation CRWWebUserInterfaceDelegateStub | 83 @implementation CRWWebUserInterfaceDelegateStub |
96 | 84 |
97 - (void)webController:(CRWWebController*)webController | 85 - (void)webController:(CRWWebController*)webController |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
150 @end | 138 @end |
151 | 139 |
152 @implementation MockInteractionLoader { | 140 @implementation MockInteractionLoader { |
153 // Backs up the property with the same name. | 141 // Backs up the property with the same name. |
154 std::unique_ptr<web::BlockedPopupInfo> _blockedPopupInfo; | 142 std::unique_ptr<web::BlockedPopupInfo> _blockedPopupInfo; |
155 } | 143 } |
156 @synthesize popupURL = _popupURL; | 144 @synthesize popupURL = _popupURL; |
157 @synthesize sourceURL = _sourceURL; | 145 @synthesize sourceURL = _sourceURL; |
158 @synthesize blockPopups = _blockPopups; | 146 @synthesize blockPopups = _blockPopups; |
159 @synthesize childWebController = _childWebController; | 147 @synthesize childWebController = _childWebController; |
160 @synthesize SSLInfo = _SSLInfo; | |
161 @synthesize SSLStatus = _SSLStatus; | |
162 @synthesize recoverable = _recoverable; | |
163 @synthesize shouldContinueCallback = _shouldContinueCallback; | |
164 | 148 |
165 typedef void (^webPageOrderedOpenBlankBlockType)(); | 149 typedef void (^webPageOrderedOpenBlankBlockType)(); |
166 typedef void (^webPageOrderedOpenBlockType)(const GURL&, | 150 typedef void (^webPageOrderedOpenBlockType)(const GURL&, |
167 const web::Referrer&, | 151 const web::Referrer&, |
168 NSString*, | 152 NSString*, |
169 BOOL); | 153 BOOL); |
170 | 154 |
171 - (instancetype)initWithRepresentedObject:(id)representedObject { | 155 - (instancetype)initWithRepresentedObject:(id)representedObject { |
172 self = [super initWithRepresentedObject:representedObject]; | 156 self = [super initWithRepresentedObject:representedObject]; |
173 if (self) { | 157 if (self) { |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
207 | 191 |
208 - (void)webController:(CRWWebController*)webController | 192 - (void)webController:(CRWWebController*)webController |
209 didBlockPopup:(const web::BlockedPopupInfo&)blockedPopupInfo { | 193 didBlockPopup:(const web::BlockedPopupInfo&)blockedPopupInfo { |
210 _blockedPopupInfo.reset(new web::BlockedPopupInfo(blockedPopupInfo)); | 194 _blockedPopupInfo.reset(new web::BlockedPopupInfo(blockedPopupInfo)); |
211 } | 195 } |
212 | 196 |
213 - (web::BlockedPopupInfo*)blockedPopupInfo { | 197 - (web::BlockedPopupInfo*)blockedPopupInfo { |
214 return _blockedPopupInfo.get(); | 198 return _blockedPopupInfo.get(); |
215 } | 199 } |
216 | 200 |
217 - (void)presentSSLError:(const net::SSLInfo&)info | |
218 forSSLStatus:(const web::SSLStatus&)status | |
219 recoverable:(BOOL)recoverable | |
220 callback:(SSLErrorCallback)shouldContinue { | |
221 _SSLInfo = info; | |
222 _SSLStatus = status; | |
223 _recoverable = recoverable; | |
224 _shouldContinueCallback = shouldContinue; | |
225 } | |
226 | |
227 @end | 201 @end |
228 | 202 |
229 @interface CountingObserver : NSObject<CRWWebControllerObserver> | 203 @interface CountingObserver : NSObject<CRWWebControllerObserver> |
230 | 204 |
231 @property(nonatomic, readonly) int pageLoadedCount; | 205 @property(nonatomic, readonly) int pageLoadedCount; |
232 @property(nonatomic, readonly) int messageCount; | 206 @property(nonatomic, readonly) int messageCount; |
233 @end | 207 @end |
234 | 208 |
235 @implementation CountingObserver | 209 @implementation CountingObserver |
236 @synthesize pageLoadedCount = _pageLoadedCount; | 210 @synthesize pageLoadedCount = _pageLoadedCount; |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
438 fromItem.SetURL(MAKE_URL(start)); | 412 fromItem.SetURL(MAKE_URL(start)); |
439 toItem.SetURL(MAKE_URL(end)); | 413 toItem.SetURL(MAKE_URL(end)); |
440 EXPECT_EQ(MAKE_URL([end stringByAppendingString:@"#"]), | 414 EXPECT_EQ(MAKE_URL([end stringByAppendingString:@"#"]), |
441 [web_controller() URLForHistoryNavigationFromItem:&fromItem | 415 [web_controller() URLForHistoryNavigationFromItem:&fromItem |
442 toItem:&toItem]); | 416 toItem:&toItem]); |
443 } | 417 } |
444 } | 418 } |
445 } | 419 } |
446 } | 420 } |
447 | 421 |
448 // Tests that presentSSLError:forSSLStatus:recoverable:callback: is called with | |
449 // correct arguments if WKWebView fails to load a page with bad SSL cert. | |
450 // TODO(crbug.com/602298): Remove this test. | |
451 TEST_F(CRWWebControllerTest, SslCertErrorDeprecatedApi) { | |
452 ASSERT_FALSE([mockDelegate_ SSLInfo].is_valid()); | |
453 | |
454 scoped_refptr<net::X509Certificate> cert = | |
455 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); | |
456 | |
457 NSArray* chain = @[ static_cast<id>(cert->os_cert_handle()) ]; | |
458 NSError* error = | |
459 [NSError errorWithDomain:NSURLErrorDomain | |
460 code:NSURLErrorServerCertificateHasUnknownRoot | |
461 userInfo:@{ | |
462 web::kNSErrorPeerCertificateChainKey : chain, | |
463 }]; | |
464 | |
465 CRWWebControllerContainerView* containerView = | |
466 static_cast<CRWWebControllerContainerView*>([web_controller() view]); | |
467 WKWebView* webView = | |
468 static_cast<WKWebView*>(containerView.webViewContentView.webView); | |
469 base::scoped_nsobject<NSObject> navigation([[NSObject alloc] init]); | |
470 [static_cast<id<WKNavigationDelegate>>(web_controller()) | |
471 webView:webView | |
472 didStartProvisionalNavigation:static_cast<WKNavigation*>(navigation)]; | |
473 [static_cast<id<WKNavigationDelegate>>(web_controller()) | |
474 webView:webView | |
475 didFailProvisionalNavigation:static_cast<WKNavigation*>(navigation) | |
476 withError:error]; | |
477 | |
478 // Verify correctness of delegate's method arguments. | |
479 EXPECT_TRUE([mockDelegate_ SSLInfo].is_valid()); | |
480 EXPECT_EQ(net::CERT_STATUS_INVALID, [mockDelegate_ SSLInfo].cert_status); | |
481 EXPECT_EQ(net::CERT_STATUS_INVALID, [mockDelegate_ SSLStatus].cert_status); | |
482 EXPECT_EQ(web::SECURITY_STYLE_AUTHENTICATION_BROKEN, | |
483 [mockDelegate_ SSLStatus].security_style); | |
484 EXPECT_FALSE([mockDelegate_ recoverable]); | |
485 EXPECT_TRUE([mockDelegate_ shouldContinueCallback]); | |
486 } | |
487 | |
488 // Tests that AllowCertificateError is called with correct arguments if | 422 // Tests that AllowCertificateError is called with correct arguments if |
489 // WKWebView fails to load a page with bad SSL cert. | 423 // WKWebView fails to load a page with bad SSL cert. |
490 TEST_F(CRWWebControllerTest, SslCertError) { | 424 TEST_F(CRWWebControllerTest, SslCertError) { |
491 // TODO(crbug.com/602298): Remove this call. | |
492 [web_controller() setDelegate:nil]; | |
493 | |
494 // Last arguments passed to AllowCertificateError must be in default state. | 425 // Last arguments passed to AllowCertificateError must be in default state. |
495 ASSERT_FALSE(GetWebClient()->last_cert_error_code()); | 426 ASSERT_FALSE(GetWebClient()->last_cert_error_code()); |
496 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().is_valid()); | 427 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().is_valid()); |
497 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().cert_status); | 428 ASSERT_FALSE(GetWebClient()->last_cert_error_ssl_info().cert_status); |
498 ASSERT_FALSE(GetWebClient()->last_cert_error_request_url().is_valid()); | 429 ASSERT_FALSE(GetWebClient()->last_cert_error_request_url().is_valid()); |
499 ASSERT_TRUE(GetWebClient()->last_cert_error_overridable()); | 430 ASSERT_TRUE(GetWebClient()->last_cert_error_overridable()); |
500 | 431 |
501 scoped_refptr<net::X509Certificate> cert = | 432 scoped_refptr<net::X509Certificate> cert = |
502 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); | 433 net::ImportCertFromFile(net::GetTestCertsDirectory(), "ok_cert.pem"); |
503 | 434 |
(...skipping 567 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1071 | 1002 |
1072 [web_controller() setDelegate:delegate]; | 1003 [web_controller() setDelegate:delegate]; |
1073 web::SimulateWKWebViewCrash(webView_); | 1004 web::SimulateWKWebViewCrash(webView_); |
1074 | 1005 |
1075 EXPECT_OCMOCK_VERIFY(delegate); | 1006 EXPECT_OCMOCK_VERIFY(delegate); |
1076 EXPECT_FALSE([web_controller() isViewAlive]); | 1007 EXPECT_FALSE([web_controller() isViewAlive]); |
1077 [web_controller() setDelegate:nil]; | 1008 [web_controller() setDelegate:nil]; |
1078 }; | 1009 }; |
1079 | 1010 |
1080 } // namespace | 1011 } // namespace |
OLD | NEW |